Digimon World 3 decomp
The European version, SLES_039.36
Loading...
Searching...
No Matches
slot_screen.c
Go to the documentation of this file.
1/* The main menu's second screen, which sets a party member's slots: it opens
2 the list of the member's entries, then the entry panel or the skill panel */
3
4#include "menus/digimon_lab.h"
5
6/* Creates the second screen's windows and cursor */
8 s32 i;
9 TextWindow **items;
10
11 windows->title = createTextWindow(screen->layer, 1, 0xAE, 0x57);
12 for (i = 0; i < 3; i++) {
13 windows->slotNames[i] = createTextWindow(screen->layer, 1, 0xA7, i * 0xE + 0x16);
14 }
15 for (i = 0; i < 2; i++) {
16 windows->options[i] = createTextWindow(screen->layer, 1, 0xA7, i * 0xE + 0x73);
17 }
18 for (i = 0; i < 6; i++) {
19 windows->list[i] = createTextWindow(screen->layer, 1, 0x32, i * 0xE + 0x4F);
20 }
21 for (i = 0; i < 7; i++) {
22 windows->list[i + 6] = createTextWindow(screen->layer, 1, 0x5B, i * 0xE + 0x4F);
23 }
24 for (i = 0, items = screen->children; i < screen->childCount - 4; i++, items++) {
25 if (*items != NULL) {
26 (*items)->setDepth(*items, screen->depth - 1);
27 }
28 }
29 windows->cursor = createCursor(screen->layer, screen->depth - 1, 0x9A, 0x73);
30 windows->cursor->setVisible(windows->cursor, 0);
31}
32
33/* Shows the party member's slots and stats, or hides the screen's windows */
35 PartnerTotals totals;
36 TextWindow **items;
37 Partner *partner;
38 s32 member;
39 s32 value;
40 s32 i;
41 s16 *stats;
42
43 if (show) {
44 member = GAME.funcs.getPartyMember(screen->lab->member);
45 GAME.funcs.computeStats(member, &totals);
46 partner = &GAME.partners[member];
47 windows->title->setString(windows->title, FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 1);
48 for (i = 0; i < 3; i++) {
49 if (screen->slots[i] < 2) {
50 if (i == 0) {
51 windows->slotNames[0]->setString(windows->slotNames[0], FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x1B);
52 } else {
53 windows->slotNames[i]->setVisible(windows->slotNames[i], 0);
54 }
55 } else {
57 GET_DIGIMON(screen->slots[i])->nameId);
58 if (partner->battleDigivolve == screen->slots[i]) {
59 windows->slotNames[i]->setPalette(windows->slotNames[i], PALETTE_BLUE);
60 } else {
61 windows->slotNames[i]->setPalette(windows->slotNames[i], PALETTE_WHITE);
62 }
63 }
64 }
65 for (i = 0; i < 2; i++) {
66 windows->options[i]->setString(windows->options[i], FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), i + 0x21);
67 }
68 stats = totals.stats;
69 for (i = 0; i < 13; i++) {
70 value = stats[i + 6];
71 if (value >= 1000) {
72 value = 999;
73 }
74 windows->list[i]->setNumber(windows->list[i], 0, value);
75 }
76 if (totals.fields.lowered[0] != 0) {
77 windows->list[0]->setPalette(windows->list[0], PALETTE_PURPLE);
78 }
79 if (totals.fields.lowered[1] != 0) {
80 windows->list[1]->setPalette(windows->list[1], PALETTE_PURPLE);
81 }
82 if (totals.fields.lowered[2] != 0) {
83 windows->list[4]->setPalette(windows->list[4], PALETTE_PURPLE);
84 }
85 for (i = 0; i < 13; i++) {
86 windows->list[i]->setRightAlign(windows->list[i], 1);
87 }
88 windows->cursor->setVisible(windows->cursor, 1);
89 } else {
90 for (i = 0, items = screen->children; i < screen->childCount - 4; i++, items++) {
91 if (*items != NULL) {
92 (*items)->setVisible(*items, 0);
93 }
94 }
95 windows->cursor->setVisible(windows->cursor, 0);
96 }
97}
98
99/* Reads the party member's slots and entries and fades the screen's panels in */
100static inline void loadSlotScreen(LabSlotScreen *screen) {
101 s32 member;
102
103 member = GAME.funcs.getPartyMember(screen->lab->member);
104 GAME.funcs.getPartnerSlots(member, screen->slots);
105 screen->entryCount = GAME.funcs.listPartnerEntries(member, screen->entries);
106 STGDGLAB_data.funcs.startFade(&screen->panels[0], 1);
107 STGDGLAB_data.funcs.startFade(&screen->panels[1], 1);
108 STGDGLAB_data.funcs.startFade(&screen->panels[2], 1);
109 STGDGLAB_data.funcs.startFade(&screen->panels[3], 1);
110 screen->substate++;
111}
112
113/* Up and down pick "Change digivolve type" or "Load technique"; cross opens
114 the entry list (or says it can't, without enough entries), triangle leaves */
115static inline void pickSlotOption(LabSlotScreen *screen, LabSlotScreenWindows *windows) {
116 s32 old;
117
118 old = screen->choice;
120 screen->choice--;
121 if (screen->choice < 0) {
122 screen->choice = 0;
123 }
124 } else if (PAD_PRESSED(PAD_DOWN) || PAD_REPEATED(PAD_DOWN)) {
125 screen->choice++;
126 if (screen->choice >= 2) {
127 screen->choice = 1;
128 }
129 }
130 if (old != screen->choice) {
132 windows->cursor->setPos(windows->cursor, 0x9A, screen->choice * 0xE + 0x72);
133 }
134 if (PAD_PRESSED(PAD_CROSS)) {
136 if ((screen->choice == 0 && screen->entryCount < 4) || (screen->choice == 1 && screen->entryCount == 0)) {
137 screen->setSubstate(screen, 30);
138 STGDGLAB_data.funcs.startFade(&screen->panels[4], 1);
139 windows->cursor->setVisible(windows->cursor, 0);
140 } else {
141 screen->step = 0;
142 screen->substate++;
143 }
144 } else if (PAD_PRESSED(PAD_TRIANGLE)) {
146 screen->step = 1;
147 screen->substate++;
148 }
149}
150
151/* Once the screen's panels have faded out, goes on to the entry list for the
152 picked option, or ends the screen */
153static inline void openSlotOption(LabSlotScreen *screen) {
157 if (STGDGLAB_data.funcs.updateFade(&screen->panels[3])) {
158 if (screen->step == 0) {
159 screen->picked = 0;
160 screen->setSubstate(screen, 40);
161 switch (screen->choice) {
162 case 0:
163 default:
164 screen->step = 10;
165 break;
166 case 1:
167 screen->step = 20;
168 break;
169 case 2:
170 screen->setState(screen, TASK_KILL);
171 break;
172 }
173 } else {
174 screen->setState(screen, TASK_KILL);
175 }
176 }
177}
178
179/* Cross closes the message: fades its panel out and hides it */
180static inline void closeMessage(LabSlotScreen *screen, LabSlotScreenWindows *windows, s32 panel) {
181 if (PAD_PRESSED(PAD_CROSS)) {
183 STGDGLAB_data.funcs.startFade(&screen->panels[panel], 0);
184 windows->message->setVisible(windows->message, 0);
185 screen->substate++;
186 }
187}
188
189/* The second screen's states: picks between the entries and the skills,
190 opens the list of the member's entries and then the picked one's panel */
192 s16 slots[4];
193 PartnerEntry entry;
194 s32 found;
195 s32 i;
196
197 switch (screen->substate) {
198 case 0:
199 default:
200 loadSlotScreen(screen);
201 break;
202 case 1:
206 if (STGDGLAB_data.funcs.updateFade(&screen->panels[3])) {
207 STGDGLAB_showSlotScreen(screen, windows, 1);
208 screen->substate++;
209 }
210 break;
211 case 2:
212 pickSlotOption(screen, windows);
213 break;
214 case 3:
215 STGDGLAB_data.funcs.startFade(&screen->panels[0], 0);
216 STGDGLAB_data.funcs.startFade(&screen->panels[1], 0);
217 STGDGLAB_data.funcs.startFade(&screen->panels[2], 0);
218 STGDGLAB_data.funcs.startFade(&screen->panels[3], 0);
219 STGDGLAB_showSlotScreen(screen, windows, 0);
220 screen->substate++;
221 break;
222 case 4:
223 openSlotOption(screen);
224 break;
225 case 40:
226 if (windows->entryList == NULL) {
228 }
229 windows->entryList->cursor = screen->picked;
230 screen->substate++;
231 break;
232 case 41:
233 if (windows->entryList == NULL || windows->entryList->substate >= 2) {
234 if (PAD_PRESSED(PAD_CROSS)) {
236 if (screen->step == 20) {
237 found = GAME.funcs.getPartyMember(screen->lab->member);
238 GAME.funcs.getPartnerSlots(found, slots);
239 GAME.funcs.getPartnerEntry(found, slots[windows->entryList->cursor], &entry);
240 found = 0; /* the match depends on reusing the member's variable */
241 for (i = 0; i < 6; i++) {
242 if (entry.skills[i] != 0) {
243 found = 1;
244 break;
245 }
246 }
247 if (!found) {
248 screen->setSubstate(screen, 50);
249 STGDGLAB_data.funcs.startFade(&screen->panels[5], 1);
250 windows->cursor->setVisible(windows->cursor, 0);
251 windows->entryList->substate = 4;
252 break;
253 }
254 }
255 screen->picked = windows->entryList->cursor;
256 screen->substate = screen->step;
257 screen->setStep(screen, 0);
258 } else if (PAD_PRESSED(PAD_TRIANGLE)) {
260 windows->entryList->close(windows->entryList);
261 screen->substate++;
262 }
263 }
264 break;
265 case 42:
266 if (windows->entryList == NULL) {
267 screen->setSubstate(screen, 0);
268 }
269 break;
270 case 10:
271 screen->lab->closeMenu(screen->lab);
272 windows->entryList->close(windows->entryList);
273 screen->substate++;
274 break;
275 case 11:
276 if (screen->lab->menuOpen(screen->lab) && windows->entryList == NULL) {
277 if (windows->entryPanel == NULL) {
279 }
280 screen->substate++;
281 }
282 break;
283 case 12:
284 if (windows->entryPanel == NULL) {
285 screen->lab->openMenu(screen->lab);
286 screen->setSubstate(screen, 40);
287 screen->step = 10;
288 }
289 break;
290 case 20:
291 windows->entryList->close(windows->entryList);
292 screen->substate++;
293 break;
294 case 21:
295 if (windows->entryList == NULL) {
296 if (windows->skillsPanel == NULL) {
298 }
299 screen->substate++;
300 }
301 break;
302 case 22:
303 if (windows->skillsPanel == NULL) {
304 screen->setSubstate(screen, 40);
305 screen->step = 20;
306 }
307 break;
308 case 30:
309 if (STGDGLAB_data.funcs.updateFade(&screen->panels[4])) {
310 if (windows->message == NULL) {
311 windows->message = createTextWindow(screen->layer, 1, 0xA4, 0xB8);
312 }
313 windows->message->setDepth(windows->message, screen->depth - 1);
314 windows->message->setString(windows->message, FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), screen->choice + 0x24);
315 screen->substate++;
316 }
317 break;
318 case 31:
319 closeMessage(screen, windows, 4);
320 break;
321 case 32:
322 if (STGDGLAB_data.funcs.updateFade(&screen->panels[4])) {
323 windows->cursor->setVisible(windows->cursor, 1);
324 screen->setSubstate(screen, 2);
325 }
326 break;
327 case 50:
328 if (STGDGLAB_data.funcs.updateFade(&screen->panels[5])) {
329 if (windows->message == NULL) {
330 windows->message = createTextWindow(screen->layer, 1, 0xA4, 0xB8);
331 }
332 windows->message->setDepth(windows->message, 0);
333 windows->message->setString(windows->message, FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x25);
334 screen->substate++;
335 }
336 break;
337 case 51:
338 closeMessage(screen, windows, 5);
339 break;
340 case 52:
341 if (STGDGLAB_data.funcs.updateFade(&screen->panels[5])) {
342 screen->setSubstate(screen, 41);
343 screen->step = 20;
344 windows->entryList->substate = 5;
345 }
346 break;
347 }
348}
349
350/* Draws the second screen's frames */
351void STGDGLAB_drawSlotScreen(LabSlotScreen *screen, void *children) {
352 SpriteDrawer sprite;
353
354 initSpriteDrawer(&sprite);
355 sprite.setLayerId(screen->layer, screen->depth);
356 if (screen->panels[5].level != 0) {
357 sprite.setLayerId(screen->layer, 1);
358 if (screen->panels[5].level != ONE) {
359 sprite.setScale(screen->panels[5].level, ONE, ONE);
360 sprite.setPivot(0x140, 0xBE);
361 }
362 sprite.setTexture(0x280, 0x100);
363 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x25, 0x92, 0xB0);
364 }
365 STRETCH_SPRITE(sprite, screen->panels[0].level, 0, 0x7F);
366 sprite.setTexture(0x140, 0);
367 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0xF, 0, 0x4B);
368 sprite.setTexture(0x280, 0x100);
369 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x1F, 0, 0x4B);
370 STRETCH_SPRITE(sprite, screen->panels[1].level, 0x140, 0x2A);
371 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x22, 0x92, 0xF);
372 if (screen->panels[2].level != ONE) {
373 sprite.setScale(screen->panels[3].level, ONE, ONE);
374 sprite.setPivot(0x140, 0x5C);
375 } else {
376 sprite.setScale(ONE, ONE, ONE);
377 }
378 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x20, 0x92, 0x51);
379 STRETCH_SPRITE(sprite, screen->panels[3].level, 0x140, 0x87);
380 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x23, 0x92, 0x6C);
381 if (screen->panels[4].level != 0) {
382 STRETCH_SPRITE(sprite, screen->panels[4].level, 0x140, 0xBE);
383 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x25, 0x92, 0xB0);
384 }
385}
386
387/* The second screen's task: creates its windows, then runs and draws it */
388void STGDGLAB_updateSlotScreen(LabSlotScreen *screen, void *children) {
389 switch (screen->state) {
390 case TASK_INIT:
391 default:
392 screen->nextState(screen);
393 screen->panels[0].duration = 8;
394 screen->panels[1].duration = 10;
395 screen->panels[2].duration = 10;
396 screen->panels[3].duration = 10;
397 screen->panels[4].duration = 10;
398 screen->panels[5].duration = 8;
399 STGDGLAB_createSlotScreenWindows(screen, children);
400 break;
401 case TASK_RUN:
402 STGDGLAB_runSlotScreen(screen, children);
403 STGDGLAB_drawSlotScreen(screen, children);
404 break;
405 case TASK_DONE:
406 case TASK_KILL:
407 break;
408 }
409}
410
411/* Creates the main menu's second screen (task), the party member's three slots */
414
415 screen->layer = SCREEN_LAYER;
416 screen->depth = 6;
417 screen->lab = lab;
418 return (Task *)screen;
419}
#define NULL
Definition common.h:17
signed int s32
Definition common.h:11
signed short s16
Definition common.h:9
STGDGLAB.PRO: the Digimon Lab (MODE_DIGI_LAB; "デジモンラボ" in STAGSLCT's list of scenes),...
#define FILE_LAB_SPRITES
The lab's sprite sheet; the next file is its texture archive.
Definition digimon_lab.h:25
GameState GAME
The save data, the game mode and the methods.
Definition state.c:64
#define TASK_RUN
Definition task.h:35
#define TASK_KILL
Definition task.h:37
#define TASK_INIT
Tasks: every game object is a task, a heap block that starts with this header and is updated once per...
Definition task.h:34
#define TASK_DONE
Definition task.h:36
Cursor * createCursor(s16 layerId, s32 depth, s16 x, s16 y)
A menu cursor on a layer at (x, y)
Definition cursor.c:92
LabEntryList * STGDGLAB_createEntryList(s32 partner, s32 allEntries, s32 closable)
Creates the list of a partner's entries (task): only its slots unless ALLENTRIES; CLOSABLE lets trian...
Definition entry_list.c:339
LabEntryPanel * STGDGLAB_createEntryPanel(s32 partner, s32 slot)
Creates the second screen's panel (task) where one of the partner's entries is picked for one of its ...
#define TEXT_DIGI_LAB
DGLABO: STGDGLAB's.
Definition file.h:208
#define TEXT_FILE(file)
Definition file.h:190
#define TEXT_DIGIMON_NAMES
DIGNAM.
Definition file.h:211
#define FILE_MENU_SPRITES
Files the engine loads by number.
Definition file.h:188
FileCache FILE_CACHE
The file cache.
Definition file_cache.c:7
DigimonData *(* GET_DIGIMON)(s32 id)
getDigimon for the overlays, in the small data (.sdata) between game/items.c's and file/file_table....
Definition get_digimon.c:10
#define STRETCH_SPRITE(sprite, level, x, y)
Definition gfx.h:273
#define SCREEN_LAYER
The layer over the whole screen that most modes create first and draw their menus on (FIELDSTG and ST...
Definition gfx.h:45
LabData STGDGLAB_data
Definition lab.c:611
#define PAD_CROSS
Definition pad.h:31
#define PAD_DOWN
Definition pad.h:24
#define PAD_TRIANGLE
Definition pad.h:32
#define PAD_PRESSED(button)
One button of pad 1: newly pressed, auto-repeated while held, or held.
Definition pad.h:140
#define PAD_UP
Definition pad.h:22
#define PAD_REPEATED(button)
Definition pad.h:141
LabSkillPanel * STGDGLAB_createSkillPanel(s32 member, s32 slot)
Creates the second screen's skill panel (task) for a slot of a partner (the MEMBER parameter is a par...
static void openSlotOption(LabSlotScreen *screen)
Once the screen's panels have faded out, goes on to the entry list for the picked option,...
void STGDGLAB_showSlotScreen(LabSlotScreen *screen, LabSlotScreenWindows *windows, s32 show)
Shows the party member's slots and stats, or hides the screen's windows.
Definition slot_screen.c:34
void STGDGLAB_updateSlotScreen(LabSlotScreen *screen, void *children)
The second screen's task: creates its windows, then runs and draws it.
static void pickSlotOption(LabSlotScreen *screen, LabSlotScreenWindows *windows)
Up and down pick "Change digivolve type" or "Load technique"; cross opens the entry list (or says it ...
static void closeMessage(LabSlotScreen *screen, LabSlotScreenWindows *windows, s32 panel)
Cross closes the message: fades its panel out and hides it.
void STGDGLAB_createSlotScreenWindows(LabSlotScreen *screen, LabSlotScreenWindows *windows)
Creates the second screen's windows and cursor.
Definition slot_screen.c:7
void STGDGLAB_drawSlotScreen(LabSlotScreen *screen, void *children)
Draws the second screen's frames.
Task * STGDGLAB_createSlotScreen(Lab *lab)
Creates the main menu's second screen (task), the party member's three slots.
static void loadSlotScreen(LabSlotScreen *screen)
Reads the party member's slots and entries and fades the screen's panels in.
void STGDGLAB_runSlotScreen(LabSlotScreen *screen, LabSlotScreenWindows *windows)
The second screen's states: picks between the entries and the skills, opens the list of the member's ...
SoundState SOUND
rsin and rcos (libgte) read rsin_tbl[a - 0x800] and the like: their addresses before the table fall i...
Definition sound.c:180
#define SOUND_MENU_CONFIRM
SYSTEM07.
Definition sound.h:44
#define SOUND_SELECT
Sounds the overlays share, with SOUNDTST's names.
Definition sound.h:38
#define SOUND_MENU_CANCEL
SYSTEM01.
Definition sound.h:39
#define SOUND_CURSOR
SYSTEM02: a cursor moves.
Definition sound.h:40
void initSpriteDrawer(SpriteDrawer *obj)
Clears a sprite drawer to neutral (no scale, gray tint, follows the scroll), gives it its methods and...
void(* setPos)()
(cursor, x, y)
Definition text.h:34
void(* setVisible)()
(cursor, visible)
Definition text.h:33
u8 nameId
string in file 0x4F
Definition game_state.h:105
void *(* load)(u32 file)
Definition file.h:92
void *(* getEntry)(u32 fileAndIndex)
Definition file.h:96
s32(* getPartnerEntry)()
-1 if it hasn't the Digimon
Definition game_state.h:36
void(* computeStats)(s32 partner, union PartnerTotals *out)
Definition game_state.h:31
s32(* getPartyMember)(u32 index)
Definition game_state.h:24
s32(* getPartnerSlots)()
(partner, s16 *out): the count
Definition game_state.h:32
s32(* listPartnerEntries)()
(partner, s16 *out): the count
Definition game_state.h:34
Partner partners[PARTNER_COUNT]
Definition game_state.h:517
GameFuncs funcs
Definition game_state.h:582
LabFuncs funcs
void(* close)(struct LabEntryList *panel)
s32(* updateFade)(PanelAnim *fade)
void(* startFade)(PanelAnim *fade, s32 fadeIn)
TextWindow * list[13]
two columns: 6, then 7
TextWindow * options[2]
struct LabSkillPanel * skillsPanel
struct LabEntryList * entryList
TextWindow * slotNames[3]
the slots' Digimon
TextWindow * message
struct LabEntryPanel * entryPanel
The main menu's second screen (STGDGLAB_createSlotScreen)
struct Lab * lab
void(* setState)(struct LabSlotScreen *task, s32 state)
s16 slots[3]
getPartnerSlots
void(* nextState)(struct LabSlotScreen *task)
PanelAnim panels[6]
s16 entries[45]
listPartnerEntries
void(* setStep)(struct LabSlotScreen *task, s32 step)
s32 picked
the list's cursor when an entry was picked
void(* setSubstate)(struct LabSlotScreen *task, s32 substate)
The mode's main task (STGDGLAB_createLab)
s32(* openMenu)(struct Lab *lab)
s32(* closeMenu)(struct Lab *lab)
s32 member
the party member the screens show
s32(* menuOpen)(struct Lab *lab)
s32 level
Definition menu.h:21
s32 duration
Definition menu.h:19
One of a partner's Digimon (getPartnerEntry, setPartnerEntry)
Definition game_state.h:247
s16 skills[6]
SKILL_ID and the flags below, 0 for none.
Definition game_state.h:251
One of the eight partner Digimon.
Definition game_state.h:345
s32 battleDigivolve
an entry id, compared with the slots': the Digimon the battle starts it as, 0 for its own
Definition game_state.h:348
short(* playSound)(s32 id)
returns the voice of a key-on
Definition sound.h:187
Draws sprites from a sprite sheet (such as file 0x277, the menu graphics): a sheet has a table of fra...
Definition gfx.h:223
void(* setPivot)()
(x, y)
Definition gfx.h:250
void(* setScale)()
(x, y, z), ONE = 1.0
Definition gfx.h:248
void(* setLayerId)()
(id, depth)
Definition gfx.h:244
void(* draw)()
(sheet, frame, x, y)
Definition gfx.h:246
void(* setTexture)()
(x, y)
Definition gfx.h:242
Any task, seen through its header.
Definition task.h:62
A text window (createTextWindow): up to six text buffers (0 is shown, 1-5 are "work" buffers that con...
Definition text.h:131
void(* setPalette)(struct TextWindow *obj, u8 arg)
Definition text.h:174
void(* setDepth)()
Definition text.h:183
void(* setRightAlign)()
no prototype: callers would truncate u8 args
Definition text.h:178
void(* setNumber)()
Definition text.h:166
void(* setString)()
Definition text.h:165
void(* setVisible)(struct TextWindow *obj, u8 arg)
Definition text.h:177
void * createTask(void(*update)(), s32 size, s32 childrenSize)
createTaskWithId for a task nothing needs to find
Definition task.c:105
#define PALETTE_BLUE
a light blue: what is highlighted or current
Definition text.h:113
#define PALETTE_PURPLE
Definition text.h:118
#define PALETTE_WHITE
The text windows' palettes (TextWindow.palette, setPalette): rows of the font's CLUTs,...
Definition text.h:112
TextWindow * createTextWindow(s16 layerId, s16 style, s16 x, s16 y)
A text window on a layer, in a font style, at (x, y)
computeStats' result: the stats with the equipment added, by STAT_* or by name.
Definition game_state.h:409
s16 lowered[3]
taken from battle[0], [1] and [4]
Definition game_state.h:421
s16 stats[24]
Definition game_state.h:410
struct PartnerTotals::@10 fields