mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'pet-robo' of https://git.magicalgirl.moe/KartKrew/Kart.git into pet-robo-toast
# Conflicts: # src/k_bot.c
This commit is contained in:
commit
6d7dad12f0
1 changed files with 16 additions and 151 deletions
167
src/k_bot.c
167
src/k_bot.c
|
|
@ -197,147 +197,6 @@ void K_UpdateMatchRaceBots(void)
|
|||
// We should have enough bots now :)
|
||||
}
|
||||
|
||||
#if 0
|
||||
// This is mostly just pesudo code right now...
|
||||
void K_InitGrandPrixBots(void)
|
||||
{
|
||||
const UINT8 defaultbotskin = 9; // eggrobo
|
||||
|
||||
// startingdifficulty: Easy = 3, Normal = 6, Hard = 9
|
||||
const UINT8 startingdifficulty = min(MAXBOTDIFFICULTY, (cv_kartspeed.value + 1) * 3);
|
||||
UINT8 difficultylevels[MAXPLAYERS];
|
||||
|
||||
UINT8 playercount = 8;
|
||||
UINT8 wantedbots = 0;
|
||||
|
||||
UINT8 numplayers = 0;
|
||||
UINT8 competitors[4];
|
||||
|
||||
boolean skinusable[MAXSKINS];
|
||||
UINT8 botskinlist[MAXPLAYERS];
|
||||
UINT8 botskinlistpos = 0;
|
||||
|
||||
UINT8 i;
|
||||
|
||||
memset(difficultylevels, MAXBOTDIFFICULTY, sizeof (difficultylevels));
|
||||
memset(competitors, MAXPLAYERS, sizeof (competitors));
|
||||
memset(botskinlist, defaultbotskin, sizeof (botskinlist));
|
||||
|
||||
// init usable bot skins list
|
||||
for (i = 0; i < MAXSKINS; i++)
|
||||
{
|
||||
if (i < numskins)
|
||||
{
|
||||
skinusable[i] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
skinusable[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
// init difficulty levels list
|
||||
//if (!mastermodebots) {
|
||||
difficultylevels[MAXPLAYERS] = {
|
||||
max(1, startingdifficulty),
|
||||
max(1, startingdifficulty-1),
|
||||
max(1, startingdifficulty-2),
|
||||
max(1, startingdifficulty-3),
|
||||
max(1, startingdifficulty-3),
|
||||
max(1, startingdifficulty-4),
|
||||
max(1, startingdifficulty-4),
|
||||
max(1, startingdifficulty-4),
|
||||
max(1, startingdifficulty-5),
|
||||
max(1, startingdifficulty-5),
|
||||
max(1, startingdifficulty-6),
|
||||
max(1, startingdifficulty-6),
|
||||
max(1, startingdifficulty-7),
|
||||
max(1, startingdifficulty-7),
|
||||
max(1, startingdifficulty-8),
|
||||
max(1, startingdifficulty-8),
|
||||
};
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (numplayers < MAXSPLITSCREENPLAYERS)
|
||||
{
|
||||
if (playeringame[i] && !players[i].spectator)
|
||||
{
|
||||
competitors[numplayers] = i;
|
||||
numplayers++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (playeringame[i])
|
||||
{
|
||||
players[i].spectator = true; // force spectate for all other players, if they happen to exist?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (numplayers > 2)
|
||||
{
|
||||
// Add 3 bots per player beyond 2P
|
||||
playercount += (numplayers-2) * 3;
|
||||
}
|
||||
|
||||
wantedbots = playercount - numplayers;
|
||||
|
||||
// Create rival list
|
||||
|
||||
// TODO: Use player skin's set rivals
|
||||
// Starting with P1's rival1, P2's rival1, P3's rival1, P4's rival1,
|
||||
// then P1's rival2, P2's rival2, etc etc etc etc.......
|
||||
// then skip over any duplicates.
|
||||
|
||||
// Pad the remaining list with random skins if we need to
|
||||
if (botskinlistpos < wantedbots)
|
||||
{
|
||||
for (i = botskinlistpos; i < wantedbots; i++)
|
||||
{
|
||||
UINT8 val = M_RandomKey(numskins);
|
||||
UINT8 loops = 0;
|
||||
|
||||
while (!skinusable[val])
|
||||
{
|
||||
if (loops >= numskins)
|
||||
{
|
||||
// no more skins
|
||||
break;
|
||||
}
|
||||
|
||||
val++;
|
||||
|
||||
if (val >= numskins)
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
|
||||
loops++;
|
||||
}
|
||||
|
||||
if (loops >= numskins)
|
||||
{
|
||||
// leave the rest of the table as the default skin
|
||||
break;
|
||||
}
|
||||
|
||||
botskinlist[i] = val;
|
||||
skinusable[val] = false;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < wantedbots; i++)
|
||||
{
|
||||
if (!K_AddBot(botskinlist[i], difficultylevels[i], &newplayernum))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
boolean K_PlayerUsesBotMovement(player_t *player)
|
||||
{
|
||||
if (player->bot || player->exiting)
|
||||
|
|
@ -411,10 +270,13 @@ fixed_t K_BotRubberband(player_t *player)
|
|||
continue;
|
||||
}
|
||||
|
||||
/*if (players[i].bot)
|
||||
#if 0
|
||||
// Only rubberband up to players.
|
||||
if (players[i].bot)
|
||||
{
|
||||
continue;
|
||||
}*/
|
||||
}
|
||||
#endif
|
||||
|
||||
if (firstplace == NULL || players[i].distancetofinish < firstplace->distancetofinish)
|
||||
{
|
||||
|
|
@ -554,12 +416,11 @@ fixed_t eggboxx, eggboxy;
|
|||
UINT8 randomitems = 0;
|
||||
UINT8 eggboxes = 0;
|
||||
|
||||
static boolean K_FindRandomItemsAndEggboxes(mobj_t *thing)
|
||||
static boolean K_FindEggboxes(mobj_t *thing)
|
||||
{
|
||||
fixed_t dist;
|
||||
boolean egg = (thing->type == MT_EGGMANITEM);
|
||||
|
||||
if (!egg && thing->type != MT_RANDOMITEM)
|
||||
if (thing->type != MT_RANDOMITEM && thing->type != MT_EGGMANITEM)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
|
@ -576,10 +437,14 @@ static boolean K_FindRandomItemsAndEggboxes(mobj_t *thing)
|
|||
return true;
|
||||
}
|
||||
|
||||
if (egg)
|
||||
eggboxes++;
|
||||
else
|
||||
if (thing->type == MT_RANDOMITEM)
|
||||
{
|
||||
randomitems++;
|
||||
}
|
||||
else
|
||||
{
|
||||
eggboxes++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -604,11 +469,11 @@ static UINT8 K_EggboxStealth(fixed_t x, fixed_t y)
|
|||
{
|
||||
for (by = yl; by <= yh; by++)
|
||||
{
|
||||
P_BlockThingsIterator(bx, by, K_FindRandomItemsAndEggboxes);
|
||||
P_BlockThingsIterator(bx, by, K_FindEggboxes);
|
||||
}
|
||||
}
|
||||
|
||||
return randomitems * eggboxes;
|
||||
return (randomitems * eggboxes);
|
||||
}
|
||||
|
||||
static inline boolean K_FindBlockingWalls(line_t *line)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue