#ifndef POKEPLATINUM_OV23_0223E140_H
#define POKEPLATINUM_OV23_0223E140_H

#include <nitro/math.h>

#include "field/field_system_decl.h"
#include "overlay023/underground_defs.h"

#include "strbuf.h"

#define MINING_MAX_BURIED_OBJECTS 8
#define MINING_MAX_BURIED_ITEMS   4

#define INITIAL_WALL_INTEGRITY 196

#define MINING_GAME_WIDTH  13
#define MINING_GAME_HEIGHT 10

void ov23_0223E1E4(void *param0, FieldSystem *fieldSystem);
int ov23_0223E2E8(void);
void ov23_0223E2F0(void);
void ov23_0223E2F4(void);
void ov23_0223E2F8(void);
BOOL ov23_0223E354(int param0, Coordinates *param1);
void ov23_0223E650(int param0, int param1, MATHRandContext16 *param2);
void ov23_0223E878(void);
void ov23_0223E9D4(int param0, int param1, void *param2, void *param3);
void ov23_0223EAF8(int param0, int param1, void *param2, void *param3);
void ov23_0223EB8C(int param0, int param1, void *param2, void *param3);
void ov23_0223EBC0(int param0, int param1, void *param2, void *param3);
void ov23_0223EBE4(int param0, int param1, void *param2, void *param3);
int ov23_0223EBFC(void);
void Mining_TakeLinkInput(int param0, int param1, void *src, void *param3);
int ov23_0223EC30(void);
BOOL ov23_02241200(int param0, int param1);
int ov23_0224121C(int param0);
int ov23_0224123C(int param0);
int ov23_0224125C(int param0);
int ov23_02241294(int param0);
void ov23_022412F0(void);
void ov23_02241364(void);
void ov23_022413A0(int param0, int param1, void *param2, void *param3);
void ov23_0224142C(int param0, int param1, void *param2, void *param3);
int ov23_022414D0(void);
BOOL ov23_022415B8(Strbuf *param0);
void ov23_0224160C(void);
BOOL ov23_0224162C(int param0);
void ov23_02241648(int param0);
BOOL ov23_02241670(void);
void ov23_02241690(int param0, int param1);

enum MiningObjectIDs {
    MINING_SMALL_PRISM_SPHERE = 1,
    MINING_SMALL_PALE_SPHERE,
    MINING_SMALL_RED_SPHERE,
    MINING_SMALL_BLUE_SPHERE,
    MINING_SMALL_GREEN_SPHERE,
    MINING_LARGE_PRISM_SPHERE,
    MINING_LARGE_PALE_SPHERE,
    MINING_LARGE_RED_SPHERE,
    MINING_LARGE_BLUE_SPHERE,
    MINING_LARGE_GREEN_SPHERE,
    MINING_SPHERES_MAX,
    MINING_TREASURE_OVAL_STONE = MINING_SPHERES_MAX,
    MINING_TREASURE_ODD_KEYSTONE,
    MINING_TREASURE_SUN_STONE,
    MINING_TREASURE_STAR_PIECE,
    MINING_TREASURE_MOON_STONE,
    MINING_TREASURE_HARD_STONE,
    MINING_TREASURE_THUNDERSTONE,
    MINING_TREASURE_EVERSTONE,
    MINING_TREASURE_FIRE_STONE,
    MINING_TREASURE_WATER_STONE,
    MINING_TREASURE_LEAF_STONE,
    MINING_TREASURE_NUGGET_UNUSED,
    MINING_TREASURE_HELIX_FOSSIL,
    MINING_TREASURE_DOME_FOSSIL,
    MINING_TREASURE_CLAW_FOSSIL,
    MINING_TREASURE_ROOT_FOSSIL,
    MINING_TREASURE_OLD_AMBER,
    MINING_TREASURE_RARE_BONE,
    MINING_TREASURE_REVIVE,
    MINING_TREASURE_MAX_REVIVE,
    MINING_TREASURE_RED_SHARD,
    MINING_TREASURE_BLUE_SHARD,
    MINING_TREASURE_YELLOW_SHARD,
    MINING_TREASURE_GREEN_SHARD,
    MINING_TREASURE_HEART_SCALE,
    MINING_TREASURE_ARMOR_FOSSIL,
    MINING_TREASURE_SKULL_FOSSIL,
    MINING_TREASURE_LIGHT_CLAY,
    MINING_TREASURE_IRON_BALL,
    MINING_TREASURE_ICY_ROCK,
    MINING_TREASURE_SMOOTH_ROCK,
    MINING_TREASURE_HEAT_ROCK,
    MINING_TREASURE_DAMP_ROCK,
    MINING_TREASURE_FLAME_PLATE,
    MINING_TREASURE_SPLASH_PLATE,
    MINING_TREASURE_ZAP_PLATE,
    MINING_TREASURE_MEADOW_PLATE,
    MINING_TREASURE_ICICLE_PLATE,
    MINING_TREASURE_FIST_PLATE,
    MINING_TREASURE_TOXIC_PLATE,
    MINING_TREASURE_EARTH_PLATE,
    MINING_TREASURE_SKY_PLATE,
    MINING_TREASURE_MIND_PLATE,
    MINING_TREASURE_INSECT_PLATE,
    MINING_TREASURE_STONE_PLATE,
    MINING_TREASURE_SPOOKY_PLATE,
    MINING_TREASURE_DRACO_PLATE,
    MINING_TREASURE_DREAD_PLATE,
    MINING_TREASURE_IRON_PLATE,
    MINING_TREASURE_MAX,
    MINING_ROCK_1 = MINING_TREASURE_MAX,
    MINING_ROCK_2,
    MINING_ROCK_3,
    MINING_ROCK_4,
    MINING_ROCK_5,
    MINING_ROCK_6,
    MINING_ROCK_7
};

#endif // POKEPLATINUM_OV23_0223E140_H
