Files
ac-decomp/include/m_field_info.h
T
2023-05-14 11:08:39 -04:00

83 lines
2.0 KiB
C

#ifndef M_FIELD_INFO_H
#define M_FIELD_INFO_H
#include "types.h"
#include "libu64/gfxprint.h"
#ifdef __cplusplus
extern "C" {
#endif
#define mFI_ROW_TO_CHARSTR(row) ((row) + 'A')
#define mFI_COL_TO_CHARSTR(col) ((col) + '0')
enum field_type {
mFI_FIELDTYPE_FG,
mFI_FIELDTYPE_1,
mFI_FIELDTYPE_2,
mFI_FIELDTYPE_ROOM,
mFI_FIELDTYPE_NPC_ROOM,
mFI_FIELDTYPE_DEMO,
mFI_FIELDTYPE_PLAYER_ROOM,
mFI_FIELDTYPE_NUM
};
#define mFI_TO_FIELD_ID(type, index) (((type) << 12) | (index))
#define mFI_GET_TYPE(field_id) ((field_id) & 0xF000)
#define mFI_TYPE(type) ((type) << 12)
enum field_room {
/* TODO: others */
mFI_FIELD_PLAYER0_ROOM = mFI_TO_FIELD_ID(mFI_FIELDTYPE_PLAYER_ROOM, 0),
mFI_FIELD_PLAYER1_ROOM,
mFI_FIELD_PLAYER2_ROOM,
mFI_FIELD_PLAYER3_ROOM,
/* TODO: others */
};
#define mFI_GET_PLAYER_ROOM_NO(field_id) (((field_id)-mFI_FIELD_PLAYER0_ROOM) & 3)
#define mFI_IS_PLAYER_ROOM(field_id) \
((field_id) == mFI_FIELD_PLAYER0_ROOM || (field_id) == mFI_FIELD_PLAYER1_ROOM || \
(field_id) == mFI_FIELD_PLAYER2_ROOM || (field_id) == mFI_FIELD_PLAYER3_ROOM)
/* Not sure about these other than the island one */
enum {
mFI_CLIMATE_0,
mFI_CLIMATE_ISLAND,
mFI_CLIMATE_2,
mFI_CLIMATE_3,
mFI_CLIMATE_4,
mFI_CLIMATE_5,
mFI_CLIMATE_NUM
};
/* sizeof(mFI_unit_c) == 0x14 */
typedef struct location_info_s {
/* 0x00 */ int block_x;
/* 0x04 */ int block_z;
/* 0x08 */ int unit_x;
/* 0x0C */ int unit_z;
/* 0x10 */ mActor_name_t* block_data;
} mFI_unit_c;
extern int mFI_CheckFieldData();
extern mActor_name_t mFI_GetFieldId();
extern int mFI_GetClimate();
extern mActor_name_t* mFI_BkNumtoUtFGTop(int block_x, int block_z);
extern void mFI_ClearDeposit(int block_x, int block_z);
extern void mFI_GetSpecialBlockNum(int* block_pos_tbl, u32* kind_list, int kind_num);
extern int mFI_SetTreasure(int* block_x, int* block_z, mActor_name_t item_no);
extern void mFI_PrintNowBGNum(gfxprint_t* gfxprint);
extern void mFI_PrintFgAttr(gfxprint_t* gfxprint);
#ifdef __cplusplus
}
#endif
#endif