mirror of
https://github.com/zeldaret/tmc
synced 2026-09-01 17:59:51 -04:00
Merge branch 'master' of https://github.com/zeldaret/tmc
This commit is contained in:
+17
-2
@@ -3,16 +3,31 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
|
||||
typedef struct {
|
||||
u8 areaMetadata;
|
||||
u8 locationIndex;
|
||||
u8 unk;
|
||||
u16 localFlagOffset;
|
||||
u8 filler[19];
|
||||
u8 filler[10];
|
||||
u16 field_0x10;
|
||||
u16 field_0x12;
|
||||
u16 field_0x14;
|
||||
u8 field_0x16;
|
||||
u8 field_0x17;
|
||||
u8 field_0x18;
|
||||
//u8 filler3[7];
|
||||
u8 fadeOut;
|
||||
u8 filler2[14];
|
||||
u8 filler4[0x835];
|
||||
u32 musicIndex;
|
||||
u32 pMusicIndex;
|
||||
u8 filler5[0x20];
|
||||
u32 unk2;
|
||||
u32 unk3;
|
||||
u32 unk4;
|
||||
} Area;
|
||||
|
||||
extern Area gArea;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
+3
-2
@@ -4,8 +4,6 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
extern u32 GetNextFunction(Entity*);
|
||||
|
||||
extern void Octorok(Entity*);
|
||||
extern void Chuchu(Entity*);
|
||||
extern void Leever(Entity*);
|
||||
@@ -109,4 +107,7 @@ extern void GyorgFemaleMouth(Entity*);
|
||||
extern void Enemy64(Entity*);
|
||||
extern void TreeItem(Entity*);
|
||||
extern void Enemy66(Entity*);
|
||||
|
||||
extern u32 GetNextFunction(Entity*);
|
||||
extern void EnemyFunctionHandler(Entity*, void (*const func[])(Entity*));
|
||||
#endif
|
||||
+133
-134
@@ -1,3 +1,4 @@
|
||||
// clang-format off
|
||||
#ifndef ENTITY_H
|
||||
#define ENTITY_H
|
||||
|
||||
@@ -24,147 +25,129 @@ typedef struct {
|
||||
u8 unknown2[4];
|
||||
} BoundingBox;
|
||||
|
||||
union SplitWord {
|
||||
s32 WORD;
|
||||
struct {
|
||||
s16 LO, HI;
|
||||
} HALF;
|
||||
};
|
||||
|
||||
union SplitHWord {
|
||||
u16 HWORD;
|
||||
struct {
|
||||
u8 LO, HI;
|
||||
} PACKED HALF;
|
||||
} PACKED;
|
||||
|
||||
typedef struct Entity {
|
||||
u32* field_0x0;
|
||||
u32* field_0x4;
|
||||
EntityType entityType;
|
||||
u8 action;
|
||||
u8 previousActionFlag;
|
||||
u8 actionDelay;
|
||||
u8 field_0xf;
|
||||
u8 flags;
|
||||
u8 scriptedScene : 4;
|
||||
u8 scriptedScene2 : 4;
|
||||
s16 spriteTileSize;
|
||||
u8 animationState;
|
||||
u8 direction;
|
||||
u8 possibleBool;
|
||||
u8 field_0x17;
|
||||
union {
|
||||
u8 raw;
|
||||
struct {
|
||||
u8 ss0 : 2;
|
||||
u8 ss2 : 1;
|
||||
u8 ss3 : 1;
|
||||
u8 ss4 : 1;
|
||||
u8 ss5 : 1;
|
||||
u8 ss6 : 1;
|
||||
u8 ss7 : 1;
|
||||
} PACKED b;
|
||||
} PACKED spriteSettings;
|
||||
|
||||
struct {
|
||||
u8 b0 : 2;
|
||||
u8 b1 : 2;
|
||||
u8 b2 : 2;
|
||||
u8 b3 : 2;
|
||||
} PACKED spriteOrder;
|
||||
|
||||
u8 palette;
|
||||
struct {
|
||||
u8 b0 : 4;
|
||||
u8 b1 : 2;
|
||||
u8 b2 : 2;
|
||||
} PACKED spriteOrientation;
|
||||
u8 filler[1];
|
||||
u8 field_0x1d;
|
||||
u8 frameIndex;
|
||||
u8 lastFrameIndex;
|
||||
s32 field_0x20;
|
||||
s16 nonPlanarMovement;
|
||||
u8 spriteAnimation[3];
|
||||
struct {
|
||||
u8 b0 : 3;
|
||||
u8 b1 : 3;
|
||||
u8 b2 : 2;
|
||||
} PACKED ticks;
|
||||
u16 collisions;
|
||||
union SplitWord x;
|
||||
union SplitWord y;
|
||||
union SplitWord height; // todo
|
||||
u8 collisionLayer;
|
||||
s8 interactType;
|
||||
u8 field_0x3a;
|
||||
u8 flags2;
|
||||
u8 field_0x3c;
|
||||
u8 field_0x3d;
|
||||
u8 field_0x3e;
|
||||
u8 damageType;
|
||||
u8 field_0x40;
|
||||
u8 bitfield;
|
||||
u8 field_0x42;
|
||||
u8 field_0x43;
|
||||
u8 field_0x44;
|
||||
u8 currentHealth;
|
||||
s16 field_0x46;
|
||||
BoundingBox* boundingBox;
|
||||
u8 field_0x4c;
|
||||
u8 field_0x4d;
|
||||
u8 field_0x4e;
|
||||
u8 field_0x4f;
|
||||
struct Entity* parent;
|
||||
struct Entity* attachedEntity;
|
||||
u8 animIndex;
|
||||
u8 frameDuration;
|
||||
union {
|
||||
u8 all;
|
||||
struct {
|
||||
u8 f0 : 1;
|
||||
u8 f1 : 5;
|
||||
u8 f2 : 1;
|
||||
u8 f3 : 1;
|
||||
} PACKED b;
|
||||
} PACKED frames;
|
||||
u8 frameSpriteSettings;
|
||||
Frame* animPtr;
|
||||
u16 spriteVramOffset;
|
||||
u8 spriteOffsetX;
|
||||
u8 spriteOffsetY;
|
||||
u32* otherEntity;
|
||||
u8 field_0x68;
|
||||
u8 field_0x69;
|
||||
union SplitHWord field_0x6a;
|
||||
u8 field_0x6c;
|
||||
u8 field_0x6d;
|
||||
u8 filler4[6];
|
||||
u16 field_0x74;
|
||||
u16 field_0x76;
|
||||
union SplitHWord field_0x78;
|
||||
u16 field_0x7a;
|
||||
union SplitWord field_0x7c;
|
||||
u16 field_0x80;
|
||||
u16 field_0x82;
|
||||
union SplitHWord cutsceneBeh;
|
||||
u16 field_0x86;
|
||||
|
||||
/*0x00*/ struct Entity* prev;
|
||||
/*0x04*/ struct Entity* next;
|
||||
/*0x08*/ EntityType entityType;
|
||||
/*0x0c*/ u8 action;
|
||||
/*0x0d*/ u8 previousActionFlag;
|
||||
/*0x0e*/ u8 actionDelay;
|
||||
/*0x0f*/ u8 field_0xf;
|
||||
/*0x10*/ u8 flags;
|
||||
/*0x11*/ u8 scriptedScene : 4;
|
||||
/* */ u8 scriptedScene2 : 4;
|
||||
/*0x12*/ s16 spriteIndex;
|
||||
/*0x14*/ u8 animationState;
|
||||
/*0x15*/ u8 direction;
|
||||
/*0x16*/ u8 field_0x16;
|
||||
/*0x17*/ u8 field_0x17;
|
||||
/*0x18*/ union {
|
||||
/* */ u8 raw;
|
||||
/* */ struct {
|
||||
/* */ u8 draw : 2; // 1-2
|
||||
/* */ u8 ss2 : 1; // 4
|
||||
/* */ u8 ss3 : 1; // 8
|
||||
/* */ u8 shadow : 2; //0x10-0x20
|
||||
/* */ u8 flipX : 1; //0x40
|
||||
/* */ u8 flipY : 1; //0x80
|
||||
/* */ } PACKED b;
|
||||
/* */ } PACKED spriteSettings;
|
||||
/*0x19*/ struct {
|
||||
/* */ u8 b0 : 2; // 1-2
|
||||
/* */ u8 alphaBlend : 2; // 4-8
|
||||
/* */ u8 b2 : 2; //0x10
|
||||
/* */ u8 b3 : 2; //0x40
|
||||
/* */ } PACKED spriteRendering;
|
||||
/*0x1a*/ union {
|
||||
/* */ u8 raw;
|
||||
/* */ struct {
|
||||
/* */ u8 b0 : 4;
|
||||
/* */ u8 b4 : 4;
|
||||
/* */ } PACKED b;
|
||||
/* */} PACKED palette;
|
||||
/*0x1b*/ struct {
|
||||
/* */ u8 b0 : 4;
|
||||
/* */ u8 flipX : 2; //0x10
|
||||
/* */ u8 flipY : 2; //0x40
|
||||
/* */ } PACKED spriteOrientation;
|
||||
/*0x1c*/ u8 field_0x1c;
|
||||
/*0x1d*/ u8 field_0x1d;
|
||||
/*0x1e*/ u8 frameIndex;
|
||||
/*0x1f*/ u8 lastFrameIndex;
|
||||
/*0x20*/ s32 field_0x20;
|
||||
/*0x24*/ s16 nonPlanarMovement;
|
||||
/*0x26*/ u8 spriteAnimation[3];
|
||||
/*0x29*/ struct {
|
||||
/* */ u8 b0 : 3; // 1-4
|
||||
/* */ u8 b1 : 3; // 8
|
||||
/* */ u8 b2 : 2; //0x40
|
||||
/* */ } PACKED spritePriority;
|
||||
/*0x2a*/ u16 collisions;
|
||||
/*0x2c*/ union SplitWord x;
|
||||
/*0x30*/ union SplitWord y;
|
||||
/*0x34*/ union SplitWord height; // todo
|
||||
/*0x38*/ u8 collisionLayer;
|
||||
/*0x39*/ s8 interactType;
|
||||
/*0x3a*/ u8 field_0x3a;
|
||||
/*0x3b*/ u8 flags2;
|
||||
/*0x3c*/ u8 field_0x3c;
|
||||
/*0x3d*/ s8 hurtBlinkTime;
|
||||
/*0x3e*/ u8 field_0x3e;
|
||||
/*0x3f*/ u8 damageType;
|
||||
/*0x40*/ u8 field_0x40;
|
||||
/*0x41*/ u8 bitfield;
|
||||
/*0x42*/ u8 field_0x42;
|
||||
/*0x43*/ u8 field_0x43;
|
||||
/*0x44*/ u8 field_0x44;
|
||||
/*0x45*/ u8 currentHealth;
|
||||
/*0x46*/ s16 field_0x46;
|
||||
/*0x48*/ BoundingBox* boundingBox;
|
||||
/*0x4c*/ u8 field_0x4c;
|
||||
/*0x4d*/ u8 field_0x4d;
|
||||
/*0x4e*/ u8 field_0x4e;
|
||||
/*0x4f*/ u8 field_0x4f;
|
||||
/*0x50*/ struct Entity* parent;
|
||||
/*0x54*/ struct Entity* attachedEntity;
|
||||
/*0x58*/ u8 animIndex;
|
||||
/*0x59*/ u8 frameDuration;
|
||||
/*0x5a*/ union {
|
||||
/* */ u8 all;
|
||||
/* */ struct {
|
||||
/* */ u8 f0 : 1;
|
||||
/* */ u8 f1 : 5;
|
||||
/* */ u8 f2 : 1; //0x40
|
||||
/* */ u8 f3 : 1; //0x80
|
||||
/* */ } PACKED b;
|
||||
/* */ } PACKED frames;
|
||||
/*0x5b*/ u8 frameSpriteSettings;
|
||||
/*0x5c*/ Frame* animPtr;
|
||||
/*0x60*/ u16 spriteVramOffset;
|
||||
/*0x62*/ u8 spriteOffsetX;
|
||||
/*0x63*/ u8 spriteOffsetY;
|
||||
/*0x64*/ u32* otherEntity;
|
||||
/*0x68*/ union SplitHWord field_0x68;
|
||||
/*0x6a*/ union SplitHWord field_0x6a;
|
||||
/*0x6c*/ union SplitHWord field_0x6c;
|
||||
/*0x6e*/ u8 filler4[2];
|
||||
/*0x70*/ union SplitWord field_0x70;
|
||||
/*0x74*/ union SplitHWord field_0x74;
|
||||
/*0x76*/ union SplitHWord field_0x76;
|
||||
/*0x78*/ union SplitHWord field_0x78;
|
||||
/*0x7a*/ union SplitHWord field_0x7a;
|
||||
/*0x7c*/ union SplitWord field_0x7c;
|
||||
/*0x80*/ union SplitHWord field_0x80;
|
||||
/*0x82*/ union SplitHWord field_0x82;
|
||||
/*0x84*/ union SplitHWord cutsceneBeh;
|
||||
/*0x86*/ u16 field_0x86;
|
||||
} Entity;
|
||||
|
||||
#define COORD_TO_TILE(entity) \
|
||||
((((entity->x.HALF.HI - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
||||
(((entity->y.HALF.HI - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
||||
|
||||
extern void InitializeAnimation(Entity*, u32);
|
||||
extern void InitAnimationForceUpdate(Entity*, u32);
|
||||
extern void UpdateAnimationSingleFrame(Entity*);
|
||||
extern void UpdateSpriteOrderAndFlip(Entity*);
|
||||
extern void GetNextFrame(Entity*);
|
||||
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
||||
extern void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||
#define COORD_TO_TILE_OFFSET(entity, xOff, yOff) \
|
||||
((((entity->x.HALF.HI - xOff - gRoomControls.roomOriginX) >> 4) & 0x3fU) | \
|
||||
(((entity->y.HALF.HI - yOff - gRoomControls.roomOriginY) >> 4) & 0x3fU) << 6)
|
||||
|
||||
extern Entity* CreateEnemy(u32 subtype, u32 form);
|
||||
extern Entity* CreateObject(u32 subtype, u32 form, u32 parameter);
|
||||
@@ -172,4 +155,20 @@ extern Entity* CreateNPC(u32 subtype, u32 form, u32 parameter);
|
||||
extern Entity* CreateObjectWithParent(Entity* parent, u32 subtype, u32 form, u32 parameter);
|
||||
extern Entity* CreateFx(Entity* parent, u32 form, u32 parameter);
|
||||
|
||||
extern void InitializeAnimation(Entity*, u32);
|
||||
extern void InitAnimationForceUpdate(Entity*, u32);
|
||||
extern void UpdateAnimationSingleFrame(Entity*);
|
||||
extern void UpdateSpriteForCollisionLayer(Entity*);
|
||||
extern void GetNextFrame(Entity*);
|
||||
extern u32 LoadExtraSpriteData(Entity*, SpriteLoadData*);
|
||||
extern void SetExtraSpriteFrame(Entity*, u32, u32);
|
||||
extern void SetSpriteSubEntryOffsetData1(Entity*, u32, u32);
|
||||
extern void SetSpriteSubEntryOffsetData2(Entity*, u32, u32);
|
||||
|
||||
extern u32 GetFacingDirection(Entity*, Entity*);
|
||||
|
||||
extern void DeleteThisEntity();
|
||||
|
||||
extern Entity gUnk_03003DA0;
|
||||
|
||||
#endif
|
||||
|
||||
+104
@@ -28,4 +28,108 @@ void SetRoomFlag(u32);
|
||||
extern u32 gGlobalFlags;
|
||||
extern u32 gRoomFlags;
|
||||
|
||||
enum {
|
||||
NONE,
|
||||
/*0x01*/ LV0_CLEAR, /* */
|
||||
/*0x02*/ LV1_CLEAR, /* */
|
||||
/*0x03*/ LV2_CLEAR, /* */
|
||||
/*0x04*/ LV3_CLEAR, /* */
|
||||
/*0x05*/ LV4_CLEAR, /* */
|
||||
/*0x06*/ LV5_CLEAR, /* */
|
||||
/*0x07*/ LV6_CLEAR, /* */
|
||||
/*0x08*/ LV7_CLEAR, /* */
|
||||
/*0x09*/ LV8_CLEAR, /* */
|
||||
/*0x0a*/ MACHI_SET_1, /* Defeated Big Green Chuchu */
|
||||
/*0x0b*/ MACHI_SET_2, /* Defeated Gleerok */
|
||||
/*0x0c*/ MACHI_SET_3, /* */
|
||||
/*0x0d*/ MACHI_SET_4, /* Defeated Big Octorok */
|
||||
/*0x0e*/ MACHI_SET_5, /* Defeated Gyorg Pair */
|
||||
/*0x0f*/ MACHI_SET_6, /* */
|
||||
/*0x10*/ MACHI_SET_7, /* */
|
||||
/*0x11*/ MACHI_SET_8, /* */
|
||||
/*0x12*/ MACHI_MACHIHOKORI, /* Sucked dust from carpet */
|
||||
/*0x13*/ START, /* Met Zelda */
|
||||
/*0x14*/ EZERO_1ST, /* Met Ezlo */
|
||||
/*0x15*/ TABIDACHI, /* Talked to Daltus and Smith */
|
||||
/*0x16*/ LV1TARU, /* */
|
||||
/*0x17*/ LV1TARU_OPEN, /* Sucked barrel web */
|
||||
/*0x18*/ TATEKAKE_HOUSE, /* Red house complete */
|
||||
/*0x19*/ TATEKAKE_TOCHU, /* Red house frame */
|
||||
/*0x1a*/ WATERBEAN_OUT, /* Holding bean */
|
||||
/*0x1b*/ WATERBEAN_PUT, /* Threw bean in hole */
|
||||
/*0x1c*/ ZELDA_CHASE, /* Enter town festival */
|
||||
/*0x1d*/ INLOCK, /* Gave key to Talon */
|
||||
/*0x1e*/ DASHBOOTS, /* Read Castor Wilds sign */
|
||||
/*0x1f*/ LEFT_DOOR_OPEN, /* Spoke to Dr. Left */
|
||||
/*0x20*/ HAKA_KEY_LOST, /* Graveyard key stolen */
|
||||
/*0x21*/ HAKA_KEY_FOUND, /* Graveyard key obtained back */
|
||||
/*0x22*/ ENTRANCE_OK, /* */
|
||||
/*0x23*/ TATSUMAKI, /* */
|
||||
/*0x24*/ KUMOTATSUMAKI, /* Vortex spawned */
|
||||
/*0x25*/ KAITENGIRI, /* */
|
||||
/*0x26*/ DAIKAITENGIRI, /* */
|
||||
/*0x27*/ GATOTSU, /* */
|
||||
/*0x28*/ KABUTOWARI, /* */
|
||||
/*0x29*/ MIZUKAKI_START, /* Spoke to Lake Hylia Minish */
|
||||
/*0x2a*/ MIZUKAKI_HARIFALL, /* Library book falling */
|
||||
/*0x2b*/ RENTED_HOUSE_DIN, /* Din moves to blue house */
|
||||
/*0x2c*/ RENTED_HOUSE_NAYRU, /* Nayru moves to blue house */
|
||||
/*0x2d*/ RENTED_HOUSE_FARORE, /* Farore moves to blue house */
|
||||
/*0x2e*/ NEW_HOUSE_DIN, /* Din moves to red house */
|
||||
/*0x2f*/ NEW_HOUSE_NAYRU, /* Nayru moves to red house */
|
||||
/*0x30*/ NEW_HOUSE_FARORE, /* Farore moves to red house */
|
||||
/*0x31*/ OUGONTEKI_A, /* Golden Octorok defeated */
|
||||
/*0x32*/ OUGONTEKI_B, /* Golden Tektite defeated */
|
||||
/*0x33*/ OUGONTEKI_C, /* Golden Rope defeated */
|
||||
/*0x34*/ OUGONTEKI_D, /* Golden Rope defeated */
|
||||
/*0x35*/ OUGONTEKI_E, /* Golden Rope defeated */
|
||||
/*0x36*/ OUGONTEKI_F, /* Golden Tektite defeated */
|
||||
/*0x37*/ OUGONTEKI_G, /* Golden Tektite defeated */
|
||||
/*0x38*/ OUGONTEKI_H, /* Golden Octorok defeated */
|
||||
/*0x39*/ OUGONTEKI_I, /* Golden Octorok defeated */
|
||||
/*0x3a*/ KAKERA_COMPLETE, /* All fusions complete */
|
||||
/*0x3b*/ DRUG_1, /* Yellow pico bloomed */
|
||||
/*0x3c*/ DRUG_2, /* Blue pico bloomed */
|
||||
/*0x3d*/ DRUG_3, /* Orange pico bloomed */
|
||||
/*0x3e*/ GORON_KAKERA_LV2, /* Goron merchant restock 1 */
|
||||
/*0x3f*/ GORON_KAKERA_LV3, /* Goron merchant restock 2 */
|
||||
/*0x40*/ GORON_KAKERA_LV4, /* Goron merchant restock 3 */
|
||||
/*0x41*/ GORON_KAKERA_LV5, /* Goron merchant restock 4 */
|
||||
/*0x42*/ GORON_KAKERA_L, /* Red kinstone sold out */
|
||||
/*0x43*/ GORON_KAKERA_M, /* Blue kinstone sold out */
|
||||
/*0x44*/ GORON_KAKERA_R, /* Green kinstone sold out */
|
||||
/*0x45*/ CHIKATSURO_SHUTTER, /* Castle basement door open */
|
||||
/*0x46*/ ENTRANCE_USED, /* */
|
||||
/*0x47*/ GOMAN_RENTED_HOUSE, /* Spoke to Gorman blue house */
|
||||
/*0x48*/ GOMAN_NEW_HOUSE, /* Spoke to Gorman red house */
|
||||
/*0x49*/ OUTDOOR, /* Exited Link's house */
|
||||
/*0x4a*/ POWERGLOVE_HINT, /* Spoke to Dr. Left Minish */
|
||||
/*0x4b*/ ANJU_LV_BIT0, /* Cucco game 1 bit */
|
||||
/*0x4c*/ ANJU_LV_BIT1, /* Cucco game 2 bit */
|
||||
/*0x4d*/ ANJU_LV_BIT2, /* Cucco game 4 bit */
|
||||
/*0x4e*/ ANJU_LV_BIT3, /* Cucco game 8 bit */
|
||||
/*0x4f*/ ANJU_HEART, /* Cucco heart piece */
|
||||
/*0x50*/ MAROYA_WAKEUP, /* */
|
||||
/*0x51*/ ENDING, /* Vaati's wrath defeated */
|
||||
/*0x52*/ WARP_1ST, /* Wind ocarina unlocked */
|
||||
/*0x53*/ WARP_MONUMENT, /* First windcrest discovered */
|
||||
/*0x54*/ DRUG_COUNT, /* Pico bloom minish items */
|
||||
/*0x55*/ GAMECLEAR, /* Watched end cutscene */
|
||||
/*0x56*/ WHITE_SWORD_END, /* Exit mines with white sword */
|
||||
/*0x57*/ SOUGEN_06_HASHIGO, /* Boomerang cave ladder */
|
||||
/*0x58*/ WARP_EVENT_END, /* Wind tribe tower state */
|
||||
/*0x59*/ FIGURE_ALLCOMP, /* Obtained Carlov Medal */
|
||||
/*0x5a*/ AKINDO_BOTTLE_SELL, /* Bought bottle from scrub */
|
||||
/*0x5b*/ BIN_DOGFOOD, /* */
|
||||
/*0x5c*/ TINGLE_TALK1ST, /* Spoke to Tingle */
|
||||
/*0x5d*/ SEIIKI_BGM, /* Elemental sanctuary BGM */
|
||||
/*0x5e*/ ENTRANCE_0, /* Trunk entrance cutscene */
|
||||
/*0x5f*/ ENTRANCE_1, /* Rock entrance cutscene */
|
||||
/*0x60*/ ENTRANCE_2, /* Pot entrance cutscene */
|
||||
/*0x61*/ MIZUKAKI_NECHAN, /* Spoke to librarian */
|
||||
/*0x62*/ MAZE_CLEAR, /* Cleared Castle maze */
|
||||
/*0x63*/ TINY_ENTRANCE, /* Ezlo described entrances */
|
||||
/*0x64*/ CASTLE_BGM, /* Castle intro BGM */
|
||||
};
|
||||
|
||||
#endif
|
||||
+193
-9
@@ -4,7 +4,11 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "manager.h"
|
||||
#include "position.h"
|
||||
#include "player.h"
|
||||
#include "structures.h"
|
||||
#include "room.h"
|
||||
|
||||
// Identified - to be sorted into header files
|
||||
extern u32 Random(void);
|
||||
@@ -21,7 +25,25 @@ extern void LoadRoomEntityList();
|
||||
void CopyPosition(Entity*, Entity*);
|
||||
extern u32* StartCutscene(Entity*, u8*);
|
||||
extern void ResolveEntityOnTop(Entity*, Entity*);
|
||||
|
||||
extern void EnemyFunctionHandler(Entity*, void (*const funcs[])(Entity*));
|
||||
extern u32 GetAnimationState(Entity*);
|
||||
extern void SetChildOffset(Entity*, s32, s32, s32);
|
||||
extern u32 GetFacingDirection(Entity*, Entity*);
|
||||
extern Entity* CreatePlayerItem(u32, u32, u32, u32);
|
||||
extern Entity* GetEmptyEntity(void);
|
||||
extern u32 GetTileTypeByPos(s32 x, s32 y, u32 layer);
|
||||
extern void _DmaZero(void* src, u32 count);
|
||||
extern void EraseAllEntities(void);
|
||||
extern void SetTile(u32, u32, u32);
|
||||
extern void SetDirtTile(u32);
|
||||
extern void LoadRoomTileEntities(); //tba
|
||||
extern Entity* CreateDeathFx(Entity*, u32, u32);
|
||||
extern void UpdateAnimationVariableFrames(Entity*, u32);
|
||||
extern void CopyPositionAndSpriteOffset(Entity*, Entity*);
|
||||
extern u8* GetSpriteSubEntryOffsetDataPointer(u32, u32);
|
||||
extern u32 LoadFixedGFX(Entity*, u32);
|
||||
extern void ExecuteScriptCommandSet(Entity*, void *);
|
||||
extern void _DmaFill32(u32, void*, u32);
|
||||
|
||||
// Unidentified
|
||||
extern void sub_0806ED78(Entity*);
|
||||
@@ -29,7 +51,8 @@ extern void sub_0806920C(Entity*);
|
||||
extern u32 sub_0805ACC0(Entity*);
|
||||
extern u32 sub_0801E99C(Entity*);
|
||||
extern void sub_0806924C(Entity*);
|
||||
extern void sub_080AEF88(Entity*);
|
||||
extern u32 sub_080AEF88(Entity*);
|
||||
extern Entity* sub_080873AC(Entity*, u32, u32);
|
||||
extern void sub_08078778(Entity*);
|
||||
extern void sub_080787A8(Entity*, u32);
|
||||
extern void sub_0806F118(Entity*);
|
||||
@@ -37,21 +60,20 @@ extern void sub_080791D0();
|
||||
extern void sub_0805EC9C();
|
||||
extern void sub_0805EC60();
|
||||
extern void sub_080873D0();
|
||||
extern void sub_080045D4();
|
||||
extern void sub_0806F69C();
|
||||
extern void sub_0805E3A0(Entity*, u32);
|
||||
extern u8 sub_080045D4(s16, s16, u16, u16);
|
||||
extern void sub_0806F69C(Entity*);
|
||||
extern void sub_0805E3A0(void*, u32);
|
||||
extern void sub_0806D0B0(Entity*);
|
||||
extern void sub_0807DD64(Entity*);
|
||||
extern void sub_0807DDAC(Entity*, u32);
|
||||
extern void sub_0807DDE4(Entity*);
|
||||
extern void sub_0806D02C(Entity*);
|
||||
extern u32 sub_0806F5A4(u32);
|
||||
extern u32 sub_080045C4(Entity*, Entity*);
|
||||
extern void sub_08078784(Entity*, u32);
|
||||
extern void sub_0807DD50(Entity*);
|
||||
extern void sub_0807DD94(Entity*, u32);
|
||||
extern Entity* sub_0805EB00(u32, u32, u32);
|
||||
extern Entity* sub_0805EB2C(u32, u32, u32, u32, u32);
|
||||
extern Entity* FindEntityInListBySubtype(u32, u32, u32);
|
||||
extern Entity* FindEntityInListByForm(u32, u32, u32, u32, u32);
|
||||
extern s32 sub_0806ED9C(Entity*, u32, u32);
|
||||
extern void sub_0807000C(Entity*);
|
||||
extern void sub_0805E47C(Entity*);
|
||||
@@ -65,10 +87,172 @@ extern void sub_0801D2B4(Entity*, u32);
|
||||
extern void sub_0806FD3C(Entity*);
|
||||
extern u32 sub_0801E99C(Entity*);
|
||||
extern void sub_0807DD50(Entity*);
|
||||
extern u32 sub_080045C4(Entity*, Entity*);
|
||||
extern void sub_0806F118(Entity*);
|
||||
extern void sub_0807DD94(Entity*, u32);
|
||||
extern void sub_0805ED14(u32*);
|
||||
extern void sub_080A7C18(u32, u32, u32);
|
||||
extern void sub_08068BEC(Entity*, u32);
|
||||
extern void sub_0804AA30(Entity*, void (*const funcs[])(Entity*));
|
||||
extern void sub_0804A9FC(Entity*, u32);
|
||||
extern void sub_0804A720(Entity*);
|
||||
extern u32 sub_080AEFE0(Entity*);
|
||||
extern u32 sub_08049FA0(Entity*);
|
||||
extern u32 sub_08049FDC(Entity*, u32);
|
||||
extern u32 sub_080041A0(Entity *, Entity *, u32, u32);
|
||||
extern u32 sub_08049EE4(Entity*);
|
||||
extern Entity *sub_0804A98C(Entity *, u8, u8);
|
||||
extern u32 sub_080544DC(u8);
|
||||
extern void sub_08077E54(Entity*);
|
||||
extern void sub_080042BA(Entity*);
|
||||
extern void _DmaZero(void*, u32);
|
||||
extern void sub_08077F24(ItemBehavior*, u32);
|
||||
extern void sub_08079184();
|
||||
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_0805E5A8(void);
|
||||
extern void sub_0805E5C0(void);
|
||||
extern void sub_080AD90C(void);
|
||||
extern void sub_080AD9B0(void);
|
||||
extern void sub_080AD918(void);
|
||||
extern void sub_0801E104(void);
|
||||
extern void MenuFadeIn(u32, u32);
|
||||
extern void sub_080A57F4(void);
|
||||
extern void sub_0804B29C(void*);
|
||||
extern void sub_08030118(u32);
|
||||
extern void sub_080575C8(u32);
|
||||
extern void sub_08057688(void);
|
||||
extern void sub_080580B0(u32);
|
||||
extern void sub_080751E8(u32, u32, void*);
|
||||
extern void sub_08052CA4(u32, u32, u32, u32);
|
||||
extern void sub_08052878(void);
|
||||
extern void sub_0808091C(ScreenTransitionData*, u32);
|
||||
extern void sub_0805BC4C(void);
|
||||
extern void sub_0807BB68(u32*, u32, u32);
|
||||
extern void sub_08054570(void);
|
||||
extern void sub_08059278(void);
|
||||
extern void sub_0804C128(u32);
|
||||
extern void sub_08058324(u32);
|
||||
extern void sub_0804C2F0(void);
|
||||
extern void sub_0801AFE4(void);
|
||||
extern u32 sub_08060354(void);
|
||||
extern void sub_08057E64(void);
|
||||
extern void LoadAssetAsync(void*, u32, u32);
|
||||
extern void LoadPaletteGroup(u32);
|
||||
extern void sub_0809F814(u32);
|
||||
extern void sub_080300E8(void);
|
||||
extern void sub_0801DA90(u32);
|
||||
extern void sub_08058D34(void);
|
||||
extern void sub_0807AABC(Entity*);
|
||||
extern void sub_08078A90(u32);
|
||||
extern void sub_080530C8(void);
|
||||
extern void sub_0805B4D0(u32);
|
||||
extern void sub_0804D0B4(void);
|
||||
extern void sub_0805308C(u32);
|
||||
extern void sub_0805AF60();
|
||||
extern void sub_0805D3C8(u32);
|
||||
extern void sub_080534AC();
|
||||
extern void sub_0807BA8C(u32, u32);
|
||||
extern void sub_0804D9B0();
|
||||
extern void sub_0807BB98(u32, u32, u32, u32);
|
||||
extern void TryLoadPrologueHyruleTown(void);
|
||||
extern void sub_0801D000(u32);
|
||||
extern void sub_08018C58(u32);
|
||||
extern void sub_0804E150(void);
|
||||
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_0805ADD8(u32);
|
||||
extern void sub_0804F578(void);
|
||||
extern void sub_08059994(void);
|
||||
extern void LoadGfxGroup(u32);
|
||||
extern s32 sub_0801CFA8(u32);
|
||||
extern void sub_080A3210(void);
|
||||
extern void sub_080ADA14(u32, u32);
|
||||
extern void sub_0801E1B8(u32, u32);
|
||||
extern void sub_0801E1EC(s32, s32, s32);
|
||||
extern void sub_08050008(void);
|
||||
extern void sub_080A3B74(void);
|
||||
extern void sub_080A4054(void);
|
||||
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_080A70AC(const void*);
|
||||
extern void sub_080A7114(u32);
|
||||
extern void sub_08001242(Entity*);
|
||||
extern u32 sub_08003FC4(Entity*, u32);
|
||||
extern u32 sub_080043E8(Entity*);
|
||||
extern void sub_08001290(Entity*, u32);
|
||||
extern void sub_08004488(u32);
|
||||
extern void sub_08004596(Entity*, u32);
|
||||
extern u32 sub_0807953C(void);
|
||||
extern void ResetPlayer(void);
|
||||
extern void sub_080A29BC(Entity*);
|
||||
extern void sub_080AE068(Entity*);
|
||||
extern Manager* GetEmptyManager(void);
|
||||
extern void AppendEntityToList(void*, u32);
|
||||
extern u32 sub_0800445C(Entity*);
|
||||
extern void sub_0807A108(void);
|
||||
extern void sub_0801766C(Entity*);
|
||||
extern void sub_08004168(Entity*);
|
||||
extern u32 sub_08052638(u32);
|
||||
extern void sub_0805616C(void);
|
||||
extern u32 sub_0807CF08(u32, u8*);
|
||||
extern void sub_0807CF48(u32);
|
||||
extern u32 sub_0807CF10(u8 *);
|
||||
extern void sub_08056208(void);
|
||||
extern void sub_08050384();
|
||||
extern void sub_080B1520(u32);
|
||||
extern struct_0807D1C4* sub_0807D1C4(u32);
|
||||
extern u32 sub_0807D24C(u32, char*, u32);
|
||||
extern void sub_0807CF68(u32);
|
||||
extern void sub_0807D20C(u32, char*, u32);
|
||||
extern u32 sub_0807CF88(u32, u8*);
|
||||
extern u32 sub_0807D008(u32, void*);
|
||||
extern void sub_0807D184(u32, char*);
|
||||
extern u32 sub_0806F520();
|
||||
extern void sub_0806F4E8();
|
||||
extern u32 sub_0806F3E4(Entity*);
|
||||
extern void sub_0804A7D4(Entity*);
|
||||
extern void sub_08033744(Entity*);
|
||||
extern void sub_0800417E(Entity*, u32);
|
||||
extern void sub_080784C8();
|
||||
extern void sub_08017640();
|
||||
extern u32 sub_0808288C(Entity*, u32, u32, u32);
|
||||
extern void sub_0806FDA0(Entity*);
|
||||
extern void sub_080AE008(Entity*, u32, u32);
|
||||
extern u32 sub_08016A30(Entity*);
|
||||
extern u32 IsItemEquipped(u32);
|
||||
extern void sub_08077728();
|
||||
extern void sub_0807AEE4();
|
||||
extern u32 sub_08078EFC();
|
||||
extern void sub_0807921C();
|
||||
extern void sub_0807A1B8();
|
||||
extern void sub_08079938();
|
||||
extern void sub_0807ACCC(Entity*);
|
||||
extern void HandleIntroScreen(void);
|
||||
extern void HandleChooseFileScreen(void);
|
||||
extern void HandleGameplayScreen(void);
|
||||
extern void HandleGameOverScreen(void);
|
||||
extern void HandleCreditsScreen(void);
|
||||
extern void HandleDebugTextScreen(void);
|
||||
extern void sub_080A2BE4(Entity*, u32);
|
||||
extern u32 sub_08097ADC(Entity*);
|
||||
extern void sub_08097B24(Entity*);
|
||||
extern u32 sub_08079F8C(void);
|
||||
extern void sub_080787CC(Entity*);
|
||||
extern void sub_080526F8(s32);
|
||||
extern int sub_0807CF28(u32, SaveFile*);
|
||||
extern u32 sub_080044EC(Entity*, u32);
|
||||
extern u32 sub_080002B8(Entity*);
|
||||
extern u32 sub_08049F84(Entity*, u32);
|
||||
extern void sub_0802F45C(Entity*);
|
||||
#endif
|
||||
|
||||
+21
-9
@@ -47,16 +47,28 @@
|
||||
#define min(a, b) ((a) < (b) ? (a) : (b))
|
||||
#define max(a, b) ((a) >= (b) ? (a) : (b))
|
||||
|
||||
struct Coords16
|
||||
{
|
||||
s16 x;
|
||||
s16 y;
|
||||
} PACKED;
|
||||
typedef union {
|
||||
s32 WORD;
|
||||
struct {
|
||||
s16 x, y;
|
||||
} HALF;
|
||||
} Coords;
|
||||
|
||||
struct UCoords16
|
||||
{
|
||||
u16 x;
|
||||
u16 y;
|
||||
union SplitWord {
|
||||
s32 WORD;
|
||||
struct {
|
||||
s16 LO, HI;
|
||||
} HALF;
|
||||
struct {
|
||||
u8 byte0, byte1, byte2, byte3;
|
||||
} BYTES;
|
||||
};
|
||||
|
||||
union SplitHWord {
|
||||
u16 HWORD;
|
||||
struct {
|
||||
u8 LO, HI;
|
||||
} PACKED HALF;
|
||||
} PACKED;
|
||||
|
||||
#endif // GUARD_GLOBAL_H
|
||||
|
||||
+14
-17
@@ -15,24 +15,13 @@ extern void sub_0805EC9C();
|
||||
extern void sub_0805EC60();
|
||||
extern void sub_080873D0();
|
||||
extern void DeleteEntity();
|
||||
extern void sub_080045D4();
|
||||
extern u32 sub_080045D4();
|
||||
extern void sub_0806F69C();
|
||||
extern u32 Random();
|
||||
|
||||
|
||||
enum {
|
||||
BEHAVIORS,
|
||||
WINGS,
|
||||
WAKE,
|
||||
MINI,
|
||||
MINIAFFINE,
|
||||
DROPLET,
|
||||
RIPPLE,
|
||||
BIGRIPPLE,
|
||||
FORM8,
|
||||
FORM9,
|
||||
};
|
||||
|
||||
extern void sub_0805E3A0(Entity*, u32);
|
||||
extern Entity* FindEntityInListBySubtype(u32, u32, u32);
|
||||
extern void sub_080791D0();
|
||||
extern u32 FindEntityInListByForm(u32, u32, u32, u32, u32);
|
||||
extern void (*const GreatFairy_Main[])(Entity*);
|
||||
extern void (*const GreatFairy_Behaviors[])(Entity*);
|
||||
extern void (*const GreatFairy_WingsBehaviors[])(Entity*);
|
||||
@@ -49,12 +38,20 @@ extern void (*const gUnk_081207A4[])(Entity*);
|
||||
|
||||
extern u32 gUnk_0810C2E4;
|
||||
extern RoomControls gRoomControls;
|
||||
extern Entity gLinkEntity;
|
||||
extern Entity gPlayerEntity;
|
||||
extern const s16 GreatFairy_RippleOffsets[10];
|
||||
extern u32 gUnk_02034350;
|
||||
extern RoomVars gRoomVars;
|
||||
extern Screen gScreen;
|
||||
extern u32 gUnk_02033280;
|
||||
extern u8 gUnk_0812079C[8];
|
||||
extern s16 gSineTable[];
|
||||
extern s8 gUnk_081207AC[];
|
||||
|
||||
|
||||
typedef struct {
|
||||
s32 unk0;
|
||||
s32 unk4;
|
||||
} struct_08087424;
|
||||
|
||||
#endif
|
||||
+1
-12
@@ -3,18 +3,7 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
typedef struct {
|
||||
u8 unk;
|
||||
u8 behaviorID;
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
u8 stateID;
|
||||
u8 filler[4];
|
||||
u8 unk4;
|
||||
u8 filler2[4];
|
||||
u8 unk5;
|
||||
} ItemBehavior;
|
||||
#include "player.h"
|
||||
|
||||
void extern DebugItem(ItemBehavior*, u32);
|
||||
void extern Sword(ItemBehavior*, u32);
|
||||
|
||||
+3
-3
@@ -3,7 +3,7 @@
|
||||
|
||||
// Lakitu
|
||||
extern void EnemyFunctionHandler(Entity *, void (*const funcs[])(Entity*));
|
||||
extern void SetChildOffset(Entity *, u32, u32, u32);
|
||||
extern void SetChildOffset(Entity *, s32, s32, s32);
|
||||
|
||||
// sub_0803C784
|
||||
extern void sub_0804A9FC(Entity *, u32);
|
||||
@@ -26,10 +26,10 @@ extern u32 sub_080041A0(Entity *, Entity *, u32, u32);
|
||||
|
||||
// sub_0803CAD0
|
||||
extern u8 sub_080045D4(s16, s16, u16, u16);
|
||||
extern void sub_080AEFE0(Entity *);
|
||||
extern u32 sub_080AEFE0(Entity *);
|
||||
|
||||
// Lakitu_SpawnLightning
|
||||
extern void PositionRelative(Entity *, Entity *, u32, u32);
|
||||
void PositionRelative(Entity*, Entity*, s32, s32);
|
||||
extern void sub_08004488(u32);
|
||||
|
||||
// sub_0803CC08
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
#ifndef LINK_H
|
||||
#define LINK_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
typedef struct {
|
||||
u8 filler[2];
|
||||
u8 jumpStatus;
|
||||
u8 filler2[2];
|
||||
u8 heldObject;
|
||||
u8 pushedObject;
|
||||
u8 unk;
|
||||
u16 unk2;
|
||||
u8 unk3;
|
||||
u8 keepFacing;
|
||||
u8 linkAction;
|
||||
u8 filler3[2];
|
||||
u8 hurtBlinkSpeed;
|
||||
u8 filler4[4];
|
||||
u16 filler5[3];
|
||||
u8 filler6[2];
|
||||
u8 field_0x1c;
|
||||
u8 filler9[2];
|
||||
u16 filler7[2];
|
||||
u8 swimState;
|
||||
u8 filler8[5];
|
||||
u8* unk4;
|
||||
union {
|
||||
u32 all;
|
||||
struct {
|
||||
u32 filler9 : 3;
|
||||
u32 noMinishCap : 1;
|
||||
u32 pullingState : 1;
|
||||
u32 windyState : 1;
|
||||
u32 filler10 : 4;
|
||||
u32 slipperyState : 1;
|
||||
u32 filler11 : 5;
|
||||
u32 filler11b : 16;
|
||||
} PACKED b;
|
||||
} flags;
|
||||
u8 filler12[6];
|
||||
u16 unk5;
|
||||
u8 filler13[2];
|
||||
u8 swordGoldParticle : 1;
|
||||
u8 swordBlueParticle : 1;
|
||||
u8 filler14 : 6;
|
||||
u8 unk6;
|
||||
u8 filler15[75];
|
||||
u8 unk7;
|
||||
u32 filler16[7];
|
||||
u8 filler17[3];
|
||||
u8 unk71;
|
||||
u32 unk8;
|
||||
} LinkState;
|
||||
|
||||
|
||||
typedef struct {
|
||||
u8 walletType;
|
||||
u8 heartPieces;
|
||||
u8 health;
|
||||
u8 maxHealth;
|
||||
u8 bombCount;
|
||||
u8 arrowCount;
|
||||
u8 bombBagType;
|
||||
u8 quiverType;
|
||||
u8 filler[4];
|
||||
u8 itemOnA;
|
||||
u8 itemOnB;
|
||||
u8 filler2[10];
|
||||
u16 rupees;
|
||||
u8 filler3[12];
|
||||
} Stats;
|
||||
|
||||
extern LinkState gLinkState;
|
||||
extern Stats gStats;
|
||||
extern Entity gLinkEntity;
|
||||
|
||||
|
||||
extern u32 GetInventoryValue(u32);
|
||||
extern s32 ModHealth(s32);
|
||||
|
||||
#endif
|
||||
+58
-25
@@ -11,34 +11,67 @@ typedef struct { // 0x03001000
|
||||
u8 field_0x9;
|
||||
u8 field_0xa;
|
||||
u8 field_0xb;
|
||||
u32 ticks;
|
||||
u32 spritePriority;
|
||||
} MainStruct;
|
||||
|
||||
extern s32 sub_08055F70();
|
||||
extern s32 sub_080A3204(s32);
|
||||
extern s32 sub_0805616C(s32);
|
||||
extern s32 sub_0807CE90(s32);
|
||||
extern s32 sub_080560B8(s32);
|
||||
extern void sub_08056208(s32);
|
||||
extern void sub_0804FFE4();
|
||||
extern s32 sub_0804FF84(s32);
|
||||
extern s32 sub_08056418(s32);
|
||||
extern void sub_080ADD30(s32);
|
||||
extern s32 sub_0801D630(s32, u32, u32);
|
||||
extern s32 sub_08056010(s32);
|
||||
extern s32 sub_08016E78(s32);
|
||||
extern s32 ReadKeyInput();
|
||||
extern s32 sub_08055FF4(u8);
|
||||
extern void sub_080560A8();
|
||||
extern s32 sub_08056260();
|
||||
enum {
|
||||
SCREEN_INTRO,
|
||||
SCREEN_CHOOSE_FILE,
|
||||
SCREEN_GAMEPLAY,
|
||||
SCREEN_GAME_OVER,
|
||||
SCREEN_CREDITS,
|
||||
SCREEN_DEBUG_TEXT,
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
u8 interruptFlag;
|
||||
u8 field_0x1;
|
||||
u8 screen;
|
||||
u8 funcIndex;
|
||||
u8 transition;
|
||||
u8 field_0x5;
|
||||
u8 muteAudio;
|
||||
u8 field_0x7;
|
||||
u8 countdown;
|
||||
u8 field_0x9;
|
||||
u8 field_0xa;
|
||||
u16 ticks;
|
||||
} Main;
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u16 nextToLoad;
|
||||
/*0x02*/ u8 transitionType;
|
||||
/*0x03*/ u8 field_0x3;
|
||||
/*0x04*/ u8 state;
|
||||
/*0x05*/ u8 field_0x5;
|
||||
/*0x06*/ u8 field_0x6;
|
||||
/*0x07*/ u8 pauseFadeIn;
|
||||
/*0x08*/ u16 isLoading;
|
||||
/*0x0A*/ u16 fadeInTime;
|
||||
/*0x0C*/ u8 fillerC[0x3A8];
|
||||
} UI;
|
||||
|
||||
extern Main gUnk_03001000;
|
||||
extern UI gUnk_02032EC0;
|
||||
|
||||
|
||||
extern void sub_080A3204(void);
|
||||
extern void sub_0807CE90(void);
|
||||
extern void sub_080560B8(void);
|
||||
extern void sub_08056208(void);
|
||||
extern void sub_0804FFE4(void);
|
||||
extern void sub_08056418(void);
|
||||
extern void sub_080ADD30(void);
|
||||
|
||||
extern void InitScreen(u32);
|
||||
extern void sub_08016E78(void);
|
||||
extern void ReadKeyInput(void);
|
||||
extern void DoSoftReset(void);
|
||||
extern void sub_08056260(void);
|
||||
extern void VBlankIntrWait();
|
||||
extern s32 _call_via_r0(s32);
|
||||
extern s32 sub_08056458(s32);
|
||||
extern s32 sub_08050154(s32);
|
||||
extern s32 sub_080A3480(s32);
|
||||
extern void sub_08056458(void);
|
||||
extern void sub_08050154(void);
|
||||
extern void sub_080A3480(void);
|
||||
|
||||
extern s32 gUnk_02000010;
|
||||
extern s32 gRand;
|
||||
extern MainStruct gUnk_03001000;
|
||||
extern s32 gUnk_08100CBC;
|
||||
#endif
|
||||
@@ -0,0 +1,126 @@
|
||||
#ifndef MANAGER_H
|
||||
#define MANAGER_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
union SplitSHWord {
|
||||
s16 SHWORD;
|
||||
struct {
|
||||
u8 LO, HI;
|
||||
} PACKED HALF;
|
||||
} PACKED;
|
||||
|
||||
typedef struct Manager {
|
||||
/*0x00*/ struct Manager* previous;
|
||||
/*0x00*/ struct Manager* next;
|
||||
/*0x08*/ u8 type;
|
||||
/*0x09*/ u8 subtype;
|
||||
/*0x0a*/ u8 unk_0a;
|
||||
/*0x0b*/ u8 unk_0b;
|
||||
/*0x0c*/ u8 action;
|
||||
/*0x0d*/ u8 unk_0d;
|
||||
/*0x0e*/ u8 unk_0e;
|
||||
/*0x0f*/ u8 unk_0f;
|
||||
/*0x10*/ u8 unk_10[0x4];
|
||||
/*0x14*/ struct Manager * parent;
|
||||
/*0x18*/ u8 unk_18[0x8];
|
||||
// union SplitHWord unk_20;
|
||||
// u16 unk_22;
|
||||
// u16 unk_24;
|
||||
// u16 unk_26;
|
||||
// u8 unk_28[0x0D];
|
||||
// u8 unk_35;
|
||||
// u16 unk_36;
|
||||
// union SplitSHWord unk_38;
|
||||
// union SplitSHWord unk_3a;
|
||||
// u16 unk_3c;
|
||||
// u16 unk_3e;
|
||||
} Manager;
|
||||
|
||||
typedef struct {
|
||||
u16 posX;
|
||||
u16 posY;
|
||||
u8 width;
|
||||
u8 height;
|
||||
u8 unk_06;
|
||||
union {
|
||||
u8 all;
|
||||
struct {
|
||||
u8 layer : 2;
|
||||
u8 unk1 : 2;
|
||||
u8 unk2 : 1;
|
||||
u8 unk3 : 3;
|
||||
} PACKED b;
|
||||
} PACKED unk_07;
|
||||
} Manager6WarpData;
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
Manager6WarpData* warpList;
|
||||
} Manager6;
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u16 unk_20;
|
||||
u16 unk_22;
|
||||
u16 unk_24;
|
||||
u16 unk_26;
|
||||
u8 unk_28[0x0D];
|
||||
u8 unk_35;
|
||||
u16 unk_36;
|
||||
u8 unk_38;
|
||||
u8 unk_39;
|
||||
u8 unk_3a;
|
||||
u8 unk_3b;
|
||||
u16 unk_3c;
|
||||
u16 unk_3e;
|
||||
} ManagerA;
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u8 unk_20;
|
||||
u8 unk_21[0x14];
|
||||
u8 unk_35;
|
||||
u8 unk_36[0x4];
|
||||
u16 unk_3a;
|
||||
u16 unk_3c;
|
||||
u16 unk_3e;
|
||||
} ManagerB;
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
Entity* enemies[8];
|
||||
} ManagerBHelper;
|
||||
|
||||
typedef struct {
|
||||
Manager manager;
|
||||
u8 unk_20[0x18];
|
||||
s16 unk_38;
|
||||
s16 unk_3a;
|
||||
u16 unk_3c;
|
||||
u16 unk_3e;
|
||||
} ManagerE;
|
||||
|
||||
typedef struct {
|
||||
u16 unk_00;
|
||||
u8 source_roomID;
|
||||
u8 unk_03;
|
||||
u8 target_areaID;
|
||||
u8 target_roomID;
|
||||
u16 unk_06;
|
||||
} DiggingCaveEntrance;
|
||||
|
||||
extern struct {
|
||||
DiggingCaveEntrance* unk_00;
|
||||
u16 unk_04;
|
||||
u16 unk_06;
|
||||
u8 unk_08;
|
||||
u8 unk_09;
|
||||
u8 unk_0a;
|
||||
u8 unk_0b;
|
||||
} gUnk_03004030;
|
||||
|
||||
extern DiggingCaveEntrance* gUnk_08107DC0[];
|
||||
|
||||
#endif
|
||||
@@ -15,6 +15,30 @@ typedef struct {
|
||||
u16 fadeInTime;
|
||||
u8 filler2[4];
|
||||
u32 filler3[3];
|
||||
} MenuControls;
|
||||
|
||||
typedef struct {
|
||||
u8 field_0x0;
|
||||
u8 field_0x1;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u8 field_0x4;
|
||||
u8 menuType;
|
||||
u8 overlayType;
|
||||
u8 storyPanelIndex;
|
||||
u16 transitionTimer;
|
||||
u16 field_0xa;
|
||||
u8 field_0xc[0x4];
|
||||
u8 unk10[2];
|
||||
u8 field_0x12;
|
||||
u8 unk13;
|
||||
u8 filler14[0x2];
|
||||
u8 unk16;
|
||||
u8 filler17[0x13];
|
||||
u8 unk2a;
|
||||
int field_0x2c;
|
||||
} Menu;
|
||||
|
||||
extern Menu gMenu;
|
||||
|
||||
#endif
|
||||
+3
-1
@@ -1,5 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
|
||||
#ifndef NPC_H
|
||||
#define NPC_H
|
||||
@@ -169,7 +170,8 @@ extern void Phonograph(Entity*);
|
||||
extern void NPC58(Entity*);
|
||||
extern void NPC58_Head(Entity*);
|
||||
|
||||
|
||||
extern u32 UpdateFuseInteraction(Entity*);
|
||||
extern void ShowNPCDialogue(Entity*, u32*);
|
||||
|
||||
|
||||
#endif
|
||||
+1
-1
@@ -64,7 +64,7 @@ extern void JarPortal(Entity*);
|
||||
extern void BossDoor(Entity*);
|
||||
extern void Object3A(Entity*);
|
||||
extern void MacroMushromStalks(Entity*);
|
||||
extern void MacroLink(Entity*);
|
||||
extern void MacroPlayer(Entity*);
|
||||
extern void Object3D(Entity*);
|
||||
extern void Object3E(Entity*);
|
||||
extern void GiantLeaf(Entity*);
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
// clang-format off
|
||||
|
||||
#ifndef PLAYER_H
|
||||
#define PLAYER_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
|
||||
typedef struct {
|
||||
/*0x00*/ u8 field_0x0[2];
|
||||
/*0x02*/ u8 jumpStatus;
|
||||
/*0x03*/ u8 field_0x3[2];
|
||||
/*0x05*/ u8 heldObject;
|
||||
/*0x06*/ u8 pushedObject;
|
||||
/*0x07*/ u8 field_0x7;
|
||||
/*0x08*/ u16 field_0x8;
|
||||
/*0x0a*/ u8 field_0xa;
|
||||
/*0x0b*/ u8 keepFacing;
|
||||
/*0x0c*/ u8 playerAction;
|
||||
/*0x0d*/ u8 field_0xd[2];
|
||||
/*0x0f*/ u8 hurtBlinkSpeed;
|
||||
/*0x10*/ u8 field_0x10[4];
|
||||
/*0x11*/ u8 field_0x14;
|
||||
/*0x11*/ u8 field_0x15;
|
||||
/*0x14*/ u16 field_0x16[2];
|
||||
/*0x1a*/ u8 field_0x1a[2];
|
||||
/*0x1c*/ u8 field_0x1c;
|
||||
/*0x1d*/ u8 field_0x1d[5];
|
||||
/*0x22*/ u16 field_0x22[2];
|
||||
/*0x26*/ u8 swimState;
|
||||
/*0x27*/ u8 field_0x27[5];
|
||||
/*0x2c*/ u8* field_0x2c;
|
||||
/*0x30*/ union {
|
||||
/* */ u32 all;
|
||||
/* */ struct {
|
||||
/* */ u32 filler9 : 3;
|
||||
/* */ u32 noMinishCap : 1;
|
||||
/* */ u32 pullingState : 1;
|
||||
/* */ u32 windyState : 1;
|
||||
/* */ u32 filler6 : 1;
|
||||
/* */ u32 unk7 : 1;
|
||||
/* */ u32 filler8 : 2;
|
||||
/* */ u32 slipperyState : 1;
|
||||
/* */ u32 filler11 : 5;
|
||||
/* */ u32 filler11b : 16;
|
||||
/* */ } PACKED b;
|
||||
/* */ } flags;
|
||||
/*0x34*/ u8 field_0x34[6];
|
||||
/*0x3a*/ u16 field_0x3a;
|
||||
/*0x3c*/ u8 field_0x3c[2];
|
||||
/*0x3e*/ u8 swordGoldParticle : 1;
|
||||
/* */ u8 swordBlueParticle : 1;
|
||||
/* */ u8 filler14 : 6;
|
||||
/*0x3f*/ u8 field_0x3f;
|
||||
/*0x40*/ u8 field_0x40[75];
|
||||
/*0x8b*/ u8 field_0x8b;
|
||||
/*0x8c*/ u32 field_0x8c;
|
||||
/*0x90*/ union SplitWord field_0x90;
|
||||
/*0x94*/ u32 field_0x94[5];
|
||||
/*0xa8*/ u8 field_0xa8;
|
||||
/*0xa9*/ u8 field_0xa9;
|
||||
/*0xaa*/ u8 field_0xaa;
|
||||
/*0xab*/ u8 field_0xab;
|
||||
/*0xac*/ u32 field_0xac;
|
||||
} PlayerState;
|
||||
|
||||
|
||||
typedef struct {
|
||||
u8 walletType;
|
||||
u8 heartPieces;
|
||||
u8 health;
|
||||
u8 maxHealth;
|
||||
u8 bombCount;
|
||||
u8 arrowCount;
|
||||
u8 bombBagType;
|
||||
u8 quiverType;
|
||||
u8 filler[4];
|
||||
u8 itemOnA;
|
||||
u8 itemOnB;
|
||||
u8 filler2[10];
|
||||
u16 rupees;
|
||||
u8 field_0x1a;
|
||||
u8 field_0x1b;
|
||||
u8 field_0x1c;
|
||||
u8 field_0x1d;
|
||||
u8 field_0x1e;
|
||||
u8 field_0x1f;
|
||||
u16 field_0x20;
|
||||
u8 filler4[4];
|
||||
} Stats;
|
||||
|
||||
typedef struct {
|
||||
/*0x0*/ u8 field_0x0;
|
||||
/*0x1*/ u8 behaviorID;
|
||||
/*0x2*/ u8 field_0x2[2];
|
||||
/*0x4*/ u8 stateID;
|
||||
/*0x5*/ u8 field_0x5[10];
|
||||
/*0xf*/ u8 field_0xf;
|
||||
} ItemBehavior;
|
||||
|
||||
extern u8 gBombBagSizes[];
|
||||
|
||||
extern PlayerState gPlayerState;
|
||||
extern Stats gStats;
|
||||
extern Entity gPlayerEntity;
|
||||
|
||||
|
||||
extern u32 GetInventoryValue(u32);
|
||||
extern s32 ModHealth(s32);
|
||||
extern void ModRupees(s32);
|
||||
#endif
|
||||
|
||||
// clang-format on
|
||||
@@ -9,5 +9,6 @@ void PositionEntityOnTop(Entity*, Entity*);
|
||||
void PositionRelative(Entity*, Entity*, s32, s32);
|
||||
void sub_0806FA90(Entity*, Entity*, s32, s32);
|
||||
void ResolveEntityOnTop(Entity*, Entity*);
|
||||
void sub_0806FAD8(Entity*, Entity*);
|
||||
|
||||
#endif
|
||||
@@ -1,9 +1,9 @@
|
||||
struct Input {
|
||||
u16 unk0;
|
||||
u16 unk1;
|
||||
u16 unk2;
|
||||
u8 unk3;
|
||||
u8 unk4;
|
||||
};
|
||||
typedef struct {
|
||||
u16 heldKeys;
|
||||
u16 newKeys;
|
||||
u16 unk4;
|
||||
u8 unk6;
|
||||
u8 unk7;
|
||||
} Input;
|
||||
|
||||
// void ReadKeyInput(void);
|
||||
extern Input gUnk_03000FF0;
|
||||
|
||||
+19
-7
@@ -29,14 +29,17 @@ typedef struct {
|
||||
u16 screenShakeTime;
|
||||
u16 filler2[6];
|
||||
u8 filler3[4];
|
||||
u16 filler4[4];
|
||||
union SplitWord bg3OffsetX;
|
||||
union SplitWord bg3OffsetY;
|
||||
Entity* cameraTarget;
|
||||
} RoomControls;
|
||||
|
||||
typedef struct {
|
||||
u8 filler[6];
|
||||
u8 itemForSaleIndex;
|
||||
u16 unk;
|
||||
u8 field_0x7;
|
||||
u8 field_0x8;
|
||||
u8 field_0x9;
|
||||
u8 unk2;
|
||||
u16 filler2[3];
|
||||
u32 roomFlags;
|
||||
@@ -44,15 +47,24 @@ typedef struct {
|
||||
u8 filler4[48];
|
||||
u8 filler5[28];
|
||||
u32 greatFairyState;
|
||||
u32* field_0x6c;
|
||||
u32* field_0x70;
|
||||
u32* field_0x74;
|
||||
u32 field_0x78;
|
||||
u8 field_0x79[10];
|
||||
void* field_0x88;
|
||||
} RoomVars;
|
||||
|
||||
|
||||
//Packets used to store which entities to load in a room
|
||||
typedef struct {
|
||||
u8 entityType;
|
||||
u8 field_0x1;
|
||||
u8 entitySubtype;
|
||||
u8 entityform;
|
||||
u32 entityparameter;
|
||||
u8 type : 4;
|
||||
u8 layer : 4;
|
||||
u8 flags : 4;
|
||||
u8 unk : 4;
|
||||
u8 subtype;
|
||||
u8 form;
|
||||
u32 parameter;
|
||||
u16 xPos;
|
||||
u16 yPos;
|
||||
u32 spritePtr;
|
||||
|
||||
+22
-11
@@ -4,17 +4,25 @@
|
||||
#include "global.h"
|
||||
|
||||
typedef struct {
|
||||
u16 lcdControl2;
|
||||
u32 unk;
|
||||
u16 lcdControl1;
|
||||
u16 displayControl;
|
||||
u8 filler2[0x2];
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
} LcdControls;
|
||||
|
||||
typedef struct {
|
||||
u16 bg0Control;
|
||||
u16 bg1Control;
|
||||
u16 bg2Control;
|
||||
u16 bg3Control;
|
||||
u16 bg0xOffset;
|
||||
u16 bg0yOffset;
|
||||
u16 bg0Updated;
|
||||
u32 unk;
|
||||
u16 bg1xOffset;
|
||||
u16 bg1yOffset;
|
||||
u16 bg2xOffset;
|
||||
u16 bg2yOffset;
|
||||
u16 bg3xOffset;
|
||||
u16 bg3yOffset;
|
||||
} BgSettings;
|
||||
|
||||
typedef struct {
|
||||
@@ -22,7 +30,8 @@ typedef struct {
|
||||
u16 bg2xOffset;
|
||||
u16 bg2yOffset;
|
||||
u16 unk;
|
||||
u32 unk2;
|
||||
u16 unk2;
|
||||
u16 unk3;
|
||||
u16 bg3Control;
|
||||
u16 bg3xOffset;
|
||||
u16 bg3yOffset;
|
||||
@@ -60,11 +69,13 @@ typedef struct {
|
||||
} BgControls;
|
||||
|
||||
typedef struct {
|
||||
LcdControls lcd;
|
||||
BgSettings bg1;
|
||||
BgSettings bg2;
|
||||
BgAffSettings affine;
|
||||
BgControls controls;
|
||||
/*0x00*/ LcdControls lcd;
|
||||
/*0x08*/ BgSettings bg;
|
||||
/*0x20*/ BgAffSettings affine;
|
||||
/*0x38*/ BgControls controls;
|
||||
} Screen;
|
||||
|
||||
extern BgControls gBgControls;
|
||||
extern Screen gScreen;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,163 @@
|
||||
#ifndef STRUCTURES_H
|
||||
#define STRUCTURES_H
|
||||
|
||||
#include "global.h"
|
||||
#include "entity.h"
|
||||
#include "player.h"
|
||||
|
||||
typedef struct {
|
||||
char header[4];
|
||||
u8 saveFileId;
|
||||
u8 messageSpeed;
|
||||
u8 brightnessPref;
|
||||
u8 gameLanguage;
|
||||
} struct_02000000;
|
||||
|
||||
typedef struct {
|
||||
u16 field_0x0;
|
||||
u16 field_0x2;
|
||||
u16 field_0x4;
|
||||
u16 field_0x6;
|
||||
u16 field_0x8;
|
||||
u16 field_0xa;
|
||||
} struct_0807D1C4;
|
||||
|
||||
#define gUnk_02000000 ((struct_02000000*)(0x2000000))
|
||||
//extern struct_02000000 gUnk_02000000;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x4];
|
||||
u8 field_0x4;
|
||||
u8 listenForKeyPresses;
|
||||
} struct_02000010;
|
||||
|
||||
extern struct_02000010 gUnk_02000010;
|
||||
|
||||
typedef struct {
|
||||
/*0x000*/ u8 filler0[0x2];
|
||||
/*0x002*/ u8 messageSpeed;
|
||||
/*0x003*/ u8 brightnessPref;
|
||||
/*0x004*/ u8 filler4[0x2];
|
||||
/*0x006*/ u8 unk6;
|
||||
/*0x007*/ u8 unk7;
|
||||
/*0x008*/ u8 unk8;
|
||||
/*0x009*/ u8 field_0x9[0x34];
|
||||
/*0x040*/ u32 windcrests;
|
||||
/*0x044*/ u8 filler44[0xC];
|
||||
/*0x050*/ u32 unk50;
|
||||
/*0x054*/ u8 filler54[0x2C];
|
||||
/*0x080*/ u8 playerName[6];
|
||||
/*0x086*/ u8 filler86[0x22];
|
||||
/*0x0A8*/ Stats stats;
|
||||
/*0x0D0*/ u8 fillerD0[0x3c0];
|
||||
/*0x490*/ u32 unk490;
|
||||
/*0x494*/ u8 filler494[0x20];
|
||||
} SaveFile;
|
||||
|
||||
extern SaveFile gUnk_02002A40;
|
||||
|
||||
typedef struct {
|
||||
u32 frameCount; // regular frame count? does anything reset it?
|
||||
u8 field_0x4[0x4];
|
||||
bool8 transitioningOut;
|
||||
u8 transitionType; // transition when changing areas
|
||||
u8 field_0xa; // seems to be a tile type
|
||||
u8 field_0xb;
|
||||
u8 areaID;
|
||||
u8 roomID;
|
||||
u8 playerState;
|
||||
u8 field_0xf;
|
||||
Coords playerStartPos;
|
||||
u8 playerLayer;
|
||||
u8 field_0x13;
|
||||
u8 field_0x14[0xa];
|
||||
u16 field_0x20;
|
||||
u16 field_0x22;
|
||||
u8 field_0x24[0x14];
|
||||
u8 field_0x38;
|
||||
u8 field_0x39;
|
||||
u16 field_0x3a;
|
||||
u8 field_0x3c;
|
||||
u8 filler[6];
|
||||
u16 field_0x44;
|
||||
u16 field_0x46;
|
||||
u16 field_0x48;
|
||||
u16 field_0x4a;
|
||||
u8 field_0x4c[0x60];
|
||||
u16 field_0xac;
|
||||
u16 field_0xae;
|
||||
} ScreenTransition;
|
||||
|
||||
extern ScreenTransition gScreenTransition;
|
||||
|
||||
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 {
|
||||
/*0x00*/ u8 unk0;
|
||||
/*0x01*/ u8 unk1;
|
||||
/*0x02*/ u8 unk2;
|
||||
/*0x03*/ u8 unk3;
|
||||
/*0x04*/ u8 filler4[0x2];
|
||||
/*0x06*/ u8 unk6;
|
||||
/*0x07*/ u8 unk7;
|
||||
/*0x08*/ s8 unk8[0xE20];
|
||||
} struct_02019EE0;
|
||||
|
||||
extern struct_02019EE0 gUnk_02019EE0;
|
||||
|
||||
typedef struct {
|
||||
u8 active;
|
||||
u8 field_0x1;
|
||||
u8 field_0x2;
|
||||
u8 field_0x3;
|
||||
u32 field_0x4;
|
||||
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;
|
||||
} struct_03000FD0;
|
||||
|
||||
extern struct_03000FD0 gFadeControl;
|
||||
|
||||
typedef struct {
|
||||
u8 filler0[0x1A];
|
||||
u16 unk1A;
|
||||
u8 filler1C[0x4];
|
||||
u16 unk20;
|
||||
u8 filler22[0x2];
|
||||
u8 ezloNagFuncIndex;
|
||||
u8 filler25[0x30F];
|
||||
} struct_0200AF00;
|
||||
|
||||
extern struct_0200AF00 gUnk_0200AF00;
|
||||
|
||||
typedef struct {
|
||||
u8 unk0;
|
||||
} struct_02024490;
|
||||
|
||||
extern struct_02024490 gUnk_02024490;
|
||||
|
||||
typedef struct {
|
||||
u16 unk_00;
|
||||
u8 unk_02[0xE];
|
||||
} struct_02034480;
|
||||
extern struct_02034480 gUnk_02034480;
|
||||
|
||||
#endif
|
||||
@@ -14,6 +14,9 @@ typedef struct {
|
||||
u8 textWindowPosY;
|
||||
u16 textIndex;
|
||||
u16 unk2; // HI?
|
||||
u16 field_0xc;
|
||||
u16 field_0xe;
|
||||
u32 field_0x10;
|
||||
} TextBox;
|
||||
|
||||
extern TextBox gTextBox;
|
||||
|
||||
Reference in New Issue
Block a user