mirror of https://github.com/zeldaret/tmc.git
239 lines
6.1 KiB
C
239 lines
6.1 KiB
C
#ifndef KINSTONE_H
|
|
#define KINSTONE_H
|
|
|
|
#include "global.h"
|
|
#include "entity.h"
|
|
|
|
extern void sub_08018C58(u32);
|
|
|
|
typedef enum {
|
|
FUSION_STATE_0, // fusion was not yet started
|
|
FUSION_STATE_1, // failed?
|
|
FUSION_STATE_2, // successful?
|
|
FUSION_STATE_3, // fusion is being performed
|
|
FUSION_STATE_4, // player has closed the first messagebox
|
|
FUSION_STATE_5, // fusion declined by the player
|
|
FUSION_STATE_6, // Successful, but not yet finished?
|
|
} FusionState;
|
|
|
|
typedef struct {
|
|
u8 fusionState; /** @see FusionState */
|
|
u8 action;
|
|
u8 _2;
|
|
u8 kinstoneId;
|
|
u8 prevUpdatePriority;
|
|
u8 _5;
|
|
u16 textIndex;
|
|
u16 cancelledTextIndex;
|
|
u16 fusingTextIndex;
|
|
Entity* entity;
|
|
} FuseInfo;
|
|
static_assert(sizeof(FuseInfo) == 0x10);
|
|
extern FuseInfo gFuseInfo;
|
|
|
|
typedef struct {
|
|
u8 objPalette;
|
|
u8 gfxOffsetPiece;
|
|
u8 gfxOffsetFull;
|
|
u8 subtask; // SUBTASK_WORLDEVENT or 0
|
|
u8 worldEventId;
|
|
u8 shape;
|
|
u8 bubbleIcon;
|
|
u8 mapMarkerIcon; // 0 for no map marker
|
|
} KinstoneWorldEvent;
|
|
// Indexed by kinstoneId
|
|
extern const KinstoneWorldEvent gKinstoneWorldEvents[];
|
|
|
|
typedef enum {
|
|
KINSTONE_NONE,
|
|
KINSTONE_MYSTERIOUS_CLOUD_TOP_RIGHT,
|
|
KINSTONE_MYSTERIOUS_CLOUD_BOTTOM_LEFT,
|
|
KINSTONE_MYSTERIOUS_CLOUD_TOP_LEFT,
|
|
KINSTONE_MYSTERIOUS_CLOUD_MIDDLE,
|
|
KINSTONE_MYSTERIOUS_CLOUD_BOTTOM_RIGHT,
|
|
KINSTONE_CASTOR_WILDS_STATUE_LEFT,
|
|
KINSTONE_CASTOR_WILDS_STATUE_MIDDLE,
|
|
KINSTONE_CASTOR_WILDS_STATUE_RIGHT,
|
|
KINSTONE_SOURCE_FLOW,
|
|
KINSTONE_A,
|
|
KINSTONE_B,
|
|
KINSTONE_C,
|
|
KINSTONE_D,
|
|
KINSTONE_E,
|
|
KINSTONE_F,
|
|
KINSTONE_10,
|
|
KINSTONE_11,
|
|
KINSTONE_12,
|
|
KINSTONE_13,
|
|
KINSTONE_14,
|
|
KINSTONE_15,
|
|
KINSTONE_16,
|
|
KINSTONE_17,
|
|
KINSTONE_18,
|
|
KINSTONE_19,
|
|
KINSTONE_1A,
|
|
KINSTONE_1B,
|
|
KINSTONE_1C,
|
|
KINSTONE_1D,
|
|
KINSTONE_1E,
|
|
KINSTONE_1F,
|
|
KINSTONE_20,
|
|
KINSTONE_21,
|
|
KINSTONE_22,
|
|
KINSTONE_23,
|
|
KINSTONE_24,
|
|
KINSTONE_25,
|
|
KINSTONE_26,
|
|
KINSTONE_27,
|
|
KINSTONE_28,
|
|
KINSTONE_29,
|
|
KINSTONE_2A,
|
|
KINSTONE_2B,
|
|
KINSTONE_2C,
|
|
KINSTONE_2D,
|
|
KINSTONE_2E,
|
|
KINSTONE_2F,
|
|
KINSTONE_30,
|
|
KINSTONE_31,
|
|
KINSTONE_32,
|
|
KINSTONE_33,
|
|
KINSTONE_34,
|
|
KINSTONE_35,
|
|
KINSTONE_36,
|
|
KINSTONE_37,
|
|
KINSTONE_38,
|
|
KINSTONE_39,
|
|
KINSTONE_3A,
|
|
KINSTONE_3B,
|
|
KINSTONE_3C,
|
|
KINSTONE_3D,
|
|
KINSTONE_3E,
|
|
KINSTONE_3F,
|
|
KINSTONE_40,
|
|
KINSTONE_41,
|
|
KINSTONE_42,
|
|
KINSTONE_43,
|
|
KINSTONE_44,
|
|
KINSTONE_45,
|
|
KINSTONE_46,
|
|
KINSTONE_47,
|
|
KINSTONE_48,
|
|
KINSTONE_49,
|
|
KINSTONE_4A,
|
|
KINSTONE_4B,
|
|
KINSTONE_4C,
|
|
KINSTONE_4D,
|
|
KINSTONE_4E,
|
|
KINSTONE_4F,
|
|
KINSTONE_50,
|
|
KINSTONE_51,
|
|
KINSTONE_52,
|
|
KINSTONE_53,
|
|
KINSTONE_54,
|
|
KINSTONE_55,
|
|
KINSTONE_56,
|
|
KINSTONE_57,
|
|
KINSTONE_58,
|
|
KINSTONE_59,
|
|
KINSTONE_5A,
|
|
KINSTONE_5B,
|
|
KINSTONE_5C,
|
|
KINSTONE_5D,
|
|
KINSTONE_5E,
|
|
KINSTONE_5F,
|
|
KINSTONE_60,
|
|
KINSTONE_61,
|
|
KINSTONE_62,
|
|
KINSTONE_63,
|
|
KINSTONE_64,
|
|
/* some special values, mostly for fusers */
|
|
KINSTONE_NEEDS_REPLACEMENT = 0xF1,
|
|
KINSTONE_JUST_FUSED = 0xF2,
|
|
KINSTONE_FUSER_DONE = 0xF3,
|
|
KINSTONE_RANDOM = 0xFF,
|
|
} KinstoneId;
|
|
|
|
typedef struct {
|
|
u8 unk0; /**< Bank or 0xfd or 0xfe or 0xff */
|
|
u8 unk1; /**< Flag, for bank=0xfd: Kinstone, for bank=0xfe: Item */
|
|
u8 unk2; /**< Gfx id in the inventory? */
|
|
u8 unk3; /**< Offset on the gfx id? */
|
|
} struct_gUnk_080B3D20;
|
|
|
|
typedef enum {
|
|
WORLD_EVENT_0,
|
|
WORLD_EVENT_1,
|
|
WORLD_EVENT_2,
|
|
WORLD_EVENT_3,
|
|
WORLD_EVENT_4,
|
|
WORLD_EVENT_5,
|
|
// TODO add all and use them in gKinstoneWorldEvents
|
|
} WorldEventId;
|
|
|
|
typedef enum {
|
|
CND_0,
|
|
/**< Always false. */ // CND_FALSE
|
|
CND_1, // local flag // CND_FLAG
|
|
CND_2, // f CND_INVENTORY != 0
|
|
CND_3, // 0x10 CND_INVENTORY == 1
|
|
CND_4, // 0x11 CND_INVENTORY == 2
|
|
CND_5, // SORA_10_H00
|
|
CND_6, // SORA_11_H00
|
|
CND_7, // SORA_12_T00
|
|
CND_8, // SORA_13_H00
|
|
CND_9, // SORA_14_T00
|
|
CND_10, // KS_B15
|
|
} WorldEventCondition;
|
|
|
|
typedef enum {
|
|
WORLD_EVENT_TYPE_0, // Does nothing
|
|
WORLD_EVENT_TYPE_1, // LoadRoomEntity after checking GlobalFlag
|
|
WORLD_EVENT_TYPE_2, // sub_08018BB4
|
|
WORLD_EVENT_TYPE_3, // LoadRoomEntity after checking InventoryValue
|
|
WORLD_EVENT_TYPE_4, // sub_08018A58
|
|
WORLD_EVENT_TYPE_5, // sub_08018B50
|
|
WORLD_EVENT_TYPE_6, // sub_08018AB4
|
|
WORLD_EVENT_TYPE_7, // LoadRoomEntity or sub_080189EC
|
|
WORLD_EVENT_TYPE_8, // set a tile type
|
|
WORLD_EVENT_TYPE_9, // LoadRoomEntity and set some tile type
|
|
WORLD_EVENT_TYPE_BEANSTALK,
|
|
WORLD_EVENT_TYPE_11, // LoadRoomEntity and set gRoomVars.entityRails
|
|
WORLD_EVENT_TYPE_12,
|
|
WORLD_EVENT_TYPE_13,
|
|
WORLD_EVENT_TYPE_14,
|
|
WORLD_EVENT_TYPE_15, // Load different room entity depending on if fused
|
|
WORLD_EVENT_TYPE_16,
|
|
WORLD_EVENT_TYPE_17, // Set local flag, LoadroomEntityList
|
|
WORLD_EVENT_TYPE_18,
|
|
WORLD_EVENT_TYPE_19,
|
|
WORLD_EVENT_TYPE_20,
|
|
WORLD_EVENT_TYPE_21,
|
|
WORLD_EVENT_TYPE_22,
|
|
WORLD_EVENT_TYPE_23,
|
|
WORLD_EVENT_TYPE_24, // LoadRoomEntityList
|
|
WORLD_EVENT_TYPE_25, // LoadRoomEntity, set type depending of if kinstone is fused
|
|
// The following do nothing.
|
|
WORLD_EVENT_TYPE_26,
|
|
WORLD_EVENT_TYPE_27,
|
|
WORLD_EVENT_TYPE_28
|
|
} WorldEventType;
|
|
|
|
typedef struct {
|
|
u8 type;
|
|
u8 entity_idx;
|
|
u8 area;
|
|
u8 room;
|
|
u16 offsetX; /**< Scroll offset X from the room origin. */
|
|
u16 offsetY; /**< Scroll offset Y from the room origin. */
|
|
u16 x; /**< X position of the actual event. */
|
|
u16 y; /**< Y position of the actual event. */
|
|
u16 _c; // see GetOverworldLocation, related to _0 and _2 of gOverworldLocations
|
|
u16 _e; // see GetOverworldLocation, related to _1 and _3 of gOverworldLocations
|
|
u8 condition; // TODO some sort of flag determining what type the bank&flag are? see UpdateVisibleFusionMapMarkers
|
|
u8 bank; /**< @see LocalBanks */
|
|
u16 flag;
|
|
} WorldEvent;
|
|
extern const WorldEvent gWorldEvents[];
|
|
|
|
#endif // KINSTONE_H
|