summaryrefslogtreecommitdiff
path: root/include/m_submenu.h
blob: 45a019f64647ec708072cdc62bcf2946f3a7a26c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#ifndef M_SUBMENU_H
#define M_SUBMENU_H

#include "ultra64.h"
#include "m_mail.h"
#include "z64math.h"
#include "libc/stdint.h"
#include "other_types.h"
#include "unk.h"

struct Game_Play;
struct Submenu;
struct struct_8085E9B0;

typedef enum mSMMoveProcIndex {
    /* 0 */ MSM_MOVE_PROC_WAIT,
    /* 1 */ MSM_MOVE_PROC_PREWAIT,
    /* 2 */ MSM_MOVE_PROC_LINKWAIT,
    /* 3 */ MSM_MOVE_PROC_PLAY,
    /* 4 */ MSM_MOVE_PROC_END,
    /* 5 */ MSM_MOVE_PROC_MAX
} mSMMoveProcIndex;

typedef enum InventoryItemList {
    /*  0 */ INVENTORY_ITEM_LIST_0,
    /*  1 */ INVENTORY_ITEM_LIST_1,
    /*  2 */ INVENTORY_ITEM_LIST_ENTRUST,
    /*  3 */ INVENTORY_ITEM_LIST_3,
    /*  4 */ INVENTORY_ITEM_LIST_4,
    /*  5 */ INVENTORY_ITEM_LIST_SELL,
    /*  6 */ INVENTORY_ITEM_LIST_GIVE,
    /*  7 */ INVENTORY_ITEM_LIST_7,
    /*  8 */ INVENTORY_ITEM_LIST_TAKE,
    /*  9 */ INVENTORY_ITEM_LIST_FURNITURE,
    /* 10 */ INVENTORY_ITEM_LIST_MINIDISK,
    /* 11 */ INVENTORY_ITEM_LIST_SHRINE,
    /* 12 */ INVENTORY_ITEM_LIST_C,
    /* 13 */ INVENTORY_ITEM_LIST_ECHANGE,
    /* 14 */ INVENTORY_ITEM_LIST_E,
    /* 15 */ INVENTORY_ITEM_LIST_F,
    /* 16 */ INVENTORY_ITEM_LIST_MAX
} InventoryItemList;

typedef enum SubmenuProgramId {
    /*  0 */ SUBMENU_PROGRAM_0, // inventory, NONE? DEFAULT?
    /*  1 */ SUBMENU_PROGRAM_1, // inventory
    /*  2 */ SUBMENU_PROGRAM_2,
    /*  3 */ SUBMENU_PROGRAM_3,
    /*  4 */ SUBMENU_PROGRAM_LEDIT,
    /*  5 */ SUBMENU_PROGRAM_MAP,
    /*  6 */ SUBMENU_PROGRAM_6,
    /*  7 */ SUBMENU_PROGRAM_7,
    /*  8 */ SUBMENU_PROGRAM_8,
    /*  9 */ SUBMENU_PROGRAM_9,
    /* 10 */ SUBMENU_PROGRAM_10,
    /* 11 */ SUBMENU_PROGRAM_11,
    /* 12 */ SUBMENU_PROGRAM_BOARD,
    /* 13 */ SUBMENU_PROGRAM_13,
    /* 14 */ SUBMENU_PROGRAM_14,
    /* 15 */ SUBMENU_PROGRAM_15,
    /* 16 */ SUBMENU_PROGRAM_16,
    /* 17 */ SUBMENU_PROGRAM_17,
    /* 18 */ SUBMENU_PROGRAM_18,
    /* 19 */ SUBMENU_PROGRAM_19,
    /* 20 */ SUBMENU_PROGRAM_CATALOG,
    /* 21 */ SUBMENU_PROGRAM_MAX
} SubmenuProgramId;

typedef void (*SubmenuMoveFunc)(struct Submenu*);
typedef void (*SubmenuDrawFunc)(struct Submenu*, struct Game_Play*);

typedef struct Submenu {
    /* 0x00 */ s32 unk_00;
    /* 0x04 */ SubmenuProgramId programId;
    /* 0x08 */ SubmenuProgramId unk_08;
    /* 0x0C */ mSMMoveProcIndex moveProcIndex;
    /* 0x10 */ s32 unk_10;
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 unk_18;
    /* 0x1C */ s32 unk_1C;
    /* 0x20 */ s32 unk_20;
    /* 0x24 */ void* linkedAllocStart;
    /* 0x28 */ void* linkedAllocEnd;
    /* 0x2C */ struct struct_8085E9B0* unk_2C;
    /* 0x30 */ SubmenuMoveFunc move;
    /* 0x34 */ SubmenuDrawFunc draw;
    /* 0x38 */ Mail_c mail;
    /* 0xDC */ u8 unk_DC;
    /* 0xDD */ u8 unk_DD;
    /* 0xDE */ u8 unk_DE;
    /* 0xDF */ u8 unk_DF;
    /* 0xE0 */ u16 unk_E0;
    /* 0xE2 */ u8 unk_E2;
    /* 0xE3 */ u8 unk_E3;
    /* 0xE4 */ xyz_t unk_E4;
} Submenu; // size = 0xF0

s32 SubmenuArea_IsPlayer(void);

void* mSM_ovlptr_dllcnv(void* vram, Submenu* submenu);

void mSM_submenu_ovlptr_init(struct Game_Play* game_play);
void mSM_submenu_ovlptr_cleanup(Submenu* submenu);

void load_player(Submenu* submenu);
void mSM_submenu_ct(Submenu* submenu);
void mSM_submenu_dt(Submenu* submenu);

void mSM_open_submenu(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3);
void mSM_open_submenu_new(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3, s32 arg4);
void mSM_open_submenu_new2(Submenu* submenu, SubmenuProgramId programId, s32 arg2, s32 arg3, s32 arg4, s32 arg5);

void mSM_submenu_ctrl(struct Game_Play* game_play);
void mSM_submenu_move(Submenu* submenu);
void mSM_submenu_draw(Submenu* submenu, struct Game_Play* game_play);

u32 mSM_check_open_inventory_itemlist(InventoryItemList itemlist, s32 arg1) ;

// void mSM_Object_Exchange_keep_new();
// void mSM_Object_Exchange_keep_new_MenuTexAndPallet();
void mSM_Object_Exchange_keep_new_Menu(struct Game_Play* play);
// void mSM_Get_ground_tex_p();
// void mSM_Get_ground_pallet_p();

#endif