mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
- Update SAV_VERSIONMINOR so 2.0/2.1 cup backup files won't load - Move specialDamage to grandprixinfo_t (from rank_t, per Sal review)
197 lines
4.5 KiB
C
197 lines
4.5 KiB
C
// DR. ROBOTNIK'S RING RACERS
|
|
//-----------------------------------------------------------------------------
|
|
// Copyright (C) 2024 by Sally "TehRealSalt" Cochenour
|
|
// Copyright (C) 2024 by Kart Krew
|
|
//
|
|
// This program is free software distributed under the
|
|
// terms of the GNU General Public License, version 2.
|
|
// See the 'LICENSE' file for more details.
|
|
//-----------------------------------------------------------------------------
|
|
/// \file k_rank.h
|
|
/// \brief Grand Prix mode ranking
|
|
|
|
#ifndef __K_RANK__
|
|
#define __K_RANK__
|
|
|
|
#include "doomdef.h"
|
|
#include "doomstat.h"
|
|
|
|
// Please also see P_ArchiveMisc
|
|
struct gpRank_level_perplayer_t
|
|
{
|
|
UINT8 position;
|
|
UINT8 rings;
|
|
UINT16 lapPoints;
|
|
UINT16 prisons;
|
|
boolean gotSpecialPrize;
|
|
gp_rank_e grade;
|
|
};
|
|
|
|
struct gpRank_level_t
|
|
{
|
|
UINT16 id;
|
|
INT32 event;
|
|
UINT32 time;
|
|
UINT16 totalLapPoints;
|
|
UINT16 totalPrisons;
|
|
gpRank_level_perplayer_t perPlayer[MAXSPLITSCREENPLAYERS];
|
|
};
|
|
|
|
// Please remember to update P_ArchiveMisc
|
|
struct gpRank_t
|
|
{
|
|
UINT8 numPlayers;
|
|
UINT8 totalPlayers;
|
|
|
|
UINT8 position;
|
|
UINT8 skin;
|
|
|
|
UINT32 winPoints;
|
|
UINT32 totalPoints;
|
|
|
|
UINT32 laps;
|
|
UINT32 totalLaps;
|
|
|
|
UINT32 continuesUsed;
|
|
|
|
UINT32 prisons;
|
|
UINT32 totalPrisons;
|
|
|
|
UINT32 rings;
|
|
UINT32 totalRings;
|
|
|
|
boolean specialWon;
|
|
|
|
INT32 scorePosition;
|
|
INT32 scoreGPPoints;
|
|
INT32 scoreLaps;
|
|
INT32 scorePrisons;
|
|
INT32 scoreRings;
|
|
INT32 scoreContinues;
|
|
INT32 scoreTotal;
|
|
|
|
UINT8 numLevels;
|
|
gpRank_level_t levels[ROUNDQUEUE_MAX];
|
|
|
|
#ifdef __cplusplus
|
|
void Init(void);
|
|
void Rejigger(UINT16 removedmap, UINT16 removedgt, UINT16 addedmap, UINT16 addedgt);
|
|
void Update(void);
|
|
#endif
|
|
};
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// gp_rank_e was once defined here, but moved to doomstat.h to prevent circular dependency
|
|
|
|
// 3rd place is neutral, anything below is a penalty
|
|
#define RANK_NEUTRAL_POSITION (3)
|
|
|
|
#define RANK_WEIGHT_POSITION (150)
|
|
#define RANK_WEIGHT_SCORE (100)
|
|
#define RANK_WEIGHT_LAPS (100)
|
|
#define RANK_WEIGHT_PRISONS (100)
|
|
#define RANK_WEIGHT_RINGS (50)
|
|
|
|
#define RANK_CONTINUE_PENALTY_DIV (20) // 5% of the total grade
|
|
#define RANK_CONTINUE_PENALTY_START (2)
|
|
|
|
/*--------------------------------------------------
|
|
void K_InitGrandPrixRank(gpRank_t *rankData);
|
|
|
|
Calculates rank requirements for a GP session.
|
|
|
|
Input Arguments:-
|
|
rankData - Pointer to struct that contains all
|
|
of the information required to calculate GP rank.
|
|
|
|
Return:-
|
|
N/A
|
|
--------------------------------------------------*/
|
|
|
|
void K_InitGrandPrixRank(gpRank_t *rankData);
|
|
|
|
|
|
/*--------------------------------------------------
|
|
void K_RejiggerGPRankData(gpRank_t *rankData, UINT16 removedmap, UINT16 removedgt, UINT16 addedmap, UINT16 addedgt)
|
|
|
|
Recalculates rank requirements for overriden round.
|
|
|
|
Input Arguments:-
|
|
rankData - Pointer to struct that contains all
|
|
of the information required to calculate GP rank.
|
|
removedmap - Level ID for round extracted
|
|
removedgt - Gametype ID for round extracted
|
|
addedmap - Level ID for round extracted
|
|
addedgt - Gametype ID for round extracted
|
|
|
|
Return:-
|
|
N/A
|
|
--------------------------------------------------*/
|
|
|
|
void K_RejiggerGPRankData(gpRank_t *rankData, UINT16 removedmap, UINT16 removedgt, UINT16 addedmap, UINT16 addedgt);
|
|
|
|
|
|
/*--------------------------------------------------
|
|
void K_UpdateGPRank(gpRank_t *rankData)
|
|
|
|
Updates the best ranking across all human
|
|
players.
|
|
--------------------------------------------------*/
|
|
|
|
void K_UpdateGPRank(gpRank_t *rankData);
|
|
|
|
|
|
/*--------------------------------------------------
|
|
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData);
|
|
|
|
Calculates the player's grade using the
|
|
variables from gpRank.
|
|
|
|
Input Arguments:-
|
|
rankData - struct containing existing rank data.
|
|
|
|
Return:-
|
|
gp_rank_e representing the total grade.
|
|
--------------------------------------------------*/
|
|
|
|
gp_rank_e K_CalculateGPGrade(gpRank_t *rankData);
|
|
|
|
|
|
/*--------------------------------------------------
|
|
UINT16 K_GetGradeColor(gp_rank_e grade)
|
|
|
|
Maps grades to skincolors for HUD purposes.
|
|
|
|
Input Arguments:-
|
|
grade - gp_rank_e representing an achieved ranking.
|
|
|
|
Return:-
|
|
skincolor ID representing the achieved grade.
|
|
--------------------------------------------------*/
|
|
|
|
UINT16 K_GetGradeColor(gp_rank_e grade);
|
|
|
|
|
|
/*--------------------------------------------------
|
|
char K_GetGradeChar(gp_rank_e grade)
|
|
|
|
Maps grades to a letter for strings.
|
|
|
|
Input Arguments:-
|
|
grade - gp_rank_e representing an achieved ranking.
|
|
|
|
Return:-
|
|
ASCII character for the grade.
|
|
--------------------------------------------------*/
|
|
|
|
char K_GetGradeChar(gp_rank_e grade);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#endif
|