mirror of https://github.com/zeldaret/tp.git
638 lines
12 KiB
C++
638 lines
12 KiB
C++
#include "dolphin/types.h"
|
|
#define MAX_BOTTLES 4
|
|
#define MAX_ITEM_SLOTS 24
|
|
|
|
enum Wallets {
|
|
WALLET,
|
|
BIG_WALLET,
|
|
GIANT_WALLET
|
|
};
|
|
|
|
enum ItemTable {
|
|
ORDON_SHIELD = 42,
|
|
WOODEN_SHIELD,
|
|
HYLIAN_SHIELD,
|
|
OOCCOOS_NOTE,
|
|
ORDON_CLOTHES,
|
|
HEROS_CLOTHES,
|
|
MAGIC_ARMOR,
|
|
ZORA_ARMOR,
|
|
HAWKEYE = 62,
|
|
WOODEN_SWORD,
|
|
GALE_BOOMERANG,
|
|
SPINNER,
|
|
BALL_AND_CHAIN,
|
|
HEROS_BOW,
|
|
CLAWSHOT,
|
|
IRON_BOOTS,
|
|
DOMINION_ROD,
|
|
DOUBLE_CLAWSHOTS,
|
|
LANTERN,
|
|
MASTER_SWORD,
|
|
FISHING_ROD,
|
|
SLINGSHOT,
|
|
DOMINION_ROD_2, // unused?
|
|
GIANT_BOMB_BAG = 79,
|
|
EMPTY_BOMBBAG,
|
|
BAG_AND_BOMBS,
|
|
UNUSED_BOMB_BAG,
|
|
FIRE_ARROW, // unused?
|
|
QUIVER,
|
|
BIG_QUIVER,
|
|
GIANT_QUIVER,
|
|
UNUSED_FISHING_ROD = 88,
|
|
HEROS_BOW_BOMBS,
|
|
HEROS_BOW_HAWKEYE,
|
|
ROD_BEE_LARVA,
|
|
ROD_CORAL_EARRING,
|
|
ROD_WORM,
|
|
ROD_CORAL_EARRING_BEE_LARVA,
|
|
ROD_CORAL_EARRING_WORM,
|
|
EMPTY_BOTTLE,
|
|
RED_POTION,
|
|
MAGIC_POTION,
|
|
BLUE_POTION,
|
|
MILK,
|
|
HALF_MILK,
|
|
LANTERN_OIL,
|
|
WATER,
|
|
LANTERN_OIL_2, // unused?
|
|
RED_POTION_2, // unused?
|
|
NASTY_SOUP,
|
|
HOT_SPRING_WATER,
|
|
FAIRY,
|
|
HOT_SPRING_WATER_2, // unused?
|
|
LANTERN_OIL_3, // unused?
|
|
LANTERN_OIL_4, // unused?
|
|
REGULAR_BOMBS,
|
|
WATER_BOMBS,
|
|
BOMBLINGS,
|
|
FAIRY_TEARS,
|
|
WORM,
|
|
FAIRY_TEARS_2, // unused?
|
|
BEE_LARVA,
|
|
RARE_CHU,
|
|
RED_CHU,
|
|
BLUE_CHU,
|
|
GREEN_CHU,
|
|
YELLOW_CHU,
|
|
PURPLE_CHU,
|
|
SIMPLE_SOUP,
|
|
GOOD_SOUP,
|
|
SUPERB_SOUP,
|
|
RENADOS_LETTER,
|
|
INVOICE,
|
|
WOODEN_STATUE,
|
|
ILIAS_CHARM,
|
|
HORSE_CALL,
|
|
AURUS_MEMO = 144,
|
|
ASHEIS_SKETCH,
|
|
LANTERN_2 = 156, // unused?
|
|
LANTERN_OIL_5, // unused?
|
|
BEE_LARVA_2, // unused?
|
|
BLACK_CHU_JELLY, // unused?
|
|
TEAR_OF_LIGHT, // unused?
|
|
VESSEL_OF_LIGHT, // unused?
|
|
VESSEL_OF_LIGHT_2, // unused?
|
|
ANCIENT_SKY_BOOK_EMPTY = 233,
|
|
ANCIENT_SKY_BOOK_PARTIAL,
|
|
ANCIENT_SKY_BOOK_FILLED,
|
|
NO_ITEM = 255
|
|
};
|
|
|
|
class dSv_player_status_a_c {
|
|
public:
|
|
void init(void);
|
|
void setSelectItemIndex(signed int, u8);
|
|
u8 getSelectItemIndex(signed int) const;
|
|
void setMixItemIndex(signed int, u8);
|
|
u8 getMixItemIndex(signed int) const;
|
|
u16 getRupeeMax(void) const;
|
|
bool isMagicFlag(u8) const;
|
|
|
|
private:
|
|
u16 max_health;
|
|
u16 current_health;
|
|
u16 current_rupees;
|
|
u16 max_lantern_oil;
|
|
u16 current_lantern_oil;
|
|
u8 unk10;
|
|
u8 select_item[3];
|
|
u8 mix_item[3];
|
|
u8 unk17;
|
|
u8 unk18;
|
|
u8 equipment[6];
|
|
u8 current_wallet;
|
|
u8 unk26;
|
|
u8 unk27;
|
|
u8 magic_flag;
|
|
u8 unk29;
|
|
u8 unk30;
|
|
u8 unk31[3];
|
|
u8 padding[6];
|
|
};
|
|
|
|
class dSv_player_status_b_c {
|
|
public:
|
|
void init(void);
|
|
void onDarkClearLV(int);
|
|
bool isDarkClearLV(int) const;
|
|
void onTransformLV(int);
|
|
bool isTransformLV(int) const;
|
|
|
|
private:
|
|
u32 unk0;
|
|
u32 unk4;
|
|
u8 transform_level_flag;
|
|
u8 dark_clear_level_flag;
|
|
u8 unk10;
|
|
u8 unk11;
|
|
float unk12;
|
|
u16 unk16;
|
|
u8 unk18[3];
|
|
u8 padding61[3];
|
|
};
|
|
|
|
// move to SComponent later
|
|
class cXyz {
|
|
public:
|
|
float x, y, z;
|
|
};
|
|
|
|
class dSv_horse_place_c {
|
|
public:
|
|
void init(void);
|
|
void set(const char*, const cXyz&, short, s8);
|
|
|
|
private:
|
|
cXyz position;
|
|
u16 angle;
|
|
u8 current_stage[8];
|
|
u8 spawn_id;
|
|
u8 room_id;
|
|
};
|
|
|
|
class dSv_player_return_place_c {
|
|
public:
|
|
void init(void);
|
|
void set(const char*, const cXyz&, short, s8);
|
|
|
|
private:
|
|
u8 current_stage[8];
|
|
u8 spawn_id;
|
|
u8 room_id;
|
|
u8 unk10;
|
|
u8 unk11;
|
|
};
|
|
|
|
class dSv_player_field_last_stay_info_c {
|
|
public:
|
|
void init(void);
|
|
bool isRegionBit(int unk) const;
|
|
void onRegionBit(int unk);
|
|
void set(const char*, const cXyz&, short, s8, u8);
|
|
|
|
private:
|
|
cXyz last_position;
|
|
u16 last_angle;
|
|
u8 last_stage[8];
|
|
u8 last_spawn_id;
|
|
u8 last_room_id;
|
|
u8 unk24;
|
|
u8 last_region;
|
|
u8 unk26[2];
|
|
};
|
|
|
|
class dSv_player_last_mark_info_c {
|
|
public:
|
|
void init(void);
|
|
void setWarpItemData(const char*, const cXyz&, short, s8, u8, u8);
|
|
|
|
private:
|
|
cXyz ooccoo_position;
|
|
u16 ooccoo_angle;
|
|
u8 ooccoo_stage[8];
|
|
u8 ooccoo_spawn_id;
|
|
u8 ooccoo_room_id;
|
|
char unk24;
|
|
u8 unk25[3];
|
|
};
|
|
|
|
class dSv_player_item_c {
|
|
public:
|
|
void init(void);
|
|
void setItem(int, u8);
|
|
u8 getItem(int, bool) const;
|
|
void setLineUpItem(void);
|
|
u8 getLineUpItem(int) const;
|
|
void setBottleItemIn(u8, u8);
|
|
void setEmptyBottleItemIn(u8);
|
|
void setEmptyBottle(void);
|
|
void setEmptyBottle(u8);
|
|
void setEquipBottleItemIn(u8, u8);
|
|
void setEquipBottleItemEmpty(u8);
|
|
u8 checkBottle(u8);
|
|
u8 checkInsectBottle(void);
|
|
u8 checkEmptyBottle(void);
|
|
void setBombBagItemIn(u8, u8, bool);
|
|
void setBombBagItemIn(u8, u8, u8, bool);
|
|
void setEmptyBombBagItemIn(u8, bool);
|
|
void setEmptyBombBagItemIn(u8, u8, bool);
|
|
void setEmptyBombBag(void);
|
|
void setEmptyBombBag(u8, u8);
|
|
u8 checkBombBag(u8);
|
|
void setWarashibeItem(u8);
|
|
void setRodTypeLevelUp(void);
|
|
void setBaitItem(u8);
|
|
|
|
private:
|
|
u8 items[24];
|
|
u8 item_slots[24];
|
|
};
|
|
|
|
class dSv_player_get_item_c {
|
|
public:
|
|
void init(void);
|
|
void onFirstBit(u8);
|
|
void offFirstBit(u8);
|
|
u8 isFirstBit(u8) const;
|
|
|
|
private:
|
|
u32 pause_menu_items[4];
|
|
};
|
|
|
|
class dSv_player_item_record_c {
|
|
public:
|
|
void init(void);
|
|
void setBombNum(u8, u8);
|
|
u8 getBombNum(u8) const;
|
|
void setBottleNum(u8, u8);
|
|
u8 addBottleNum(u8, short);
|
|
u8 getBottleNum(u8) const;
|
|
|
|
private:
|
|
u8 bow_ammo;
|
|
u8 bomb_bags_ammo[3];
|
|
u8 unk4_ammo[4];
|
|
u8 slingshot_ammo;
|
|
u8 unk5_ammo[3];
|
|
};
|
|
|
|
class dSv_player_item_max_c {
|
|
public:
|
|
void init(void);
|
|
void setbombNum(u8, u8);
|
|
u8 getBombNum(u8) const;
|
|
|
|
private:
|
|
u8 bow_ammo_max;
|
|
u8 bomb_bags_ammo_max[3];
|
|
u8 unk_ammo_max[4];
|
|
};
|
|
|
|
class dSv_player_collect_c {
|
|
public:
|
|
void init(void);
|
|
void setCollect(int, u8);
|
|
u8 isCollect(int, u8) const;
|
|
void onCollectCrystal(u8);
|
|
u8 isCollectCrystal(u8) const;
|
|
void onCollectMirror(u8);
|
|
u8 isCollectMirror(u8) const;
|
|
|
|
private:
|
|
u8 unk0[8];
|
|
u8 unk8;
|
|
u8 crystal;
|
|
u8 mirror;
|
|
u8 unk11;
|
|
u8 poe_count;
|
|
};
|
|
|
|
class dSv_player_wolf_c {
|
|
public:
|
|
void init(void);
|
|
|
|
private:
|
|
u8 unk0[3];
|
|
u8 unk3;
|
|
};
|
|
|
|
class dSv_light_drop_c {
|
|
public:
|
|
void init(void);
|
|
u8 getLightDropNum(u8) const;
|
|
void onLightDropGetFlag(u8);
|
|
u8 isLightDropGetFlag(u8) const;
|
|
|
|
private:
|
|
u8 unk0[4];
|
|
u8 light_drop_get_flag;
|
|
u8 unk5[3];
|
|
};
|
|
|
|
class dSv_letter_info_c {
|
|
public:
|
|
void init(void);
|
|
void onLetterGetFlag(int);
|
|
u8 isLetterGetFlag(int) const;
|
|
void onLetterReadFlag(int);
|
|
u8 isLetterReadFlag(int) const;
|
|
|
|
private:
|
|
u8 letter_read_flags[16];
|
|
u8 unk16[64];
|
|
};
|
|
|
|
class dSv_fishing_info_c {
|
|
public:
|
|
void init(void);
|
|
void addFishCount(u8); // merged with init in the assembly
|
|
|
|
private:
|
|
u8 unk0[32];
|
|
u8 unk32[16];
|
|
u8 padding[4];
|
|
};
|
|
|
|
class dSv_player_info_c {
|
|
public:
|
|
void init(void);
|
|
|
|
private:
|
|
u8 unk0[4];
|
|
u8 unk4[4];
|
|
u8 unk8[4];
|
|
u8 unk12[4];
|
|
u8 unk16[2];
|
|
u8 unk18[2];
|
|
u8 link_name[16];
|
|
u8 unk36;
|
|
u8 epona_name[16];
|
|
u8 unk53;
|
|
u8 unk54;
|
|
u8 unk55[5];
|
|
u8 padding[4];
|
|
};
|
|
|
|
class dSv_player_config_c {
|
|
public:
|
|
void init(void);
|
|
u32 checkVibration(void) const;
|
|
u8 getSound(void);
|
|
void setSound(u8);
|
|
u8 getVibration(void);
|
|
void setVibration(u8);
|
|
|
|
private:
|
|
u8 unk0;
|
|
u8 sound_mode;
|
|
u8 unk2;
|
|
u8 vibration_status;
|
|
u8 unk4;
|
|
u8 unk5;
|
|
u16 unk6;
|
|
u8 unk8;
|
|
u8 unk9;
|
|
u8 unk10;
|
|
u8 unk11;
|
|
};
|
|
|
|
class dSv_player_c {
|
|
public:
|
|
void init(void);
|
|
|
|
private:
|
|
dSv_player_status_a_c player_status_a;
|
|
dSv_player_status_b_c player_status_b;
|
|
dSv_horse_place_c horse_place;
|
|
dSv_player_return_place_c player_return;
|
|
dSv_player_field_last_stay_info_c player_last_field;
|
|
dSv_player_last_mark_info_c player_last_mark;
|
|
dSv_player_item_c player_item;
|
|
dSv_player_get_item_c player_get_item;
|
|
dSv_player_item_record_c player_item_record;
|
|
dSv_player_item_max_c player_item_max;
|
|
dSv_player_collect_c player_collect;
|
|
dSv_player_wolf_c player_wolf;
|
|
dSv_light_drop_c light_drop;
|
|
dSv_letter_info_c letter_info;
|
|
dSv_fishing_info_c fishing_info;
|
|
dSv_player_info_c player_info;
|
|
dSv_player_config_c player_config;
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
class dSv_memBit_c {
|
|
public:
|
|
void init(void);
|
|
void onTBox(int); // merged with init in the assembly
|
|
void offTbox(int); // merged with init in the assembly
|
|
u8 isTbox(int) const;
|
|
void onSwitch(int);
|
|
void offSwitch(int);
|
|
u8 isSwitch(int) const;
|
|
u8 revSwitch(int);
|
|
void onItem(int);
|
|
u8 isItem(int) const;
|
|
void onDungeonItem(int);
|
|
u8 isDungeonItem(int) const;
|
|
|
|
private:
|
|
u32 area_flags_bitfields1[2];
|
|
u32 area_flags_bitfields2[4];
|
|
u32 rupee_flags_bitfields;
|
|
u8 small_key_flags;
|
|
u8 dungeons_flags;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
class dSv_event_c {
|
|
public:
|
|
void init(void);
|
|
void onEventBit(u16);
|
|
void offEventBit(u16);
|
|
bool isEventBit(u16) const;
|
|
void setEventReg(u16, u8);
|
|
u8 getEventReg(u16) const;
|
|
|
|
private:
|
|
u8 events[256];
|
|
};
|
|
|
|
class dSv_MiniGame_c {
|
|
public:
|
|
void init(void);
|
|
|
|
private:
|
|
u8 unk0;
|
|
u8 unk1[3];
|
|
u32 unk4;
|
|
u32 unk8;
|
|
u32 unk12;
|
|
u32 unk16;
|
|
u32 unk20;
|
|
};
|
|
|
|
class dSv_memory_c {
|
|
public:
|
|
dSv_memory_c(void); // the assembly for this is in d_com_inf_game.s
|
|
void init(void);
|
|
|
|
private:
|
|
dSv_memBit_c temp_flags;
|
|
u8 padding30[2];
|
|
};
|
|
|
|
class dSv_memory2_c {
|
|
public:
|
|
dSv_memory2_c(void); // the assembly for this is in d_com_inf_game.s
|
|
void init(void);
|
|
void onVisitedRoom(int);
|
|
void offVisitedRoom(int);
|
|
u8 isVisitedRoom(int);
|
|
|
|
private:
|
|
u32 unk0[2];
|
|
};
|
|
|
|
class dSv_danBit_c {
|
|
public:
|
|
void init(void);
|
|
void onSwitch(int);
|
|
void offSwitch(int);
|
|
u8 isSwitch(int) const;
|
|
u8 revSwitch(int);
|
|
void onItem(int);
|
|
u8 isItem(int) const;
|
|
|
|
private:
|
|
u8 unk0;
|
|
u8 unk1;
|
|
u8 unk2[2];
|
|
u32 unk4;
|
|
u32 unk8;
|
|
u32 unk12;
|
|
u32 unk16;
|
|
u32 unk20;
|
|
u32 unk24;
|
|
u16 unk28[16];
|
|
};
|
|
|
|
class dSv_zoneBit_c {
|
|
public:
|
|
void init(void);
|
|
void clearRoomSwitch(void);
|
|
void clearRoomItem(void);
|
|
void onSwitch(int);
|
|
void offSwitch(int);
|
|
u8 isSwitch(int) const;
|
|
u8 revSwitch(int);
|
|
void onOneSwitch(int);
|
|
void offOneSwitch(int);
|
|
void isOneSwitch(int) const;
|
|
u8 revOneSwitch(int);
|
|
void onItem(int);
|
|
void isItem(int) const;
|
|
void onOneItem(int);
|
|
u8 isOneItem(int) const;
|
|
|
|
private:
|
|
u16 unk0[2];
|
|
u16 unk4;
|
|
u16 unk6[2];
|
|
u16 unk10;
|
|
u16 unk12;
|
|
};
|
|
|
|
class dSv_zoneActor_c {
|
|
public:
|
|
void init(void);
|
|
void on(int);
|
|
void off(int);
|
|
u8 is(int) const;
|
|
|
|
private:
|
|
u32 unk0[4];
|
|
};
|
|
|
|
class dSv_zone_c {
|
|
public:
|
|
dSv_zone_c(void); // the assembly for this is in d_com_inf_game.s
|
|
void init(void);
|
|
|
|
private:
|
|
u8 unk0;
|
|
u8 unk1;
|
|
dSv_zoneBit_c zone_bit;
|
|
dSv_zoneActor_c zone_actor;
|
|
};
|
|
|
|
class dSv_restart_c {
|
|
public:
|
|
void setRoom(const cXyz&, short, s8);
|
|
|
|
private:
|
|
u8 unk0;
|
|
u8 unk1[5];
|
|
short angle;
|
|
cXyz position;
|
|
u8 padding20[16];
|
|
};
|
|
|
|
class dSv_turnRestart_c {
|
|
public:
|
|
void set(const cXyz&, short, s8, u32);
|
|
|
|
private:
|
|
cXyz position;
|
|
u32 unk12;
|
|
short angle;
|
|
s8 unk18;
|
|
};
|
|
|
|
class dSv_save_c {
|
|
public:
|
|
void init(void);
|
|
dSv_memory2_c getSave2(int);
|
|
|
|
private:
|
|
dSv_player_c player;
|
|
u8 unk476[20];
|
|
dSv_memory_c area_flags[32];
|
|
dSv_memory2_c unk_flags[64];
|
|
dSv_event_c event_flags;
|
|
u8 unk2288[80];
|
|
dSv_MiniGame_c minigame_flags;
|
|
};
|
|
|
|
class dSv_info_c {
|
|
public:
|
|
void init(void);
|
|
void getSave(int);
|
|
void putSave(int);
|
|
void initZone(void);
|
|
int createZone(int);
|
|
void onSwitch(int, int);
|
|
void offSwitch(int, int);
|
|
bool isSwitch(int, int) const;
|
|
u8 revSwitch(int, int); // merged with isSwitch in the assembly
|
|
void onItem(int, int);
|
|
bool isItem(int, int) const;
|
|
void onActor(int, int);
|
|
void offActor(int, int); // merged with onActor in the assembly
|
|
bool isActor(int, int) const;
|
|
void memory_to_card(char*, int);
|
|
void card_to_memory(char*, int);
|
|
void initdata_to_card(char*, int);
|
|
|
|
private:
|
|
dSv_save_c save_file;
|
|
dSv_memory_c memory;
|
|
dSv_danBit_c dungeon_bit;
|
|
dSv_zone_c zones[32];
|
|
dSv_restart_c restart;
|
|
dSv_event_c events;
|
|
dSv_turnRestart_c turn_restart;
|
|
};
|