|
SSBM Decomp
|
#include "ft/forward.h"#include "gm/gm_1A36.h"#include "mn/types.h"#include "mndiagram.static.h"#include "mndiagram2.static.h"#include "baselib/debug.h"#include "baselib/gobj.h"#include "baselib/gobjgxlink.h"#include "baselib/gobjobject.h"#include "baselib/gobjplink.h"#include "baselib/gobjproc.h"#include "baselib/gobjuserdata.h"#include "baselib/jobj.h"#include "baselib/memory.h"#include "dolphin/types.h"#include "gm/gm_1601.h"#include "gm/gmmain_lib.h"#include "gm/types.h"#include "lb/lb_00B0.h"#include "lb/lb_00CE.h"#include "lb/lbarchive.h"#include "lb/lbaudio_ax.h"#include "lb/lbspdisplay.h"#include "mn/inlines.h"#include "mn/mndiagram2.h"#include "mn/mndiagram3.h"#include "mn/mnmain.h"#include "mn/mnname.h"Data Structures | |
| struct | mnDiagram_804A0750_t |
| Sorted fighter indices array (25 fighters + padding). More... | |
| struct | mnDiagram_804A076C_t |
| Sorted name indices array (120 names). More... | |
| struct | mnDiagram_Assets |
| Archive asset pointers struct (for mnDiagram_Init) Cast from &mnDiagram_804A0750 to access asset arrays. More... | |
| struct | mnDiagram_CleanupData |
| User data structure for mnDiagram_PopupCleanup callback. More... | |
| struct | mnDiagram_AnimData |
| User data structure for mnDiagram_ExitAnimProc callback. More... | |
| struct | mnDiagram_PopupAnimTableHead |
| Head label for the contiguous mnDiagram popup animation data run. More... | |
| struct | mnDiagram_AnimTable |
| Overlay over &mnDiagram_803EE728 to reach the trailing animation/text-layout data the popup/cursor procs read at fixed offsets. More... | |
| struct | RankEntry |
| struct | mnDiagram_PopupData |
| struct | mnDiagram_MainOverlay |
Macros | |
| #define | MNDIAGRAM_SOURCE |
| #define | GET_DIAGRAM(gobj) |
| #define | GET_DIAGRAM_ANIM_TABLE() |
Functions | |
| STATIC_ASSERT (sizeof(mnDiagram_804A0750_t)==0x1C) | |
| STATIC_ASSERT (sizeof(mnDiagram_804A076C_t)==0x78) | |
| STATIC_ASSERT (sizeof(mnDiagram_Assets)==0x118) | |
| u8 | mnDiagram_GetFighterByIndex (int idx) |
| Gets the fighter ID at the given sorted index. | |
| u8 | mnDiagram_GetNameByIndex (int idx) |
| Gets the name ID at the given sorted index. | |
| bool | mnDiagram_IsDistanceOverflow (u32 distance) |
| Checks if a distance stat exceeds 1 mile (display cap). | |
| u32 | mnDiagram_ConvertDistanceForDisplay (u32 distance) |
| Converts internal distance units to display units. | |
| s32 | mnDiagram_GetHitPercentage (int is_name_mode, u8 player_index) |
| s32 | mnDiagram_GetPlayPercentage (u8 is_name_mode, u8 player_index) |
| s32 | mnDiagram_GetAveragePlayerCount (int is_name_mode, u8 player_index) |
| int | mnDiagram_GetNameTotalKOs (u8 field_index) |
| Gets total KOs scored by a name against all other names. | |
| static int | mnDiagram_SumNameFalls (u8 field_index) |
| Gets total falls (deaths) of a name against all other names. | |
| int | mnDiagram_GetNameTotalFalls (u8 field_index) |
| int | mnDiagram_GetFighterTotalKOs (u8 field_index) |
| Gets total KOs scored by a fighter against all other fighters. | |
| static int | mnDiagram_SumFighterKOs (u8 field_index) |
| static int | mnDiagram_SumFighterKOsClamped (u8 field_index) |
| static int | mnDiagram_SumFighterFalls (u8 field_index) |
| Gets total falls (deaths) of a fighter against all other fighters. | |
| int | mnDiagram_GetFighterTotalFalls (u8 field_index) |
| static int | mnDiagram_CountUnlockedFightersInline (void) |
| Counts the number of unlocked fighters (inline-expanded form). | |
| void | mnDiagram_FormatDecimalNumber (char *buf, u32 val, int decimal_places) |
| Formats a number with optional decimal places. | |
| void | mnDiagram_FormatTime (char *buf, s32 seconds) |
| Formats seconds as MM:SS string. | |
| void | mnDiagram_IntToStr (char *buf, u32 val) |
| Converts a number to a null-terminated string. | |
| u8 | mnDiagram_GetPrevNameIndex (s32 idx) |
| Gets the previous valid name index. | |
| u8 | mnDiagram_GetNextNameIndex (s32 idx) |
| u8 | mnDiagram_GetPrevFighterIndex (s32 idx) |
| Gets the previous valid fighter index. | |
| u8 | mnDiagram_GetNextFighterIndex (s32 idx) |
| u32 | mnDiagram_GetNamePlayTimeByFighter (int name_idx, SelectableCharacterKind selkind) |
| Gets play time for a specific fighter under a name tag. | |
| static int | CountTiedFighters (int name, int min_fighter, u32 min_time) |
| static int | CheckAllZeroPlayTime (int name_idx) |
| int | mnDiagram_GetRankedFighterForName (int rank, int name_idx, u32(*func)(int, int)) |
| static int | mnDiagram_AllPlayTimesZero (u8 name) |
| u8 | mnDiagram_GetLeastPlayedFighter (u8 name_idx) |
| void | mnDiagram_SortFightersByKOs (void) |
| static int | mnDiagram_SumNameKOs (u8 field_index) |
| void | mnDiagram_SortNamesByKOs (void) |
| int | mnDiagram_CountUnlockedFighters (void) |
| Counts the number of unlocked fighters. | |
| void | mnDiagram_PopupInputProc (HSD_GObj *gobj) |
| static u8 | mnDiagram_GetVisibleNameFrom (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleNameFrom2 (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterFrom (u8 *sorted, int start, int rank) |
| static s32 | mnDiagram_FindPrevFighter (u8 *sorted, SelectableCharacterKind cur) |
| static u8 | mnDiagram_FindNextFighter (u8 *sorted, SelectableCharacterKind cur) |
| static s32 | mnDiagram_FindPrevName (s32 cur) |
| static s32 | mnDiagram_FindPrevNameWrap (s32 cur) |
| static s32 | mnDiagram_FindPrevFighterWrap (u8 *sorted, s32 cur) |
| static u8 | mnDiagram_FindNextName (s32 cur) |
| static u8 | mnDiagram_GetVisibleNameCursorFrom (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterCursorFrom (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterCursorFrom2 (u8 *sorted, int start, int rank) |
| static void | mnDiagram_SaveCursorToGameRules (Diagram *d) |
| Persists the current name/fighter cursor positions and mode into the shared GameRules block on menu exit / page change. | |
| void | mnDiagram_InputProc (HSD_GObj *gobj) |
| Per-frame input handler for the VS Records "diagram" grid screen. | |
| void | mnDiagram_PopupCleanup (void *arg0) |
| STATIC_ASSERT (sizeof(mnDiagram_PopupData)==0x4C) | |
| Vec3 * | mnDiagram_PopupAnimProc_Inline (mnDiagram_AnimTable *arg0, int arg1) |
| void | mnDiagram_PopupAnimProc (void *arg0) |
| void | mnDiagram_FormatPopupNumber (char *buf, u32 val) |
| void | mnDiagram_CreatePopupTexts (void *arg0, s32 selkind_or_nametag_slot_id, s32 arg2, s32 use_nametag) |
| static void | order_sdata2 (void) |
| void | mnDiagram_CreatePopup (s32 arg0, s32 arg1, s32 use_nametag) |
| static void * | mnDiagram_GetUserData (HSD_GObj *gobj) |
| static HSD_JObj * | mnDiagram_GetJObjChild (HSD_JObj *jobj) |
| void | mnDiagram_ClearGrid (void *arg0) |
| void | mnDiagram_RefreshGrid (HSD_GObj *arg0, int arg1, int arg2) |
| void | mnDiagram_UpdateScrollArrows (HSD_GObj *gobj) |
| Updates scroll arrow visibility based on cursor position and available entries beyond the visible range. | |
| void | mnDiagram_ExitAnimProc (HSD_GObj *gobj) |
| void | mnDiagram_UpdateScrollArrowVisibility (void *gobj, int count) |
| Updates scroll arrow visibility based on entry count. | |
| void | mnDiagram_OnFrame (HSD_GObj *gobj) |
| void | mnDiagram_DrawCellValue (void *arg0, u8 arg1, u8 arg2, int arg3) |
| void | mnDiagram_DrawGridValues (void *arg0, s32 arg1, s32 arg2, u8 arg3) |
| static void | mnDiagram_TextSetPos (HSD_Text *text, f32 x, f32 y, f32 z) |
| void | mnDiagram_DrawNameHeaders (void *arg0, s32 arg1, s32 arg2) |
| HSD_JObj * | mnDiagram_CreateFighterIcon (int idx, int arg1) |
| void | mnDiagram_DrawFighterHeaders (void *arg0, int arg1, int arg2) |
| static Diagram * | mnDiagram_GetCurrentDiagramData (void) |
| void | mnDiagram_CursorProc (HSD_GObj *gobj) |
| void | mnDiagram_CreateCursor (void) |
| void | mnDiagram_CreateScreen (u8 arg0) |
| void | mnDiagram_Init (u8 arg0, u8 arg1) |
| Initialize VS Records diagram screen. | |
Variables | |
| mnDiagram_804A0750_t | mnDiagram_804A0750 |
| BSS variables - sorted player arrays. | |
| mnDiagram_804A076C_t | mnDiagram_804A076C |
| static mnDiagram_PopupAnimTableHead | mnDiagram_803EE728 |
| static u8 | mnDiagram_DefaultFighterOrder [0x1C] |
| static AnimLoopSettings | mnDiagram_803EE768 = { 0.0f, 9.0f, -0.1f } |
| static f32 | mnDiagram_PopupExitAnimFrames [] |
| Trailing animation settings overlaid by mnDiagram_AnimTable. | |
| static s32 | mnDiagram_PopupTextColor = 0xFF |
| #define MNDIAGRAM_SOURCE |
| #define GET_DIAGRAM | ( | gobj | ) |
| #define GET_DIAGRAM_ANIM_TABLE | ( | ) |
| STATIC_ASSERT | ( | sizeof(mnDiagram_804A0750_t) | = =0x1C | ) |
| STATIC_ASSERT | ( | sizeof(mnDiagram_804A076C_t) | = =0x78 | ) |
| STATIC_ASSERT | ( | sizeof(mnDiagram_Assets) | = =0x118 | ) |
| u8 mnDiagram_GetFighterByIndex | ( | int | idx | ) |
Gets the fighter ID at the given sorted index.
| idx | Index into the sorted fighter list |
| u8 mnDiagram_GetNameByIndex | ( | int | idx | ) |
Gets the name ID at the given sorted index.
| idx | Index into the sorted name list |
Checks if a distance stat exceeds 1 mile (display cap).
Distance stats are stored in internal game units and converted for display by dividing by ~30.5 to get feet. When the distance exceeds these thresholds (~1 mile), the display caps at "1 mi." instead of showing larger values.
| distance | The distance value in internal game units. |
160,934 internal units / 30.5 = ~5,276 ft = 1 mile
100,000 internal units / 30.5 = ~3,278 meters
Converts internal distance units to display units.
For US locale: Returns feet (or miles if >= 1 mile). For other locales: Returns centimeters (or km if >= 1km).
| distance | Distance in internal game units. |
| int mnDiagram_GetNameTotalKOs | ( | u8 | field_index | ) |
Gets total KOs scored by a name against all other names.
| field_index | Index of the name tag to query. |
|
inlinestatic |
Gets total falls (deaths) of a name against all other names.
Iterates through all names and sums how many times each name KO'd the target name. This is the column sum of the KO matrix. Accesses vs_kos[field_index] in each name's data.
| field_index | Index of the name tag to query. |
| int mnDiagram_GetNameTotalFalls | ( | u8 | field_index | ) |
| int mnDiagram_GetFighterTotalKOs | ( | u8 | field_index | ) |
Gets total KOs scored by a fighter against all other fighters.
Iterates through all unlocked fighters and sums how many times the target fighter KO'd each one. Fighter data uses a similar matrix layout to name data.
| field_index | Index of the fighter to query (0-24). |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Gets total falls (deaths) of a fighter against all other fighters.
Iterates through all unlocked fighters and sums how many times each fighter KO'd the target fighter. This is the column sum of the fighter KO matrix.
| field_index | Index of the fighter to query (0-24). |
| int mnDiagram_GetFighterTotalFalls | ( | u8 | field_index | ) |
|
inlinestatic |
Counts the number of unlocked fighters (inline-expanded form).
| void mnDiagram_FormatDecimalNumber | ( | char * | buf, |
| u32 | val, | ||
| int | decimal_places ) |
Formats a number with optional decimal places.
| buf | Output buffer for the string. |
| val | The value to format (treat last decimal_places digits as decimal). |
| decimal_places | Number of decimal places (0 = integer only). |
| void mnDiagram_FormatTime | ( | char * | buf, |
| s32 | seconds ) |
Formats seconds as MM:SS string.
| buf | Output buffer for the string. |
| seconds | Time in seconds. |
| void mnDiagram_IntToStr | ( | char * | buf, |
| u32 | val ) |
Converts a number to a null-terminated string.
| buf | Output buffer for the string. |
| val | The number to convert. |
Gets the previous valid name index.
| idx | Current name index. |
Gets the previous valid fighter index.
| idx | Current fighter index. |
| u32 mnDiagram_GetNamePlayTimeByFighter | ( | int | name_idx, |
| SelectableCharacterKind | selkind ) |
Gets play time for a specific fighter under a name tag.
| name_idx | Name tag index. |
| fighter_idx | Fighter index (0-24). |
|
inlinestatic |
|
inlinestatic |
| int mnDiagram_GetRankedFighterForName | ( | int | rank, |
| int | name_idx, | ||
| u32(* | func )(int, int) ) |
|
inlinestatic |
| void mnDiagram_SortFightersByKOs | ( | void | ) |
|
inlinestatic |
| void mnDiagram_SortNamesByKOs | ( | void | ) |
| int mnDiagram_CountUnlockedFighters | ( | void | ) |
Counts the number of unlocked fighters.
| void mnDiagram_PopupInputProc | ( | HSD_GObj * | gobj | ) |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
Persists the current name/fighter cursor positions and mode into the shared GameRules block on menu exit / page change.
| void mnDiagram_InputProc | ( | HSD_GObj * | gobj | ) |
Per-frame input handler for the VS Records "diagram" grid screen.
Dispatches the current frame's menu input:
The "visible entry" scans skip locked fighters / empty name slots, and are factored into the mnDiagram_GetVisible*From / mnDiagram_Get{Prev,Next}*Index helpers shared with mndiagram2.
| void mnDiagram_PopupCleanup | ( | void * | arg0 | ) |
| STATIC_ASSERT | ( | sizeof(mnDiagram_PopupData) | = =0x4C | ) |
|
inline |
| void mnDiagram_PopupAnimProc | ( | void * | arg0 | ) |
|
inline |
| void mnDiagram_CreatePopupTexts | ( | void * | arg0, |
| s32 | selkind_or_nametag_slot_id, | ||
| s32 | arg2, | ||
| s32 | use_nametag ) |
|
static |
|
inlinestatic |
| void mnDiagram_ClearGrid | ( | void * | arg0 | ) |
| void mnDiagram_RefreshGrid | ( | HSD_GObj * | arg0, |
| int | arg1, | ||
| int | arg2 ) |
| void mnDiagram_UpdateScrollArrows | ( | HSD_GObj * | gobj | ) |
Updates scroll arrow visibility based on cursor position and available entries beyond the visible range.
| [in] | gobj | The diagram GObj containing arrow JObjs in user_data. |
Checks 4 arrows: right (10 more cols?), left (cursor > 0?), up (cursor row > 0?), down (7 more rows?). Hides arrows when there's nothing to scroll to, shows them when there is.
| void mnDiagram_ExitAnimProc | ( | HSD_GObj * | gobj | ) |
| void mnDiagram_UpdateScrollArrowVisibility | ( | void * | gobj, |
| int | count ) |
Updates scroll arrow visibility based on entry count.
Hides vertical arrows if count <= 7 (fits in visible rows). Hides horizontal arrows if count <= 10 (fits in visible columns).
| gobj | The diagram GObj containing arrow JObjs in user_data. |
| count | Number of entries (fighters or names) to display. |
| void mnDiagram_OnFrame | ( | HSD_GObj * | gobj | ) |
| HSD_JObj * mnDiagram_CreateFighterIcon | ( | int | idx, |
| int | arg1 ) |
| void mnDiagram_DrawFighterHeaders | ( | void * | arg0, |
| int | arg1, | ||
| int | arg2 ) |
|
inlinestatic |
| void mnDiagram_CursorProc | ( | HSD_GObj * | gobj | ) |
| void mnDiagram_CreateCursor | ( | void | ) |
| void mnDiagram_CreateScreen | ( | u8 | arg0 | ) |
Initialize VS Records diagram screen.
| arg0 | If non-zero, load DAT archive symbols |
| arg1 | Initial mode (passed to mnDiagram_CreateScreen) |
| mnDiagram_804A0750_t mnDiagram_804A0750 |
BSS variables - sorted player arrays.
| mnDiagram_804A076C_t mnDiagram_804A076C |
|
static |
|
static |
|
static |
|
static |
Trailing animation settings overlaid by mnDiagram_AnimTable.
|
static |