|
SSBM Decomp
|
#include "inlines.h"#include "mndiagram.static.h"#include "mndiagram2.h"#include "mndiagram3.h"#include "mnmain.h"#include "mnname.h"#include "types.h"#include <dolphin/types.h>#include <melee/gm/gm_1601.h>#include <melee/gm/gmmain_lib.h>#include <melee/gm/types.h>#include <melee/lb/lb_00B0.h>#include <melee/lb/lb_00CE.h>#include <melee/lb/lbarchive.h>#include <melee/lb/lbaudio_ax.h>#include <melee/lb/lblanguage.h>#include <melee/lb/lbspdisplay.h>#include <sysdolphin/baselib/debug.h>#include <sysdolphin/baselib/gobj.h>#include <sysdolphin/baselib/gobjgxlink.h>#include <sysdolphin/baselib/gobjobject.h>#include <sysdolphin/baselib/gobjplink.h>#include <sysdolphin/baselib/gobjproc.h>#include <sysdolphin/baselib/gobjuserdata.h>#include <sysdolphin/baselib/jobj.h>#include <sysdolphin/baselib/memory.h>Data Structures | |
| struct | mnDiagram_Assets |
| Archive asset pointers struct (for mnDiagram_Init) Cast from &mnDiagram_FighterDisplayOrder 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 | GET_DIAGRAM(gobj) |
| #define | GET_DIAGRAM_ANIM_TABLE() |
Functions | |
| ASSERT_SIZE (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 (u8 is_name_mode, u8 player_index) |
| s32 | mnDiagram_GetPlayPercentage (u8 is_name_mode, u8 player_index) |
| s32 | mnDiagram_GetAveragePlayerCount (u8 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_SumFighterFalls (u8 field_index) |
| Gets total falls (deaths) of a fighter against all other fighters. | |
| int | mnDiagram_GetFighterTotalFalls (u8 field_index) |
| static int | mnDiagram_CountUnlockedFightersForHeaders (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 | 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_GetVisibleNameRowForInput (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleNameFrom2 (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 int | mnDiagram_FindNextName (s32 cur) |
| static u8 | mnDiagram_GetVisibleNameCursorFrom (int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterCursorFrom (u8 *sorted, int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterColumnForInput (u8 *sorted, int start, int rank, s32 *index) |
| static u8 | mnDiagram_GetVisibleFighterRowForInput (u8 *sorted, Diagram *data, const u16 *selection, s32 *index) |
| static u8 | mnDiagram_GetVisibleFighterFromPointer (const u8 *sorted, u8 *p, int start, int rank) |
| static u8 | mnDiagram_GetVisibleFighterCursorFrom2 (int start, int rank) |
| static Diagram * | mnDiagram_GetCurrentDiagramData (void) |
| static u8 | mnDiagram_GetVisibleNameColumnForInput (int start, int rank) |
| static s32 | mnDiagram_CountUnlockedFightersForInput (void) |
| void | mnDiagram_InputProc (HSD_GObj *gobj) |
| Per-frame input handler for the VS Records "diagram" grid screen. | |
| void | mnDiagram_PopupCleanup (void *arg0) |
| ASSERT_SIZE (mnDiagram_PopupData, 0x4C) | |
| static Vec3 * | mnDiagram_PopupAnimProc_Inline (mnDiagram_AnimTable *arg0, int arg1) |
| void | mnDiagram_PopupAnimProc (void *arg0) |
| static void | mnDiagram_FormatPopupNumber (char *buf, u32 val) |
| void | mnDiagram_CreatePopupTexts (void *arg0, s32 selkind_or_nametag_slot_id, s32 arg2, s32 use_nametag) |
| 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) |
| static int | mnDiagram_GetFighterPairKOs (u8 fighter, u8 opponent) |
| void | mnDiagram_DrawGridValues (void *arg0, s32 row_start, s32 col_start, 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) |
| static HSD_JObj * | mnDiagram_LoadHeaderIcon (void **joint_data, int fighter_id, HSD_JObj **child) |
| void | mnDiagram_DrawFighterHeaders (void *arg0, int arg1, int arg2) |
| 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 | |
| StaticModelDesc | MenMainCursorB1_Top |
| StaticModelDesc | MenMainSubB1_Top |
| StaticModelDesc | MenMainNmB_Top |
| StaticModelDesc | MenMainFaceB_Top |
| StaticModelDesc | MenMainConB1_Top |
| HSD_GObj * | mnDiagram_804D6C10 |
| StaticModelDesc | MenMainCursorB3_Top |
| StaticModelDesc | MenMainConB3_Top |
| StaticModelDesc | MenMainConB2_Top |
| u8 | mnDiagram_FighterDisplayOrder [0x1C] |
| u8 | mnDiagram_NameDisplayOrder [0x78] |
| 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 |
| char | mnDiagram_804D4FA4 [1] = "" |
| #define GET_DIAGRAM | ( | gobj | ) |
| #define GET_DIAGRAM_ANIM_TABLE | ( | ) |
| ASSERT_SIZE | ( | 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 |
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 |
| 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 |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
|
inlinestatic |
| 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 and empty name slots.
| void mnDiagram_PopupCleanup | ( | void * | arg0 | ) |
| ASSERT_SIZE | ( | mnDiagram_PopupData | , |
| 0x4C | ) |
|
inlinestatic |
| void mnDiagram_PopupAnimProc | ( | void * | arg0 | ) |
|
inlinestatic |
| void mnDiagram_CreatePopupTexts | ( | void * | arg0, |
| s32 | selkind_or_nametag_slot_id, | ||
| s32 | arg2, | ||
| s32 | use_nametag ) |
|
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 ) |
|
inlinestatic |
| void mnDiagram_DrawFighterHeaders | ( | void * | arg0, |
| int | arg1, | ||
| int | arg2 ) |
| 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) |
| StaticModelDesc MenMainCursorB1_Top |
| StaticModelDesc MenMainSubB1_Top |
| StaticModelDesc MenMainNmB_Top |
| StaticModelDesc MenMainFaceB_Top |
| StaticModelDesc MenMainConB1_Top |
| HSD_GObj* mnDiagram_804D6C10 |
| StaticModelDesc MenMainCursorB3_Top |
| StaticModelDesc MenMainConB3_Top |
| StaticModelDesc MenMainConB2_Top |
| u8 mnDiagram_FighterDisplayOrder[0x1C] |
| u8 mnDiagram_NameDisplayOrder[0x78] |
|
static |
|
static |
|
static |
|
static |
Trailing animation settings overlaid by mnDiagram_AnimTable.
|
static |
| char mnDiagram_804D4FA4[1] = "" |