Digimon World 3 decomp
The European version, SLES_039.36
Loading...
Searching...
No Matches
glint.c
Go to the documentation of this file.
1/* The title screen's glint */
2
3#include "menus/title.h"
4
5/* Draws the glint (sprite 4) for the European version's language 0, and sprite 2 once lit */
7 SpriteDrawer sprite;
8
9 initSpriteDrawer(&sprite);
10 if (task->lit) {
11 sprite.setLayerId(task->layerId, 0);
12 sprite.setTexture(0x280, STDWTITL_TEXTURE_Y);
13 sprite.setAltClut(0, 0x1F0);
14 sprite.draw(FILE_CACHE.getEntry(STDWTITL_spriteBank), 2, 49, 121);
15 initSpriteDrawer(&sprite);
16 }
17 sprite.setLayerId(task->layerId, 0);
18 sprite.setTexture(0x280, STDWTITL_TEXTURE_Y);
19 sprite.setClutRow(task->frame);
20 sprite.draw(FILE_CACHE.getEntry(STDWTITL_spriteBank), 4, 37, 114);
21}
22
23/* The glint's task for the European version's language 0: waits until shown, plays the
24 glint's 12 frames once, then keeps sprite 2 lit; with skip it starts lit */
26 switch (task->state) {
27 case TASK_INIT:
28 default:
29 if (task->skip == 0) {
30 task->lit = 0;
31 task->nextState(task);
32 } else {
33 task->setState(task, TASK_DONE);
34 }
35 break;
36 case TASK_RUN:
37 switch (task->substate) {
38 case 0:
39 break;
40 case 1:
41 task->index = 0;
42 task->nextSubstate(task);
43 /* fallthrough */
44 case 2:
45 task->frame = STDWTITL_glintAltFrames[task->index];
46 task->index++;
47 if (task->index >= 12) {
48 task->setState(task, TASK_DONE);
49 }
51 break;
52 }
53 break;
54 case TASK_DONE:
55 if (task->substate == 0) {
56 task->frame = 11;
57 task->lit = 1;
58 task->nextSubstate(task);
59 }
61 break;
62 case TASK_KILL:
63 break;
64 }
65}
66
67/* Starts the glint (the task's show), only while it waits */
69 if (task->state == TASK_RUN) {
70 task->setSubstate(task, 1);
71 }
72}
73
74/* Creates the title screen's glint (task) for the European version's language 0 */
77
80 task->depth = 2;
81 task->skip = skip;
82 return task;
83}
84
85/* Draws the glint (sprite 4) while it plays, and sprite 2 once lit */
87 SpriteDrawer sprite;
88
89 initSpriteDrawer(&sprite);
90 if (task->lit) {
91 sprite.setLayerId(task->layerId, 0);
92 sprite.setTexture(0x280, STDWTITL_TEXTURE_Y);
93 sprite.setAltClut(0, 0x1F0);
94 sprite.draw(FILE_CACHE.getEntry(STDWTITL_spriteBank), 2, 253, 100);
95 initSpriteDrawer(&sprite);
96 }
97 if (task->frame != -1) {
98 sprite.setLayerId(task->layerId, 0);
99 sprite.setTexture(0x280, STDWTITL_TEXTURE_Y);
100 sprite.setClutRow(task->frame);
101 sprite.draw(FILE_CACHE.getEntry(STDWTITL_spriteBank), 4, 243, 90);
102 }
103}
104
105/* The glint's task: waits until shown, plays the glint once (up to its last frame
106 and back), then keeps sprite 2 lit; with skip it starts lit */
108 switch (task->state) {
109 case TASK_INIT:
110 default:
111 if (task->skip == 0) {
112 task->lit = 0;
113 task->nextState(task);
114 } else {
115 task->setState(task, TASK_DONE);
116 }
117 break;
118 case TASK_RUN:
119 switch (task->substate) {
120 case 0:
121 break;
122 case 1:
123 task->index = 0;
124 task->frame = 0;
125 task->nextSubstate(task);
126 /* fallthrough */
127 case 2:
128 task->frame = STDWTITL_glintFrames[task->index];
129 if (task->frame == -1) {
130 task->setState(task, TASK_DONE);
131 }
132 STDWTITL_drawGlint(task);
133 task->index++;
134 break;
135 }
136 break;
137 case TASK_DONE:
138 if (task->substate == 0) {
139 task->frame = -1;
140 task->lit = 1;
141 task->nextSubstate(task);
142 }
143 STDWTITL_drawGlint(task);
144 break;
145 case TASK_KILL:
146 break;
147 }
148}
149
150/* Creates the title screen's glint (task); skip: lit from the start */
153
154 task->show = STDWTITL_showGlint;
156 task->depth = 2;
157 task->skip = skip;
158 return task;
159}
signed int s32
Definition common.h:11
s32 STDWTITL_spriteBank
Definition title.c:72
#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
FileCache FILE_CACHE
The file cache.
Definition file_cache.c:7
GlintTask * STDWTITL_startGlintTask(s32 skip)
Creates the title screen's glint (task); skip: lit from the start.
Definition glint.c:151
GlintTask * STDWTITL_startGlintAltTask(s32 skip)
Creates the title screen's glint (task) for the European version's language 0.
Definition glint.c:75
void STDWTITL_drawGlint(GlintTask *task)
Draws the glint (sprite 4) while it plays, and sprite 2 once lit.
Definition glint.c:86
void STDWTITL_showGlint(GlintTask *task)
Starts the glint (the task's show), only while it waits.
Definition glint.c:68
void STDWTITL_tickGlintAlt(GlintTask *task)
The glint's task for the European version's language 0: waits until shown, plays the glint's 12 frame...
Definition glint.c:25
void STDWTITL_tickGlint(GlintTask *task)
The glint's task: waits until shown, plays the glint once (up to its last frame and back),...
Definition glint.c:107
void STDWTITL_drawGlintAlt(GlintTask *task)
Draws the glint (sprite 4) for the European version's language 0, and sprite 2 once lit.
Definition glint.c:6
void initSpriteDrawer(SpriteDrawer *obj)
Clears a sprite drawer to neutral (no scale, gray tint, follows the scroll), gives it its methods and...
s16 STDWTITL_glintFrames[]
Definition stdwtitl.c:44
s16 STDWTITL_glintAltFrames[]
Definition stdwtitl.c:43
void *(* getEntry)(u32 fileAndIndex)
Definition file.h:96
A glint (sprite 4) played once, then sprite 2 lit.
Definition title.h:136
void(* nextSubstate)(struct GlintTask *task)
Definition title.h:137
void(* setSubstate)(struct GlintTask *task, s32 substate)
Definition title.h:137
s32 lit
Definition title.h:141
s32 frame
Definition title.h:140
s32 substate
Definition title.h:137
void(* show)(struct GlintTask *task)
Definition title.h:145
void(* nextState)(struct GlintTask *task)
Definition title.h:137
s32 index
Definition title.h:139
s32 skip
Definition title.h:138
void(* setState)(struct GlintTask *task, s32 state)
Definition title.h:137
s32 depth
Definition title.h:143
s32 layerId
Definition title.h:142
s32 state
Definition title.h:137
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(* setAltClut)()
(x, y)
Definition gfx.h:243
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
void * createTask(void(*update)(), s32 size, s32 childrenSize)
createTaskWithId for a task nothing needs to find
Definition task.c:105
STDWTITL.PRO: the title screen, the opening movies and a notice screen.
#define STDWTITL_TEXTURE_Y
The VRAM row of the title's sprites (SpriteDrawer.setTexture)
Definition title.h:49
#define STDWTITL_TITLE_LAYER
Definition title.h:30