mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-18 07:22:03 +00:00
Lots of changes
- Menus now have all of the Kart cvars - Removed any cvars that aren't useful for Kart from the menu (they still exist in the console, though) - Removed SP and NiGHTS Mode options from the main menu - "kartcc" is renamed "kartspeed", uses values 0-2 instead of multiples of 50, or the terms "Relaxed", "Standard", and "Turbo" - Many gametype options (game speed, frantic, mirror, & karma comeback) are now changed on map load instead of instantly - New cvar, "kartminimap", for disabling the minimap - The maxplayers cvar now actually matches up with our 16 player limit - Game now keeps track of matches played. Has a condition type associated with it, as well. - Game checks for unlocks and saves gamedata when finishing a match, even in MP - Removed most of the normal emblems, added a single emblem for Green Hills. Didn't know what to do with extra emblems and such so I just left them (FOR NOW c:<)
This commit is contained in:
parent
43842468cf
commit
db09f7b3d6
18 changed files with 189 additions and 677 deletions
|
@ -66,8 +66,8 @@ CV_PossibleValue_t CV_Natural[] = {{1, "MIN"}, {999999999, "MAX"}, {0, NULL}};
|
|||
CV_PossibleValue_t karthud_cons_t[] = {
|
||||
{0, "Off"}, {1, "Default"}, {2, "SNES"}, {3, "MK64"},
|
||||
{0, NULL}};
|
||||
CV_PossibleValue_t kartcc_cons_t[] = {
|
||||
{50, "50cc"}, {100, "100cc"}, {150, "150cc"},
|
||||
CV_PossibleValue_t kartspeed_cons_t[] = {
|
||||
{0, "Relaxed"}, {1, "Standard"}, {2, "Turbo"},
|
||||
{0, NULL}};
|
||||
|
||||
#define COM_BUF_SIZE 8192 // command buffer size
|
||||
|
|
|
@ -128,7 +128,7 @@ extern CV_PossibleValue_t CV_Natural[];
|
|||
|
||||
// SRB2kart
|
||||
extern CV_PossibleValue_t karthud_cons_t[];
|
||||
extern CV_PossibleValue_t kartcc_cons_t[];
|
||||
extern CV_PossibleValue_t kartspeed_cons_t[];
|
||||
|
||||
// register a variable for use at the console
|
||||
void CV_RegisterVar(consvar_t *variable);
|
||||
|
|
|
@ -2896,7 +2896,7 @@ static void Got_KickCmd(UINT8 **p, INT32 playernum)
|
|||
|
||||
consvar_t cv_allownewplayer = {"allowjoin", "On", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL };
|
||||
consvar_t cv_joinnextround = {"joinnextround", "Off", CV_NETVAR, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; /// \todo not done
|
||||
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {32, "MAX"}, {0, NULL}};
|
||||
static CV_PossibleValue_t maxplayers_cons_t[] = {{2, "MIN"}, {MAXPLAYERS, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_maxplayers = {"maxplayers", "8", CV_SAVE, maxplayers_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
static CV_PossibleValue_t resynchattempts_cons_t[] = {{0, "MIN"}, {20, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_resynchattempts = {"resynchattempts", "10", 0, resynchattempts_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL };
|
||||
|
|
|
@ -229,7 +229,7 @@ consvar_t cv_allowteamchange = {"allowteamchange", "Yes", CV_NETVAR, CV_YesNo, N
|
|||
consvar_t cv_startinglives = {"startinglives", "3", CV_NETVAR|CV_CHEAT, startingliveslimit_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
static CV_PossibleValue_t respawntime_cons_t[] = {{0, "MIN"}, {30, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_respawntime = {"respawndelay", "3", CV_NETVAR|CV_CHEAT, respawntime_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_respawntime = {"respawndelay", "1", CV_NETVAR|CV_CHEAT, respawntime_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_competitionboxes = {"competitionboxes", "Random", CV_NETVAR|CV_CHEAT, competitionboxes_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
|
@ -343,10 +343,11 @@ consvar_t cv_lightning = {"lightning", "On", CV_NETVAR|CV_CHEAT, CV_OnOff,
|
|||
consvar_t cv_feather = {"feathers", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
consvar_t cv_karthud = {"karthud", "Default", CV_SAVE|CV_CALL, karthud_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartcheck = {"kartcheck", "On", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartminimap = {"kartminimap", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartcheck = {"kartcheck", "Yes", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
static CV_PossibleValue_t kartstarsfx_cons_t[] = {{0, "Music"}, {1, "SMK"}, {0, NULL}};
|
||||
consvar_t cv_kartstarsfx = {"kartstarsfx", "SMK", CV_SAVE, kartstarsfx_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartcc = {"kartcc", "100cc", CV_NETVAR, kartcc_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartspeed = {"kartspeed", "Standard", CV_NETVAR, kartspeed_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
static CV_PossibleValue_t kartballoons_cons_t[] = {{1, "MIN"}, {12, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_kartballoons = {"kartballoons", "3", CV_NETVAR, kartballoons_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_kartfrantic = {"kartfrantic", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
@ -399,7 +400,7 @@ consvar_t cv_timelimit = {"timelimit", "0", CV_NETVAR|CV_CALL|CV_NOINIT, timelim
|
|||
static CV_PossibleValue_t numlaps_cons_t[] = {{0, "MIN"}, {50, "MAX"}, {0, NULL}};
|
||||
consvar_t cv_numlaps = {"numlaps", "3", CV_NETVAR|CV_CALL|CV_NOINIT, numlaps_cons_t,
|
||||
NumLaps_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_usemapnumlaps = {"usemaplaps", "Yes", CV_NETVAR, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
consvar_t cv_usemapnumlaps = {"usemaplaps", "Yes", CV_NETVAR|CV_CHEAT, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
||||
// log elemental hazards -- not a netvar, is local to current player
|
||||
consvar_t cv_hazardlog = {"hazardlog", "Yes", 0, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||
|
|
|
@ -116,9 +116,10 @@ extern consvar_t cv_blueshell, cv_jaws, cv_fireflower, cv_tripleredshell, cv_lig
|
|||
extern consvar_t cv_feather;
|
||||
|
||||
extern consvar_t cv_karthud;
|
||||
extern consvar_t cv_kartminimap;
|
||||
extern consvar_t cv_kartcheck;
|
||||
extern consvar_t cv_kartstarsfx;
|
||||
extern consvar_t cv_kartcc;
|
||||
extern consvar_t cv_kartspeed;
|
||||
extern consvar_t cv_kartballoons;
|
||||
extern consvar_t cv_kartfrantic;
|
||||
extern consvar_t cv_kartcomeback;
|
||||
|
|
|
@ -2477,15 +2477,16 @@ static void readcondition(UINT8 set, UINT32 id, char *word2)
|
|||
return;
|
||||
}
|
||||
|
||||
if (fastcmp(params[0], "PLAYTIME"))
|
||||
if (fastcmp(params[0], "PLAYTIME")
|
||||
|| (++offset && fastcmp(params[0], "MATCHESPLAYED")))
|
||||
{
|
||||
PARAMCHECK(1);
|
||||
ty = UC_PLAYTIME;
|
||||
ty = UC_PLAYTIME + offset;
|
||||
re = atoi(params[1]);
|
||||
}
|
||||
else if (fastcmp(params[0], "GAMECLEAR")
|
||||
|| (++offset && fastcmp(params[0], "ALLEMERALDS"))
|
||||
|| (++offset && fastcmp(params[0], "ULTIMATECLEAR")))
|
||||
else if ((offset=0) || fastcmp(params[0], "GAMECLEAR")
|
||||
|| (++offset && fastcmp(params[0], "ALLEMERALDS"))
|
||||
|| (++offset && fastcmp(params[0], "ULTIMATECLEAR")))
|
||||
{
|
||||
ty = UC_GAMECLEAR + offset;
|
||||
re = (params[1]) ? atoi(params[1]) : 1;
|
||||
|
|
|
@ -322,6 +322,7 @@ enum GameType
|
|||
// If you alter this list, update gametype_cons_t in m_menu.c
|
||||
|
||||
extern tic_t totalplaytime;
|
||||
extern UINT32 matchesplayed;
|
||||
|
||||
extern UINT8 stagefailed;
|
||||
|
||||
|
@ -437,6 +438,12 @@ extern INT16 scramblecount; //for CTF team scramble
|
|||
|
||||
extern INT32 cheats;
|
||||
|
||||
// SRB2kart
|
||||
extern UINT8 gamespeed;
|
||||
extern boolean franticitems;
|
||||
extern boolean mirrormode;
|
||||
extern boolean comeback;
|
||||
|
||||
extern tic_t hidetime;
|
||||
|
||||
extern UINT32 timesBeaten; // # of times the game has been beaten.
|
||||
|
|
16
src/g_game.c
16
src/g_game.c
|
@ -167,6 +167,7 @@ INT32 tokenbits; // Used for setting token bits
|
|||
INT32 sstimer; // Time allotted in the special stage
|
||||
|
||||
tic_t totalplaytime;
|
||||
UINT32 matchesplayed; // SRB2Kart
|
||||
boolean gamedataloaded = false;
|
||||
|
||||
// Time attack data for levels
|
||||
|
@ -238,6 +239,12 @@ INT16 scramblecount; //for CTF team scramble
|
|||
|
||||
INT32 cheats; //for multiplayer cheat commands
|
||||
|
||||
// SRB2Kart
|
||||
UINT8 gamespeed; // Game's current speed (or difficulty, or cc, or etc); 0-2 for relaxed, standard, & turbo
|
||||
boolean mirrormode; // Mirror Mode currently enabled?
|
||||
boolean franticitems; // Frantic items currently enabled?
|
||||
boolean comeback; // Battle Mode's karma comeback is on/off
|
||||
|
||||
tic_t hidetime;
|
||||
|
||||
// Grading
|
||||
|
@ -1271,7 +1278,7 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
|
||||
axis = JoyAxis(AXISTURN, ssplayer);
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
{
|
||||
turnright ^= turnleft; // swap these using three XORs
|
||||
turnleft ^= turnright;
|
||||
|
@ -1553,12 +1560,12 @@ void G_BuildTiccmd(ticcmd_t *cmd, INT32 realtics, UINT8 ssplayer)
|
|||
cmd->forwardmove = (SINT8)(cmd->forwardmove + forward);
|
||||
cmd->sidemove = (SINT8)(cmd->sidemove + side);
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
cmd->sidemove = -cmd->sidemove;
|
||||
|
||||
//{ SRB2kart - Drift support
|
||||
axis = JoyAxis(AXISTURN, ssplayer);
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
axis = -axis;
|
||||
|
||||
if (cmd->angleturn > 0) // Drifting to the left
|
||||
|
@ -3343,6 +3350,7 @@ void G_LoadGameData(void)
|
|||
G_ClearRecords(); // main and nights records
|
||||
M_ClearSecrets(); // emblems, unlocks, maps visited, etc
|
||||
totalplaytime = 0; // total play time (separate from all)
|
||||
matchesplayed = 0; // SRB2Kart: matches played & finished
|
||||
|
||||
if (M_CheckParm("-nodata"))
|
||||
return; // Don't load.
|
||||
|
@ -3372,6 +3380,7 @@ void G_LoadGameData(void)
|
|||
}
|
||||
|
||||
totalplaytime = READUINT32(save_p);
|
||||
matchesplayed = READUINT32(save_p);
|
||||
|
||||
modded = READUINT8(save_p);
|
||||
|
||||
|
@ -3514,6 +3523,7 @@ void G_SaveGameData(void)
|
|||
WRITEUINT32(save_p, 0xFCAFE211);
|
||||
|
||||
WRITEUINT32(save_p, totalplaytime);
|
||||
WRITEUINT32(save_p, matchesplayed);
|
||||
|
||||
btemp = (UINT8)(savemoddata || modifiedgame);
|
||||
WRITEUINT8(save_p, btemp);
|
||||
|
|
66
src/k_kart.c
66
src/k_kart.c
|
@ -20,6 +20,13 @@
|
|||
#include "k_kart.h"
|
||||
#include "f_finale.h"
|
||||
|
||||
// SOME IMPORTANT VARIABLES DEFINED IN DOOMDEF.H:
|
||||
// gamespeed is cc (0 for easy, 1 for normal, 2 for hard)
|
||||
// franticitems is Frantic Mode items, bool
|
||||
// mirrormode is Mirror Mode (duh), bool
|
||||
// comeback is Battle Mode's karma comeback, also bool
|
||||
|
||||
|
||||
//{ SRB2kart Color Code
|
||||
|
||||
#define SKIN_RAMP_LENGTH 16
|
||||
|
@ -303,9 +310,10 @@ void K_RegisterKartStuff(void)
|
|||
CV_RegisterVar(&cv_lightning);
|
||||
CV_RegisterVar(&cv_feather);
|
||||
|
||||
CV_RegisterVar(&cv_kartminimap);
|
||||
CV_RegisterVar(&cv_kartcheck);
|
||||
CV_RegisterVar(&cv_kartstarsfx);
|
||||
CV_RegisterVar(&cv_kartcc);
|
||||
CV_RegisterVar(&cv_kartspeed);
|
||||
CV_RegisterVar(&cv_kartballoons);
|
||||
CV_RegisterVar(&cv_kartfrantic);
|
||||
CV_RegisterVar(&cv_kartcomeback);
|
||||
|
@ -318,16 +326,6 @@ void K_RegisterKartStuff(void)
|
|||
|
||||
//}
|
||||
|
||||
UINT8 K_GetKartCC(void)
|
||||
{
|
||||
if (gametype == GT_MATCH)
|
||||
return 50;
|
||||
else if (modeattacking)
|
||||
return 150;
|
||||
else
|
||||
return cv_kartcc.value;
|
||||
}
|
||||
|
||||
//{ SRB2kart Roulette Code - Position Based
|
||||
|
||||
#define NUMKARTITEMS 19
|
||||
|
@ -975,7 +973,7 @@ static INT32 K_KartGetItemOdds(INT32 pos, INT32 itemnum)
|
|||
else
|
||||
newodds = K_KartItemOddsDistance_Retro[itemnum-1][pos];
|
||||
|
||||
if ((cv_kartfrantic.value) && (itemnum == 1 || itemnum == 4 || itemnum == 5 || itemnum == 6
|
||||
if (franticitems && (itemnum == 1 || itemnum == 4 || itemnum == 5 || itemnum == 6
|
||||
|| itemnum == 7 || itemnum == 8 || itemnum == 12 || itemnum == 13 || itemnum == 14 || itemnum == 15
|
||||
|| itemnum == 16 || itemnum == 17 || itemnum == 18))
|
||||
newodds *= 2;
|
||||
|
@ -1059,7 +1057,7 @@ static void K_KartItemRouletteByDistance(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (cv_kartfrantic.value) // Frantic items
|
||||
if (franticitems) // Frantic items
|
||||
{
|
||||
pdis = (13*pdis/12); // make the distances between everyone artifically higher...
|
||||
//pdis += distvar; // and set everyone back another place!
|
||||
|
@ -1466,7 +1464,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
|
||||
if (player->kartstuff[k_spinouttimer])
|
||||
player->kartstuff[k_spinouttimer]--;
|
||||
else if (!cv_kartcomeback.value)
|
||||
else if (!comeback)
|
||||
player->kartstuff[k_comebacktimer] = comebacktime;
|
||||
else if (player->kartstuff[k_comebacktimer])
|
||||
{
|
||||
|
@ -1701,12 +1699,12 @@ static fixed_t K_GetKartBoostPower(player_t *player, boolean speed)
|
|||
{ // Mushroom
|
||||
if (speed)
|
||||
{
|
||||
switch (K_GetKartCC())
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 50:
|
||||
case 0:
|
||||
boostvalue = max(boostvalue, 53740+768);
|
||||
break;
|
||||
case 150:
|
||||
case 2:
|
||||
boostvalue = max(boostvalue, 17294+768);
|
||||
break;
|
||||
default:
|
||||
|
@ -1731,12 +1729,12 @@ fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower)
|
|||
UINT8 kartspeed = player->kartspeed;
|
||||
fixed_t finalspeed;
|
||||
|
||||
switch (K_GetKartCC())
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 50:
|
||||
case 0:
|
||||
g_cc = 53248 + xspd; // 50cc = 81.25 + 4.69 = 85.94%
|
||||
break;
|
||||
case 150:
|
||||
case 2:
|
||||
g_cc = 77824 + xspd; // 150cc = 118.75 + 4.69 = 123.44%
|
||||
break;
|
||||
default:
|
||||
|
@ -1946,7 +1944,7 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
|||
if (source->player->kartstuff[k_balloon] <= 0)
|
||||
{
|
||||
source->player->kartstuff[k_comebackpoints] += 2;
|
||||
if (netgame)
|
||||
if (netgame && cv_hazardlog.value)
|
||||
CONS_Printf(M_GetText("%s bombed %s!\n"), player_names[source->player-players], player_names[player-players]);
|
||||
if (source->player->kartstuff[k_comebackpoints] >= 3)
|
||||
K_StealBalloon(source->player, player, true);
|
||||
|
@ -2020,7 +2018,7 @@ void K_StealBalloon(player_t *player, player_t *victim, boolean force)
|
|||
{
|
||||
if (player->kartstuff[k_balloon] <= 0)
|
||||
CONS_Printf(M_GetText("%s is back in the game!\n"), player_names[player-players]);
|
||||
else
|
||||
else if (cv_hazardlog.value)
|
||||
CONS_Printf(M_GetText("%s stole a balloon from %s!\n"), player_names[player-players], player_names[victim-players]);
|
||||
}
|
||||
|
||||
|
@ -2294,12 +2292,12 @@ static mobj_t *K_ThrowKartItem(player_t *player, boolean missile, mobjtype_t map
|
|||
return NULL;
|
||||
|
||||
// Figure out projectile speed by CC
|
||||
switch (K_GetKartCC())
|
||||
switch (gamespeed)
|
||||
{
|
||||
case 50:
|
||||
case 0:
|
||||
PROJSPEED = 68*FRACUNIT; // Avg Speed is 34
|
||||
break;
|
||||
case 150:
|
||||
case 2:
|
||||
PROJSPEED = 96*FRACUNIT; // Avg Speed is 48
|
||||
break;
|
||||
default:
|
||||
|
@ -4879,7 +4877,7 @@ fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my
|
|||
fixed_t range = RING_DIST/3;
|
||||
angle_t diff;
|
||||
|
||||
range *= (K_GetKartCC()/50);
|
||||
range *= gamespeed+1;
|
||||
|
||||
dist = abs(R_PointToDist2(px, py, mx, my));
|
||||
if (dist > range)
|
||||
|
@ -4892,7 +4890,7 @@ fixed_t K_FindCheckX(fixed_t px, fixed_t py, angle_t ang, fixed_t mx, fixed_t my
|
|||
else
|
||||
x = (FixedMul(FINETANGENT(((diff+ANGLE_90)>>ANGLETOFINESHIFT) & 4095), 160<<FRACBITS) + (160<<FRACBITS))>>FRACBITS;
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
x = 320-x;
|
||||
|
||||
if (splitscreen > 1)
|
||||
|
@ -5018,7 +5016,7 @@ static void K_drawKartMinimap(void)
|
|||
if (splitscreen == 2)
|
||||
splitflags = 0;
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
V_DrawSmallScaledPatch(x+(AutomapPic->width/2), y, splitflags|V_FLIP, AutomapPic);
|
||||
else
|
||||
V_DrawSmallScaledPatch(x, y, splitflags, AutomapPic);
|
||||
|
@ -5074,7 +5072,7 @@ static void K_drawKartMinimap(void)
|
|||
amxpos = amnumxpos + ((x + AutomapPic->width/4 - (iconprefix[players[i].skin]->width/4))<<FRACBITS);
|
||||
amypos = amnumypos + ((y + AutomapPic->height/4 - (iconprefix[players[i].skin]->height/4))<<FRACBITS);
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
{
|
||||
amxpos = -amnumxpos + ((x + AutomapPic->width/4 + (iconprefix[players[i].skin]->width/4))<<FRACBITS);
|
||||
if (!players[i].skincolor) // 'default' color
|
||||
|
@ -5140,7 +5138,7 @@ static void K_drawBattleFullscreen(void)
|
|||
else if (splitscreen < 2)
|
||||
V_DrawFixedPatch(x<<FRACBITS, y<<FRACBITS, scale, 0, kp_battlelose, NULL);
|
||||
}
|
||||
else if (stplyr->kartstuff[k_balloon] <= 0 && stplyr->kartstuff[k_comebacktimer] && cv_kartcomeback.value)
|
||||
else if (stplyr->kartstuff[k_balloon] <= 0 && stplyr->kartstuff[k_comebacktimer] && comeback)
|
||||
{
|
||||
INT32 t = stplyr->kartstuff[k_comebacktimer]/TICRATE;
|
||||
INT32 txoff = 0;
|
||||
|
@ -5213,7 +5211,7 @@ static void K_drawStartLakitu(void)
|
|||
else
|
||||
adjustY = 200;
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
V_DrawSmallScaledPatch(320-LAKI_X, LAKI_Y + adjustY, V_SNAPTOTOP|V_FLIP, localpatch);
|
||||
else
|
||||
V_DrawSmallScaledPatch(LAKI_X, LAKI_Y + adjustY, V_SNAPTOTOP, localpatch);
|
||||
|
@ -5286,7 +5284,7 @@ static void K_drawLapLakitu(void)
|
|||
adjustY = 200;
|
||||
}
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
V_DrawSmallScaledPatch(320-(LAKI_X+14+(swoopTimer/4)), LAKI_Y + adjustY, V_SNAPTOTOP|V_FLIP, localpatch);
|
||||
else
|
||||
V_DrawSmallScaledPatch(LAKI_X+14+(swoopTimer/4), LAKI_Y + adjustY, V_SNAPTOTOP, localpatch);
|
||||
|
@ -5303,7 +5301,7 @@ void K_drawKartHUD(void)
|
|||
&& (stplyr->exiting
|
||||
|| (stplyr->kartstuff[k_balloon] <= 0
|
||||
&& stplyr->kartstuff[k_comebacktimer]
|
||||
&& cv_kartcomeback.value
|
||||
&& comeback
|
||||
&& stplyr->playerstate == PST_LIVE)))
|
||||
{
|
||||
K_drawBattleFullscreen();
|
||||
|
@ -5326,7 +5324,7 @@ void K_drawKartHUD(void)
|
|||
K_drawKartPlayerCheck();
|
||||
}
|
||||
|
||||
if (splitscreen == 0 || splitscreen == 2)
|
||||
if ((splitscreen == 0 || splitscreen == 2) && cv_kartminimap.value)
|
||||
K_drawKartMinimap();
|
||||
|
||||
// If the item window is closing, draw it closing!
|
||||
|
|
|
@ -17,7 +17,6 @@ UINT8 K_GetKartColorByName(const char *name);
|
|||
|
||||
void K_RegisterKartStuff(void);
|
||||
|
||||
UINT8 K_GetKartCC(void);
|
||||
void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid);
|
||||
void K_LakituChecker(player_t *player);
|
||||
void K_KartMoveAnimation(player_t *player);
|
||||
|
|
|
@ -1993,13 +1993,6 @@ static int lib_kGetKartColorByName(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kGetKartCC(lua_State *L)
|
||||
{
|
||||
//HUDSAFE
|
||||
lua_pushinteger(L, K_GetKartCC());
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kKartBouncing(lua_State *L)
|
||||
{
|
||||
mobj_t *mobj1 = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
|
@ -2336,7 +2329,6 @@ static luaL_Reg lib[] = {
|
|||
|
||||
// k_kart
|
||||
{"K_GetKartColorByName",lib_kGetKartColorByName},
|
||||
{"K_GetKartCC",lib_kGetKartCC},
|
||||
{"K_KartBouncing",lib_kKartBouncing},
|
||||
{"K_SpinPlayer",lib_kSpinPlayer},
|
||||
{"K_SquishPlayer",lib_kSquishPlayer},
|
||||
|
|
537
src/m_cond.c
537
src/m_cond.c
|
@ -32,532 +32,9 @@ conditionset_t conditionSets[MAXCONDITIONSETS];
|
|||
// Default Emblem locations
|
||||
emblem_t emblemlocations[MAXEMBLEMS] =
|
||||
{
|
||||
// GREEN FLOWER 1
|
||||
// ---
|
||||
{0, 8156, 6936, 129, 1, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Go get your feet wet\n"
|
||||
"to find this, the first emblem.\n"
|
||||
"Yes, it's very deep.", 0},
|
||||
{0, 3184, 1812, 928, 1, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"There are many rings,\n"
|
||||
"but this one's not what you think.\n"
|
||||
"There lies the emblem.", 0},
|
||||
{0, 9024, 6716, 769, 1, 'C', SKINCOLOR_RED, 0,
|
||||
"Right next to a lake,\n"
|
||||
"a ledge has been constructed.\n"
|
||||
"Near there is the goal.", 0},
|
||||
{0, 2080, -384, 512, 1, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Streams come to an end\n"
|
||||
"where they can no longer fall.\n"
|
||||
"But if you went up...", 0},
|
||||
{0, -336, 2064, 195, 1, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"This one's in plain sight.\n"
|
||||
"Why haven't you claimed it?\n"
|
||||
"Surely you saw it.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 1, 'S', SKINCOLOR_BROWN, 125000, "", 0},
|
||||
{ET_TIME, 0,0,0, 1, 'T', SKINCOLOR_GREY, 20*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 1, 'R', SKINCOLOR_GOLD, 200, "", 0},
|
||||
|
||||
|
||||
// GREEN FLOWER 2
|
||||
// ---
|
||||
{0, 2624, -6816, 1332, 2, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Near the giant lake\n"
|
||||
"lies a cave with a 1-Up.\n"
|
||||
"An emblem's there, too!", 0},
|
||||
{0, -5728, -2848, 2848, 2, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Near the final lake,\n"
|
||||
"a higher lake falls on in.\n"
|
||||
"Three platforms await.", 0},
|
||||
{0, 3648, 6464, 2576, 2, 'C', SKINCOLOR_RED, 0,
|
||||
"Near the level's start,\n"
|
||||
"a bridge crosses a river.\n"
|
||||
"What's that river's source?", 0},
|
||||
{0, -2032,-10048, 986, 2, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Near the level's end,\n"
|
||||
"another bridge spans a lake.\n"
|
||||
"What could be under...?", 0},
|
||||
{0, -170, 491, 3821, 2, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"An ivied tunnel\n"
|
||||
"has a corner that's sunlit.\n"
|
||||
"Go reach for the sky!", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 2, 'S', SKINCOLOR_BROWN, 150000, "", 0},
|
||||
{ET_TIME, 0,0,0, 2, 'T', SKINCOLOR_GREY, 40*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 2, 'R', SKINCOLOR_GOLD, 200, "", 0},
|
||||
|
||||
|
||||
// GREEN FLOWER 3
|
||||
// ---
|
||||
{ET_TIME, 0,0,0, 3, 'T', SKINCOLOR_GREY, 30*TICRATE, "", 0},
|
||||
|
||||
|
||||
// TECHNO HILL 1
|
||||
// ---
|
||||
{0, -5664, -5072, 2396, 4, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Three pipes reside near\n"
|
||||
"where our heroes' paths split off.\n"
|
||||
"You'll have to look up!", 0},
|
||||
{0, -784,-13968, 2888, 4, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Climbing yields great range.\n"
|
||||
"Yet, on a path for climbers,\n"
|
||||
"flying is the key.", 0},
|
||||
{0, 4160, -5824, 3776, 4, 'C', SKINCOLOR_RED, 0,
|
||||
"That's sure lots of slime.\n"
|
||||
"Say, do you ever wonder\n"
|
||||
"what's dumping it all?", 0},
|
||||
{0, 6400, -8352, 1764, 4, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Spinning through small gaps\n"
|
||||
"can slip you into a cave.\n"
|
||||
"In that cave's first stretch...", 0},
|
||||
{0, 2848, -9088, 488, 4, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The slime lake is deep,\n"
|
||||
"but reaching the floor takes height.\n"
|
||||
"Scream \"Geronimo!\"...", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 4, 'S', SKINCOLOR_BROWN, 75000, "", 0},
|
||||
{ET_TIME, 0,0,0, 4, 'T', SKINCOLOR_GREY, 75*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 4, 'R', SKINCOLOR_GOLD, 300, "", 0},
|
||||
|
||||
|
||||
// TECHNO HILL 2
|
||||
// ---
|
||||
{0,-19138, -2692, 688, 5, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Near the first checkpoint,\n"
|
||||
"a bridge crosses a slime pool.\n"
|
||||
"(Sensing a pattern?)", 0},
|
||||
{0,-13120, 8062, 1248, 5, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Behind the windows,\n"
|
||||
"near crushers, ever smashing\n"
|
||||
"a conveyor belt.", 0},
|
||||
{0, 580, 4552, 1344, 5, 'C', SKINCOLOR_RED, 0,
|
||||
"A pipe drops onto\n"
|
||||
"a half-outdoors conveyor.\n"
|
||||
"But is it empty?", 0},
|
||||
{0, 192, -8768, 24, 5, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"There is a hallway\n"
|
||||
"that a button floods with slime.\n"
|
||||
"Go through it again!", 0},
|
||||
{0, -2468,-12128, 1312, 5, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"Jumping on turtles\n"
|
||||
"will send you springing skyward.\n"
|
||||
"Now, do that six times...", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 5, 'S', SKINCOLOR_BROWN, 100000, "", 0},
|
||||
{ET_TIME, 0,0,0, 5, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 5, 'R', SKINCOLOR_GOLD, 600, "", 0},
|
||||
|
||||
|
||||
// TECHNO HILL 3
|
||||
// ---
|
||||
{ET_TIME, 0,0,0, 6, 'T', SKINCOLOR_GREY, 40*TICRATE, "", 0},
|
||||
|
||||
|
||||
// DEEP SEA 1
|
||||
// ---
|
||||
{0,-16224, -2880, 3530, 7, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Climb up two maze walls.\n"
|
||||
"Break the roof, then a corner.\n"
|
||||
"There, glide, but stay dry.", 0},
|
||||
{0, -8224, 896, 1056, 7, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Follow the left path.\n"
|
||||
"A square green button lurks deep.\n"
|
||||
"Weight it down, somehow.", 0},
|
||||
{0, 4992, -5072, 4136, 7, 'C', SKINCOLOR_RED, 0,
|
||||
"A certain path holds\n"
|
||||
"many gargoyle puzzles.\n"
|
||||
"Victors reach a \"V\".", 0},
|
||||
{0, 4576, 5168, 2660, 7, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"A caved-in hallway?\n"
|
||||
"The floor falls; the path goes down.\n"
|
||||
"But those rocks looked weak...", 0},
|
||||
{0, 12576, 16096, -992, 7, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The end is quite dry.\n"
|
||||
"Some rocks dam the water in.\n"
|
||||
"Knuckles can fix that...", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 7, 'S', SKINCOLOR_BROWN, 75000, "", 0},
|
||||
{ET_TIME, 0,0,0, 7, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 7, 'R', SKINCOLOR_GOLD, 400, "", 0},
|
||||
|
||||
|
||||
// DEEP SEA 2
|
||||
// ---
|
||||
{0,-15040, 6976, 2016, 8, 'A', SKINCOLOR_BLUE, 0,
|
||||
"A waterfall lands\n"
|
||||
"near a starpost in a cave.\n"
|
||||
"It's dark up there, but...", 0},
|
||||
{0, 4288, 2912, 544, 8, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"So many blocks here!\n"
|
||||
"Take five; bathe in the fountain.\n"
|
||||
"Hmmm? A hidden path...?", 0},
|
||||
{0, -5696, 16992, 791, 8, 'C', SKINCOLOR_RED, 0,
|
||||
"An ornate dragon\n"
|
||||
"faces a secret passage.\n"
|
||||
"Knuckles! Don't get crushed!", 0},
|
||||
{0,-13344, 18688, 1034, 8, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"In the current maze\n"
|
||||
"hides a dark room of columns.\n"
|
||||
"Find it, then look up.", 0},
|
||||
{0, 3104, 16192, 2408, 8, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"That same dragon's eye\n"
|
||||
"hides another secret room.\n"
|
||||
"There, solve its riddle.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 8, 'S', SKINCOLOR_BROWN, 50000, "", 0},
|
||||
{ET_TIME, 0,0,0, 8, 'T', SKINCOLOR_GREY, 150*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 8, 'R', SKINCOLOR_GOLD, 250, "", 0},
|
||||
|
||||
|
||||
// DEEP SEA 3
|
||||
// ---
|
||||
{ET_TIME, 0,0,0, 9, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0},
|
||||
|
||||
|
||||
// CASTLE EGGMAN 1
|
||||
// ---
|
||||
{0, -6176, -5184, -128, 10, 'A', SKINCOLOR_BLUE, 0,
|
||||
"A drain feeds the lake.\n"
|
||||
"Water rushes quickly through.\n"
|
||||
"Go against the flow.", 0},
|
||||
{0, 3648,-15296, -992, 10, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"The left starting path\n"
|
||||
"goes atop a large wood deck.\n"
|
||||
"Checked underneath yet?", 0},
|
||||
{0, 11712, 21312, 5472, 10, 'C', SKINCOLOR_RED, 0,
|
||||
"At last, the castle!\n"
|
||||
"Hold up! Don't just barge right in!\n"
|
||||
"What's the facade hold...?", 0},
|
||||
{0, 20224, 13344, 3104, 10, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"The final approach!\n"
|
||||
"A tower holds the emblem\n"
|
||||
"near a ring arrow.", 0},
|
||||
{0, 9472, -5890, 710, 10, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The right starting path\n"
|
||||
"hides this near a canopy,\n"
|
||||
"high, where two trees meet.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 10, 'S', SKINCOLOR_BROWN, 50000, "", 0},
|
||||
{ET_TIME, 0,0,0, 10, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 10, 'R', SKINCOLOR_GOLD, 200, "", 0},
|
||||
|
||||
|
||||
// CASTLE EGGMAN 2
|
||||
// ---
|
||||
{0, 832,-15168, 7808, 11, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Find a trick bookcase\n"
|
||||
"that hides a darkened hallway.\n"
|
||||
"There, climb a tower.", 0},
|
||||
{0,-18460,-22180, 2416, 11, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Down in the dungeon,\n"
|
||||
"a cracked wall hides secret paths.\n"
|
||||
"Echidnas only!", 0},
|
||||
{0, -6144,-11792, 3232, 11, 'C', SKINCOLOR_RED, 0,
|
||||
"A room you can flood!\n"
|
||||
"A brown grate's near its exit.\n"
|
||||
"Knuckles can break it...", 0},
|
||||
{0, 4608, -7024, 4256, 11, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Some of these bookshelves\n"
|
||||
"are not flush against the walls.\n"
|
||||
"Wonder why that is?", 0},
|
||||
{0, 12708,-13536, 4768, 11, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The ending's towers\n"
|
||||
"are hiding a small alcove.\n"
|
||||
"Check around outside.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 11, 'S', SKINCOLOR_BROWN, 400000, "", 0},
|
||||
{ET_TIME, 0,0,0, 11, 'T', SKINCOLOR_GREY, 210*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 11, 'R', SKINCOLOR_GOLD, 600, "", 0},
|
||||
|
||||
|
||||
// CASTLE EGGMAN 3
|
||||
// ---
|
||||
{ET_TIME, 0,0,0, 12, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
|
||||
|
||||
// ARID CANYON 1
|
||||
// ---
|
||||
{0, 3488, 2208, 3072, 13, 'A', SKINCOLOR_BLUE, 0,
|
||||
"A rather large gap\n"
|
||||
"must be crossed by way of tram.\n"
|
||||
"At its end, jump left.", 0},
|
||||
{0, -7552, 10464, 4094, 13, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Crushers that go up!\n"
|
||||
"Mind your step; if they're triggered,\n"
|
||||
"they'll block this emblem.", 0},
|
||||
{0,-12093, 14575, 5752, 13, 'C', SKINCOLOR_RED, 0,
|
||||
"There's an oil lake\n"
|
||||
"that you can sink deep into.\n"
|
||||
"Drain it, and explore.", 0},
|
||||
{0, 512, -7136, 4640, 13, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Not far from the start,\n"
|
||||
"if you climb toward the sky,\n"
|
||||
"the cliffs hide something.", 0},
|
||||
{0, 12504, 6848, 3424, 13, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"Right by the exit,\n"
|
||||
"an emblem lies on a cliff.\n"
|
||||
"Ride ropes to reach it.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 13, 'S', SKINCOLOR_BROWN, 50000, "", 0},
|
||||
{ET_TIME, 0,0,0, 13, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 13, 'R', SKINCOLOR_GOLD, 300, "", 0},
|
||||
|
||||
|
||||
// RED VOLCANO 1
|
||||
// ---
|
||||
{0,-13184, 11424, 3080, 16, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Look around the room,\n"
|
||||
"just before you clear the stage;\n"
|
||||
"something's hidden there!", 0},
|
||||
{0, -2816, 3120, 3044, 16, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Ever look upwards\n"
|
||||
"when you're traversing across\n"
|
||||
"collapsing platforms?", 0},
|
||||
{0, 6720, 6784, 1452, 16, 'C', SKINCOLOR_RED, 0,
|
||||
"Check out a corner\n"
|
||||
"of a lake of magma near\n"
|
||||
"spinning jets of flame.", 0},
|
||||
{0, -5504, 9824, 800, 16, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Where once a bridge stood,\n"
|
||||
"now magma falls from above.\n"
|
||||
"The bridge dropped something...", 0},
|
||||
{0, 8287,-11043, 1328, 16, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"A lake of magma\n"
|
||||
"ebbs and flows unendingly.\n"
|
||||
"Wait for its nadir.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 16, 'S', SKINCOLOR_BROWN, 30000, "", 0},
|
||||
{ET_TIME, 0,0,0, 16, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 16, 'R', SKINCOLOR_GOLD, 100, "", 0},
|
||||
|
||||
|
||||
// EGG ROCK 1
|
||||
// ---
|
||||
{0,-10976, -7328, 1584, 22, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Vanishing platforms,\n"
|
||||
"then collapsing ones herald\n"
|
||||
"a last-second jump.", 0},
|
||||
{0, -6592,-11200, 2208, 22, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"What is this red stuff?\n"
|
||||
"You can't breathe it in, but look!\n"
|
||||
"It can't reach up there...", 0},
|
||||
{0, 6816, 832, 936, 22, 'C', SKINCOLOR_RED, 0,
|
||||
"The team's paths diverge.\n"
|
||||
"Should Tails run the crusher path?\n"
|
||||
"No! Fly outside it!", 0},
|
||||
{0, 6942, -8902, 2080, 22, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Don't jump too high here!\n"
|
||||
"No conveyor will catch you;\n"
|
||||
"you'd fall to your death.", 0},
|
||||
{0, -6432, -6192, 584, 22, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"Conveyors! Magma!\n"
|
||||
"What an intense room this is!\n"
|
||||
"But, what brought you here?", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 22, 'S', SKINCOLOR_BROWN, 25000, "", 0},
|
||||
{ET_TIME, 0,0,0, 22, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 22, 'R', SKINCOLOR_GOLD, 150, "", 0},
|
||||
|
||||
|
||||
// EGG ROCK 2
|
||||
// ---
|
||||
{0, -6672, 7792, 352, 23, 'A', SKINCOLOR_BLUE, 0,
|
||||
"Walk on the ceiling;\n"
|
||||
"resist the urge to flip back!\n"
|
||||
"Find the cyan path...", 0},
|
||||
{0,-12256, 15136, -288, 23, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"X marks the spot? Nope!\n"
|
||||
"Try standing further away\n"
|
||||
"when the timer flips.", 0},
|
||||
{0, 1536, 16224, 1144, 23, 'C', SKINCOLOR_RED, 0,
|
||||
"There is more than one\n"
|
||||
"elevator inside the\n"
|
||||
"elevator shaft...", 0},
|
||||
{0,-15968, 14192, 3152, 23, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Gears with missing teeth\n"
|
||||
"can hide a clever secret!\n"
|
||||
"Think Green Hill Zone boss.", 0},
|
||||
{0, 1920, 20608, 1064, 23, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"Just before you reach\n"
|
||||
"the defective cargo bay,\n"
|
||||
"fly under a bridge.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 23, 'S', SKINCOLOR_BROWN, 60000, "", 0},
|
||||
{ET_TIME, 0,0,0, 23, 'T', SKINCOLOR_GREY, 300*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 23, 'R', SKINCOLOR_GOLD, 250, "", 0},
|
||||
|
||||
|
||||
// EGG ROCK 3
|
||||
// ---
|
||||
/* Just in case, I'll leave these here in the source.
|
||||
{0, 848, -3584, 592, 24, 'A', SKINCOLOR_BLUE, 0,
|
||||
"[PH] Hiding at the end of the first hallway.", 0},
|
||||
{0,-10368, -2816, 144, 24, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Directions are meaningless.", 0},
|
||||
{0, -8160, -5952, 560, 24, 'C', SKINCOLOR_RED, 0,
|
||||
"[PH] In the ceiling of the conveyor belt + laser hallway.", 0},
|
||||
{0,-13728,-13728, 1552, 24, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"[PH] On top of the platform with rows of spikes in reverse gravity.", 0},
|
||||
{0,-14944, 768, 1232, 24, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"Follow the leader.", 0},
|
||||
*/
|
||||
|
||||
{ET_SCORE, 0,0,0, 24, 'S', SKINCOLOR_BROWN, 14000, "", 0},
|
||||
{ET_TIME, 0,0,0, 24, 'T', SKINCOLOR_GREY, 210*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 24, 'R', SKINCOLOR_GOLD, 100, "", 0},
|
||||
|
||||
|
||||
// EGG ROCK CORE
|
||||
// ---
|
||||
{ET_TIME, 0,0,0, 25, 'T', SKINCOLOR_GREY, 100*TICRATE, "", 0},
|
||||
|
||||
|
||||
// PIPE TOWERS
|
||||
// ---
|
||||
{0, 3182, 5040, 3008, 30, 'A', SKINCOLOR_BLUE, 0,
|
||||
"A pipe in the roof\n"
|
||||
"eternally drops water.\n"
|
||||
"Something's stuck up there.", 0},
|
||||
{0, -2400, 5984, 2752, 30, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Pushing a red switch\n"
|
||||
"raises the water level;\n"
|
||||
"from there, can't miss it.", 0},
|
||||
{0, 6112, 7008, 4032, 30, 'C', SKINCOLOR_RED, 0,
|
||||
"A high-up passage\n"
|
||||
"hides near the second checkpoint.\n"
|
||||
"Climb in; then, climb more.", 0},
|
||||
{0, 11424, -4832, 1376, 30, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"The underground room\n"
|
||||
"with platforms that fall and rise\n"
|
||||
"only LOOKS empty...", 0},
|
||||
{0 , 4960, -6112, 1312, 30, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"This one's straightforward.\n"
|
||||
"What comes to mind when I say:\n"
|
||||
"\"WELCOME TO WARP ZONE!\"?", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 30, 'S', SKINCOLOR_BROWN, 75000, "", 0},
|
||||
{ET_TIME, 0,0,0, 30, 'T', SKINCOLOR_GREY, 100*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 30, 'R', SKINCOLOR_GOLD, 300, "", 0},
|
||||
|
||||
|
||||
// AERIAL GARDEN
|
||||
// ---
|
||||
{0, 10176,-14304, 1796, 40, 'A', SKINCOLOR_BLUE, 0,
|
||||
"A central tower,\n"
|
||||
"one with many waterfalls,\n"
|
||||
"hides a secret room.", 0},
|
||||
{0, 480, 17696, 6496, 40, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"Hidden off the path\n"
|
||||
"lies a skyscraping tower.\n"
|
||||
"A lake's at the top.", 0},
|
||||
{0, -8896, 13248, 3362, 40, 'C', SKINCOLOR_RED, 0,
|
||||
"Find all four buttons\n"
|
||||
"that sink when you stand on them.\n"
|
||||
"They'll open a door...", 0},
|
||||
{0, -8896, -9952, 2480, 40, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"Much like the last one,\n"
|
||||
"you need to find some switches.\n"
|
||||
"Only two, this time.", 0},
|
||||
{0, 13184, 18880, 6672, 40, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The inner sanctum!\n"
|
||||
"Teleport to its switches;\n"
|
||||
"then, check near the goal.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 40, 'S', SKINCOLOR_BROWN, 300000, "", 0},
|
||||
{ET_TIME, 0,0,0, 40, 'T', SKINCOLOR_GREY, 240*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 40, 'R', SKINCOLOR_GOLD, 1200, "", 0},
|
||||
|
||||
|
||||
// AZURE TEMPLE
|
||||
// ---
|
||||
{0, -2400, 7552, 1120, 41, 'A', SKINCOLOR_BLUE, 0,
|
||||
"For those who can swim,\n"
|
||||
"a long tunnel hides rewards.\n"
|
||||
"Do mind the Buzzes!", 0},
|
||||
{0, -64, 14016, 2072, 41, 'B', SKINCOLOR_LAVENDER, 0,
|
||||
"So many skylights!\n"
|
||||
"A markedly large one hides\n"
|
||||
"behind a starpost...", 0},
|
||||
{0, 2976, 13920, -32, 41, 'C', SKINCOLOR_RED, 0,
|
||||
"When you reach gauntlets\n"
|
||||
"of diagonal fire,\n"
|
||||
"check out the corners.", 0},
|
||||
{0, 2176, 22592, 1376, 41, 'D', SKINCOLOR_ORANGE, 0,
|
||||
"A room of currents;\n"
|
||||
"most of them are marked by spikes.\n"
|
||||
"This one? A corner.", 0},
|
||||
{0, -4128, 21344, 1120, 41, 'E', SKINCOLOR_NEONGREEN, 0,
|
||||
"The only way to hit\n"
|
||||
"all those gems at once is with\n"
|
||||
"a radial blast.", 0},
|
||||
|
||||
{ET_SCORE, 0,0,0, 41, 'S', SKINCOLOR_BROWN, 425000, "", 0},
|
||||
{ET_TIME, 0,0,0, 41, 'T', SKINCOLOR_GREY, 240*TICRATE, "", 0},
|
||||
{ET_RINGS, 0,0,0, 41, 'R', SKINCOLOR_GOLD, 300, "", 0},
|
||||
|
||||
|
||||
// FLORAL FIELD
|
||||
// ---
|
||||
{0, 5394, -996, 160, 50, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 50, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 50, 'T', SKINCOLOR_GREY, 40*TICRATE, "", 0},
|
||||
|
||||
|
||||
// TOXIC PLATEAU
|
||||
// ---
|
||||
{0, 780, -1664, 32, 51, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 51, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 51, 'T', SKINCOLOR_GREY, 50*TICRATE, "", 0},
|
||||
|
||||
|
||||
// FLOODED COVE
|
||||
// ---
|
||||
{0, 1824, -1888, 2448, 52, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 52, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 52, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0},
|
||||
|
||||
|
||||
// CAVERN FORTRESS
|
||||
// ---
|
||||
{0, -3089, -431, 1328, 53, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 53, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 53, 'T', SKINCOLOR_GREY, 75*TICRATE, "", 0},
|
||||
|
||||
|
||||
// DUSTY WASTELAND
|
||||
// ---
|
||||
{0, 957, 924, 2956, 54, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 54, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 54, 'T', SKINCOLOR_GREY, 65*TICRATE, "", 0},
|
||||
|
||||
|
||||
// MAGMA CAVES
|
||||
// ---
|
||||
{0, -2752, 3104, 1800, 55, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 55, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 55, 'T', SKINCOLOR_GREY, 80*TICRATE, "", 0},
|
||||
|
||||
|
||||
// EGG SATELLITE
|
||||
// ---
|
||||
{0, 5334, -609, 3426, 56, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 56, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 56, 'T', SKINCOLOR_GREY, 120*TICRATE, "", 0},
|
||||
|
||||
|
||||
// BLACK HOLE
|
||||
// ---
|
||||
{0, 2108, 3776, 32, 57, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 57, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 57, 'T', SKINCOLOR_GREY, 150*TICRATE, "", 0},
|
||||
|
||||
|
||||
// SPRING HILL
|
||||
// ---
|
||||
{0, -1840, -1024, 1644, 58, 'N', SKINCOLOR_ROSEWOOD, 0, "", 0},
|
||||
{ET_NGRADE, 0,0,0, 58, 'Q', SKINCOLOR_TEAL, GRADE_A, "", 0},
|
||||
{ET_NTIME, 0,0,0, 58, 'T', SKINCOLOR_GREY, 60*TICRATE, "", 0},
|
||||
// GREEN HILLS
|
||||
// 1:30.00
|
||||
{ET_TIME, 0,0,0, 1, 'T', SKINCOLOR_GREY, 90*TICRATE, "", 0},
|
||||
};
|
||||
|
||||
// Default Extra Emblems
|
||||
|
@ -574,8 +51,8 @@ extraemblem_t extraemblems[MAXEXTRAEMBLEMS] =
|
|||
unlockable_t unlockables[MAXUNLOCKABLES] =
|
||||
{
|
||||
// Name, Objective, Menu Height, ConditionSet, Unlock Type, Variable, NoCecho, NoChecklist
|
||||
/* 01 */ {"Record Attack", "Complete Greenflower Zone, Act 1", 0, -1, SECRET_RECORDATTACK, 0, true, true, 0},
|
||||
/* 02 */ {"NiGHTS Mode", "Complete Floral Field", 0, -1, SECRET_NIGHTSMODE, 0, true, true, 0},
|
||||
/* 01 */ {"Record Attack", "", 0, -1, SECRET_RECORDATTACK, 0, true, true, 0},
|
||||
/* 02 */ {"NiGHTS Mode", "", 0, -1, SECRET_NIGHTSMODE, 0, true, true, 0},
|
||||
|
||||
/* 03 */ {"Play Credits", "Complete 1P Mode", 30, 10, SECRET_CREDITS, 0, true, true, 0},
|
||||
/* 04 */ {"Sound Test", "Complete 1P Mode", 40, 10, SECRET_SOUNDTEST, 0, false, false, 0},
|
||||
|
@ -602,7 +79,7 @@ unlockable_t unlockables[MAXUNLOCKABLES] =
|
|||
};
|
||||
|
||||
// Default number of emblems and extra emblems
|
||||
INT32 numemblems = 155;
|
||||
INT32 numemblems = 1;
|
||||
INT32 numextraemblems = 5;
|
||||
|
||||
// DEFAULT CONDITION SETS FOR SRB2 2.1:
|
||||
|
@ -739,6 +216,8 @@ static UINT8 M_CheckCondition(condition_t *cn)
|
|||
{
|
||||
case UC_PLAYTIME: // Requires total playing time >= x
|
||||
return (totalplaytime >= (unsigned)cn->requirement);
|
||||
case UC_MATCHESPLAYED: // Requires any level completed >= x times
|
||||
return (matchesplayed >= (unsigned)cn->requirement);
|
||||
case UC_GAMECLEAR: // Requires game beaten >= x times
|
||||
return (timesBeaten >= (unsigned)cn->requirement);
|
||||
case UC_ALLEMERALDS: // Requires game beaten with all 7 emeralds >= x times
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
typedef enum
|
||||
{
|
||||
UC_PLAYTIME, // PLAYTIME [tics]
|
||||
UC_MATCHESPLAYED, // MATCHESPLAYED [x played]
|
||||
UC_GAMECLEAR, // GAMECLEAR <x times>
|
||||
UC_ALLEMERALDS, // ALLEMERALDS <x times>
|
||||
UC_ULTIMATECLEAR, // ULTIMATECLEAR <x times>
|
||||
|
|
154
src/m_menu.c
154
src/m_menu.c
|
@ -238,9 +238,9 @@ menu_t SP_MainDef, MP_MainDef, OP_MainDef;
|
|||
menu_t MISC_ScrambleTeamDef, MISC_ChangeTeamDef;
|
||||
|
||||
// Single Player
|
||||
static void M_LoadGame(INT32 choice);
|
||||
//static void M_LoadGame(INT32 choice);
|
||||
static void M_TimeAttack(INT32 choice);
|
||||
static void M_NightsAttack(INT32 choice);
|
||||
//static void M_NightsAttack(INT32 choice);
|
||||
static void M_Statistics(INT32 choice);
|
||||
static void M_HandleStaffReplay(INT32 choice);
|
||||
static void M_ReplayTimeAttack(INT32 choice);
|
||||
|
@ -342,7 +342,7 @@ static void M_DrawNightsAttackMenu(void);
|
|||
static void M_DrawSetupChoosePlayerMenu(void);
|
||||
static void M_DrawControl(void);
|
||||
static void M_DrawVideoMode(void);
|
||||
static void M_DrawMonitorToggles(void);
|
||||
//static void M_DrawMonitorToggles(void);
|
||||
#ifdef HWRENDER
|
||||
static void M_OGL_DrawFogMenu(void);
|
||||
static void M_OGL_DrawColorMenu(void);
|
||||
|
@ -477,7 +477,7 @@ static consvar_t cv_dummystaff = {"dummystaff", "0", CV_HIDEN|CV_CALL, dummystaf
|
|||
static menuitem_t MainMenu[] =
|
||||
{
|
||||
{IT_CALL |IT_STRING, NULL, "Secrets", M_SecretsMenu, 84},
|
||||
{IT_CALL |IT_STRING, NULL, "1 Player", M_SinglePlayerMenu, 92},
|
||||
{IT_CALL |IT_STRING, NULL, "1 Player", M_SinglePlayerMenu, 92},
|
||||
{IT_SUBMENU|IT_STRING, NULL, "Multiplayer", &MP_MainDef, 100},
|
||||
{IT_CALL |IT_STRING, NULL, "Options", M_Options, 108},
|
||||
{IT_CALL |IT_STRING, NULL, "Quit Game", M_QuitSRB2, 116},
|
||||
|
@ -706,17 +706,17 @@ static menuitem_t SR_EmblemHintMenu[] =
|
|||
// Single Player Main
|
||||
static menuitem_t SP_MainMenu[] =
|
||||
{
|
||||
{IT_CALL | IT_STRING, NULL, "Start Game", M_LoadGame, 92},
|
||||
//{IT_CALL | IT_STRING, NULL, "Start Game", M_LoadGame, 92},
|
||||
{IT_SECRET, NULL, "Record Attack", M_TimeAttack, 100},
|
||||
{IT_SECRET, NULL, "NiGHTS Mode", M_NightsAttack, 108},
|
||||
{IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 116},
|
||||
//{IT_SECRET, NULL, "NiGHTS Mode", M_NightsAttack, 108},
|
||||
{IT_CALL | IT_STRING | IT_CALL_NOTMODIFIED, NULL, "Statistics", M_Statistics, 108},
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
sploadgame,
|
||||
//sploadgame,
|
||||
sprecordattack,
|
||||
spnightsmode,
|
||||
//spnightsmode,
|
||||
spstatistics
|
||||
};
|
||||
|
||||
|
@ -1413,24 +1413,29 @@ static menuitem_t OP_GameOptionsMenu[] =
|
|||
{IT_STRING | IT_CVAR, NULL, "Show HUD", &cv_showhud, 40},
|
||||
{IT_STRING | IT_CVAR | IT_CV_SLIDER,
|
||||
NULL, "HUD Visibility", &cv_translucenthud, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Timer Display", &cv_timetic, 60},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Star SFX", &cv_kartstarsfx, 62},
|
||||
{IT_STRING | IT_CVAR, NULL, "Speedometer Display", &cv_speedometer, 72},
|
||||
{IT_STRING | IT_CVAR, NULL, "Show Minimap", &cv_kartminimap, 82},
|
||||
{IT_STRING | IT_CVAR, NULL, "Show \"CHECK\"", &cv_kartcheck, 92},
|
||||
|
||||
#ifdef SEENAMES
|
||||
{IT_STRING | IT_CVAR, NULL, "HUD Player Names", &cv_seenames, 80},
|
||||
{IT_STRING | IT_CVAR, NULL, "HUD Player Names", &cv_seenames, 104},
|
||||
#endif
|
||||
{IT_STRING | IT_CVAR, NULL, "Log Hazard Damage", &cv_hazardlog, 90},
|
||||
{IT_STRING | IT_CVAR, NULL, "Log Hazard Damage", &cv_hazardlog, 114},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Console Back Color", &cons_backcolor, 100},
|
||||
{IT_STRING | IT_CVAR, NULL, "Console Text Size", &cv_constextsize,110},
|
||||
{IT_STRING | IT_CVAR, NULL, "Uppercase Console", &cv_allcaps, 120},
|
||||
{IT_STRING | IT_CVAR, NULL, "Console Back Color", &cons_backcolor, 126},
|
||||
{IT_STRING | IT_CVAR, NULL, "Console Text Size", &cv_constextsize,136},
|
||||
{IT_STRING | IT_CVAR, NULL, "Uppercase Console", &cv_allcaps, 146},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Title Screen Demos", &cv_rollingdemos, 140},
|
||||
{IT_STRING | IT_CVAR, NULL, "Title Screen Demos", &cv_rollingdemos, 158},
|
||||
};
|
||||
|
||||
static menuitem_t OP_ServerOptionsMenu[] =
|
||||
{
|
||||
{IT_STRING | IT_SUBMENU, NULL, "General netgame options...", &OP_NetgameOptionsDef, 10},
|
||||
{IT_STRING | IT_SUBMENU, NULL, "Gametype options...", &OP_GametypeOptionsDef, 20},
|
||||
{IT_STRING | IT_SUBMENU, NULL, "Random Monitor Toggles...", &OP_MonitorToggleDef, 30},
|
||||
{IT_STRING | IT_SUBMENU, NULL, "Random item toggles...", &OP_MonitorToggleDef, 30},
|
||||
|
||||
#ifndef NONET
|
||||
{IT_STRING | IT_CVAR | IT_CV_STRING,
|
||||
|
@ -1452,65 +1457,57 @@ static menuitem_t OP_NetgameOptionsMenu[] =
|
|||
{
|
||||
{IT_STRING | IT_CVAR, NULL, "Time Limit", &cv_timelimit, 10},
|
||||
{IT_STRING | IT_CVAR, NULL, "Point Limit", &cv_pointlimit, 18},
|
||||
{IT_STRING | IT_CVAR, NULL, "Overtime Tie-Breaker", &cv_overtime, 26},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Special Ring Weapons", &cv_specialrings, 42},
|
||||
{IT_STRING | IT_CVAR, NULL, "Emeralds", &cv_powerstones, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Boxes", &cv_matchboxes, 58},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Respawn", &cv_itemrespawn, 66},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Respawn time", &cv_itemrespawntime, 74},
|
||||
{IT_STRING | IT_CVAR, NULL, "Frantic Items", &cv_kartfrantic, 34},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Sudden Death", &cv_suddendeath, 90},
|
||||
{IT_STRING | IT_CVAR, NULL, "Player respawn delay", &cv_respawntime, 98},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Respawn", &cv_itemrespawn, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Respawn time", &cv_itemrespawntime, 58},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Force Skin #", &cv_forceskin, 114},
|
||||
{IT_STRING | IT_CVAR, NULL, "Restrict skin changes", &cv_restrictskinchange, 122},
|
||||
{IT_STRING | IT_CVAR, NULL, "Player respawn delay", &cv_respawntime, 74},
|
||||
|
||||
{IT_STRING | IT_CVAR, NULL, "Autobalance Teams", &cv_autobalance, 138},
|
||||
{IT_STRING | IT_CVAR, NULL, "Scramble Teams on Map Change", &cv_scrambleonchange, 146},
|
||||
{IT_STRING | IT_CVAR, NULL, "Force Skin #", &cv_forceskin, 90},
|
||||
{IT_STRING | IT_CVAR, NULL, "Restrict skin changes", &cv_restrictskinchange, 98},
|
||||
|
||||
//{IT_STRING | IT_CVAR, NULL, "Autobalance Teams", &cv_autobalance, 114},
|
||||
//{IT_STRING | IT_CVAR, NULL, "Scramble Teams on Map Change", &cv_scrambleonchange, 122},
|
||||
};
|
||||
|
||||
static menuitem_t OP_GametypeOptionsMenu[] =
|
||||
{
|
||||
// This is Kart, we don't need half this shit!
|
||||
/* {IT_HEADER, NULL, "CO-OP", NULL, 2},
|
||||
{IT_STRING | IT_CVAR, NULL, "Players for exit", &cv_playersforexit, 10},
|
||||
{IT_STRING | IT_CVAR, NULL, "Starting Lives", &cv_startinglives, 18},
|
||||
{IT_HEADER, NULL, "RACE", NULL, 2},
|
||||
{IT_STRING | IT_CVAR, NULL, "Game Speed", &cv_kartspeed, 10},
|
||||
{IT_STRING | IT_CVAR, NULL, "Mirror Mode", &cv_kartmirror, 18},
|
||||
{IT_STRING | IT_CVAR, NULL, "Number of Laps", &cv_numlaps, 26},
|
||||
{IT_STRING | IT_CVAR, NULL, "Use Map Lap Counts", &cv_usemapnumlaps, 34},
|
||||
|
||||
{IT_HEADER, NULL, "COMPETITION", NULL, 34},
|
||||
{IT_STRING | IT_CVAR, NULL, "Item Boxes", &cv_competitionboxes, 42},
|
||||
{IT_STRING | IT_CVAR, NULL, "Countdown Time", &cv_countdowntime, 50},*/
|
||||
|
||||
{IT_HEADER, NULL, "RACE", NULL, 2},
|
||||
{IT_STRING | IT_CVAR, NULL, "Number of Laps", &cv_numlaps, 10},
|
||||
{IT_STRING | IT_CVAR, NULL, "Use Map Lap Counts", &cv_usemapnumlaps, 18},
|
||||
{IT_STRING | IT_CVAR, NULL, "CC", &cv_kartcc, 26},
|
||||
|
||||
{IT_HEADER, NULL, "BATTLE", NULL, 50},
|
||||
/* {IT_STRING | IT_CVAR, NULL, "Scoring Type", &cv_match_scoring, 106},
|
||||
|
||||
{IT_HEADER, NULL, "TAG", NULL, 122},
|
||||
{IT_STRING | IT_CVAR, NULL, "Hide Time", &cv_hidetime, 130},
|
||||
|
||||
{IT_HEADER, NULL, "CTF", NULL, 146},
|
||||
{IT_STRING | IT_CVAR, NULL, "Flag Respawn Time", &cv_flagtime, 154},*/
|
||||
{IT_HEADER, NULL, "BATTLE", NULL, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Starting Balloons", &cv_kartballoons, 58},
|
||||
{IT_STRING | IT_CVAR, NULL, "Karma Comeback", &cv_kartcomeback, 66},
|
||||
};
|
||||
|
||||
static menuitem_t OP_MonitorToggleMenu[] =
|
||||
{
|
||||
// Printing handled by drawing function
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Recycler", &cv_recycler, 20},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Teleporters", &cv_teleporters, 30},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Super Ring", &cv_superring, 40},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Super Sneakers", &cv_supersneakers, 50},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Invincibility", &cv_invincibility, 60},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Jump Shield", &cv_jumpshield, 70},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Elemental Shield", &cv_watershield, 80},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Attraction Shield", &cv_ringshield, 90},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Force Shield", &cv_forceshield, 100},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Armageddon Shield", &cv_bombshield, 110},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "1 Up", &cv_1up, 120},
|
||||
{IT_STRING|IT_CVAR|IT_CV_INVISSLIDER, NULL, "Eggman Box", &cv_eggmanbox, 130},
|
||||
// Instead of using this for dumb monitors, lets use the new item bools we have :V
|
||||
{IT_STRING | IT_CVAR, NULL, "Mushrooms", &cv_mushroom, 10},
|
||||
{IT_STRING | IT_CVAR, NULL, "Triple Mushrooms", &cv_triplemushroom, 18},
|
||||
{IT_STRING | IT_CVAR, NULL, "Mega Mushrooms", &cv_megashroom, 26},
|
||||
{IT_STRING | IT_CVAR, NULL, "Golden Mushrooms", &cv_goldshroom, 34},
|
||||
{IT_STRING | IT_CVAR, NULL, "Stars", &cv_star, 42},
|
||||
{IT_STRING | IT_CVAR, NULL, "Bananas", &cv_banana, 50},
|
||||
{IT_STRING | IT_CVAR, NULL, "Triple Bananas", &cv_triplebanana, 58},
|
||||
{IT_STRING | IT_CVAR, NULL, "Fake Items", &cv_fakeitem, 66},
|
||||
{IT_STRING | IT_CVAR, NULL, "Green Shells", &cv_greenshell, 74},
|
||||
{IT_STRING | IT_CVAR, NULL, "Red Shells", &cv_redshell, 82},
|
||||
{IT_STRING | IT_CVAR, NULL, "Triple Green Shells", &cv_triplegreenshell, 90},
|
||||
{IT_STRING | IT_CVAR, NULL, "Triple Red Shells", &cv_tripleredshell, 98},
|
||||
{IT_STRING | IT_CVAR, NULL, "Bob-ombs", &cv_bobomb, 106},
|
||||
{IT_STRING | IT_CVAR, NULL, "Fire Flowers", &cv_fireflower, 114},
|
||||
{IT_STRING | IT_CVAR, NULL, "Magnets", &cv_magnet, 122},
|
||||
{IT_STRING | IT_CVAR, NULL, "Boos", &cv_boo, 130},
|
||||
{IT_STRING | IT_CVAR, NULL, "Lightning", &cv_lightning, 138},
|
||||
{IT_STRING | IT_CVAR, NULL, "Blue Lightning", &cv_blueshell, 146},
|
||||
{IT_STRING | IT_CVAR, NULL, "Feathers", &cv_feather, 154},
|
||||
};
|
||||
|
||||
// ==========================================================================
|
||||
|
@ -1834,7 +1831,8 @@ menu_t OP_ServerOptionsDef = DEFAULTMENUSTYLE("M_SERVER", OP_ServerOptionsMenu,
|
|||
|
||||
menu_t OP_NetgameOptionsDef = DEFAULTMENUSTYLE("M_SERVER", OP_NetgameOptionsMenu, &OP_ServerOptionsDef, 30, 30);
|
||||
menu_t OP_GametypeOptionsDef = DEFAULTMENUSTYLE("M_SERVER", OP_GametypeOptionsMenu, &OP_ServerOptionsDef, 30, 30);
|
||||
menu_t OP_MonitorToggleDef =
|
||||
menu_t OP_MonitorToggleDef = DEFAULTMENUSTYLE("M_SERVER", OP_MonitorToggleMenu, &OP_ServerOptionsDef, 30, 30);
|
||||
/*menu_t OP_MonitorToggleDef =
|
||||
{
|
||||
"M_SERVER",
|
||||
sizeof (OP_MonitorToggleMenu)/sizeof (menuitem_t),
|
||||
|
@ -1844,7 +1842,7 @@ menu_t OP_MonitorToggleDef =
|
|||
30, 30,
|
||||
0,
|
||||
NULL
|
||||
};
|
||||
};*/
|
||||
|
||||
#ifdef HWRENDER
|
||||
menu_t OP_OpenGLOptionsDef = DEFAULTMENUSTYLE("M_VIDEO", OP_OpenGLOptionsMenu, &OP_VideoOptionsDef, 30, 30);
|
||||
|
@ -4515,8 +4513,8 @@ static void M_SinglePlayerMenu(INT32 choice)
|
|||
(void)choice;
|
||||
SP_MainMenu[sprecordattack].status =
|
||||
(M_SecretUnlocked(SECRET_RECORDATTACK)) ? IT_CALL|IT_STRING : IT_SECRET;
|
||||
SP_MainMenu[spnightsmode].status =
|
||||
(M_SecretUnlocked(SECRET_NIGHTSMODE)) ? IT_CALL|IT_STRING : IT_SECRET;
|
||||
/*SP_MainMenu[spnightsmode].status =
|
||||
(M_SecretUnlocked(SECRET_NIGHTSMODE)) ? IT_CALL|IT_STRING : IT_SECRET;*/
|
||||
|
||||
M_SetupNextMenu(&SP_MainDef);
|
||||
}
|
||||
|
@ -4941,13 +4939,13 @@ static void M_HandleLoadSave(INT32 choice)
|
|||
//
|
||||
// Selected from SRB2 menu
|
||||
//
|
||||
static void M_LoadGame(INT32 choice)
|
||||
/*static void M_LoadGame(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
|
||||
M_ReadSaveStrings();
|
||||
M_SetupNextMenu(&SP_LoadDef);
|
||||
}
|
||||
}*/
|
||||
|
||||
//
|
||||
// Used by cheats to force the save menu to a specific spot.
|
||||
|
@ -5346,6 +5344,9 @@ static void M_DrawGameStats(void)
|
|||
G_TicsToMinutes(totalplaytime, false),
|
||||
G_TicsToSeconds(totalplaytime)));
|
||||
|
||||
V_DrawString(32, 90, V_YELLOWMAP, "Total Matches Played:");
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 100, 0, va("%i", matchesplayed));
|
||||
|
||||
for (i = 0; i < NUMMAPS; i++)
|
||||
{
|
||||
if (!mapheaderinfo[i] || !(mapheaderinfo[i]->menuflags & LF2_RECORDATTACK))
|
||||
|
@ -5376,7 +5377,7 @@ static void M_DrawGameStats(void)
|
|||
|
||||
}
|
||||
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, 90, 0, "* COMBINED RECORDS *");
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, 120, 0, "* COMBINED RECORDS *");
|
||||
|
||||
/*sprintf(beststr, "%u", bestscore);
|
||||
V_DrawString(32, 100, V_YELLOWMAP, "SCORE:");
|
||||
|
@ -5385,10 +5386,10 @@ static void M_DrawGameStats(void)
|
|||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 108, V_REDMAP, va("(%d unfinished)", mapsunfinished[0]));*/
|
||||
|
||||
sprintf(beststr, "%i:%02i:%02i.%02i", G_TicsToHours(besttime), G_TicsToMinutes(besttime, false), G_TicsToSeconds(besttime), G_TicsToCentiseconds(besttime));
|
||||
V_DrawString(32, 100, V_YELLOWMAP, "TIME:");
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 100, 0, beststr);
|
||||
V_DrawString(32, 140, V_YELLOWMAP, "TIME:");
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 140, 0, beststr);
|
||||
if (mapsunfinished[1])
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 108, V_REDMAP, va("(%d unfinished)", mapsunfinished[1]));
|
||||
V_DrawRightAlignedString(BASEVIDWIDTH-32, 148, V_REDMAP, va("(%d unfinished)", mapsunfinished[1]));
|
||||
|
||||
/*sprintf(beststr, "%u", bestrings);
|
||||
V_DrawString(32, 140, V_YELLOWMAP, "RINGS:");
|
||||
|
@ -5706,7 +5707,7 @@ void M_DrawNightsAttackMenu(void)
|
|||
}
|
||||
|
||||
// Going to Nights Attack menu...
|
||||
static void M_NightsAttack(INT32 choice)
|
||||
/*static void M_NightsAttack(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
|
||||
|
@ -5731,7 +5732,7 @@ static void M_NightsAttack(INT32 choice)
|
|||
|
||||
G_SetGamestate(GS_TIMEATTACK);
|
||||
S_ChangeMusicInternal("racent", true);
|
||||
}
|
||||
}*/
|
||||
|
||||
// Player has selected the "START" from the nights attack screen
|
||||
static void M_ChooseNightsAttack(INT32 choice)
|
||||
|
@ -7099,6 +7100,7 @@ static void M_EraseDataResponse(INT32 ch)
|
|||
if (erasecontext == 2)
|
||||
{
|
||||
totalplaytime = 0;
|
||||
matchesplayed = 0;
|
||||
F_StartIntro();
|
||||
}
|
||||
M_ClearMenus(true);
|
||||
|
@ -7780,7 +7782,7 @@ static void M_HandleVideoMode(INT32 ch)
|
|||
// ===============
|
||||
// Monitor Toggles
|
||||
// ===============
|
||||
static void M_DrawMonitorToggles(void)
|
||||
/*static void M_DrawMonitorToggles(void)
|
||||
{
|
||||
INT32 i, y;
|
||||
INT32 sum = 0;
|
||||
|
@ -7814,7 +7816,7 @@ static void M_DrawMonitorToggles(void)
|
|||
|
||||
if (cheating)
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y, V_REDMAP, "* MODIFIED, CHEATS ENABLED *");
|
||||
}
|
||||
}*/
|
||||
|
||||
// =========
|
||||
// Quit Game
|
||||
|
|
|
@ -439,7 +439,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
|
||||
special->tracer->player->kartstuff[k_comebackpoints]++;
|
||||
|
||||
if (netgame)
|
||||
if (netgame && cv_hazardlog.value)
|
||||
CONS_Printf(M_GetText("%s gave an item to %s.\n"), player_names[special->tracer->player-players], player_names[player-players]);
|
||||
|
||||
if (special->tracer->player->kartstuff[k_comebackpoints] >= 3)
|
||||
|
|
14
src/p_mobj.c
14
src/p_mobj.c
|
@ -3603,7 +3603,7 @@ boolean P_CameraThinker(player_t *player, camera_t *thiscam, boolean resetcalled
|
|||
|| (thiscam == &camera4 && players[fourthdisplayplayer].mo && (players[fourthdisplayplayer].mo->flags2 & MF2_TWOD)))
|
||||
itsatwodlevel = true;
|
||||
|
||||
if (cv_kartmirror.value)
|
||||
if (mirrormode)
|
||||
postimg = postimg_mirror;
|
||||
else if (player->pflags & PF_FLIPCAM && !(player->pflags & PF_NIGHTSMODE) && player->mo->eflags & MFE_VERTICALFLIP)
|
||||
postimg = postimg_flip;
|
||||
|
@ -7728,14 +7728,10 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
|
||||
P_SpawnGhostMobj(mobj);
|
||||
|
||||
if (K_GetKartCC() == 50)
|
||||
{
|
||||
if (gamespeed == 0)
|
||||
finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4);
|
||||
}
|
||||
else if (K_GetKartCC() == 150)
|
||||
{
|
||||
else if (gamespeed == 2)
|
||||
finalspeed = FixedMul(finalspeed, FRACUNIT+FRACUNIT/4);
|
||||
}
|
||||
|
||||
mobj->angle = R_PointToAngle2(mobj->x, mobj->y, mobj->x+mobj->momx, mobj->y+mobj->momy);
|
||||
if (mobj->health <= 5)
|
||||
|
@ -7779,12 +7775,12 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
if (leveltime % 7 == 0)
|
||||
S_StartSound(mobj, mobj->info->activesound);
|
||||
|
||||
if (K_GetKartCC() == 50)
|
||||
if (gamespeed == 0)
|
||||
{
|
||||
topspeed = FixedMul(topspeed, FRACUNIT-FRACUNIT/4);
|
||||
distbarrier = FixedMul(distbarrier, FRACUNIT-FRACUNIT/4);
|
||||
}
|
||||
else if (K_GetKartCC() == 150)
|
||||
else if (gamespeed == 2)
|
||||
{
|
||||
topspeed = FixedMul(topspeed, FRACUNIT+FRACUNIT/4);
|
||||
distbarrier = FixedMul(distbarrier, FRACUNIT+FRACUNIT/4);
|
||||
|
|
|
@ -2987,6 +2987,17 @@ boolean P_SetupLevel(boolean skipprecip)
|
|||
CV_SetValue(&cv_analog, false);
|
||||
}
|
||||
|
||||
// SRB2Kart: map load variables
|
||||
if (modeattacking)
|
||||
gamespeed = 2;
|
||||
else if (gametype == GT_MATCH)
|
||||
gamespeed = 0;
|
||||
else
|
||||
gamespeed = cv_kartspeed.value;
|
||||
franticitems = cv_kartfrantic.value;
|
||||
mirrormode = cv_kartmirror.value;
|
||||
comeback = cv_kartcomeback.value;
|
||||
|
||||
// clear special respawning que
|
||||
iquehead = iquetail = 0;
|
||||
|
||||
|
|
18
src/p_user.c
18
src/p_user.c
|
@ -43,6 +43,7 @@
|
|||
// Objectplace
|
||||
#include "m_cheat.h"
|
||||
// SRB2kart
|
||||
#include "m_cond.h" // M_UpdateUnlockablesAndExtraEmblems
|
||||
#include "k_kart.h"
|
||||
|
||||
#ifdef HW3SOUND
|
||||
|
@ -1644,6 +1645,19 @@ void P_DoPlayerExit(player_t *player)
|
|||
if (player->exiting)
|
||||
return;
|
||||
|
||||
// SRB2kart: Increment the "matches played" counter.
|
||||
// Why here of all places instead of the intermission screen?!?
|
||||
// To prevent someone from using "exitlevel" to unlock everything!
|
||||
if (player == &players[consoleplayer] && ((!modifiedgame || savemoddata) && !demoplayback)) // SRB2kart: Unlock stuff in MP
|
||||
{
|
||||
matchesplayed++;
|
||||
if (M_UpdateUnlockablesAndExtraEmblems())
|
||||
{
|
||||
S_StartSound(NULL, sfx_ncitem);
|
||||
G_SaveGameData(); // only save if unlocked something
|
||||
}
|
||||
}
|
||||
|
||||
if (gametype == GT_RACE || gametype == GT_COMPETITION) // If in Race Mode, allow
|
||||
{
|
||||
// SRB2kart 120217
|
||||
|
@ -8020,7 +8034,7 @@ static void P_DeathThink(player_t *player)
|
|||
//player->kartstuff[k_lakitu] = 48; // See G_PlayerReborn in g_game.c
|
||||
|
||||
// SRB2kart - spawn automatically after 1 second
|
||||
if (player->deadtimer > TICRATE)
|
||||
if (player->deadtimer > cv_respawntime.value*TICRATE)
|
||||
player->playerstate = PST_REBORN;
|
||||
|
||||
// Single player auto respawn
|
||||
|
@ -9129,7 +9143,7 @@ static void P_CalcPostImg(player_t *player)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (cv_kartmirror.value) // srb2kart
|
||||
if (mirrormode) // srb2kart
|
||||
*type = postimg_mirror;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue