Digimon World 3 decomp
The European version, SLES_039.36
Loading...
Searching...
No Matches
edge_fade.c
Go to the documentation of this file.
1/* The fade out from the screen's edges once an option is chosen */
2
3#include "menus/title.h"
4
5/* The edge fade's darkness after time frames: 0 to 255 along a quarter sine over 30 frames */
7 if (time >= 30) {
8 return 255;
9 }
10 return rsin(time * 1024 / 30) * 30 / 4096 * 255 / 30;
11}
12
13/* Darkens the screen by level: four subtractive triangles from its centre to its
14 edges, the edges twice as dark */
17 u_long *ot = layer->getOtEntry(layer, 0);
18 POLY_G3 *poly = GFX.funcs.getPrim();
19 DR_TPAGE *mode;
20 s32 edge;
21 s32 i;
22
23 edge = level * 2;
24 for (i = 0; i < 4; i++) {
25 setPolyG3(poly);
26 setSemiTrans(poly, 1);
27 poly->r0 = poly->g0 = poly->b0 = level;
28 if (edge >= 256) {
29 edge = 255;
30 }
31 poly->r1 = poly->g1 = poly->b1 = poly->r2 = poly->g2 = poly->b2 = edge;
32 /* From the centre of the screen to one of its edges */
33 poly->x0 = 160;
34 poly->y0 = 120;
35 poly->x1 = STDWTITL_edgeFadeLines[i].x1;
36 poly->y1 = STDWTITL_edgeFadeLines[i].y1;
37 poly->x2 = STDWTITL_edgeFadeLines[i].x2;
38 poly->y2 = STDWTITL_edgeFadeLines[i].y2;
39 addPrim(ot, poly);
40 poly++;
41 }
42 /* the texture page packet goes right after the triangles */
43 mode = (DR_TPAGE *)poly;
44 setDrawTPage(mode, 0, 1, getTPage(0, 2, 320, 0));
45 addPrim(ot, mode);
46 GFX.funcs.setPrim(mode + 1);
47}
48
49/* Starts the fade out from the screen's edges (the task's start) */
51 task->done = 0;
52 task->time = 0;
53 task->setSubstate(task, 1);
54}
55
56/* 1 once the edge fade has ended (the task's isDone) */
58 return task->done;
59}
60
61/* The edge fade's task: once started, darkens the screen from its edges over 30
62 frames and keeps it dark */
64 switch (task->state) {
65 case TASK_INIT:
66 default:
67 task->nextState(task);
68 task->level = 0;
69 task->time = 0;
70 task->done = 0;
71 break;
72 case TASK_RUN:
73 switch (task->substate) {
74 case 0:
75 break;
76 case 1:
77 task->level = STDWTITL_getEdgeFadeLevel(task->time++);
78 if (task->time >= 30) {
79 task->setSubstate(task, 0);
80 task->done = 1;
81 }
82 break;
83 }
85 break;
86 case TASK_DONE:
87 case TASK_KILL:
88 break;
89 }
90}
91
92/* Creates the fade out from the screen's edges (task), once an option is chosen */
signed int s32
Definition common.h:11
EdgeLine STDWTITL_edgeFadeLines[]
The screen's edges, from which it fades out.
Definition title.c:7
GfxState GFX
GFX: the graphics state and its methods.
Definition display.c:209
void STDWTITL_drawEdgeFade(s32 level)
Darkens the screen by level: four subtractive triangles from its centre to its edges,...
Definition edge_fade.c:15
s32 STDWTITL_isEdgeFadeDone(EdgeFadeTask *task)
1 once the edge fade has ended (the task's isDone)
Definition edge_fade.c:57
void STDWTITL_tickEdgeFade(EdgeFadeTask *task)
The edge fade's task: once started, darkens the screen from its edges over 30 frames and keeps it dar...
Definition edge_fade.c:63
s32 STDWTITL_getEdgeFadeLevel(s32 time)
The edge fade's darkness after time frames: 0 to 255 along a quarter sine over 30 frames.
Definition edge_fade.c:6
EdgeFadeTask * STDWTITL_startEdgeFadeTask(void)
Creates the fade out from the screen's edges (task), once an option is chosen.
Definition edge_fade.c:93
void STDWTITL_startEdgeFade(EdgeFadeTask *task)
Starts the fade out from the screen's edges (the task's start)
Definition edge_fade.c:50
#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
The fade out from the screen's edges once an option is chosen.
Definition title.h:193
void(* setSubstate)(struct EdgeFadeTask *task, s32 substate)
Definition title.h:194
s32(* isDone)(struct EdgeFadeTask *task)
Definition title.h:199
s16 level
Definition title.h:196
s32 substate
Definition title.h:194
s32 state
Definition title.h:194
void(* nextState)(struct EdgeFadeTask *task)
Definition title.h:194
void(* start)(struct EdgeFadeTask *task)
Definition title.h:198
s16 y1
Definition title.h:204
s16 x1
Definition title.h:203
s16 y2
Definition title.h:206
s16 x2
Definition title.h:205
void *(* getPrim)(void)
Definition gfx.h:19
struct Layer *(* getLayer)(s32 id)
Definition gfx.h:28
void(* setPrim)(void *next)
Definition gfx.h:20
GfxFuncs funcs
Definition gfx.h:77
A drawing layer (GFX.funcs.createLayer): a DRAWENV with a pair of ordering tables,...
Definition gfx.h:128
u_long *(* getOtEntry)(struct Layer *, s32 depth)
Definition gfx.h:155
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_TITLE_LAYER
Definition title.h:30