Digimon World 3 decomp
The European version, SLES_039.36
Loading...
Searching...
No Matches
party_screen.c
Go to the documentation of this file.
1/* The main menu's first screen, where a partner joins the party */
2
3#include "menus/digimon_lab.h"
4
5/* Shows the first screen's page: the name and five stats (STGDGLAB_pageStats)
6 of the picked partner, or empty strings and a grey entries hint without one;
7 lower by pageRow */
9 PartnerTotals totals;
10 LabWindowPos *pos;
11 s32 member;
12 s32 i;
13
14 for (i = 0; i < 5; i++) {
15 pos = &STGDGLAB_data.layout[i];
16 if (windows->labels[i] == NULL) {
17 windows->labels[i] = createTextWindow(screen->layer, 3, pos->x, pos->y);
18 windows->labels[i]->setDepth(windows->labels[i], screen->depth - 1);
19 }
20 windows->labels[i]->setString(windows->labels[i], FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), pos->string);
21 windows->labels[i]->setPos(windows->labels[i], pos->x, pos->y + screen->pageRow * 0x7A);
22 }
23 member = screen->partners[screen->pick];
24 if (member >= 0) {
25 GAME.funcs.computeStats(member, &totals);
26 }
27 for (i = 0; i < 5; i++) {
28 pos = &STGDGLAB_data.layout[i + 5];
29 if (windows->values[i] == NULL) {
30 windows->values[i] = createTextWindow(screen->layer, 3, pos->x, pos->y);
31 windows->values[i]->setDepth(windows->values[i], screen->depth - 1);
32 }
33 windows->values[i]->setPos(windows->values[i], pos->x, pos->y + screen->pageRow * 0x7A);
34 if (member < 0) {
35 if (i == 0) {
36 windows->values[0]->setString(windows->values[0], FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x1C);
37 } else {
38 windows->values[i]->setString(windows->values[i], FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x12);
39 }
40 } else {
41 windows->values[i]->setNumber(windows->values[i], 0, totals.stats[STGDGLAB_pageStats[i]]);
42 }
43 windows->values[i]->setRightAlign(windows->values[i], 1);
44 }
45 pos = &STGDGLAB_data.layout[10];
46 if (windows->name == NULL) {
47 windows->name = createTextWindow(screen->layer, 1, pos->x, pos->y);
48 windows->name->setDepth(windows->name, screen->depth - 1);
49 }
50 if (member < 0) {
51 windows->name->setString(windows->name, FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x1B);
53 } else {
54 windows->name->setString(windows->name, GAME.funcs.getPartnerStats(member)->name, -1);
56 }
57 windows->name->setPos(windows->name, pos->x, pos->y + screen->pageRow * 0x7A);
58 screen->frame = 0;
59}
60
61/* Hides the first screen's text windows: all its children but the last, the
62 entry list */
64 s32 i;
65 TextWindow **windows = screen->children;
66
67 for (i = 0; i < screen->childCount - 1; i++, windows++) {
68 TextWindow *w = *windows;
69 if (w != NULL) {
70 w->setVisible(w, 0);
71 }
72 }
73}
74
75/* Draws the first screen's frames and the party's animations */
76void STGDGLAB_drawPartyScreen(LabPartyScreen *screen, void *children) {
77 SpriteDrawer sprite;
78 PartnerAnim *anim;
79 s32 member;
80 s32 id;
81 s32 i;
82
83 member = screen->partners[screen->pick];
84 if (GFX.funcs.getTime() - screen->animTime >= 12) {
85 screen->animTime = GFX.funcs.getTime();
86 if (member >= 0) {
87 anim = &STGDGLAB_data.anim[member];
88 screen->frame++;
89 if (anim->frames[screen->frame] == -1 || screen->frame >= 7) {
90 screen->frame = 0;
91 }
92 }
93 for (i = 0; i < screen->lab->partySize; i++) {
95 if (id >= 0) {
96 screen->frames[i]++;
97 anim = &STGDGLAB_data.anim[id];
98 if (anim->frames[screen->frames[i]] == -1) {
99 screen->frames[i] = 0;
100 }
101 }
102 }
103 }
104 if (GFX.funcs.getTime() - screen->blinkTime >= 10) {
105 screen->blinkTime = GFX.funcs.getTime();
106 screen->clut++;
107 if (screen->clut >= 4) {
108 screen->clut = 0;
109 }
110 screen->clut2++;
111 if (screen->clut2 >= 6) {
112 screen->clut2 = 0;
113 }
114 }
115 initSpriteDrawer(&sprite);
116 sprite.setTexture(0x280, 0x100);
117 sprite.setLayerId(screen->layer, screen->depth);
118 if (screen->panels[0].level != 0) {
119 STRETCH_SPRITE(sprite, screen->panels[0].level, 0, screen->pageRow * 0x7A + 0x2F);
120 if (member >= 0) {
121 anim = &STGDGLAB_data.anim[member];
122 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), anim->frames[screen->frame], 0x10,
123 screen->pageRow * 0x7A + 0x16);
124 }
125 sprite.setTexture(0x140, 0);
126 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0xE, 0, screen->pageRow * 0x7A + 0x13);
127 sprite.setTexture(0x280, 0x100);
128 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x1E, 0, screen->pageRow * 0x7A + 0x13);
129 }
130 if (screen->panels[1].level != 0) {
131 STRETCH_SPRITE(sprite, screen->panels[1].level, 0, 0xD1);
132 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x26, 0, 0xC4);
133 }
134 if (screen->panels[2].level != 0) {
135 STRETCH_SPRITE(sprite, screen->panels[2].level, 0x140, 0x15);
136 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x20, 0x92, 0xF);
137 }
138 if (screen->panels[4].level != 0) {
139 if (screen->panels[4].level != ONE) {
140 sprite.setScale(screen->panels[4].level, ONE, ONE);
141 } else {
142 sprite.setScale(ONE, ONE, ONE);
143 if (screen->count >= 2) {
144 sprite.setLayerId(screen->layer, screen->depth - 1);
145 sprite.setClutRow(screen->clut);
146 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x31, 0xB8, 0xB6);
147 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x32, 0x100, 0xB6);
148 sprite.setLayerId(screen->layer, screen->depth);
149 sprite.setClutRow(0);
150 }
151 }
152 for (i = 0; i < screen->lab->partySize; i++) {
153 id = GAME.funcs.getPartyPartner(i);
154 if (id >= 0) {
155 if (screen->panels[4].level != ONE) {
156 sprite.setPivot(i * 0x30 + 0xB4, 0x4E);
157 }
158 anim = &STGDGLAB_data.anim[id];
159 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), anim->frames[screen->frames[i]], i * 0x30 + 0xA5, 0x47);
160 }
161 }
162 if (member >= 0) {
163 if (screen->panels[4].level != ONE) {
164 sprite.setPivot(0xE4, 0xB5);
165 }
166 anim = &STGDGLAB_data.anim[member];
167 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), anim->frames[screen->frame], 0xD5, 0xAE);
168 }
169 }
170 if (screen->panels[3].level != 0) {
171 STRETCH_SPRITE(sprite, screen->panels[3].level, 0x140, 0x85);
172 sprite.setTexture(0x280, 0x100);
173 sprite.setLayerId(screen->layer, screen->depth - 1);
174 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x33, 0xAD, 0x66);
175 sprite.setClutRow(screen->clut);
176 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), screen->lab->member + 0x38, 0xA5, 0x41);
177 sprite.setClutRow(0);
178 sprite.setTexture(0x140, 0);
179 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0x10, 0x90, 0x25);
180 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0xB, 0xD5, 0x92);
181 sprite.setLayerId(screen->layer, screen->depth);
182 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0x11, 0x90, 0x25);
183 sprite.draw(FILE_CACHE.getEntry(FILE_MENU_SPRITES << 16), 0xC, 0xD5, 0x92);
184 sprite.setTexture(0x280, 0x100);
185 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x2D, 0x90, 0x2A);
186 if (screen->panels[3].level != ONE) {
187 sprite.setPivot(0x48, 0x69);
188 }
189 sprite.setClutRow(screen->clut2);
190 sprite.draw(FILE_CACHE.getEntry(FILE_LAB_SPRITES << 16), 0x3B, 0x33, 0x4A);
191 }
192}
193
194/* Once the first panels have faded in, fades in the page's and the party's
195 panels and shows the title and the entries hint (grey without partners) */
196static inline void showPartyTitle(LabPartyScreen *screen, LabPartyScreenWindows *windows) {
198 if (STGDGLAB_data.funcs.updateFade(&screen->panels[2])) {
199 STGDGLAB_data.funcs.startFade(&screen->panels[0], 1);
200 STGDGLAB_data.funcs.startFade(&screen->panels[3], 1);
201 if (windows->title == NULL) {
202 windows->title = createTextWindow(screen->layer, 1, 0xAE, 0x15);
203 }
204 windows->title->setString(windows->title, FILE_CACHE.load(TEXT_FILE(TEXT_DIGI_LAB)), 0x1D);
205 if (windows->entriesHint == NULL) {
206 windows->entriesHint = createTextWindow(screen->layer, 1, 0xF, 0xCC);
207 }
209 if (screen->count == 0) {
210 windows->entriesHint->setPalette(windows->entriesHint, PALETTE_GREY);
211 } else {
212 windows->entriesHint->setPalette(windows->entriesHint, PALETTE_WHITE);
213 }
214 screen->substate++;
215 }
216}
217
218/* Left and right go through the partners outside the party; circle shows the
219 picked one's entries, cross swaps it with the party member (refused when
220 both are empty), triangle goes back */
221static inline void pickPartner(LabPartyScreen *screen, LabPartyScreenWindows *windows) {
222 s32 old;
223
224 old = screen->pick;
225 if (screen->count >= 2) {
227 screen->pick--;
228 if (screen->pick < 0) {
229 screen->pick = screen->count - 1;
230 }
232 screen->pick++;
233 if (screen->pick > screen->count - 1) {
234 screen->pick = 0;
235 }
236 }
237 }
238 if (old != screen->pick) {
240 STGDGLAB_showPartyPage(screen, windows);
241 } else if (PAD_PRESSED(PAD_CIRCLE)) {
242 if (screen->partners[screen->pick] >= 0) {
243 screen->step = 2;
244 screen->substate++;
246 }
247 } else if (PAD_PRESSED(PAD_CROSS)) {
248 if (GAME.funcs.getPartyMember(screen->lab->member) >= 0 || screen->partners[screen->pick] >= 0) {
249 screen->step = 1;
250 screen->substate++;
252 } else {
254 }
255 } else if (PAD_PRESSED(PAD_TRIANGLE)) {
257 screen->step = 0;
258 screen->substate++;
259 }
260}
261
262/* The first screen's states: fades its panels in, picks a partner with left
263 and right, then swaps it into the party (cross) or shows its entries
264 (circle) */
266 switch (screen->substate) {
267 case 0:
268 default:
269 STGDGLAB_data.funcs.startFade(&screen->panels[1], 1);
270 STGDGLAB_data.funcs.startFade(&screen->panels[2], 1);
271 screen->substate++;
272 break;
273 case 1:
274 showPartyTitle(screen, windows);
275 break;
276 case 2:
278 if (STGDGLAB_data.funcs.updateFade(&screen->panels[3])) {
279 STGDGLAB_data.funcs.startFade(&screen->panels[4], 1);
280 STGDGLAB_showPartyPage(screen, windows);
281 screen->substate++;
282 }
283 break;
284 case 3:
285 if (STGDGLAB_data.funcs.updateFade(&screen->panels[4])) {
286 screen->substate++;
287 }
288 break;
289 case 4:
290 pickPartner(screen, windows);
291 break;
292 case 5:
293 STGDGLAB_data.funcs.startFade(&screen->panels[4], 0);
294 screen->substate++;
295 break;
296 case 6:
297 if (STGDGLAB_data.funcs.updateFade(&screen->panels[4])) {
298 STGDGLAB_hideWindows(screen);
299 STGDGLAB_data.funcs.startFade(&screen->panels[0], 0);
300 STGDGLAB_data.funcs.startFade(&screen->panels[1], 0);
301 STGDGLAB_data.funcs.startFade(&screen->panels[2], 0);
302 STGDGLAB_data.funcs.startFade(&screen->panels[3], 0);
303 if (screen->step != 0) {
304 screen->lab->closeMenu(screen->lab);
305 }
306 screen->substate++;
307 }
308 break;
309 case 7:
313 if (STGDGLAB_data.funcs.updateFade(&screen->panels[3]) && screen->lab->menuOpen(screen->lab)) {
314 screen->substate++;
315 }
316 break;
317 case 8:
318 if (screen->step == 1) {
319 GAME.party[screen->lab->member] = screen->partners[screen->pick];
320 screen->lab->packParty(screen->lab);
321 }
322 if (screen->step == 2) {
323 screen->pageRow = 0;
324 STGDGLAB_data.funcs.startFade(&screen->panels[0], 1);
325 if (windows->panel == NULL) {
326 windows->panel = STGDGLAB_createEntryList(screen->partners[screen->pick], 1, 1);
327 }
328 screen->substate++;
329 } else {
330 screen->setState(screen, TASK_KILL);
331 }
332 break;
333 case 9:
334 if (STGDGLAB_data.funcs.updateFade(&screen->panels[0])) {
335 STGDGLAB_showPartyPage(screen, windows);
336 screen->substate++;
337 }
338 break;
339 case 10:
340 if (windows->panel->substate >= 2 && PAD_PRESSED(PAD_TRIANGLE)) {
341 STGDGLAB_data.funcs.startFade(&screen->panels[0], 0);
342 STGDGLAB_hideWindows(screen);
343 screen->substate++;
344 }
345 break;
346 case 11:
347 if (STGDGLAB_data.funcs.updateFade(&screen->panels[0]) && windows->panel == NULL) {
348 if (screen->lab->menuOpen(screen->lab)) {
349 screen->lab->openMenu(screen->lab);
350 screen->substate++;
351 }
352 screen->pageRow = 1;
353 screen->setSubstate(screen, 0);
354 }
355 break;
356 }
357}
358
359/* The first screen's task: lists the unlocked partners outside the party, plus
360 an empty pick to take the member out when the party has two or more, then
361 runs and draws the screen */
362void STGDGLAB_updatePartyScreen(LabPartyScreen *screen, void *children) {
363 s32 party[3];
364 s32 i;
365 s32 j;
366 s32 id;
367 s32 free;
368
369 switch (screen->state) {
370 case TASK_INIT:
371 default:
372 screen->nextState(screen);
373 screen->panels[0].duration = 10;
374 screen->panels[1].duration = 8;
375 screen->panels[2].duration = 10;
376 screen->panels[3].duration = 10;
377 screen->panels[4].duration = 8;
378 screen->pageRow = 1;
379 for (i = 0; i < 3; i++) {
380 party[i] = GAME.funcs.getPartyPartner(i);
381 }
382 for (i = 0; i < PARTNER_COUNT; i++) {
383 id = GAME.partners[i].unlocked - 3;
384 screen->partners[i] = -1;
385 if (id >= 0) {
386 j = 0;
387 free = 1;
388 for (; j < 3; j++) {
389 if (party[j] >= 0 && id == party[j]) {
390 free = 0;
391 }
392 }
393 } else {
394 free = 0;
395 }
396 if (free) {
397 screen->partners[screen->count++] = id;
398 }
399 }
400 id = party[screen->lab->member];
401 if (screen->lab->partyCount >= 2 && id >= 0) {
402 screen->count++;
403 }
404 break;
405 case TASK_RUN:
406 STGDGLAB_runPartyScreen(screen, children);
407 STGDGLAB_drawPartyScreen(screen, children);
408 break;
409 case TASK_DONE:
410 case TASK_KILL:
411 break;
412 }
413}
414
415/* Creates the main menu's first screen (task), where a partner joins the party
416 in the member's place */
419
420 screen->layer = SCREEN_LAYER;
421 screen->depth = 2;
422 screen->lab = lab;
423 return (Task *)screen;
424}
425
426/* The stats the first screen's page shows, in PartnerTotals.stats */
428 0, 2, 3, 4,
429 5,
430};
#define NULL
Definition common.h:17
signed int s32
Definition common.h:11
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
GfxState GFX
GFX: the graphics state and its methods.
Definition display.c:209
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
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
#define TEXT_DIGI_LAB
DGLABO: STGDGLAB's.
Definition file.h:208
#define TEXT_FILE(file)
Definition file.h:190
#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
@ PARTNER_COUNT
Definition game_state.h:472
#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_CIRCLE
Definition pad.h:30
#define PAD_RIGHT
Definition pad.h:23
#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_LEFT
Definition pad.h:25
#define PAD_REPEATED(button)
Definition pad.h:141
void STGDGLAB_hideWindows(LabPartyScreen *screen)
Hides the first screen's text windows: all its children but the last, the entry list.
static void pickPartner(LabPartyScreen *screen, LabPartyScreenWindows *windows)
Left and right go through the partners outside the party; circle shows the picked one's entries,...
void STGDGLAB_runPartyScreen(LabPartyScreen *screen, LabPartyScreenWindows *windows)
The first screen's states: fades its panels in, picks a partner with left and right,...
void STGDGLAB_drawPartyScreen(LabPartyScreen *screen, void *children)
Draws the first screen's frames and the party's animations.
Task * STGDGLAB_createPartyScreen(Lab *lab)
Creates the main menu's first screen (task), where a partner joins the party in the member's place.
static void showPartyTitle(LabPartyScreen *screen, LabPartyScreenWindows *windows)
Once the first panels have faded in, fades in the page's and the party's panels and shows the title a...
void STGDGLAB_updatePartyScreen(LabPartyScreen *screen, void *children)
The first screen's task: lists the unlocked partners outside the party, plus an empty pick to take th...
void STGDGLAB_showPartyPage(LabPartyScreen *screen, LabPartyScreenWindows *windows)
Shows the first screen's page: the name and five stats (STGDGLAB_pageStats) of the picked partner,...
Definition party_screen.c:8
s32 STGDGLAB_pageStats[]
The stats the first screen's page shows, in PartnerTotals.stats.
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_MENU_CANCEL
SYSTEM01.
Definition sound.h:39
#define SOUND_MENU_MOVE
SYSTEM06.
Definition sound.h:43
void initSpriteDrawer(SpriteDrawer *obj)
Clears a sprite drawer to neutral (no scale, gray tint, follows the scroll), gives it its methods and...
void *(* load)(u32 file)
Definition file.h:92
void *(* getEntry)(u32 fileAndIndex)
Definition file.h:96
struct PartnerStats *(* getPartnerStats)(s32 partner)
Definition game_state.h:38
void(* computeStats)(s32 partner, union PartnerTotals *out)
Definition game_state.h:31
s32(* getPartyPartner)()
Definition game_state.h:28
s32(* getPartyMember)(u32 index)
Definition game_state.h:24
Partner partners[PARTNER_COUNT]
Definition game_state.h:517
s32 party[3]
partner indices
Definition game_state.h:511
GameFuncs funcs
Definition game_state.h:582
s32(* getTime)(void)
Definition gfx.h:31
GfxFuncs funcs
Definition gfx.h:77
LabFuncs funcs
PartnerAnim * anim
STGDGLAB_partnerAnims, by partner.
LabWindowPos * layout
STGDGLAB_layout.
s32(* updateFade)(PanelAnim *fade)
void(* startFade)(PanelAnim *fade, s32 fadeIn)
struct LabEntryList * panel
Definition digimon_lab.h:99
TextWindow * labels[5]
Definition digimon_lab.h:95
TextWindow * entriesHint
as LabMenuWindows'
Definition digimon_lab.h:98
TextWindow * values[5]
Definition digimon_lab.h:96
The main menu's first screen (STGDGLAB_createPartyScreen)
Definition digimon_lab.h:73
struct Lab * lab
Definition digimon_lab.h:75
void(* setSubstate)(struct LabPartyScreen *task, s32 substate)
Definition digimon_lab.h:74
s32 pick
into partners
Definition digimon_lab.h:80
s32 frames[3]
the party's animation frames
Definition digimon_lab.h:85
PanelAnim panels[5]
Definition digimon_lab.h:81
s32 partners[PARTNER_COUNT]
the unlocked partners outside the party, -1 for none
Definition digimon_lab.h:89
s32 pageRow
1: the page is 0x7A lower, 0 (at the top) while the entry list is open
Definition digimon_lab.h:78
void(* setState)(struct LabPartyScreen *task, s32 state)
Definition digimon_lab.h:74
s32 frame
the picked partner's
Definition digimon_lab.h:86
void(* nextState)(struct LabPartyScreen *task)
Definition digimon_lab.h:74
Where a window of the menu or the first screen goes, and its string.
Definition digimon_lab.h:66
s32 string
of TEXT_DIGI_LAB, -1: none
Definition digimon_lab.h:67
The mode's main task (STGDGLAB_createLab)
s32 partySize
the party's slots: PARTY_SIZE
s32 partyCount
void(* packParty)(struct Lab *lab)
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
A partner Digimon's animation in a menu: up to seven sprite ids, -1 ending it early (the sprites are ...
Definition game_state.h:340
s32 frames[7]
Definition game_state.h:341
char name[0x18]
Definition game_state.h:304
s32 unlocked
partner id + 3, 0 while locked
Definition game_state.h:347
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(* setClutRow)()
(row)
Definition gfx.h:247
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(* setPos)(struct TextWindow *obj, s16 x, s16 y)
Definition text.h:173
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_WHITE
The text windows' palettes (TextWindow.palette, setPalette): rows of the font's CLUTs,...
Definition text.h:112
#define PALETTE_GREY
what is unavailable
Definition text.h:119
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 stats[24]
Definition game_state.h:410