pokediamond/include/field_move.h
2025-02-15 04:10:13 +00:00

79 lines
2.7 KiB
C

#ifndef POKEDIAMOND_FIELD_MOVE_H
#define POKEDIAMOND_FIELD_MOVE_H
#include "global.h"
#include "field_system.h"
#include "task.h"
typedef struct FieldMoveUseData {
TaskManager *taskManager;
u16 partySlot;
u16 fieldMoveIdx;
} FieldMoveUseData;
typedef struct FieldMoveCheckData {
u32 mapId;
FieldSystem *fieldSystem;
LocalMapObject *facingObject;
u16 flag;
} FieldMoveCheckData;
typedef void (*FieldMoveUseFunc)(struct FieldMoveUseData *useData, const struct FieldMoveCheckData *checkData);
typedef u32 (*FieldMoveCheckFunc)(const struct FieldMoveCheckData *checkData);
typedef enum FieldMoveFuncType {
FIELD_MOVE_FUNC_USE,
FIELD_MOVE_FUNC_CHECK
} FieldMoveFuncType;
#define FIELD_MOVE_CHECK_TREE_F 0
#define FIELD_MOVE_CHECK_UNK1_F 1
#define FIELD_MOVE_CHECK_WATER_F 2
#define FIELD_MOVE_CHECK_ROCK_F 3
#define FIELD_MOVE_CHECK_DEFOG_F 4
#define FIELD_MOVE_CHECK_BREAKROCK_F 5
#define FIELD_MOVE_CHECK_WATERFALL_F 6
#define FIELD_MOVE_CHECK_ROCKCLIMB_F 7
#define FIELD_MOVE_CHECK_FLASH_F 8
#define FIELD_MOVE_CHECK_UNK9_F 9
#define FIELD_MOVE_CHECK_UNK10_F 10
#define FIELD_MOVE_CHECK_UNK11_F 11
#define FIELD_MOVE_CHECK_UNK12_F 12
#define FIELD_MOVE_CHECK_WHIRLPOOL_F 13
#define FIELD_MOVE_CHECK_HEADBUTT_F 14
typedef enum FieldMoveCheckFlags {
FIELD_MOVE_CHECK_TREE = (1 << FIELD_MOVE_CHECK_TREE_F),
FIELD_MOVE_CHECK_UNK1 = (1 << FIELD_MOVE_CHECK_UNK1_F),
FIELD_MOVE_CHECK_WATER = (1 << FIELD_MOVE_CHECK_WATER_F),
FIELD_MOVE_CHECK_ROCK = (1 << FIELD_MOVE_CHECK_ROCK_F),
FIELD_MOVE_CHECK_DEFOG = (1 << FIELD_MOVE_CHECK_DEFOG_F),
FIELD_MOVE_CHECK_BREAKROCK = (1 << FIELD_MOVE_CHECK_BREAKROCK_F),
FIELD_MOVE_CHECK_WATERFALL = (1 << FIELD_MOVE_CHECK_WATERFALL_F),
FIELD_MOVE_CHECK_ROCKCLIMB = (1 << FIELD_MOVE_CHECK_ROCKCLIMB_F),
FIELD_MOVE_CHECK_FLASH = (1 << FIELD_MOVE_CHECK_FLASH_F),
FIELD_MOVE_CHECK_UNK9 = (1 << FIELD_MOVE_CHECK_UNK9_F),
FIELD_MOVE_CHECK_UNK10 = (1 << FIELD_MOVE_CHECK_UNK10_F),
FIELD_MOVE_CHECK_UNK11 = (1 << FIELD_MOVE_CHECK_UNK11_F),
FIELD_MOVE_CHECK_UNK12 = (1 << FIELD_MOVE_CHECK_UNK12_F),
FIELD_MOVE_CHECK_WHIRLPOOL = (1 << FIELD_MOVE_CHECK_WHIRLPOOL_F),
FIELD_MOVE_CHECK_HEADBUTT = (1 << FIELD_MOVE_CHECK_HEADBUTT_F)
} FieldMoveCheckFlags;
typedef struct FieldMoveFuncData {
FieldMoveUseFunc use;
FieldMoveCheckFunc check;
} FieldMoveFuncData;
typedef struct FieldUseMoveEnvironment {
u32 magic;
LocalMapObject *facingObject;
FieldMoveUseData useData;
} FieldUseMoveEnvironment;
void *FieldMove_GetMoveFunc(FieldMoveFuncType funcType, u16 fieldMoveIndex);
void FieldMove_InitCheckData(FieldSystem *fieldSystem, FieldMoveCheckData *checkData);
#endif // POKEDIAMOND_FIELD_MOVE_H