diff --git a/src/k_bot.c b/src/k_bot.c index 5bee12b18..ebc1b4869 100644 --- a/src/k_bot.c +++ b/src/k_bot.c @@ -1,5 +1,6 @@ // SONIC ROBO BLAST 2 KART //----------------------------------------------------------------------------- +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour // Copyright (C) 2018-2020 by Kart Krew // // This program is free software distributed under the diff --git a/src/k_bot.h b/src/k_bot.h index d6d7f8338..2cb1ae460 100644 --- a/src/k_bot.h +++ b/src/k_bot.h @@ -1,5 +1,6 @@ // SONIC ROBO BLAST 2 KART //----------------------------------------------------------------------------- +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour // Copyright (C) 2018-2020 by Kart Krew // // This program is free software distributed under the diff --git a/src/k_botitem.c b/src/k_botitem.c index 55f8e15e4..94f0b8e10 100644 --- a/src/k_botitem.c +++ b/src/k_botitem.c @@ -1,5 +1,6 @@ // SONIC ROBO BLAST 2 KART //----------------------------------------------------------------------------- +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour // Copyright (C) 2018-2020 by Kart Krew // // This program is free software distributed under the diff --git a/src/k_botsearch.c b/src/k_botsearch.c index 28e08f3cf..4dd55cc42 100644 --- a/src/k_botsearch.c +++ b/src/k_botsearch.c @@ -1,5 +1,6 @@ // SONIC ROBO BLAST 2 KART //----------------------------------------------------------------------------- +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour // Copyright (C) 2018-2020 by Kart Krew // // This program is free software distributed under the diff --git a/src/k_grandprix.c b/src/k_grandprix.c index 7f1ba8899..971866476 100644 --- a/src/k_grandprix.c +++ b/src/k_grandprix.c @@ -1,14 +1,14 @@ -// SONIC ROBO BLAST 2 +// SONIC ROBO BLAST 2 KART //----------------------------------------------------------------------------- -// Copyright (C) 2007-2016 by John "JTE" Muniz. -// Copyright (C) 2011-2018 by Sonic Team Junior. +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour +// Copyright (C) 2018-2020 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_grandprix.c -/// \brief Grand Prix mode specific code +/// \brief Grand Prix mode game logic & bot behaviors #include "k_grandprix.h" #include "doomdef.h" @@ -21,6 +21,11 @@ struct grandprixinfo grandprixinfo; +/*-------------------------------------------------- + UINT8 K_BotStartingDifficulty(SINT8 value) + + See header file for description. +--------------------------------------------------*/ UINT8 K_BotStartingDifficulty(SINT8 value) { // startingdifficulty: Easy = 3, Normal = 6, Hard = 9 @@ -38,6 +43,11 @@ UINT8 K_BotStartingDifficulty(SINT8 value) return difficulty; } +/*-------------------------------------------------- + INT16 K_CalculateGPRankPoints(UINT8 position, UINT8 numplayers) + + See header file for description. +--------------------------------------------------*/ INT16 K_CalculateGPRankPoints(UINT8 position, UINT8 numplayers) { INT16 points; @@ -84,6 +94,11 @@ INT16 K_CalculateGPRankPoints(UINT8 position, UINT8 numplayers) return points; } +/*-------------------------------------------------- + void K_InitGrandPrixBots(void) + + See header file for description. +--------------------------------------------------*/ void K_InitGrandPrixBots(void) { const char *defaultbotskinname = "eggrobo"; @@ -248,6 +263,18 @@ void K_InitGrandPrixBots(void) } } +/*-------------------------------------------------- + static INT16 K_RivalScore(player_t *bot) + + Creates a "rival score" for a bot, used to determine which bot is the + most deserving of the rival status. + + Input Arguments:- + bot - Player to check. + + Return:- + "Rival score" value. +--------------------------------------------------*/ static INT16 K_RivalScore(player_t *bot) { const UINT16 difficulty = bot->botvars.difficulty; @@ -282,6 +309,11 @@ static INT16 K_RivalScore(player_t *bot) return ((difficulty - lowestdifficulty) * roundsleft) + ((score - lowestscore) * grandprixinfo.roundnum); } +/*-------------------------------------------------- + void K_UpdateGrandPrixBots(void) + + See header file for description. +--------------------------------------------------*/ void K_UpdateGrandPrixBots(void) { player_t *oldrival = NULL; @@ -367,6 +399,18 @@ void K_UpdateGrandPrixBots(void) } } +/*-------------------------------------------------- + static UINT8 K_BotExpectedStanding(player_t *bot) + + Predicts what placement a bot was expected to be in. + Used for determining if a bot's difficulty should raise. + + Input Arguments:- + bot - Player to check. + + Return:- + Position number the bot was expected to be in. +--------------------------------------------------*/ static UINT8 K_BotExpectedStanding(player_t *bot) { UINT8 pos = 1; @@ -403,6 +447,11 @@ static UINT8 K_BotExpectedStanding(player_t *bot) return pos; } +/*-------------------------------------------------- + void K_IncreaseBotDifficulty(player_t *bot) + + See header file for description. +--------------------------------------------------*/ void K_IncreaseBotDifficulty(player_t *bot) { UINT8 expectedstanding; @@ -443,6 +492,11 @@ void K_IncreaseBotDifficulty(player_t *bot) } } +/*-------------------------------------------------- + void K_FakeBotResults(player_t *bot) + + See header file for description. +--------------------------------------------------*/ void K_FakeBotResults(player_t *bot) { const UINT32 distfactor = FixedMul(32 * bot->mo->scale, K_GetKartGameSpeedScalar(gamespeed)) / FRACUNIT; @@ -496,6 +550,11 @@ void K_FakeBotResults(player_t *bot) K_IncreaseBotDifficulty(bot); } +/*-------------------------------------------------- + void K_PlayerLoseLife(player_t *player) + + See header file for description. +--------------------------------------------------*/ void K_PlayerLoseLife(player_t *player) { if (!G_GametypeUsesLives()) diff --git a/src/k_grandprix.h b/src/k_grandprix.h index 7368b96f7..3deccabd1 100644 --- a/src/k_grandprix.h +++ b/src/k_grandprix.h @@ -1,3 +1,15 @@ +// SONIC ROBO BLAST 2 KART +//----------------------------------------------------------------------------- +// Copyright (C) 2018-2020 by Sally "TehRealSalt" Cochenour +// Copyright (C) 2018-2020 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_grandprix.h +/// \brief Grand Prix mode game logic & bot behaviors + #ifndef __K_GRANDPRIX__ #define __K_GRANDPRIX__ @@ -6,21 +18,110 @@ extern struct grandprixinfo { - UINT8 roundnum; ///< Round number -- if 0, then we're not in a Grand Prix. - cupheader_t *cup; ///< Which cup are we playing? - UINT8 gamespeed; ///< Copy of gamespeed, just to make sure you can't cheat it with cvars - boolean encore; ///< Ditto, but for encore mode - boolean masterbots; ///< If true, all bots should be max difficulty (Master Mode) - boolean initalize; ///< If true, we need to initialize a new cup. - boolean wonround; ///< If false, then we retry the map instead of going to the next. + UINT8 roundnum; ///< Round number -- if 0, then we're not in a Grand Prix. + cupheader_t *cup; ///< Which cup are we playing? + UINT8 gamespeed; ///< Copy of gamespeed, just to make sure you can't cheat it with cvars + boolean encore; ///< Ditto, but for encore mode + boolean masterbots; ///< If true, all bots should be max difficulty (Master Mode) + boolean initalize; ///< If true, we need to initialize a new session. + boolean wonround; ///< If false, then we retry the map instead of going to the next. } grandprixinfo; + +/*-------------------------------------------------- + UINT8 K_BotStartingDifficulty(SINT8 value); + + Determines the starting difficulty of the bots + for a specific game speed. + + Input Arguments:- + value - Game speed value to use. + + Return:- + Bot difficulty level. +--------------------------------------------------*/ + UINT8 K_BotStartingDifficulty(SINT8 value); + + +/*-------------------------------------------------- + INT16 K_CalculateGPRankPoints(UINT8 position, UINT8 numplayers); + + Calculates the number of points that a player would + recieve if they won the round. + + Input Arguments:- + position - Finishing position. + numplayers - Number of players in the game. + + Return:- + Number of points to give. +--------------------------------------------------*/ + INT16 K_CalculateGPRankPoints(UINT8 position, UINT8 numplayers); + + +/*-------------------------------------------------- + void K_InitGrandPrixBots(void); + + Spawns bots specifically tailored for Grand Prix mode. +--------------------------------------------------*/ + void K_InitGrandPrixBots(void); + + +/*-------------------------------------------------- + void K_UpdateGrandPrixBots(void); + + Updates bot settings based on the the results of the race. +--------------------------------------------------*/ + void K_UpdateGrandPrixBots(void); + + +/*-------------------------------------------------- + void K_IncreaseBotDifficulty(player_t *bot); + + Increases the difficulty of this bot when they finish the race. + + Input Arguments:- + bot - Player to do this for. + + Return:- + None +--------------------------------------------------*/ + void K_IncreaseBotDifficulty(player_t *bot); + + +/*-------------------------------------------------- + void K_FakeBotResults(player_t *bot); + + Fakes the results of the race, when all human players have + already finished and only bots were remaining. + + Input Arguments:- + bot - Player to do this for. + + Return:- + None +--------------------------------------------------*/ + void K_FakeBotResults(player_t *bot); + + +/*-------------------------------------------------- + void K_PlayerLoseLife(player_t *player); + + Removes a life from a human player. + + Input Arguments:- + player - Player to do this for. + + Return:- + None +--------------------------------------------------*/ + void K_PlayerLoseLife(player_t *player); #endif