summaryrefslogtreecommitdiff
path: root/src/pokemon_storage_system_6.c
blob: a1d3af8f266715624e6fc56e005527f90206a873 (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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include "global.h"
#include "gflib.h"
#include "menu.h"
#include "new_menu_helpers.h"
#include "pokemon_storage_system_internal.h"
#include "strings.h"
#include "constants/songs.h"

void InitMenu(void)
{
    gPSSData->menuItemsCount = 0;
    gPSSData->menuWidth = 0;
    gPSSData->menuWindow.bg = 0;
    gPSSData->menuWindow.paletteNum = 15;
    gPSSData->menuWindow.baseBlock = 92;
}

static const u8 *const sMenuTexts[] = {
    [PC_TEXT_CANCEL]     = gPCText_Cancel,
    [PC_TEXT_STORE]      = gPCText_Store,
    [PC_TEXT_WITHDRAW]   = gPCText_Withdraw,
    [PC_TEXT_MOVE]       = gPCText_Move,
    [PC_TEXT_SHIFT]      = gPCText_Shift,
    [PC_TEXT_PLACE]      = gPCText_Place,
    [PC_TEXT_SUMMARY]    = gPCText_Summary,
    [PC_TEXT_RELEASE]    = gPCText_Release,
    [PC_TEXT_MARK]       = gPCText_Mark,
    [PC_TEXT_JUMP]       = gPCText_Jump,
    [PC_TEXT_WALLPAPER]  = gPCText_Wallpaper,
    [PC_TEXT_NAME]       = gPCText_Name,
    [PC_TEXT_TAKE]       = gPCText_Take,
    [PC_TEXT_GIVE]       = gPCText_Give,
    [PC_TEXT_GIVE2]      = gPCText_Give,
    [PC_TEXT_SWITCH]     = gPCText_Switch,
    [PC_TEXT_BAG]        = gPCText_Bag,
    [PC_TEXT_INFO]       = gPCText_Info,
    [PC_TEXT_SCENERY1]   = gPCText_Scenery1,
    [PC_TEXT_SCENERY2]   = gPCText_Scenery2,
    [PC_TEXT_SCENERY3]   = gPCText_Scenery3,
    [PC_TEXT_ETCETERA]   = gPCText_Etcetera,
    [PC_TEXT_FOREST]     = gPCText_Forest,
    [PC_TEXT_CITY]       = gPCText_City,
    [PC_TEXT_DESERT]     = gPCText_Desert,
    [PC_TEXT_SAVANNA]    = gPCText_Savanna,
    [PC_TEXT_CRAG]       = gPCText_Crag,
    [PC_TEXT_VOLCANO]    = gPCText_Volcano,
    [PC_TEXT_SNOW]       = gPCText_Snow,
    [PC_TEXT_CAVE]       = gPCText_Cave,
    [PC_TEXT_BEACH]      = gPCText_Beach,
    [PC_TEXT_SEAFLOOR]   = gPCText_Seafloor,
    [PC_TEXT_RIVER]      = gPCText_River,
    [PC_TEXT_SKY]        = gPCText_Sky,
    [PC_TEXT_POLKADOT]   = gPCText_PolkaDot,
    [PC_TEXT_POKECENTER] = gPCText_Pokecenter,
    [PC_TEXT_MACHINE]    = gPCText_Machine,
    [PC_TEXT_SIMPLE]     = gPCText_Simple,
};

void SetMenuText(u8 textId)
{
    if (gPSSData->menuItemsCount < MAX_MENU_ITEMS)
    {
        u8 len;
        struct StorageMenu *menu = &gPSSData->menuItems[gPSSData->menuItemsCount];

        menu->text = sMenuTexts[textId];
        menu->textId = textId;
        len = StringLength(menu->text);
        if (len > gPSSData->menuWidth)
            gPSSData->menuWidth = len;

        gPSSData->menuItemsCount++;
    }
}

s8 sub_8094E50(u8 arg0)
{
    if (arg0 >= gPSSData->menuItemsCount)
        return -1;
    else
        return gPSSData->menuItems[arg0].textId;
}

void AddMenu(void)
{
    gPSSData->menuWindow.width = gPSSData->menuWidth + 2;
    gPSSData->menuWindow.height = 2 * gPSSData->menuItemsCount;
    gPSSData->menuWindow.tilemapLeft = 29 - gPSSData->menuWindow.width;
    gPSSData->menuWindow.tilemapTop = 15 - gPSSData->menuWindow.height;
    gPSSData->field_CB0 = AddWindow(&gPSSData->menuWindow);
    ClearWindowTilemap(gPSSData->field_CB0);
    DrawStdFrameWithCustomTileAndPalette(gPSSData->field_CB0, FALSE, 0x00b, 14);
    PrintTextArray(gPSSData->field_CB0, 1, 8, 2, 16, gPSSData->menuItemsCount, (void*)gPSSData->menuItems);
    Menu_InitCursor(gPSSData->field_CB0, 1, 0, 2, 16, gPSSData->menuItemsCount, 0);
    ScheduleBgCopyTilemapToVram(0);
    gPSSData->field_CAE = 0;
}

bool8 sub_8094F90(void)
{
    // Some debug flag?
    return FALSE;
}

s16 sub_8094F94(void)
{
    s32 textId = -2;

    do
    {
        if (JOY_NEW(A_BUTTON))
        {
            textId = Menu_GetCursorPos();
            break;
        }
        else if (JOY_NEW(B_BUTTON))
        {
            PlaySE(SE_SELECT);
            textId = -1;
        }

        if (JOY_NEW(DPAD_UP))
        {
            PlaySE(SE_SELECT);
            Menu_MoveCursor(-1);
        }
        else if (JOY_NEW(DPAD_DOWN))
        {
            PlaySE(SE_SELECT);
            Menu_MoveCursor(1);
        }
    } while (0);

    if (textId != -2)
        sub_8095024();

    if (textId >= 0)
        textId = gPSSData->menuItems[textId].textId;

    return textId;
}

void sub_8095024(void)
{
    ClearStdWindowAndFrameToTransparent(gPSSData->field_CB0, TRUE);
    RemoveWindow(gPSSData->field_CB0);
}