Paper Mario DX
Paper Mario (N64) modding
 
Loading...
Searching...
No Matches
pause_partners.c File Reference

Go to the source code of this file.

Data Structures

struct  PartnerPosition
 

Functions

void pause_partners_draw_contents (MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
 
void pause_partners_draw_title (MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
 
void pause_partners_draw_movelist (MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
 
void pause_partners_draw_movelist_title (MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
 
void pause_partners_draw_movelist_flower (MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
 
void pause_partners_init (MenuPanel *panel)
 
void pause_partners_handle_input (MenuPanel *panel)
 
void pause_partners_update (MenuPanel *panel)
 
void pause_partners_cleanup (MenuPanel *panel)
 
void pause_partners_load_portrait (s32 index)
 

Variables

s8 gPauseBufferPal1 [512]
 
s8 gPauseBufferImg1 [15752]
 
s8 gPauseBufferPal2 [512]
 
s8 gPauseBufferImg2 [15752]
 
HudScriptgPausePartnersHudScripts [][8]
 
Vp gPausePartnersViewport
 
s32 gPausePartnersSpriteAnims [][4]
 
s32 gPausePartnersPartnerIDs []
 
s32 gPausePartnersMessages []
 
s32 gPausePartnersMoveBase []
 
s8 gPausePartnersGridData []
 
char * gPausePartnersAssetNames []
 
s8 * gPausePartnersImageBuffers [] = { gPauseBufferImg1, gPauseBufferImg2 }
 
s8 * gPausePartnersPaletteBuffers [] = { gPauseBufferPal1, gPauseBufferPal2 }
 
s32 D_8024F74C = 0
 
Gfx gPausePartnersDL []
 
s32 gPausePartnersCurrentPortraitIndex = -1
 
s32 gPausePartnersNextPortraitIndex = -1
 
MenuWindowBP gPausePartnersWindowBPs []
 
u8 gPausePartnersPortraitScrollInterpTable [] = {0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 }
 
MenuPanel gPausePanelPartners
 

Data Structure Documentation

◆ PartnerPosition

struct PartnerPosition
Data Fields
f32 pos
s32 index

Function Documentation

◆ pause_partners_draw_contents()

void pause_partners_draw_contents ( MenuPanel * menu,
s32 baseX,
s32 baseY,
s32 width,
s32 height,
s32 opacity,
s32 darkening )

Definition at line 311 of file pause_partners.c.

311 {
312 Matrix4f matrix;
313 Matrix4f matrix2;
314 PartnerPosition partnerPositions[8];
315 s32 i, j, k, index;
316 s32 x1, y1, x2, y2;
317 f32 currentPos, angle, scale;
318 f32 offsetX, offsetY, offsetZ;
319 s32 color;
320 s8 currentTab;
321 s32 portraitScrollPos;
322 s32 portraitScrollIndex;
323 s32 tileHeight;
324 s32 portraitOffsetX;
325 s32 portraitIndex;
326
327 gSPViewport(gMainGfxPos++, &gPausePartnersViewport);
328 guOrthoF(matrix, 0.0f, 320.0f, 240.0f, 0.0f, -100.0f, 100.0f, 1.0f);
330 gSPMatrix(gMainGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION);
331 guTranslateF(matrix, 0.0f, 0.0f, 0.0f);
333 gSPMatrix(gMainGfxPos++, &gDisplayContext->matrixStack[gMatrixListPos++], G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
334
335 for (i = 0; i < gPausePartnersNumPartners; i++) {
336 currentPos = cos_deg(i * 360 / gPausePartnersNumPartners - gPausePartnersRotAngle) * 20.0f + 0.0f;
337
338 for (j = 0; j < i; j++) {
339 if (currentPos < partnerPositions[j].pos) {
340 break;
341 }
342 }
343
344 for (k = gPausePartnersNumPartners - 1; k > j; k--) {
345 partnerPositions[k] = partnerPositions[k-1];
346 }
347
348 partnerPositions[j].index = i;
349 partnerPositions[j].pos = currentPos;
350 }
351
352 for (j = 0; j < gPausePartnersNumPartners; j++) {
353 portraitIndex = gPausePartnersNumPartners;
354 index = partnerPositions[j].index;
355 angle = index * 360 / gPausePartnersNumPartners - gPausePartnersRotAngle;
356 offsetX = gPausePartnersNumPartners * 3 + 17;
357 offsetX *= sin_deg(angle);
358 offsetX += 42.0f;
359 offsetZ = 30.0f - cos_deg(angle) * 30.0f;
360 offsetY = cos_deg(angle) * 20.0f + 0.0f;
361 scale = 30.0 / (offsetZ + 60.0f) + 0.5;
362
363 guTranslateF(matrix, baseX + 22 + offsetX, baseY + 81 + offsetY, -offsetZ);
364 guRotateF(matrix2, 180.0f, 0.0f, 0.0f, 1.0f);
365 guMtxCatF(matrix2, matrix, matrix);
366 guScaleF(matrix2, scale, scale, 1.0f);
367 guMtxCatF(matrix2, matrix, matrix);
368
369 if (offsetZ > 8.0f) {
370 color = 160;
371 } else {
372 color = 255.0f - offsetZ * 95.0f * 0.125f;
373 }
374 set_npc_imgfx_all(gPausePartnersSpriteIDs[gPausePartnersPartnerIdx[index]], IMGFX_SET_COLOR, color, color, color, 255, 64);
375 spr_draw_npc_sprite(gPausePartnersSpriteIDs[gPausePartnersPartnerIdx[index]], 0, 0, NULL, matrix);
376 }
377
378 gSPPopMatrix(gMainGfxPos++, G_MTX_MODELVIEW);
379
380 currentTab = gPauseMenuCurrentTab;
381 if (currentTab == 4) {
382 if (gPausePartnersLevel == 0) {
383 pause_set_cursor_pos(WIN_PAUSE_PARTNERS, baseX + 42, baseY + 88);
384 }
385
386 if (gPauseMenuCurrentTab == currentTab && gPausePartnersLevel == 0) {
388 }
389 }
390
391 x1 = baseX + 130;
392 y1 = baseY + 24;
393 x2 = baseX + 280;
394 y2 = baseY + 129;
395
396 if (x1 <= 0) {
397 x1 = 1;
398 }
399 if (y1 <= 0) {
400 y1 = 1;
401 }
402
403 if (x2 <= 0 || y2 <= 0 || x1 >= SCREEN_WIDTH - 1 || y1 >= SCREEN_HEIGHT - 1) {
404 return;
405 }
406
407 if (x2 >= SCREEN_WIDTH - 1) {
408 x2 = SCREEN_WIDTH - 1;
409 }
410 if (y2 >= SCREEN_HEIGHT - 1) {
411 y2 = SCREEN_HEIGHT - 1;
412 }
413
414 portraitScrollPos = (gPausePartnersRotAngle + 360.0f) * 15000.0f * gPausePartnersNumPartners / 360.0f;
415 portraitScrollIndex = portraitScrollPos / 15000;
416 gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, x1, y1, x2, y2);
417 portraitOffsetX = (portraitScrollIndex * 15000 - portraitScrollPos);
418 portraitOffsetX *= 0.01;
419 portraitIndex = portraitScrollIndex;
420 pause_partners_load_portrait(portraitIndex % gPausePartnersNumPartners);
421 for (i = 0; i < ARRAY_COUNT(gPausePartnersPaletteBuffers); portraitOffsetX += 150, i++) {
422 gSPDisplayList(gMainGfxPos++, &gPausePartnersDL);
423 gDPLoadTLUT_pal256(gMainGfxPos++, gPausePartnersPaletteBuffers[i]);
424
425 for (index = 0; index < 20; index++) {
426 if (12 * index + 12 <= 105) {
427 tileHeight = 12;
428 } else {
429 tileHeight = 106 - 12 * index;
430 }
431
432 gDPLoadTextureTile(gMainGfxPos++, gPausePartnersImageBuffers[i], G_IM_FMT_CI, G_IM_SIZ_8b, 150, 0,
433 0, 12 * index, 149, 12 * index + tileHeight - 1, 0,
434 G_TX_CLAMP, G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
435 pause_draw_rect((baseX + 130 + portraitOffsetX) * 4, (baseY + 24 + 12 * index) * 4, (baseX + 280 + portraitOffsetX) * 4, (baseY + 24 + 12 * index + tileHeight) * 4, 0, 0,
436 12 * index * 32, 0x400, 0x400);
437 gDPPipeSync(gMainGfxPos++);
438 if (12 * index + 12 >= 105) {
439 break;
440 }
441 }
442 }
443 {
444 s32 x1, y1, x2, y2;
445 x1 = baseX + 122;
446 y1 = baseY + 16;
447 x2 = baseX + 288;
448 y2 = baseY + 137;
449
450 if (x1 <= 0) {
451 x1 = 1;
452 }
453 if (y1 <= 0) {
454 y1 = 1;
455 }
456
457 if (x2 <= 0 || y2 <= 0 || x1 >= SCREEN_WIDTH - 1 || y1 >= SCREEN_HEIGHT - 1) {
458 return;
459 }
460
461 if (x2 >= SCREEN_WIDTH - 1) {
462 x2 = SCREEN_WIDTH - 1;
463 }
464 if (y2 >= SCREEN_HEIGHT - 1) {
465 y2 = SCREEN_HEIGHT - 1;
466 }
467
468 gDPSetScissor(gMainGfxPos++, G_SC_NON_INTERLACE, x1, y1, x2, y2);
469 }
470 draw_box(0, &gPauseWS_21, baseX + 122, baseY + 16, 0, 166, 121, opacity, darkening, 1.0f, 1.0f, 0, 0, 0, 0, 0, 0, width, height, 0);
471}
Mtx matrixStack[0x200]
f32 Matrix4f[4][4]
Vec3s pos
Definition demo_api.c:17
#define guRotateF
#define guOrthoF
#define guMtxF2L
#define sin_deg
#define guTranslateF
#define guMtxCatF
#define cos_deg
#define draw_box
#define guScaleF
@ IMGFX_SET_COLOR
Definition enums.h:5122
@ WIN_PAUSE_PARTNERS
Definition enums.h:5276
WindowStyleCustom gPauseWS_21
s8 gPauseMenuCurrentTab
Definition pause_main.c:28
void pause_draw_menu_label(s32 index, s32 x, s32 y)
Definition pause_gfx.c:587
void pause_set_cursor_pos(s32 windowID, s32 posX, s32 posY)
Definition pause_main.c:228
void pause_draw_rect(s32 ulx, s32 uly, s32 lrx, s32 lry, s32 tileIdx, s32 uls, s32 ult, s32 dsdx, s32 dtdy)
Definition pause_main.c:841
@ PAUSE_LBL_ABILITIES
Gfx gPausePartnersDL[]
Vp gPausePartnersViewport
void pause_partners_load_portrait(s32 index)
s8 * gPausePartnersImageBuffers[]
s8 * gPausePartnersPaletteBuffers[]
#define SCREEN_WIDTH
Definition macros.h:109
#define ARRAY_COUNT(arr)
Definition macros.h:40
#define SCREEN_HEIGHT
Definition macros.h:110
s32 spr_draw_npc_sprite(s32 spriteInstanceID, s32 yaw, s32 arg2, PAL_PTR *paletteList, Matrix4f mtx)
Definition sprite.c:1105
void set_npc_imgfx_all(s32 spriteIdx, ImgFXType imgfxType, s32 imgfxArg1, s32 imgfxArg2, s32 imgfxArg3, s32 imgfxArg4, s32 imgfxArg5)
Definition sprite.c:1253
Gfx * gMainGfxPos
Definition cam_main.c:15
u16 gMatrixListPos
Definition main_loop.c:45
DisplayContext * gDisplayContext
Definition cam_main.c:16

◆ pause_partners_draw_title()

void pause_partners_draw_title ( MenuPanel * menu,
s32 baseX,
s32 baseY,
s32 width,
s32 height,
s32 opacity,
s32 darkening )

Definition at line 473 of file pause_partners.c.

473 {
474 s32 msgID = gPartnerPopupProperties[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].nameMsg;
475 s32 level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level;
476 s32 msgWidth = get_msg_width(msgID, 0);
477 s32 offset;
478
479 if (level == PARTNER_RANK_SUPER) {
480 offset = 16;
481 } else if (level == PARTNER_RANK_ULTRA) {
482 offset = 20;
483 } else {
484 offset = 0;
485 }
486
487 if (offset != 0) {
488 msgWidth += 4;
489 }
490
491 draw_msg(msgID, baseX + ((width - offset - msgWidth) >> 1), baseY + 1, 255, MSG_PAL_WHITE, 0);
492
493 if (level == 1) {
494 hud_element_set_render_pos(gPausePartnersHIDs[2], baseX + 95, baseY + 10);
495 hud_element_draw_without_clipping(gPausePartnersHIDs[2]);
496 } else if (level == 2) {
497 hud_element_set_render_pos(gPausePartnersHIDs[2], baseX + 91, baseY + 10);
498 hud_element_draw_without_clipping(gPausePartnersHIDs[2]);
499 hud_element_set_render_pos(gPausePartnersHIDs[3], baseX + 101, baseY + 10);
500 hud_element_draw_without_clipping(gPausePartnersHIDs[3]);
501 }
502}
PartnerPopupProperties gPartnerPopupProperties[]
Definition 5B320.c:331
PartnerData partners[12]
#define get_msg_width
#define draw_msg
@ MSG_PAL_WHITE
Definition enums.h:5404
@ PARTNER_RANK_SUPER
Definition enums.h:2019
@ PARTNER_RANK_ULTRA
Definition enums.h:2020
void hud_element_draw_without_clipping(s32 id)
void hud_element_set_render_pos(s32 id, s32 x, s32 y)
s32 gPausePartnersPartnerIDs[]
PlayerData gPlayerData
Definition 77480.c:40

◆ pause_partners_draw_movelist()

void pause_partners_draw_movelist ( MenuPanel * menu,
s32 baseX,
s32 baseY,
s32 width,
s32 height,
s32 opacity,
s32 darkening )

Definition at line 504 of file pause_partners.c.

504 {
505 s32 i;
506 s32 moveNameID;
507 s32 costFP;
508 s32 msgX, msgY;
509 s32 style;
510 s32 level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level;
511
512 if (level == PARTNER_RANK_ULTRA) {
513 level = 4;
514 } else if (level == PARTNER_RANK_SUPER) {
515 level = 3;
516 } else if (level == PARTNER_RANK_NORMAL) {
517 level = 2;
518 }
519 for (i = 0; i < 4; i++) {
520 msgX = baseX + 21;
521 msgY = baseY + 22 + i * 13;
522
523 if (i >= level) {
524 continue;
525 }
526
528
529 if (i == 0) {
530 moveNameID = gMoveTable[gPausePartnersMoveBase[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].nameMsg;
531 } else {
532 moveNameID = gMoveTable[gPausePartnersMoveBase[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]] + 2 + i].nameMsg;
533 }
534
535 if (i > 0) {
536 costFP = gMoveTable[gPausePartnersMoveBase[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]] + 2 + i].costFP;
537 } else {
538 costFP = 0;
539 }
540
541 draw_msg(moveNameID, msgX, msgY, 255, MSG_PAL_STANDARD, style);
542 hud_element_set_scale(gPausePartnersHIDs[i + 4], 0.5f);
543 //TODO find better match
544 hud_element_set_render_pos(gPausePartnersHIDs[i + 4], 12 - (-baseX), baseY + 28 + i * 13);
545 hud_element_draw_without_clipping(gPausePartnersHIDs[i + 4]);
546
547 if (costFP != 0) {
548 s32 xOffset = 125;
549
550#if VERSION_PAL
551 xOffset = D_PAL_80271B44[gCurrentLanguage];
552#endif
553
554 draw_number(costFP, baseX + xOffset, baseY + 22 + i * 13, style, MSG_PAL_STANDARD, 255, DRAW_NUMBER_STYLE_MONOSPACE | DRAW_NUMBER_STYLE_ALIGN_RIGHT);
555 if (costFP > 0) {
556#if VERSION_PAL
557 hud_element_set_render_pos(gPausePartnersHIDs[0], baseX + D_PAL_80271B44[gCurrentLanguage] + 9, baseY + 29 + i * 13);
558#else
559 hud_element_set_render_pos(gPausePartnersHIDs[0], baseX + 134, baseY + 29 + i * 13);
560#endif
561 hud_element_draw_without_clipping(gPausePartnersHIDs[0]);
562 }
563 }
564 }
565
566 if (gPauseMenuCurrentTab == 4 && gPausePartnersLevel == 1) {
567 pause_set_cursor_pos(WIN_PAUSE_PARTNERS_MOVELIST, baseX - 2, baseY + 28 + gPausePartnersSelectedMove * 13);
568 }
569}
@ DRAW_NUMBER_STYLE_ALIGN_RIGHT
drawn to the left of posX
Definition enums.h:5392
@ DRAW_NUMBER_STYLE_MONOSPACE
Definition enums.h:5393
@ MSG_PAL_STANDARD
Definition enums.h:5414
@ DRAW_NUMBER_CHARSET_THIN
Definition enums.h:5400
@ PARTNER_RANK_NORMAL
Definition enums.h:2018
@ WIN_PAUSE_PARTNERS_MOVELIST
Definition enums.h:5278
void draw_number(s32 value, s32 x, s32 y, s32 variableWidthChars, s32 palette, s32 opacity, u16 style)
Definition msg.c:2223
void hud_element_set_scale(s32 index, f32 scale)
s32 gPausePartnersMoveBase[]
#define gCurrentLanguage
Definition variables.h:115
MoveData gMoveTable[]

◆ pause_partners_draw_movelist_title()

void pause_partners_draw_movelist_title ( MenuPanel * menu,
s32 baseX,
s32 baseY,
s32 width,
s32 height,
s32 opacity,
s32 darkening )

Definition at line 571 of file pause_partners.c.

571 {
573 s32 xOffset;
574
575#if VERSION_PAL
576 xOffset = D_PAL_80271B38[gCurrentLanguage];
577#else
578 xOffset = 12;
579#endif
580
581 draw_msg(msgID, baseX + xOffset, baseY + 1, 255, -1, DRAW_MSG_STYLE_MENU);
582}
@ DRAW_MSG_STYLE_MENU
Definition enums.h:5384
s32 pause_get_menu_msg(s32 index)
Definition pause_gfx.c:583
@ PAUSE_MSG_PARTNER_ABILITIES

◆ pause_partners_draw_movelist_flower()

void pause_partners_draw_movelist_flower ( MenuPanel * menu,
s32 baseX,
s32 baseY,
s32 width,
s32 height,
s32 opacity,
s32 darkening )

Definition at line 584 of file pause_partners.c.

584 {
585 hud_element_set_render_pos(gPausePartnersHIDs[1], baseX + 17, baseY + 16);
586 hud_element_draw_without_clipping(gPausePartnersHIDs[1]);
587}

◆ pause_partners_init()

void pause_partners_init ( MenuPanel * panel)

Definition at line 589 of file pause_partners.c.

589 {
590 s32 i;
591
592 gPausePartnersNumPartners = 0;
593 for (i = 0; i < ARRAY_COUNT(gPausePartnersPartnerIDs); i++) {
595 gPausePartnersPartnerIdx[gPausePartnersNumPartners] = i;
596 gPausePartnersNumPartners++;
597 }
598 }
599
600 if (gPausePartnersNumPartners == 0) {
602 panel->initialized = FALSE;
603 return;
604 }
605
606 for (i = 0; i < ARRAY_COUNT(gPausePartnersSpriteAnims); i++) {
607 gPausePartnersSpriteIDs[i] = spr_load_npc_sprite(gPausePartnersSpriteAnims[i][0], gPausePartnersSpriteAnims[i]);
608 }
609
610 for (i = 0; i < ARRAY_COUNT(gPausePartnersHudScripts[0]); i++) {
612 hud_element_set_flags(gPausePartnersHIDs[i], HUD_ELEMENT_FLAG_80);
613 }
614
615 for (i = 0; i < ARRAY_COUNT(gPausePartnersWindowBPs); i++) {
616 gPausePartnersWindowBPs[i].tab = panel;
617 }
619
620#if VERSION_PAL
626#endif
627
628 gPausePartnersCurrentPartnerIdx = 0;
629 for (i = 0; i < gPausePartnersNumPartners; i++) {
630 if (gPlayerData.curPartner == gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[i]]) {
631 gPausePartnersCurrentPartnerIdx = i;
632 break;
633 }
634 }
635
636 gPausePartnersSelectedMove = 0;
637 gPausePartnersLevel = 0;
638 gPausePartnersRotAngle = gPausePartnersCurrentPartnerIdx * 360 / gPausePartnersNumPartners;
640 panel->initialized = TRUE;
641}
@ WINDOW_UPDATE_HIDE
Definition enums.h:5311
@ WIN_PAUSE_PARTNERS_MOVELIST_TITLE
Definition enums.h:5279
@ WIN_PAUSE_PARTNERS_MOVELIST_FLOWER
Definition enums.h:5280
void set_window_update(s32 panelID, s32)
Definition windows.c:434
void setup_pause_menu_tab(MenuWindowBP *bpArray, s32 arraySize)
Definition windows.c:461
s32 hud_element_create(HudScript *anim)
Creates a new HUD element and returns its ID.
void hud_element_set_flags(s32 id, s32 flags)
Turns on the given flags.
@ HUD_ELEMENT_FLAG_80
Definition hud_element.h:78
HudScript * gPausePartnersHudScripts[][8]
MenuWindowBP gPausePartnersWindowBPs[]
s32 gPausePartnersSpriteAnims[][4]
s32 spr_load_npc_sprite(s32 animID, u32 *extraAnimList)
Definition sprite.c:1025
MenuPanel * tab
Window gWindows[64]
Definition windows.c:23

◆ pause_partners_handle_input()

void pause_partners_handle_input ( MenuPanel * panel)

Definition at line 643 of file pause_partners.c.

643 {
644 s32 delta;
645 s32 level, level2;
646 s32 partnerID;
647 s32 oldPos;
648
649 if (gPausePartnersNumPartners >= 2 && (gPausePartnersLevel == 0 || (gPauseHeldButtons & (BUTTON_Z | BUTTON_R)))) {
650 delta = 0;
651
653 delta = -1;
654 }
655
657 delta++;
658 }
659
661 delta--;
662 }
663
665 delta++;
666 }
667
668 if (delta) {
670 gPausePartnersCurrentPartnerIdx += delta;
671
672 if (gPausePartnersCurrentPartnerIdx < 0) {
673 gPausePartnersCurrentPartnerIdx = gPausePartnersNumPartners - 1;
674 if (gPausePartnersRotAngle < 360.0f) {
675 gPausePartnersRotAngle += 360.0f;
676 }
677 } else if (gPausePartnersCurrentPartnerIdx >= gPausePartnersNumPartners) {
678 gPausePartnersCurrentPartnerIdx = 0;
679 if (gPausePartnersRotAngle > 0.0f) {
680 gPausePartnersRotAngle -= 360.0f;
681 }
682 }
683
684 gPausePartnersSelectedMove = 0;
685 }
686 }
687
688 level = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level;
689 if (level == PARTNER_RANK_ULTRA) {
690 level = 4;
691 } else if (level == PARTNER_RANK_SUPER) {
692 level = 3;
693 } else if (level == PARTNER_RANK_NORMAL) {
694 level = 2;
695 }
696
698
699 if (gPausePartnersLevel == 1) {
700 oldPos = gPausePartnersSelectedMove;
701
702 level2 = gPlayerData.partners[gPausePartnersPartnerIDs[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].level;
703 if (level2 == 2) {
704 level2 = 4;
705 } else if (level2 == 1) {
706 level2 = 3;
707 } else if (level2 == 0) {
708 level2 = 2;
709 }
710
712 gPausePartnersSelectedMove--;
713 }
715 gPausePartnersSelectedMove++;
716 }
717
718 if (gPausePartnersSelectedMove < 0) {
719 gPausePartnersSelectedMove = level2 - 1;
720 } else if (gPausePartnersSelectedMove >= level2) {
721 gPausePartnersSelectedMove = 0;
722 }
723
724 if (gPausePartnersSelectedMove != oldPos) {
726 }
727 }
728
729 if ((gPausePressedButtons & BUTTON_A) && gPausePartnersLevel == 0) {
730 gPausePartnersLevel = 1;
733 return;
734 }
735
737 if (gPausePartnersLevel == 0) {
740 return;
741 } else {
742 gPausePartnersLevel = 0;
745 return;
746 }
747 }
748
750
751 if (gPausePartnersLevel == 0) {
752 gPauseCurrentDescMsg = gPausePartnersMessages[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]];
753 } else if (gPausePartnersSelectedMove == 0) {
754 gPauseCurrentDescMsg = gMoveTable[gPausePartnersMoveBase[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]]].fullDescMsg;
755 } else {
756 gPauseCurrentDescMsg = gMoveTable[gPausePartnersMoveBase[gPausePartnersPartnerIdx[gPausePartnersCurrentPartnerIdx]] + 2 + gPausePartnersSelectedMove].fullDescMsg;
757 }
758}
@ BUTTON_A
Definition enums.h:2790
@ BUTTON_R
Definition enums.h:2781
@ BUTTON_STICK_UP
Definition enums.h:2791
@ BUTTON_STICK_DOWN
Definition enums.h:2792
@ BUTTON_STICK_LEFT
Definition enums.h:2793
@ BUTTON_STICK_RIGHT
Definition enums.h:2794
@ BUTTON_B
Definition enums.h:2789
@ BUTTON_Z
Definition enums.h:2788
@ WINDOW_UPDATE_SHOW
Definition enums.h:5310
@ SOUND_MENU_BACK
Definition enums.h:701
@ SOUND_MENU_CHANGE_SELECTION
Definition enums.h:698
@ SOUND_MENU_NEXT
Definition enums.h:700
s32 gPausePressedButtons
Definition pause_main.c:24
HudScript * gPauseCurrentDescIconScript
Definition pause_main.c:26
s32 gPauseHeldButtons
Definition pause_main.c:23
s32 gPauseCurrentDescMsg
Definition pause_main.c:25
s32 gPausePartnersMessages[]
void sfx_play_sound(s32 soundID)
Definition sfx.c:517

◆ pause_partners_update()

void pause_partners_update ( MenuPanel * panel)

Definition at line 760 of file pause_partners.c.

760 {
761 s32 i;
762 f32 delta;
763 s32 absValue;
764 f32 deltaBefore;
765 s32 sgn;
766
767 deltaBefore = gPausePartnersCurrentPartnerIdx * 360 / gPausePartnersNumPartners - gPausePartnersRotAngle;
768 absValue = abs(deltaBefore);
769 sgn = sign(deltaBefore);
770
771 if (absValue >= 16) {
772 delta = deltaBefore * 0.3;
773 } else {
774 delta = sgn * gPausePartnersPortraitScrollInterpTable[absValue];
775 gPausePartnersRotAngle = (int)gPausePartnersRotAngle;
776 }
777 gPausePartnersRotAngle += delta;
778
779 for (i = 0; i < gPausePartnersNumPartners; i++) {
780 if (i == gPausePartnersCurrentPartnerIdx) {
781 spr_update_sprite(gPausePartnersSpriteIDs[gPausePartnersPartnerIdx[i]], gPausePartnersSpriteAnims[gPausePartnersPartnerIdx[i]][1], 1.0f);
782 } else {
783 spr_update_sprite(gPausePartnersSpriteIDs[gPausePartnersPartnerIdx[i]], gPausePartnersSpriteAnims[gPausePartnersPartnerIdx[i]][0], 1.0f);
784 }
785 }
786}
s32 sign(s32 value)
Definition 43F0.c:375
u8 gPausePartnersPortraitScrollInterpTable[]
s32 spr_update_sprite(s32 spriteInstanceID, s32 animID, f32 timeScale)
Definition sprite.c:1071

◆ pause_partners_cleanup()

void pause_partners_cleanup ( MenuPanel * panel)

Definition at line 788 of file pause_partners.c.

788 {
789 s32 i;
790
791 for (i = 0; i < ARRAY_COUNT(gPausePartnersHIDs); i++) {
792 hud_element_free(gPausePartnersHIDs[i]);
793 }
794
795 for (i = 0; i < ARRAY_COUNT(gPausePartnersSpriteIDs); i++) {
796 spr_free_sprite(gPausePartnersSpriteIDs[i]);
797 }
798}
void hud_element_free(s32 id)
s32 spr_free_sprite(s32 spriteInstanceID)
Definition sprite.c:1177

◆ pause_partners_load_portrait()

void pause_partners_load_portrait ( s32 index)

Definition at line 292 of file pause_partners.c.

292 {
293 s32 size;
294 void* asset;
295
296 if (gPausePartnersCurrentPortraitIndex != gPausePartnersPartnerIdx[index]) {
297 gPausePartnersCurrentPortraitIndex = gPausePartnersPartnerIdx[index];
300 general_heap_free(asset);
301 }
302
303 if (gPausePartnersNextPortraitIndex != gPausePartnersPartnerIdx[(index + 1) % gPausePartnersNumPartners]) {
304 gPausePartnersNextPortraitIndex = gPausePartnersPartnerIdx[(index + 1) % gPausePartnersNumPartners];
307 general_heap_free(asset);
308 }
309}
void * load_asset_by_name(const char *assetName, u32 *decompressedSize)
Definition world.c:251
s32 general_heap_free(void *data)
Definition heap.c:18
void decode_yay0(void *src, void *dst)
s32 gPausePartnersNextPortraitIndex
s32 gPausePartnersCurrentPortraitIndex
char * gPausePartnersAssetNames[]

Referenced by pause_partners_draw_contents(), and pause_partners_init().

Variable Documentation

◆ gPauseBufferPal1

s8 gPauseBufferPal1[512]
extern

Definition at line 618 of file pause_gfx.c.

◆ gPauseBufferImg1

s8 gPauseBufferImg1[15752]
extern

Definition at line 619 of file pause_gfx.c.

◆ gPauseBufferPal2

s8 gPauseBufferPal2[512]
extern

Definition at line 620 of file pause_gfx.c.

◆ gPauseBufferImg2

s8 gPauseBufferImg2[15752]
extern

Definition at line 621 of file pause_gfx.c.

◆ gPausePartnersHudScripts

HudScript* gPausePartnersHudScripts[][8]
Initial value:
= {
},
}
HudScript HES_MoveBlueOrb
HudScript HES_MoveDiamond
HudScript HES_FPCost
HudScript HES_MoveGreenOrb
HudScript HES_MoveRedOrb
#define LANGUAGE_DEFAULT
Definition enums.h:6397
HudScript HES_PartnerRank
HudScript HES_StatFp_1

Definition at line 52 of file pause_partners.c.

Referenced by pause_partners_init().

◆ gPausePartnersViewport

Vp gPausePartnersViewport
Initial value:
= {
.vp = {
.vscale = { 640, 480, 511, 0 },
.vtrans = { 640, 480, 511, 0 },
}
}

Definition at line 73 of file pause_partners.c.

73 {
74 .vp = {
75 .vscale = { 640, 480, 511, 0 },
76 .vtrans = { 640, 480, 511, 0 },
77 }
78};

Referenced by pause_partners_draw_contents().

◆ gPausePartnersSpriteAnims

s32 gPausePartnersSpriteAnims[][4]

Definition at line 80 of file pause_partners.c.

80 {
81 {
82 ANIM_WorldGoombario_Still,
83 ANIM_WorldGoombario_Walk,
84 ANIM_WorldGoombario_Talk,
86 },
87 {
88 ANIM_WorldKooper_Still,
89 ANIM_WorldKooper_Walk,
90 ANIM_WorldKooper_Talk,
92 },
93 {
94 ANIM_WorldBombette_Still,
95 ANIM_WorldBombette_Walk,
96 ANIM_WorldBombette_Talk,
98 },
99 {
100 ANIM_WorldParakarry_Still,
101 ANIM_WorldParakarry_Walk,
102 ANIM_WorldParakarry_Talk,
104 },
105 {
106 ANIM_WorldBow_Still,
107 ANIM_WorldBow_Walk,
108 ANIM_WorldBow_Talk,
110 },
111 {
112 ANIM_WorldWatt_Still,
113 ANIM_WorldWatt_Walk,
114 ANIM_WorldWatt_Talk,
116 },
117 {
118 ANIM_WorldSushie_Still,
119 ANIM_WorldSushie_Walk,
120 ANIM_WorldSushie_Talk,
122 },
123 {
124 ANIM_WorldLakilester_Still,
125 ANIM_WorldLakilester_Walk,
126 ANIM_WorldLakilester_Talk,
128 }
129};
#define ANIM_LIST_END
Terminates an extraAnimationList.
Definition types.h:22

Referenced by pause_partners_init(), and pause_partners_update().

◆ gPausePartnersPartnerIDs

s32 gPausePartnersPartnerIDs[]

◆ gPausePartnersMessages

s32 gPausePartnersMessages[]
Initial value:
= {
MSG_PartnerDesc_Goombario_Pause,
MSG_PartnerDesc_Kooper_Pause,
MSG_PartnerDesc_Bombette_Pause,
MSG_PartnerDesc_Parakarry_Pause,
MSG_PartnerDesc_Bow_Pause,
MSG_PartnerDesc_Watt_Pause,
MSG_PartnerDesc_Sushie_Pause,
MSG_PartnerDesc_Lakilester_Pause
}

Definition at line 142 of file pause_partners.c.

142 {
143 MSG_PartnerDesc_Goombario_Pause,
144 MSG_PartnerDesc_Kooper_Pause,
145 MSG_PartnerDesc_Bombette_Pause,
146 MSG_PartnerDesc_Parakarry_Pause,
147 MSG_PartnerDesc_Bow_Pause,
148 MSG_PartnerDesc_Watt_Pause,
149 MSG_PartnerDesc_Sushie_Pause,
150 MSG_PartnerDesc_Lakilester_Pause
151};

Referenced by pause_partners_handle_input().

◆ gPausePartnersMoveBase

s32 gPausePartnersMoveBase[]
Initial value:
= {
MOVE_HEADBONK1,
MOVE_SHELL_TOSS1,
MOVE_BODY_SLAM1,
MOVE_SKY_DIVE1,
MOVE_SMACK1,
MOVE_ELECTRO_DASH1,
MOVE_BELLY_FLOP1,
MOVE_SPINY_FLIP1
}

Definition at line 153 of file pause_partners.c.

153 {
154 MOVE_HEADBONK1,
155 MOVE_SHELL_TOSS1,
156 MOVE_BODY_SLAM1,
157 MOVE_SKY_DIVE1,
158 MOVE_SMACK1,
159 MOVE_ELECTRO_DASH1,
160 MOVE_BELLY_FLOP1,
161 MOVE_SPINY_FLIP1
162};

Referenced by pause_partners_draw_movelist(), and pause_partners_handle_input().

◆ gPausePartnersGridData

s8 gPausePartnersGridData[]
Initial value:
= {
4, 5, 6, 7,
0, 1, 2, 3
}

Definition at line 164 of file pause_partners.c.

164 {
165 4, 5, 6, 7,
166 0, 1, 2, 3
167};

◆ gPausePartnersAssetNames

char* gPausePartnersAssetNames[]
Initial value:
= {
"party_kurio",
"party_kameki",
"party_pinki",
"party_pareta",
"party_resa",
"party_akari",
"party_opuku",
"party_pokopi",
"letter_peach"
}

Definition at line 169 of file pause_partners.c.

169 {
170 "party_kurio",
171 "party_kameki",
172 "party_pinki",
173 "party_pareta",
174 "party_resa",
175 "party_akari",
176 "party_opuku",
177 "party_pokopi",
178 "letter_peach"
179};

Referenced by pause_partners_load_portrait().

◆ gPausePartnersImageBuffers

s8* gPausePartnersImageBuffers[] = { gPauseBufferImg1, gPauseBufferImg2 }

Definition at line 181 of file pause_partners.c.

s8 gPauseBufferImg2[15752]
Definition pause_gfx.c:621
s8 gPauseBufferImg1[15752]
Definition pause_gfx.c:619

Referenced by pause_partners_draw_contents().

◆ gPausePartnersPaletteBuffers

s8* gPausePartnersPaletteBuffers[] = { gPauseBufferPal1, gPauseBufferPal2 }

Definition at line 182 of file pause_partners.c.

s8 gPauseBufferPal1[512]
Definition pause_gfx.c:618
s8 gPauseBufferPal2[512]
Definition pause_gfx.c:620

Referenced by pause_partners_draw_contents(), and pause_partners_load_portrait().

◆ D_8024F74C

s32 D_8024F74C = 0

Definition at line 183 of file pause_partners.c.

◆ gPausePartnersDL

Gfx gPausePartnersDL[]
Initial value:
= {
gsDPPipeSync(),
gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
gsDPSetCycleType(G_CYC_1CYCLE),
gsDPSetTexturePersp(G_TP_NONE),
gsDPSetTextureDetail(G_TD_CLAMP),
gsDPSetTextureLOD(G_TL_TILE),
gsDPSetTextureLUT(G_TT_RGBA16),
gsDPSetTextureFilter(G_TF_POINT),
gsDPSetTextureConvert(G_TC_FILT),
gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2),
gsDPSetCombineMode(PM_CC_0F, PM_CC_0F),
gsSPClearGeometryMode(G_LIGHTING),
gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
gsSPEndDisplayList()
}
#define PM_CC_0F
Definition macros.h:296

Definition at line 184 of file pause_partners.c.

184 {
185 gsDPPipeSync(),
186 gsSPTexture(-1, -1, 0, G_TX_RENDERTILE, G_ON),
187 gsDPSetCycleType(G_CYC_1CYCLE),
188 gsDPSetTexturePersp(G_TP_NONE),
189 gsDPSetTextureDetail(G_TD_CLAMP),
190 gsDPSetTextureLOD(G_TL_TILE),
191 gsDPSetTextureLUT(G_TT_RGBA16),
192 gsDPSetTextureFilter(G_TF_POINT),
193 gsDPSetTextureConvert(G_TC_FILT),
194 gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2),
195 gsDPSetCombineMode(PM_CC_0F, PM_CC_0F),
196 gsSPClearGeometryMode(G_LIGHTING),
197 gsSPSetGeometryMode(G_SHADE | G_CULL_BACK | G_SHADING_SMOOTH),
198 gsSPEndDisplayList()
199};

Referenced by pause_partners_draw_contents().

◆ gPausePartnersCurrentPortraitIndex

s32 gPausePartnersCurrentPortraitIndex = -1

Definition at line 200 of file pause_partners.c.

Referenced by pause_partners_load_portrait().

◆ gPausePartnersNextPortraitIndex

s32 gPausePartnersNextPortraitIndex = -1

Definition at line 201 of file pause_partners.c.

Referenced by pause_partners_load_portrait().

◆ gPausePartnersWindowBPs

MenuWindowBP gPausePartnersWindowBPs[]

Definition at line 202 of file pause_partners.c.

202 {
203 {
204 .windowID = WIN_PAUSE_PARTNERS,
205 .unk_01 = 0,
206 .pos = { .x = 3, .y = 16 },
207 .width = 289,
208 .height = 154,
209 .priority = WINDOW_PRIORITY_1,
210 .fpDrawContents = &pause_partners_draw_contents,
211 .tab = NULL,
212 .parentID = WIN_PAUSE_MAIN,
213 .fpUpdate = { WINDOW_UPDATE_HIDE },
214 .extraFlags = 0,
215 .style = { .customStyle = &gPauseWS_20 }
216 }, {
217 .windowID = WIN_PAUSE_PARTNERS_TITLE,
218 .unk_01 = 0,
219 .pos = { .x = 8, .y = 103 },
220 .width = 112,
221 .height = 20,
222 .priority = WINDOW_PRIORITY_0,
223 .fpDrawContents = &pause_partners_draw_title,
224 .tab = NULL,
225 .parentID = WIN_PAUSE_PARTNERS,
226 .fpUpdate = { WINDOW_UPDATE_SHOW },
227 .extraFlags = 0,
228 .style = { .customStyle = &gPauseWS_22 }
229 }, {
230 .windowID = WIN_PAUSE_PARTNERS_MOVELIST,
231 .unk_01 = 0,
232 .pos = { .x = 133, .y = 36 },
233 .width = 140,
234 .height = 80,
235 .priority = WINDOW_PRIORITY_0,
236 .fpDrawContents = &pause_partners_draw_movelist,
237 .tab = NULL,
238 .parentID = WIN_PAUSE_PARTNERS,
239 .fpUpdate = { WINDOW_UPDATE_HIDE },
240 .extraFlags = 0,
241 .style = { -1 }
242 }, {
244 .unk_01 = 0,
245 .pos = { .x = 12, .y = -6 },
246 .width = 80,
247 .height = 16,
248 .priority = WINDOW_PRIORITY_0,
249 .fpDrawContents = &pause_partners_draw_movelist_title,
250 .tab = NULL,
251 .parentID = WIN_PAUSE_PARTNERS_MOVELIST,
252 .fpUpdate = { WINDOW_UPDATE_SHOW },
253 .extraFlags = 0,
254 .style = { -1 }
255 }, {
257 .unk_01 = 0,
258 .pos = { .x = 102, .y = -12 },
259 .width = 32,
260 .height = 32,
261 .priority = WINDOW_PRIORITY_0,
262 .fpDrawContents = &pause_partners_draw_movelist_flower,
263 .tab = NULL,
264 .parentID = WIN_PAUSE_PARTNERS_MOVELIST,
265 .fpUpdate = { WINDOW_UPDATE_SHOW },
266 .extraFlags = 0,
267 .style = { -1 }
268 }
269};
@ WINDOW_PRIORITY_1
Definition enums.h:3183
@ WINDOW_PRIORITY_0
Definition enums.h:3182
@ WIN_PAUSE_PARTNERS_TITLE
Definition enums.h:5277
@ WIN_PAUSE_MAIN
Definition enums.h:5262
WindowStyleCustom gPauseWS_20
WindowStyleCustom gPauseWS_22
void pause_partners_draw_title(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
void pause_partners_draw_movelist_title(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
void pause_partners_draw_movelist(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
void pause_partners_draw_contents(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)
void pause_partners_draw_movelist_flower(MenuPanel *menu, s32 baseX, s32 baseY, s32 width, s32 height, s32 opacity, s32 darkening)

Referenced by pause_partners_init().

◆ gPausePartnersPortraitScrollInterpTable

u8 gPausePartnersPortraitScrollInterpTable[] = {0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 }

Definition at line 270 of file pause_partners.c.

270{0, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8 };

Referenced by pause_partners_update().

◆ gPausePanelPartners

MenuPanel gPausePanelPartners
Initial value:
= {
.initialized = FALSE,
.col = 0,
.row = 1,
.selected = 0,
.state = 0,
.numCols = 4,
.numRows = 2,
.numPages = 0,
.fpInit = &pause_partners_init,
.fpHandleInput = &pause_partners_handle_input,
.fpUpdate = &pause_partners_update,
.fpCleanup = &pause_partners_cleanup
}
void pause_partners_init(MenuPanel *panel)
void pause_partners_cleanup(MenuPanel *panel)
s8 gPausePartnersGridData[]
void pause_partners_handle_input(MenuPanel *panel)
void pause_partners_update(MenuPanel *panel)

Definition at line 271 of file pause_partners.c.

271 {
272 .initialized = FALSE,
273 .col = 0,
274 .row = 1,
275 .selected = 0,
276 .state = 0,
277 .numCols = 4,
278 .numRows = 2,
279 .numPages = 0,
280 .gridData = gPausePartnersGridData,
281 .fpInit = &pause_partners_init,
282 .fpHandleInput = &pause_partners_handle_input,
283 .fpUpdate = &pause_partners_update,
284 .fpCleanup = &pause_partners_cleanup
285};