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
11
13
14INCLUDE_IMG("ui/stencil/star.png", ui_stencil_star_png);
15
16INCLUDE_IMG("ui/stencil/mario.png", ui_stencil_mario_png);
17
18INCLUDE_IMG("ui/stencil/sharp_circle.png", ui_stencil_sharp_circle_png);
19
20INCLUDE_IMG("ui/stencil/blurry_circle.png", ui_stencil_blurry_circle_png);
21
22#include "vtx/stencil1.vtx.inc.c"
23
41
49
56
64
78
79#include "vtx/stencil2.vtx.inc.c"
80
106
129
132 gsDPSetPrimDepth(20, 0),
136 gsSPTexture(0x8000, 0x8000, 0, G_TX_RENDERTILE, G_ON),
137 gsDPPipeSync(),
145 gsSPVertex(&vtx_stencil2, 24, 0),
147 gsSP2Triangles(0, 2, 1, 0, 3, 1, 2, 0),
149 gsSP2Triangles(2, 4, 3, 0, 5, 3, 4, 0),
151 gsSP2Triangles(4, 6, 5, 0, 7, 5, 6, 0),
153 gsSP2Triangles(6, 8, 7, 0, 9, 7, 8, 0),
155 gsSP2Triangles(8, 10, 9, 0, 11, 9, 10, 0),
157 gsSP2Triangles(10, 12, 11, 0, 13, 11, 12, 0),
159 gsSP2Triangles(12, 14, 13, 0, 15, 13, 14, 0),
161 gsSP2Triangles(14, 16, 15, 0, 17, 15, 16, 0),
163 gsSP2Triangles(16, 18, 17, 0, 19, 17, 18, 0),
165 gsSP2Triangles(18, 20, 19, 0, 21, 19, 20, 0),
167 gsSP2Triangles(20, 22, 21, 0, 23, 21, 22, 0),
168 gsDPPipeSync(),
170};
171
174 u8 colR, colG, colB;
175 s32 x1, y1, x2, y2;
176 f32 alpha;
177 s16 v0;
178 s16 s0;
179 Mtx* matrixStack = gDisplayContext->matrixStack;
180
181 if (progress == 0.0f) {
182 return;
183 }
184
185 if (overlay != NULL) {
186 colR = overlay->color.r;
187 colG = overlay->color.g;
188 colB = overlay->color.b;
189 x1 = overlay->screenPos[0][0];
190 y1 = overlay->screenPos[0][1];
191 x2 = overlay->screenPos[1][0];
192 y2 = overlay->screenPos[1][1];
193 alpha = overlay->alpha;
194 } else {
195 colR = colG = colB = 0;
196 x1 = y1 = x2 = y2 = 0;
197 alpha = 0.0f;
198 }
199
200 switch (stencilType) {
206 if (progress == 255.0f) {
208 } else {
210 }
216 return;
222 if (progress == 255.0f) {
224 } else {
226 }
230 gDPFillRectangle(gMainGfxPos++, camera->viewportStartX, camera->viewportStartY,
231 camera->viewportStartX + camera->viewportW, camera->viewportStartY + camera->viewportH);
233 return;
234 }
235
236 guOrtho(&matrixStack[gMatrixListPos], 0.0f, 320.0f, 0.0f, 240.0f, -1000.0f, 1000.0f, 1.0f);
238
239 switch (stencilType) {
243 break;
247 break;
251 break;
255 break;
259 break;
263 break;
264 case OVERLAY_TYPE_2:
265 s0 = progress;
266 guTranslate(&matrixStack[gMatrixListPos], 80.0f, 120.0f, 0.0f);
268 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
270 guRotate(&matrixStack[gMatrixListPos], s0 * 0.5f, 0.0f, 0.0f, 1.0f);
274
275 guTranslate(&matrixStack[gMatrixListPos], 240.0f, 120.0f, 0.0f);
277 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
279 guRotate(&matrixStack[gMatrixListPos], s0 * 0.5f, 0.0f, 0.0f, 1.0f);
283
284 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
288 break;
289 case OVERLAY_TYPE_9:
290 s0 = progress;
291 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, 0);
292 guTranslate(&matrixStack[gMatrixListPos], x1, SCREEN_HEIGHT - y1, 0.0f);
294 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
296 guRotate(&matrixStack[gMatrixListPos], -s0, 0.0f, 0.0f, 1.0f);
300
301 guTranslate(&matrixStack[gMatrixListPos], x2, SCREEN_HEIGHT - y2, 0.0f);
303 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
305 guRotate(&matrixStack[gMatrixListPos], -s0, 0.0f, 0.0f, 1.0f);
309
310 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
312 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
315 break;
317 s0 = progress;
318 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, 0);
319 guTranslate(&matrixStack[gMatrixListPos], x1, SCREEN_HEIGHT - y1, 0.0f);
321 guScale(&matrixStack[gMatrixListPos], (1.0f - s0 / 255.0f) * 0.8, (1.0f - s0 / 255.0f) * 0.8, 1.0f);
323 guRotate(&matrixStack[gMatrixListPos], (f32)(-s0) * 0.5, 0.0f, 0.0f, 1.0f);
327
328 guTranslate(&matrixStack[gMatrixListPos], 0.0f, 0.0f, 0.0f);
330 gDPSetPrimColor(gMainGfxPos++, 0, 0, 0, 0, 0, alpha);
333 v0 = progress + 40;
334 if (progress > 170) {
335 v0 = 170;
336 }
338 break;
342 break;
343 case OVERLAY_BLUR:
345 break;
349 break;
350 case OVERLAY_INTRO_1:
351 case OVERLAY_INTRO_2:
352 break;
353 }
354
356}
357
362
367
368void get_screen_overlay_params(s32 layer, u8* type, f32* zoom) {
369 switch (layer) {
373 break;
377 break;
378 }
379}
380
381void set_screen_overlay_color(s32 layer, u8 r, u8 g, u8 b) {
382 switch (layer) {
385 ScreenOverlays[layer].color.r = r;
386 ScreenOverlays[layer].color.g = g;
387 ScreenOverlays[layer].color.b = b;
388 break;
389 }
390}
391
392void set_screen_overlay_center(s32 layer, s32 arg1, s32 screenPosX, s32 screenPosY) {
393 switch (layer) {
396 switch (arg1) {
397 case 0:
398 ScreenOverlays[layer].screenPos[0][0] = screenPosX;
399 ScreenOverlays[layer].screenPos[0][1] = screenPosY;
400 break;
401 case 1:
402 ScreenOverlays[layer].screenPos[1][0] = screenPosX;
403 ScreenOverlays[layer].screenPos[1][1] = screenPosY;
404 break;
405 }
406 break;
407 }
408}
409
412 f32 tx, ty, tz, tw;
413
414 switch (layer) {
417 transform_point(camera->mtxPerspective, worldPosX, worldPosY, worldPosZ, 1.0f, &tx, &ty, &tz, &tw);
418 tw = 1.0f / tw;
419 tx *= tw;
420 ty *= -tw;
421 tz *= tw;
422 tx = (((tx * camera->viewportW) + camera->viewportW) * 0.5) + camera->viewportStartX;
423 ty = (((ty * camera->viewportH) + camera->viewportH) * 0.5) + camera->viewportStartY;
424
425 switch (posIdx) {
426 case 0:
427 ScreenOverlays[layer].screenPos[0][0] = tx;
428 ScreenOverlays[layer].screenPos[0][1] = ty;
429 break;
430 case 1:
431 ScreenOverlays[layer].screenPos[1][0] = tx;
432 ScreenOverlays[layer].screenPos[1][1] = ty;
433 break;
434 }
435 break;
436 }
437}
438
439void set_screen_overlay_alpha(s32 layer, f32 alpha) {
440 switch (layer) {
443 ScreenOverlays[layer].alpha = alpha;
444 break;
445 }
446}
447
450 s32 i;
451
456
457 for (it = &ScreenOverlays[0], i = 0; i < ARRAY_COUNT(ScreenOverlays); i++, it++) {
458 it->color.b = 0;
459 it->color.g = 0;
460 it->color.r = 0;
461 it->screenPos[1][1] = 0;
462 it->screenPos[1][0] = 0;
463 it->screenPos[0][1] = 0;
464 it->screenPos[0][0] = 0;
465 it->alpha = 255.0f;
466 }
467}
468
469void func_80138188(void) {
471}
472
473void func_80138198(void) {
474}
475
484
493
497
505
509 u8 r = 0;
510 u8 g = 0;
511 u8 b = 0;
512 s16 t = 0;
514
515 switch (CurrentScreenTransition) {
518 break;
521 break;
525 break;
527 r = g = b = 208;
532 }
533 break;
538 break;
540 r = g = b = 208;
542 break;
546 }
547 r = g = b = 208;
550 break;
553 r = g = b = 208;
556 break;
558 r = g = b = 208;
561 break;
565 break;
567 r = g = b = 208;
571 break;
576 break;
579 r = g = b = 208;
582 break;
587 break;
592 *progress = 255;
593 return 1;
594 }
595
597 overlayColor = ((255 - *progress) * 208) / 255;
600 if (*progress == 255) {
601 return 1;
602 }
603
604 *progress += fadeRate;
605 if (*progress > 255) {
606 *progress = 255;
607 }
608 } else {
609 set_screen_overlay_color(t, r, g, b);
610
611 if (t == 0) {
613 } else {
615 }
616
617 if (*progress == 255) {
618 return 1;
619 }
620
621 *progress += fadeRate;
622 if (*progress > 255) {
623 *progress = 255;
624 }
625 }
626 return 0;
627}
628
632 u8 ret = FALSE;
633
634 switch (CurrentScreenTransition) {
638 break;
642 break;
650 break;
657 break;
661 break;
665 break;
669 break;
675 break;
676 }
677
680 }
681
682 if (*progress == 0) {
683 ret = TRUE;
684 }
685
686 *progress -= fadeRate;
687
688 if (*progress < 0) {
689 *progress = 0;
690 }
691
692 return ret;
693}
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:2393
@ OVERLAY_NONE
Definition enums.h:2387
@ OVERLAY_BLUR
Definition enums.h:2400
@ OVERLAY_SCREEN_MARIO
Definition enums.h:2395
@ OVERLAY_VIEWPORT_MARIO
Definition enums.h:2392
@ OVERLAY_START_BATTLE
Definition enums.h:2398
@ OVERLAY_SCREEN_SPOTLIGHT
Definition enums.h:2394
@ OVERLAY_SCREEN_COLOR
Definition enums.h:2388
@ OVERLAY_VIEWPORT_COLOR
Definition enums.h:2389
@ OVERLAY_INTRO_2
Definition enums.h:2403
@ OVERLAY_INTRO_1
Definition enums.h:2402
@ OVERLAY_BATTLE_DARKNESS
Definition enums.h:2401
@ OVERLAY_TYPE_2
Definition enums.h:2390
@ OVERLAY_WORLD_DARKNESS
Definition enums.h:2399
@ OVERLAY_VIEWPORT_SPOTLIGHT
Definition enums.h:2391
@ OVERLAY_TYPE_9
Definition enums.h:2397
@ OVERLAY_SCREEN_STAR
Definition enums.h:2396
ScreenTransition
Definition enums.h:2361
@ TRANSITION_SLOW_BLUR_MOTION
Definition enums.h:2378
@ TRANSITION_END_PEACH_INTERLUDE
Definition enums.h:2374
@ TRANSITION_AFTER_SAVE_PROMPT
Definition enums.h:2373
@ TRANSITION_END_CHAPTER_INTERRUPTED
Definition enums.h:2377
@ TRANSITION_BEGIN_OR_END_CHAPTER
Definition enums.h:2368
@ TRANSITION_GET_STAR_CARD
Definition enums.h:2376
@ TRANSITION_MARIO_BLACK
Definition enums.h:2372
@ TRANSITION_END_DEMO_SCENE_BLACK
Definition enums.h:2364
@ TRANSITION_ENTER_WORLD
Definition enums.h:2370
@ TRANSITION_END_DEMO_SCENE_WHITE
Definition enums.h:2365
@ TRANSITION_BEGIN_OR_END_GAME
Definition enums.h:2366
@ TRANSITION_MARIO_WHITE
Definition enums.h:2371
@ TRANSITION_PEACH_CAPTURED
Definition enums.h:2375
@ TRANSITION_OUTRO_END_SCENE
Definition enums.h:2367
@ TRANSITION_TOY_TRAIN
Definition enums.h:2363
@ TRANSITION_STANDARD
Definition enums.h:2362
@ TRANSITION_SLOW_FADE_TO_WHITE
Definition enums.h:2369
@ SCREEN_LAYER_FRONT
Definition enums.h:2382
@ SCREEN_LAYER_BACK
Definition enums.h:2383
@ CONTEXT_PAUSE
Definition enums.h:3530
@ DEMO_STATE_CHANGE_MAP
Definition enums.h:3536
#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)
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)
BSS f32 screen_overlay_frontZoom
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)
void func_80138188(void)
ScreenTransition CurrentScreenTransition
void render_screen_overlay_frontUI(void)
BSS f32 screen_overlay_backZoom
void get_screen_overlay_params(s32 layer, u8 *type, f32 *zoom)
void func_80138198(void)
ScreenOverlay ScreenOverlays[2]
void set_screen_overlay_params_back(u8 type, f32 zoom)
void set_screen_overlay_alpha(s32 layer, f32 alpha)
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:404
#define PM_CC_3A
Definition macros.h:402
#define LAST_DEMO_SCENE_IDX
Definition macros.h:112
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