SSBM Decomp
Loading...
Searching...
No Matches
mndiagram.c File Reference
#include "mndiagram.static.h"
#include "mndiagram2.static.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/lb_00F9.h"
#include "lb/lbarchive.h"
#include "lb/lbaudio_ax.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_802437E8) 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  RankEntry
 
struct  mnDiagram_PopupData
 

Functions

 STATIC_ASSERT (sizeof(mnDiagram_804A0750_t)==0x1C)
 
 STATIC_ASSERT (sizeof(mnDiagram_804A076C_t)==0x78)
 
 STATIC_ASSERT (sizeof(mnDiagram_Assets)==0x108)
 
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_SumFighterFalls (u8 field_index)
 Gets total falls (deaths) of a fighter against all other fighters.
 
int mnDiagram_GetFighterTotalFalls (u8 field_index)
 
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, int fighter_idx)
 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))
 
u8 mnDiagram_GetLeastPlayedFighter (u8 name_idx)
 
void mnDiagram_8023FA6C (void)
 
void mnDiagram_8023FC28 (void)
 
int mnDiagram_CountUnlockedFighters (void)
 Counts the number of unlocked fighters.
 
void mnDiagram_PopupInputProc (HSD_GObj *gobj)
 
void mnDiagram_InputProc (HSD_GObj *gobj)
 
void mnDiagram_PopupCleanup (void *arg0)
 
void mnDiagram_PopupAnimProc (void *arg0)
 
void mnDiagram_80240D94 (void *arg0, s32 arg1, s32 arg2, s32 arg3)
 
void mnDiagram_80241310 (s32 arg0, s32 arg1, s32 arg2)
 
static void * mnDiagram_GetUserData (HSD_GObj *gobj)
 
static HSD_JObjmnDiagram_GetJObjChild (HSD_JObj *jobj)
 
void mnDiagram_80241668 (void *arg0)
 
void mnDiagram_80241730 (void *arg0, int arg1, int arg2)
 
void mnDiagram_802417D0 (HSD_GObj *gobj)
 
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_80241E78 (void *arg0, u8 arg1, u8 arg2, int arg3)
 
void mnDiagram_8024227C (void *arg0, s32 arg1, s32 arg2, u8 arg3)
 
void mnDiagram_802427B4 (void *arg0, s32 arg1, s32 arg2)
 
HSD_JObjmnDiagram_80242B38 (int idx, int arg1)
 
void mnDiagram_80242C0C (void *arg0, int arg1, int arg2)
 
void mnDiagram_CursorProc (HSD_GObj *gobj)
 
void mnDiagram_802433AC (void)
 
void mnDiagram_80243434 (u8 arg0)
 
void mnDiagram_802437E8 (s32 arg0, s32 arg1)
 Initialize VS Records diagram screen.
 

Variables

mnDiagram_804A0750_t mnDiagram_804A0750
 BSS variables - sorted player arrays.
 
mnDiagram_804A076C_t mnDiagram_804A076C
 
static AnimLoopSettings mnDiagram_803EE768 = { 0.0f, 9.0f, -0.1f }
 
static u8 mnDiagram_803EE74C [0x1C]
 
static Point3d mnDiagram_803EE728 [3]
 
static s32 mnDiagram_804D4FA0 = 0xFF
 

Function Documentation

◆ STATIC_ASSERT() [1/3]

STATIC_ASSERT ( sizeof(mnDiagram_804A0750_t = =0x1C)

◆ STATIC_ASSERT() [2/3]

STATIC_ASSERT ( sizeof(mnDiagram_804A076C_t = =0x78)

◆ STATIC_ASSERT() [3/3]

STATIC_ASSERT ( sizeof(mnDiagram_Assets = =0x108)

◆ mnDiagram_GetFighterByIndex()

u8 mnDiagram_GetFighterByIndex ( int  idx)

Gets the fighter ID at the given sorted index.

Parameters
idxIndex into the sorted fighter list
Returns
Fighter ID

◆ mnDiagram_GetNameByIndex()

u8 mnDiagram_GetNameByIndex ( int  idx)

Gets the name ID at the given sorted index.

Parameters
idxIndex into the sorted name list
Returns
Name ID

◆ mnDiagram_IsDistanceOverflow()

bool mnDiagram_IsDistanceOverflow ( u32  distance)

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.

Parameters
distanceThe distance value in internal game units.
Returns
true if distance >= 1 mile, false otherwise.

160,934 internal units / 30.5 = ~5,276 ft = 1 mile

100,000 internal units / 30.5 = ~3,278 meters

◆ mnDiagram_ConvertDistanceForDisplay()

u32 mnDiagram_ConvertDistanceForDisplay ( u32  distance)

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).

Parameters
distanceDistance in internal game units.
Returns
Distance in display units (feet/cm or miles/km).

◆ mnDiagram_GetHitPercentage()

s32 mnDiagram_GetHitPercentage ( u8  is_name_mode,
u8  player_index 
)

◆ mnDiagram_GetPlayPercentage()

s32 mnDiagram_GetPlayPercentage ( u8  is_name_mode,
u8  player_index 
)

◆ mnDiagram_GetAveragePlayerCount()

s32 mnDiagram_GetAveragePlayerCount ( u8  is_name_mode,
u8  player_index 
)

◆ mnDiagram_GetNameTotalKOs()

int mnDiagram_GetNameTotalKOs ( u8  field_index)

Gets total KOs scored by a name against all other names.

Parameters
field_indexIndex of the name tag to query.
Returns
Sum of KOs scored by this name against all existing names.

◆ mnDiagram_SumNameFalls()

static int mnDiagram_SumNameFalls ( u8  field_index)
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.

Parameters
field_indexIndex of the name tag to query.
Returns
Sum of times this name was KO'd by all existing names (capped at 999999).

◆ mnDiagram_GetNameTotalFalls()

int mnDiagram_GetNameTotalFalls ( u8  field_index)

◆ mnDiagram_GetFighterTotalKOs()

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.

Parameters
field_indexIndex of the fighter to query (0-24).
Returns
Sum of KOs scored by this fighter against all unlocked fighters.

◆ mnDiagram_SumFighterFalls()

static int mnDiagram_SumFighterFalls ( u8  field_index)
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.

Parameters
field_indexIndex of the fighter to query (0-24).
Returns
Sum of times this fighter was KO'd by all unlocked fighters.

◆ mnDiagram_GetFighterTotalFalls()

int mnDiagram_GetFighterTotalFalls ( u8  field_index)

◆ mnDiagram_FormatDecimalNumber()

void mnDiagram_FormatDecimalNumber ( char *  buf,
u32  val,
int  decimal_places 
)

Formats a number with optional decimal places.

Parameters
bufOutput buffer for the string.
valThe value to format (treat last decimal_places digits as decimal).
decimal_placesNumber of decimal places (0 = integer only).

◆ mnDiagram_FormatTime()

void mnDiagram_FormatTime ( char *  buf,
s32  seconds 
)

Formats seconds as MM:SS string.

Parameters
bufOutput buffer for the string.
secondsTime in seconds.

◆ mnDiagram_IntToStr()

void mnDiagram_IntToStr ( char *  buf,
u32  val 
)

Converts a number to a null-terminated string.

Parameters
bufOutput buffer for the string.
valThe number to convert.

◆ mnDiagram_GetPrevNameIndex()

u8 mnDiagram_GetPrevNameIndex ( s32  idx)

Gets the previous valid name index.

Parameters
idxCurrent name index.
Returns
Previous name index with a valid name, or original if none found.

◆ mnDiagram_GetNextNameIndex()

u8 mnDiagram_GetNextNameIndex ( s32  idx)

◆ mnDiagram_GetPrevFighterIndex()

u8 mnDiagram_GetPrevFighterIndex ( s32  idx)

Gets the previous valid fighter index.

Parameters
idxCurrent fighter index.
Returns
Previous fighter index that's unlocked, or original if none found.

◆ mnDiagram_GetNextFighterIndex()

u8 mnDiagram_GetNextFighterIndex ( s32  idx)

◆ mnDiagram_GetNamePlayTimeByFighter()

u32 mnDiagram_GetNamePlayTimeByFighter ( int  name_idx,
int  fighter_idx 
)

Gets play time for a specific fighter under a name tag.

Parameters
name_idxName tag index.
fighter_idxFighter index (0-24).
Returns
Play time in seconds for this fighter under this name.

◆ CountTiedFighters()

static int CountTiedFighters ( int  name,
int  min_fighter,
u32  min_time 
)
inlinestatic

◆ CheckAllZeroPlayTime()

static int CheckAllZeroPlayTime ( int  name_idx)
inlinestatic

◆ mnDiagram_GetRankedFighterForName()

int mnDiagram_GetRankedFighterForName ( int  rank,
int  name_idx,
u32(*)(int, int)  func 
)

◆ mnDiagram_GetLeastPlayedFighter()

u8 mnDiagram_GetLeastPlayedFighter ( u8  name_idx)

◆ mnDiagram_8023FA6C()

void mnDiagram_8023FA6C ( void  )

◆ mnDiagram_8023FC28()

void mnDiagram_8023FC28 ( void  )

◆ mnDiagram_CountUnlockedFighters()

int mnDiagram_CountUnlockedFighters ( void  )

Counts the number of unlocked fighters.

Returns
Number of unlocked fighters.

◆ mnDiagram_PopupInputProc()

void mnDiagram_PopupInputProc ( HSD_GObj gobj)

◆ mnDiagram_InputProc()

void mnDiagram_InputProc ( HSD_GObj gobj)

◆ mnDiagram_PopupCleanup()

void mnDiagram_PopupCleanup ( void *  arg0)

◆ mnDiagram_PopupAnimProc()

void mnDiagram_PopupAnimProc ( void *  arg0)

◆ mnDiagram_80240D94()

void mnDiagram_80240D94 ( void *  arg0,
s32  arg1,
s32  arg2,
s32  arg3 
)

◆ mnDiagram_80241310()

void mnDiagram_80241310 ( s32  arg0,
s32  arg1,
s32  arg2 
)

◆ mnDiagram_GetUserData()

static void * mnDiagram_GetUserData ( HSD_GObj gobj)
inlinestatic

◆ mnDiagram_GetJObjChild()

static HSD_JObj * mnDiagram_GetJObjChild ( HSD_JObj jobj)
inlinestatic

◆ mnDiagram_80241668()

void mnDiagram_80241668 ( void *  arg0)

◆ mnDiagram_80241730()

void mnDiagram_80241730 ( void *  arg0,
int  arg1,
int  arg2 
)

◆ mnDiagram_802417D0()

void mnDiagram_802417D0 ( HSD_GObj gobj)

◆ mnDiagram_ExitAnimProc()

void mnDiagram_ExitAnimProc ( HSD_GObj gobj)

◆ mnDiagram_UpdateScrollArrowVisibility()

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).

Parameters
gobjThe diagram GObj containing arrow JObjs in user_data.
countNumber of entries (fighters or names) to display.

◆ mnDiagram_OnFrame()

void mnDiagram_OnFrame ( HSD_GObj gobj)

◆ mnDiagram_80241E78()

void mnDiagram_80241E78 ( void *  arg0,
u8  arg1,
u8  arg2,
int  arg3 
)

◆ mnDiagram_8024227C()

void mnDiagram_8024227C ( void *  arg0,
s32  arg1,
s32  arg2,
u8  arg3 
)

◆ mnDiagram_802427B4()

void mnDiagram_802427B4 ( void *  arg0,
s32  arg1,
s32  arg2 
)

◆ mnDiagram_80242B38()

HSD_JObj * mnDiagram_80242B38 ( int  idx,
int  arg1 
)

◆ mnDiagram_80242C0C()

void mnDiagram_80242C0C ( void *  arg0,
int  arg1,
int  arg2 
)

◆ mnDiagram_CursorProc()

void mnDiagram_CursorProc ( HSD_GObj gobj)

◆ mnDiagram_802433AC()

void mnDiagram_802433AC ( void  )

◆ mnDiagram_80243434()

void mnDiagram_80243434 ( u8  arg0)

◆ mnDiagram_802437E8()

void mnDiagram_802437E8 ( s32  arg0,
s32  arg1 
)

Initialize VS Records diagram screen.

Parameters
arg0If non-zero, load DAT archive symbols
arg1Initial mode (passed to mnDiagram_80243434)

Variable Documentation

◆ mnDiagram_804A0750

mnDiagram_804A0750_t mnDiagram_804A0750

BSS variables - sorted player arrays.

◆ mnDiagram_804A076C

mnDiagram_804A076C_t mnDiagram_804A076C

◆ mnDiagram_803EE768

AnimLoopSettings mnDiagram_803EE768 = { 0.0f, 9.0f, -0.1f }
static

◆ mnDiagram_803EE74C

u8 mnDiagram_803EE74C[0x1C]
static
Initial value:
= {
8, 1, 6, 0x10, 0x11, 4, 2, 0xD, 0xB, 0,
5, 0xC, 0xE, 0x12, 7, 0xF, 0xA, 9, 3, 0x15,
0x18, 0x13, 0x14, 0x17, 0x16, 0, 0, 0,
}

◆ mnDiagram_803EE728

Point3d mnDiagram_803EE728[3]
static
Initial value:
= {
{ 4.0F, 1.0F, 0.0F },
{ -3.0F, 0.8F, 0.0F },
{ -1.0F, 0.7F, 0.0F },
}

◆ mnDiagram_804D4FA0

s32 mnDiagram_804D4FA0 = 0xFF
static