Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
screen_overlays.c
Go to the documentation of this file.
1#include "common.h"
2#include "overlay.h"
3#include "include_asset.h"
4
5#define OVERLAY_RENDER_OFF (-1.0f)
6
13
15
16INCLUDE_IMG("ui/stencil/star.png", ui_stencil_star_png);
17
18INCLUDE_IMG("ui/stencil/mario.png", ui_stencil_mario_png);
19
20INCLUDE_IMG("ui/stencil/sharp_circle.png", ui_stencil_sharp_circle_png);
21
22INCLUDE_IMG("ui/stencil/blurry_circle.png", ui_stencil_blurry_circle_png);
23
24#include "vtx/stencil1.vtx.inc.c"
25
43
51
58
66
80
81#include "vtx/stencil2.vtx.inc.c"
82
108
131
134 gsDPSetPrimDepth(20, 0),
138 gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON),
139 gsDPPipeSync(),
147 gsSPVertex(&vtx_stencil2, 24, 0),
149 gsSP2Triangles(0, 2, 1, 0, 3, 1, 2, 0),
151 gsSP2Triangles(2, 4, 3, 0, 5, 3, 4, 0),
153 gsSP2Triangles(4, 6, 5, 0, 7, 5, 6, 0),
155 gsSP2Triangles(6, 8, 7, 0, 9, 7, 8, 0),
157 gsSP2Triangles(8, 10, 9, 0, 11, 9, 10, 0),
159 gsSP2Triangles(10, 12, 11, 0, 13, 11, 12, 0),
161 gsSP2Triangles(12, 14, 13, 0, 15, 13, 14, 0),
163 gsSP2Triangles(14, 16, 15, 0, 17, 15, 16, 0),
165 gsSP2Triangles(16, 18, 17, 0, 19, 17, 18, 0),
167 gsSP2Triangles(18, 20, 19, 0, 21, 19, 20, 0),
169 gsSP2Triangles(20, 22, 21, 0, 23, 21, 22, 0),
170 gsDPPipeSync(),
172};
173
176 u8 colR, colG, colB;
177 s32 x1, y1, x2, y2;
178 f32 alpha;
179 s16 v0;
180 s16 s0;
181 Mtx* matrixStack = gDisplayContext->matrixStack;
182
183 if (progress == 0.0f) {
184 return;
185 }
186
187 if (overlay != NULL) {
188 colR = overlay->color.r;
189 colG = overlay->color.g;
190 colB = overlay->color.b;
191 x1 = overlay->screenPos[0][0];
192 y1 = overlay->screenPos[0][1];
193 x2 = overlay->screenPos[1][0];
194 y2 = overlay->screenPos[1][1];
195 alpha = overlay->alpha;
196 } else {
197 colR = colG = colB = 0;
198 x1 = y1 = x2 = y2 = 0;
199 alpha = 0.0f;
200 }
201
202 switch (stencilType) {
208 if (progress == 255.0f) {
210 } else {
212 }
218 return;
224 if (progress == 255.0f) {
226 } else {
228 }
232 gDPFillRectangle(gMainGfxPos++, camera->viewportStartX, camera->viewportStartY,
233 camera->viewportStartX + camera->viewportW, camera->viewportStartY + camera->viewportH);
235 return;
236 }
237
238 guOrtho(&matrixStack[gMatrixListPos], 0.0f, 320.0f, 0.0f, 240.0f, -1000.0f, 1000.0f, 1.0f);
240
241 switch (stencilType) {
245 break;
249 break;
253 break;
257 break;
261 break;
265 break;
266 case OVERLAY_TYPE_2:
267 s0 = progress;
268 guTranslate(&matrixStack[gMatrixListPos], 80.0f, 120.0f, 0.0f);
270 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
272 guRotate(&matrixStack[gMatrixListPos], s0 * 0.5f, 0.0f, 0.0f, 1.0f);
276
277 guTranslate(&matrixStack[gMatrixListPos], 240.0f, 120.0f, 0.0f);
279 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
281 guRotate(&matrixStack[gMatrixListPos], s0 * 0.5f, 0.0f, 0.0f, 1.0f);
285
286 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
290 break;
291 case OVERLAY_TYPE_9:
292 s0 = progress;
293 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, 0);
294 guTranslate(&matrixStack[gMatrixListPos], x1, SCREEN_HEIGHT - y1, 0.0f);
296 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
298 guRotate(&matrixStack[gMatrixListPos], -s0, 0.0f, 0.0f, 1.0f);
302
303 guTranslate(&matrixStack[gMatrixListPos], x2, SCREEN_HEIGHT - y2, 0.0f);
305 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
307 guRotate(&matrixStack[gMatrixListPos], -s0, 0.0f, 0.0f, 1.0f);
311
312 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
314 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
317 break;
319 s0 = progress;
320 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, 0);
321 guTranslate(&matrixStack[gMatrixListPos], x1, SCREEN_HEIGHT - y1, 0.0f);
323 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
325 guRotate(&matrixStack[gMatrixListPos], (f32)(-s0) * 0.5, 0.0f, 0.0f, 1.0f);
329
330 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
332 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
335 v0 = progress + 40;
336 if (progress > 170) {
337 v0 = 170;
338 }
340 break;
344 break;
345 case OVERLAY_BLUR:
347 break;
351 break;
352 case OVERLAY_INTRO_1:
353 case OVERLAY_INTRO_2:
354 break;
355 }
356
358}
359
364
369
371 switch (layer) {
375 break;
379 break;
380 }
381}
382
383void set_screen_overlay_color(s32 layer, u8 r, u8 g, u8 b) {
384 switch (layer) {
387 ScreenOverlays[layer].color.r = r;
388 ScreenOverlays[layer].color.g = g;
389 ScreenOverlays[layer].color.b = b;
390 break;
391 }
392}
393
395 switch (layer) {
398 switch (arg1) {
399 case 0:
400 ScreenOverlays[layer].screenPos[0][0] = screenPosX;
401 ScreenOverlays[layer].screenPos[0][1] = screenPosY;
402 break;
403 case 1:
404 ScreenOverlays[layer].screenPos[1][0] = screenPosX;
405 ScreenOverlays[layer].screenPos[1][1] = screenPosY;
406 break;
407 }
408 break;
409 }
410}
411
414 f32 tx, ty, tz, tw;
415
416 switch (layer) {
419 transform_point(camera->mtxPerspective, worldPosX, worldPosY, worldPosZ, 1.0f, &tx, &ty, &tz, &tw);
420 tw = 1.0f / tw;
421 tx *= tw;
422 ty *= -tw;
423 tz *= tw;
424 tx = (((tx * camera->viewportW) + camera->viewportW) * 0.5) + camera->viewportStartX;
425 ty = (((ty * camera->viewportH) + camera->viewportH) * 0.5) + camera->viewportStartY;
426
427 switch (posIdx) {
428 case 0:
429 ScreenOverlays[layer].screenPos[0][0] = tx;
430 ScreenOverlays[layer].screenPos[0][1] = ty;
431 break;
432 case 1:
433 ScreenOverlays[layer].screenPos[1][0] = tx;
434 ScreenOverlays[layer].screenPos[1][1] = ty;
435 break;
436 }
437 break;
438 }
439}
440
441void set_screen_overlay_alpha(s32 layer, f32 alpha) {
442 switch (layer) {
445 ScreenOverlays[layer].alpha = alpha;
446 break;
447 }
448}
449
452 s32 i;
453
458
459 for (it = &ScreenOverlays[0], i = 0; i < ARRAY_COUNT(ScreenOverlays); i++, it++) {
460 it->color.b = 0;
461 it->color.g = 0;
462 it->color.r = 0;
463 it->screenPos[1][1] = 0;
464 it->screenPos[1][0] = 0;
465 it->screenPos[0][1] = 0;
466 it->screenPos[0][0] = 0;
467 it->alpha = 255.0f;
468 }
469}
470
474
483
492
496
504
508 u8 r = 0;
509 u8 g = 0;
510 u8 b = 0;
511 s16 t = 0;
513
514 switch (CurrentScreenTransition) {
517 break;
520 break;
524 break;
526 r = g = b = 208;
531 }
532 break;
537 break;
539 r = g = b = 208;
541 break;
545 }
546 r = g = b = 208;
549 break;
552 r = g = b = 208;
555 break;
557 r = g = b = 208;
560 break;
564 break;
566 r = g = b = 208;
570 break;
575 break;
578 r = g = b = 208;
581 break;
586 break;
591 *progress = 255;
592 return 1;
593 }
594
596 overlayColor = ((255 - *progress) * 208) / 255;
599 if (*progress == 255) {
600 return 1;
601 }
602
603 *progress += fadeRate;
604 if (*progress > 255) {
605 *progress = 255;
606 }
607 } else {
608 set_screen_overlay_color(t, r, g, b);
609
610 if (t == 0) {
612 } else {
614 }
615
616 if (*progress == 255) {
617 return 1;
618 }
619
620 *progress += fadeRate;
621 if (*progress > 255) {
622 *progress = 255;
623 }
624 }
625 return 0;
626}
627
631 u8 ret = FALSE;
632
633 switch (CurrentScreenTransition) {
637 break;
641 break;
649 break;
656 break;
660 break;
664 break;
668 break;
674 break;
675 }
676
679 }
680
681 if (*progress == 0) {
682 ret = TRUE;
683 }
684
685 *progress -= fadeRate;
686
687 if (*progress < 0) {
688 *progress = 0;
689 }
690
691 return ret;
692}
BSS s32 PopupMenu_SelectedIndex
Mtx matrixStack[0x200]
#define transform_point
#define draw_prev_frame_buffer_at_screen_pos
#define guTranslate
@ OVERLAY_VIEWPORT_STAR
Definition enums.h:2379
@ OVERLAY_NONE
Definition enums.h:2373
@ OVERLAY_BLUR
Definition enums.h:2386
@ OVERLAY_SCREEN_MARIO
Definition enums.h:2381
@ OVERLAY_VIEWPORT_MARIO
Definition enums.h:2378
@ OVERLAY_START_BATTLE
Definition enums.h:2384
@ OVERLAY_SCREEN_SPOTLIGHT
Definition enums.h:2380
@ OVERLAY_SCREEN_COLOR
Definition enums.h:2374
@ OVERLAY_VIEWPORT_COLOR
Definition enums.h:2375
@ OVERLAY_INTRO_2
Definition enums.h:2389
@ OVERLAY_INTRO_1
Definition enums.h:2388
@ OVERLAY_BATTLE_DARKNESS
Definition enums.h:2387
@ OVERLAY_TYPE_2
Definition enums.h:2376
@ OVERLAY_WORLD_DARKNESS
Definition enums.h:2385
@ OVERLAY_VIEWPORT_SPOTLIGHT
Definition enums.h:2377
@ OVERLAY_TYPE_9
Definition enums.h:2383
@ OVERLAY_SCREEN_STAR
Definition enums.h:2382
ScreenTransition
Definition enums.h:2347
@ TRANSITION_SLOW_BLUR_MOTION
Definition enums.h:2364
@ TRANSITION_END_PEACH_INTERLUDE
Definition enums.h:2360
@ TRANSITION_AFTER_SAVE_PROMPT
Definition enums.h:2359
@ TRANSITION_END_CHAPTER_INTERRUPTED
Definition enums.h:2363
@ TRANSITION_BEGIN_OR_END_CHAPTER
Definition enums.h:2354
@ TRANSITION_GET_STAR_CARD
Definition enums.h:2362
@ TRANSITION_MARIO_BLACK
Definition enums.h:2358
@ TRANSITION_END_DEMO_SCENE_BLACK
Definition enums.h:2350
@ TRANSITION_ENTER_WORLD
Definition enums.h:2356
@ TRANSITION_END_DEMO_SCENE_WHITE
Definition enums.h:2351
@ TRANSITION_BEGIN_OR_END_GAME
Definition enums.h:2352
@ TRANSITION_MARIO_WHITE
Definition enums.h:2357
@ TRANSITION_PEACH_CAPTURED
Definition enums.h:2361
@ TRANSITION_OUTRO_END_SCENE
Definition enums.h:2353
@ TRANSITION_TOY_TRAIN
Definition enums.h:2349
@ TRANSITION_STANDARD
Definition enums.h:2348
@ TRANSITION_SLOW_FADE_TO_WHITE
Definition enums.h:2355
@ SCREEN_LAYER_FRONT
Definition enums.h:2368
@ SCREEN_LAYER_BACK
Definition enums.h:2369
@ CONTEXT_PAUSE
Definition enums.h:3564
@ DEMO_STATE_CHANGE_MAP
Definition enums.h:3570
#define INCLUDE_IMG(FILENAME, SYMBOLNAME)
Color_RGB8 color
Definition overlay.h:7
void appendGfx_darkness_stencil(s32, s32, s32, f32, f32)
s32 screenPos[2][2]
Definition overlay.h:9
void appendGfx_screen_transition_stencil(s32, s32, f32, s32, s32, s32, s32, s32)
Gfx D_8014E8F0[]
BSS s32 screen_overlay_frontType
void render_screen_overlay_backUI(void)
#define OVERLAY_RENDER_OFF
BSS s32 D_80156910
void clear_screen_overlays(void)
void set_screen_overlay_params_front(u8 type, f32 zoom)
s16 update_enter_map_screen_overlay(s16 *progress)
Gfx D_8014EA48[]
Gfx Gfx_LoadStencilTex_Star[]
Gfx Gfx_LoadStencilTex_BlurryCircle[]
Gfx Gfx_LoadStencilTex_CommonParams[]
void set_screen_overlay_center(s32 layer, s32 arg1, s32 screenPosX, s32 screenPosY)
void set_map_transition_effect(ScreenTransition transition)
Gfx Gfx_LoadStencilTex_SharpCircle[]
void _render_transition_stencil(u8 stencilType, f32 progress, ScreenOverlay *overlay)
void set_screen_overlay_center_worldpos(s32 layer, s32 posIdx, s32 worldPosX, s32 worldPosY, s32 worldPosZ)
void set_screen_overlay_color(s32 layer, u8 r, u8 g, u8 b)
BSS s32 screen_overlay_backType
Gfx D_8014E9A8[]
Gfx Gfx_LoadStencilTex_Mario[]
s16 update_exit_map_screen_overlay(s16 *progress)
BSS f32 screen_overlay_backProgress
ScreenTransition CurrentScreenTransition
void render_screen_overlay_frontUI(void)
void get_screen_overlay_params(s32 layer, u8 *type, f32 *zoom)
BSS f32 screen_overlay_frontProgress
ScreenOverlay ScreenOverlays[2]
void set_screen_overlay_params_back(u8 type, f32 zoom)
void set_screen_overlay_alpha(s32 layer, f32 alpha)
void reset_back_screen_overlay_progress(void)
ScreenFadeRates
@ SLOWER_FADE_RATE
@ SLOW_FADE_RATE
@ STANDARD_FADE_RATE
@ FAST_FADE_RATE
@ VERY_SLOW_FADE_RATE
#define SCREEN_WIDTH
Definition macros.h:109
#define BSS
Definition macros.h:7
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define SCREEN_HEIGHT
Definition macros.h:110
#define PM_CC_SCREEN_OVERLAY
Definition macros.h:413
#define PM_CC_3A
Definition macros.h:411
#define LAST_DEMO_SCENE_IDX
Definition macros.h:120
GameStatus * gGameStatusPtr
Definition main_loop.c:31
Camera gCameras[4]
Definition cam_main.c:16
Gfx * gMainGfxPos
Definition cam_main.c:14
u16 gMatrixListPos
Definition main_loop.c:44
s32 gCurrentCameraID
Definition cam_math.c:5
DisplayContext * gDisplayContext
Definition cam_main.c:15