mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge remote-tracking branch 'origin/master' into new-spb
This commit is contained in:
commit
e10d6124d6
20 changed files with 293 additions and 265 deletions
180
src/command.c
180
src/command.c
|
|
@ -1024,15 +1024,17 @@ static void COM_Help_f(void)
|
||||||
|
|
||||||
/** Toggles a console variable. Useful for on/off values.
|
/** Toggles a console variable. Useful for on/off values.
|
||||||
*
|
*
|
||||||
* This works on on/off, yes/no values only
|
* This works on on/off, yes/no values by default. Given
|
||||||
|
* a list of values, cycles between them.
|
||||||
*/
|
*/
|
||||||
static void COM_Toggle_f(void)
|
static void COM_Toggle_f(void)
|
||||||
{
|
{
|
||||||
consvar_t *cvar;
|
consvar_t *cvar;
|
||||||
|
|
||||||
if (COM_Argc() != 2)
|
if (COM_Argc() == 1 || COM_Argc() == 3)
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Toggle <cvar_name>: Toggle the value of a cvar\n"));
|
CONS_Printf(M_GetText("Toggle <cvar_name>: Toggle the value of a cvar\n"));
|
||||||
|
CONS_Printf("Toggle <cvar_name> <value1> <value2>...: Cycle along a set of values\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
cvar = CV_FindVar(COM_Argv(1));
|
cvar = CV_FindVar(COM_Argv(1));
|
||||||
|
|
@ -1042,15 +1044,44 @@ static void COM_Toggle_f(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (COM_Argc() == 2)
|
||||||
|
{
|
||||||
if (!(cvar->PossibleValue == CV_YesNo || cvar->PossibleValue == CV_OnOff))
|
if (!(cvar->PossibleValue == CV_YesNo || cvar->PossibleValue == CV_OnOff))
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("%s is not a boolean value\n"), COM_Argv(1));
|
CONS_Alert(CONS_NOTICE, M_GetText("%s is not a boolean value\n"), COM_Argv(1));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// netcvar don't change imediately
|
// netcvar don't change imediately
|
||||||
cvar->flags |= CV_SHOWMODIFONETIME;
|
cvar->flags |= CV_SHOWMODIFONETIME;
|
||||||
|
|
||||||
|
if (COM_Argc() == 2)
|
||||||
|
{
|
||||||
CV_AddValue(cvar, +1);
|
CV_AddValue(cvar, +1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 2; i < COM_Argc() - 1; ++i)
|
||||||
|
{
|
||||||
|
const char *str = COM_Argv(i);
|
||||||
|
INT32 val;
|
||||||
|
|
||||||
|
if (CV_CompleteValue(cvar, &str, &val))
|
||||||
|
{
|
||||||
|
if (str ? !stricmp(cvar->string, str)
|
||||||
|
: cvar->value == val)
|
||||||
|
{
|
||||||
|
CV_Set(cvar, COM_Argv(i + 1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CV_Set(cvar, COM_Argv(2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Command variant of CV_AddValue
|
/** Command variant of CV_AddValue
|
||||||
|
|
@ -1424,26 +1455,27 @@ const char *CV_CompleteVar(char *partial, INT32 skips)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets a value to a variable with less checking. Only for internal use.
|
boolean CV_CompleteValue(consvar_t *var, const char **valstrp, INT32 *intval)
|
||||||
*
|
|
||||||
* \param var Variable to set.
|
|
||||||
* \param valstr String value for the variable.
|
|
||||||
*/
|
|
||||||
static void Setvalue(consvar_t *var, const char *valstr, boolean stealth)
|
|
||||||
{
|
{
|
||||||
boolean override = false;
|
const char *valstr = *valstrp;
|
||||||
|
|
||||||
INT32 overrideval = 0;
|
INT32 overrideval = 0;
|
||||||
|
|
||||||
// If we want messages informing us if cheats have been enabled or disabled,
|
INT32 v;
|
||||||
// we need to rework the consvars a little bit. This call crashes the game
|
|
||||||
// on load because not all variables will be registered at that time.
|
if (var == &cv_forceskin)
|
||||||
/* boolean prevcheats = false;
|
{
|
||||||
if (var->flags & CV_CHEAT)
|
v = R_SkinAvailable(valstr);
|
||||||
prevcheats = CV_CheatsEnabled(); */
|
|
||||||
|
if (!R_SkinUsable(-1, v))
|
||||||
|
v = -1;
|
||||||
|
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
if (var->PossibleValue)
|
if (var->PossibleValue)
|
||||||
{
|
{
|
||||||
INT32 v;
|
INT32 i;
|
||||||
|
|
||||||
if (var->flags & CV_FLOAT)
|
if (var->flags & CV_FLOAT)
|
||||||
{
|
{
|
||||||
|
|
@ -1464,7 +1496,6 @@ static void Setvalue(consvar_t *var, const char *valstr, boolean stealth)
|
||||||
{
|
{
|
||||||
#define MINVAL 0
|
#define MINVAL 0
|
||||||
#define MAXVAL 1
|
#define MAXVAL 1
|
||||||
INT32 i;
|
|
||||||
#ifdef PARANOIA
|
#ifdef PARANOIA
|
||||||
if (!var->PossibleValue[MAXVAL].strvalue)
|
if (!var->PossibleValue[MAXVAL].strvalue)
|
||||||
I_Error("Bounded cvar \"%s\" without maximum!\n", var->name);
|
I_Error("Bounded cvar \"%s\" without maximum!\n", var->name);
|
||||||
|
|
@ -1473,52 +1504,26 @@ static void Setvalue(consvar_t *var, const char *valstr, boolean stealth)
|
||||||
// search for other
|
// search for other
|
||||||
for (i = MAXVAL+1; var->PossibleValue[i].strvalue; i++)
|
for (i = MAXVAL+1; var->PossibleValue[i].strvalue; i++)
|
||||||
if (v == var->PossibleValue[i].value || !stricmp(var->PossibleValue[i].strvalue, valstr))
|
if (v == var->PossibleValue[i].value || !stricmp(var->PossibleValue[i].strvalue, valstr))
|
||||||
{
|
goto found;
|
||||||
if (client && execversion_enabled)
|
|
||||||
{
|
|
||||||
if (var->revert.allocated)
|
|
||||||
{
|
|
||||||
Z_Free(var->revert.v.string);
|
|
||||||
var->revert.allocated = false; // the below value is not allocated in zone memory, don't try to free it!
|
|
||||||
}
|
|
||||||
|
|
||||||
var->revert.v.const_munge = var->PossibleValue[i].strvalue;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// free the old value string
|
|
||||||
Z_Free(var->zstring);
|
|
||||||
var->zstring = NULL;
|
|
||||||
|
|
||||||
var->value = var->PossibleValue[i].value;
|
|
||||||
var->string = var->PossibleValue[i].strvalue;
|
|
||||||
goto finish;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((v != INT32_MIN && v < var->PossibleValue[MINVAL].value) || !stricmp(valstr, "MIN"))
|
if ((v != INT32_MIN && v < var->PossibleValue[MINVAL].value) || !stricmp(valstr, "MIN"))
|
||||||
{
|
{
|
||||||
v = var->PossibleValue[MINVAL].value;
|
i = MINVAL;
|
||||||
valstr = var->PossibleValue[MINVAL].strvalue;
|
goto found;
|
||||||
override = true;
|
|
||||||
overrideval = v;
|
|
||||||
}
|
}
|
||||||
else if ((v != INT32_MIN && v > var->PossibleValue[MAXVAL].value) || !stricmp(valstr, "MAX"))
|
else if ((v != INT32_MIN && v > var->PossibleValue[MAXVAL].value) || !stricmp(valstr, "MAX"))
|
||||||
{
|
{
|
||||||
v = var->PossibleValue[MAXVAL].value;
|
i = MAXVAL;
|
||||||
valstr = var->PossibleValue[MAXVAL].strvalue;
|
goto found;
|
||||||
override = true;
|
|
||||||
overrideval = v;
|
|
||||||
}
|
}
|
||||||
if (v == INT32_MIN)
|
if (v == INT32_MIN)
|
||||||
goto badinput;
|
goto badinput;
|
||||||
|
valstr = NULL; // not a preset value
|
||||||
#undef MINVAL
|
#undef MINVAL
|
||||||
#undef MAXVAL
|
#undef MAXVAL
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
INT32 i;
|
|
||||||
|
|
||||||
// check first strings
|
// check first strings
|
||||||
for (i = 0; var->PossibleValue[i].strvalue; i++)
|
for (i = 0; var->PossibleValue[i].strvalue; i++)
|
||||||
if (!stricmp(var->PossibleValue[i].strvalue, valstr))
|
if (!stricmp(var->PossibleValue[i].strvalue, valstr))
|
||||||
|
|
@ -1550,26 +1555,68 @@ static void Setvalue(consvar_t *var, const char *valstr, boolean stealth)
|
||||||
// ...or not.
|
// ...or not.
|
||||||
goto badinput;
|
goto badinput;
|
||||||
found:
|
found:
|
||||||
if (client && execversion_enabled)
|
v = var->PossibleValue[i].value;
|
||||||
{
|
valstr = var->PossibleValue[i].strvalue;
|
||||||
var->revert.v.const_munge = var->PossibleValue[i].strvalue;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var->value = var->PossibleValue[i].value;
|
finish:
|
||||||
var->string = var->PossibleValue[i].strvalue;
|
if (intval)
|
||||||
goto finish;
|
*intval = v;
|
||||||
|
|
||||||
|
*valstrp = valstr;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// landing point for possiblevalue failures
|
||||||
|
badinput:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Sets a value to a variable with less checking. Only for internal use.
|
||||||
|
*
|
||||||
|
* \param var Variable to set.
|
||||||
|
* \param valstr String value for the variable.
|
||||||
|
*/
|
||||||
|
static void Setvalue(consvar_t *var, const char *valstr, boolean stealth)
|
||||||
|
{
|
||||||
|
boolean override = false;
|
||||||
|
INT32 overrideval = 0;
|
||||||
|
|
||||||
|
// If we want messages informing us if cheats have been enabled or disabled,
|
||||||
|
// we need to rework the consvars a little bit. This call crashes the game
|
||||||
|
// on load because not all variables will be registered at that time.
|
||||||
|
/* boolean prevcheats = false;
|
||||||
|
if (var->flags & CV_CHEAT)
|
||||||
|
prevcheats = CV_CheatsEnabled(); */
|
||||||
|
|
||||||
|
const char *overridestr = valstr;
|
||||||
|
|
||||||
|
if (CV_CompleteValue(var, &overridestr, &overrideval))
|
||||||
|
{
|
||||||
|
if (overridestr)
|
||||||
|
{
|
||||||
|
valstr = overridestr;
|
||||||
|
override = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (var->PossibleValue)
|
||||||
|
goto badinput;
|
||||||
|
|
||||||
if (client && execversion_enabled)
|
if (client && execversion_enabled)
|
||||||
{
|
{
|
||||||
if (var->revert.allocated)
|
if (var->revert.allocated)
|
||||||
{
|
{
|
||||||
Z_Free(var->revert.v.string);
|
Z_Free(var->revert.v.string);
|
||||||
|
|
||||||
// Z_StrDup creates a new zone memory block, so we can keep the allocated flag on
|
// Z_StrDup creates a new zone memory block, so we can keep the allocated flag on
|
||||||
|
if (override)
|
||||||
|
var->revert.allocated = false; // the below value is not allocated in zone memory, don't try to free it!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (override)
|
||||||
|
var->revert.v.const_munge = valstr;
|
||||||
|
else
|
||||||
var->revert.v.string = Z_StrDup(valstr);
|
var->revert.v.string = Z_StrDup(valstr);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
@ -1578,28 +1625,25 @@ found:
|
||||||
// free the old value string
|
// free the old value string
|
||||||
Z_Free(var->zstring);
|
Z_Free(var->zstring);
|
||||||
|
|
||||||
|
if (override)
|
||||||
|
{
|
||||||
|
var->zstring = NULL;
|
||||||
|
var->value = overrideval;
|
||||||
|
var->string = valstr;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
var->string = var->zstring = Z_StrDup(valstr);
|
var->string = var->zstring = Z_StrDup(valstr);
|
||||||
|
|
||||||
if (override)
|
if (var->flags & CV_FLOAT)
|
||||||
var->value = overrideval;
|
|
||||||
else if (var->flags & CV_FLOAT)
|
|
||||||
{
|
{
|
||||||
double d = atof(var->string);
|
double d = atof(var->string);
|
||||||
var->value = (INT32)(d * FRACUNIT);
|
var->value = (INT32)(d * FRACUNIT);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
if (var == &cv_forceskin)
|
|
||||||
{
|
|
||||||
var->value = R_SkinAvailable(var->string);
|
|
||||||
if (!R_SkinUsable(-1, var->value))
|
|
||||||
var->value = -1;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
var->value = atoi(var->string);
|
var->value = atoi(var->string);
|
||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
|
||||||
// See the note above.
|
// See the note above.
|
||||||
/* if (var->flags & CV_CHEAT)
|
/* if (var->flags & CV_CHEAT)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,12 @@ void CV_ClearChangedFlags(void);
|
||||||
// returns the name of the nearest console variable name found
|
// returns the name of the nearest console variable name found
|
||||||
const char *CV_CompleteVar(char *partial, INT32 skips);
|
const char *CV_CompleteVar(char *partial, INT32 skips);
|
||||||
|
|
||||||
|
// Returns true if valstrp is within the PossibleValues of
|
||||||
|
// var. If an exact string value exists, it is returned in
|
||||||
|
// valstrp. An integer value is returned in intval if it
|
||||||
|
// is not NULL.
|
||||||
|
boolean CV_CompleteValue(consvar_t *var, const char **valstrp, INT32 *intval);
|
||||||
|
|
||||||
// equivalent to "<varname> <value>" typed at the console
|
// equivalent to "<varname> <value>" typed at the console
|
||||||
void CV_Set(consvar_t *var, const char *value);
|
void CV_Set(consvar_t *var, const char *value);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,11 +58,11 @@ typedef enum
|
||||||
//
|
//
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
// True if button down last tic.
|
// free: 1<<0 to 1<<2
|
||||||
PF_ATTACKDOWN = 1,
|
|
||||||
PF_ACCELDOWN = 1<<1,
|
// Look back VFX has been spawned
|
||||||
PF_BRAKEDOWN = 1<<2,
|
// TODO: Is there a better way to track this?
|
||||||
PF_LOOKDOWN = 1<<3,
|
PF_GAINAX = 1<<3,
|
||||||
|
|
||||||
// Accessibility and cheats
|
// Accessibility and cheats
|
||||||
PF_KICKSTARTACCEL = 1<<4, // Is accelerate in kickstart mode?
|
PF_KICKSTARTACCEL = 1<<4, // Is accelerate in kickstart mode?
|
||||||
|
|
@ -330,6 +330,7 @@ typedef struct player_s
|
||||||
|
|
||||||
// Caveat: ticcmd_t is ATTRPACK! Be careful what precedes it.
|
// Caveat: ticcmd_t is ATTRPACK! Be careful what precedes it.
|
||||||
ticcmd_t cmd;
|
ticcmd_t cmd;
|
||||||
|
ticcmd_t oldcmd; // from the previous tic
|
||||||
|
|
||||||
playerstate_t playerstate;
|
playerstate_t playerstate;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5729,11 +5729,14 @@ const char *const MAPTHINGFLAG_LIST[4] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *const PLAYERFLAG_LIST[] = {
|
const char *const PLAYERFLAG_LIST[] = {
|
||||||
// True if button down last tic.
|
// free: 1<<0 to 1<<2 (name un-matchable)
|
||||||
"ATTACKDOWN",
|
"\x01",
|
||||||
"ACCELDOWN",
|
"\x01",
|
||||||
"BRAKEDOWN",
|
"\x01",
|
||||||
"LOOKDOWN",
|
|
||||||
|
// Look back VFX has been spawned
|
||||||
|
// TODO: Is there a better way to track this?
|
||||||
|
"GAINAX",
|
||||||
|
|
||||||
// Accessibility and cheats
|
// Accessibility and cheats
|
||||||
"KICKSTARTACCEL", // Is accelerate in kickstart mode?
|
"KICKSTARTACCEL", // Is accelerate in kickstart mode?
|
||||||
|
|
|
||||||
|
|
@ -2410,11 +2410,6 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
||||||
// ^ Not necessary anyway since it will be respawned regardless considering it doesn't exist anymore.
|
// ^ Not necessary anyway since it will be respawned regardless considering it doesn't exist anymore.
|
||||||
|
|
||||||
|
|
||||||
// Don't do anything immediately
|
|
||||||
p->pflags |= PF_BRAKEDOWN;
|
|
||||||
p->pflags |= PF_ATTACKDOWN;
|
|
||||||
p->pflags |= PF_ACCELDOWN;
|
|
||||||
|
|
||||||
p->playerstate = PST_LIVE;
|
p->playerstate = PST_LIVE;
|
||||||
p->panim = PA_STILL; // standing animation
|
p->panim = PA_STILL; // standing animation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
#include "../p_local.h" // stplyr
|
#include "../p_local.h" // stplyr
|
||||||
#include "../g_game.h" // players
|
#include "../g_game.h" // players
|
||||||
#include "../k_hud.h"
|
#include "../k_hud.h"
|
||||||
|
#include "../r_plane.h" // R_FlatDimensionsFromLumpSize
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "../i_video.h" // for rendermode != render_glide
|
#include "../i_video.h" // for rendermode != render_glide
|
||||||
|
|
@ -482,42 +483,17 @@ void HWR_DrawPic(INT32 x, INT32 y, lumpnum_t lumpnum)
|
||||||
// --------------------------------------------------------------------------
|
// --------------------------------------------------------------------------
|
||||||
void HWR_DrawFlatFill (INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatlumpnum)
|
void HWR_DrawFlatFill (INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatlumpnum)
|
||||||
{
|
{
|
||||||
FOutVector v[4];
|
|
||||||
double dflatsize;
|
|
||||||
INT32 flatflag;
|
|
||||||
const size_t len = W_LumpLength(flatlumpnum);
|
const size_t len = W_LumpLength(flatlumpnum);
|
||||||
|
|
||||||
switch (len)
|
size_t sflatsize;
|
||||||
{
|
double dflatsize;
|
||||||
case 4194304: // 2048x2048 lump
|
INT32 flatflag;
|
||||||
dflatsize = 2048.0f;
|
|
||||||
flatflag = 2047;
|
FOutVector v[4];
|
||||||
break;
|
|
||||||
case 1048576: // 1024x1024 lump
|
sflatsize = R_FlatDimensionsFromLumpSize(len);
|
||||||
dflatsize = 1024.0f;
|
dflatsize = (double)sflatsize;
|
||||||
flatflag = 1023;
|
flatflag = sflatsize - 1;
|
||||||
break;
|
|
||||||
case 262144:// 512x512 lump
|
|
||||||
dflatsize = 512.0f;
|
|
||||||
flatflag = 511;
|
|
||||||
break;
|
|
||||||
case 65536: // 256x256 lump
|
|
||||||
dflatsize = 256.0f;
|
|
||||||
flatflag = 255;
|
|
||||||
break;
|
|
||||||
case 16384: // 128x128 lump
|
|
||||||
dflatsize = 128.0f;
|
|
||||||
flatflag = 127;
|
|
||||||
break;
|
|
||||||
case 1024: // 32x32 lump
|
|
||||||
dflatsize = 32.0f;
|
|
||||||
flatflag = 31;
|
|
||||||
break;
|
|
||||||
default: // 64x64 lump
|
|
||||||
dflatsize = 64.0f;
|
|
||||||
flatflag = 63;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3--2
|
// 3--2
|
||||||
// | /|
|
// | /|
|
||||||
|
|
|
||||||
|
|
@ -46,6 +46,7 @@
|
||||||
// SRB2Kart
|
// SRB2Kart
|
||||||
#include "../k_kart.h" // HITLAGJITTERS
|
#include "../k_kart.h" // HITLAGJITTERS
|
||||||
#include "../r_fps.h"
|
#include "../r_fps.h"
|
||||||
|
#include "../r_plane.h" // R_FlatDimensionsFromLumpSize
|
||||||
|
|
||||||
#ifdef NEWCLIP
|
#ifdef NEWCLIP
|
||||||
#include "hw_clip.h"
|
#include "hw_clip.h"
|
||||||
|
|
@ -393,31 +394,9 @@ static void HWR_RenderPlane(subsector_t *subsector, extrasubsector_t *xsub, bool
|
||||||
if (levelflat->type == LEVELFLAT_FLAT)
|
if (levelflat->type == LEVELFLAT_FLAT)
|
||||||
{
|
{
|
||||||
size_t len = W_LumpLength(levelflat->u.flat.lumpnum);
|
size_t len = W_LumpLength(levelflat->u.flat.lumpnum);
|
||||||
switch (len)
|
size_t sflatsize = R_FlatDimensionsFromLumpSize(len);
|
||||||
{
|
fflatwidth = fflatheight = (double)sflatsize;
|
||||||
case 4194304: // 2048x2048 lump
|
flatflag = sflatsize-1;
|
||||||
fflatwidth = fflatheight = 2048.0f;
|
|
||||||
break;
|
|
||||||
case 1048576: // 1024x1024 lump
|
|
||||||
fflatwidth = fflatheight = 1024.0f;
|
|
||||||
break;
|
|
||||||
case 262144:// 512x512 lump
|
|
||||||
fflatwidth = fflatheight = 512.0f;
|
|
||||||
break;
|
|
||||||
case 65536: // 256x256 lump
|
|
||||||
fflatwidth = fflatheight = 256.0f;
|
|
||||||
break;
|
|
||||||
case 16384: // 128x128 lump
|
|
||||||
fflatwidth = fflatheight = 128.0f;
|
|
||||||
break;
|
|
||||||
case 1024: // 32x32 lump
|
|
||||||
fflatwidth = fflatheight = 32.0f;
|
|
||||||
break;
|
|
||||||
default: // 64x64 lump
|
|
||||||
fflatwidth = fflatheight = 64.0f;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
flatflag = ((INT32)fflatwidth)-1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -2756,31 +2735,9 @@ static void HWR_RenderPolyObjectPlane(polyobj_t *polysector, boolean isceiling,
|
||||||
if (levelflat->type == LEVELFLAT_FLAT)
|
if (levelflat->type == LEVELFLAT_FLAT)
|
||||||
{
|
{
|
||||||
size_t len = W_LumpLength(levelflat->u.flat.lumpnum);
|
size_t len = W_LumpLength(levelflat->u.flat.lumpnum);
|
||||||
switch (len)
|
size_t sflatsize = R_FlatDimensionsFromLumpSize(len);
|
||||||
{
|
fflatwidth = fflatheight = (double)sflatsize;
|
||||||
case 4194304: // 2048x2048 lump
|
flatflag = sflatsize-1;
|
||||||
fflatwidth = fflatheight = 2048.0f;
|
|
||||||
break;
|
|
||||||
case 1048576: // 1024x1024 lump
|
|
||||||
fflatwidth = fflatheight = 1024.0f;
|
|
||||||
break;
|
|
||||||
case 262144:// 512x512 lump
|
|
||||||
fflatwidth = fflatheight = 512.0f;
|
|
||||||
break;
|
|
||||||
case 65536: // 256x256 lump
|
|
||||||
fflatwidth = fflatheight = 256.0f;
|
|
||||||
break;
|
|
||||||
case 16384: // 128x128 lump
|
|
||||||
fflatwidth = fflatheight = 128.0f;
|
|
||||||
break;
|
|
||||||
case 1024: // 32x32 lump
|
|
||||||
fflatwidth = fflatheight = 32.0f;
|
|
||||||
break;
|
|
||||||
default: // 64x64 lump
|
|
||||||
fflatwidth = fflatheight = 64.0f;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
flatflag = ((INT32)fflatwidth)-1;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,23 @@
|
||||||
#include "m_random.h"
|
#include "m_random.h"
|
||||||
#include "r_things.h" // numskins
|
#include "r_things.h" // numskins
|
||||||
|
|
||||||
|
/*--------------------------------------------------
|
||||||
|
static inline boolean K_ItemButtonWasDown(player_t *player)
|
||||||
|
|
||||||
|
Looks for players around the bot, and presses the item button
|
||||||
|
if there is one in range.
|
||||||
|
|
||||||
|
Input Arguments:-
|
||||||
|
player - Bot to check.
|
||||||
|
|
||||||
|
Return:-
|
||||||
|
true if the item button was pressed last tic, otherwise false.
|
||||||
|
--------------------------------------------------*/
|
||||||
|
static inline boolean K_ItemButtonWasDown(player_t *player)
|
||||||
|
{
|
||||||
|
return (player->oldcmd.buttons & BT_ATTACK);
|
||||||
|
}
|
||||||
|
|
||||||
/*--------------------------------------------------
|
/*--------------------------------------------------
|
||||||
static boolean K_BotUseItemNearPlayer(player_t *player, ticcmd_t *cmd, fixed_t radius)
|
static boolean K_BotUseItemNearPlayer(player_t *player, ticcmd_t *cmd, fixed_t radius)
|
||||||
|
|
||||||
|
|
@ -45,7 +62,7 @@ static boolean K_BotUseItemNearPlayer(player_t *player, ticcmd_t *cmd, fixed_t r
|
||||||
{
|
{
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
|
||||||
if (player->pflags & PF_ATTACKDOWN)
|
if (K_ItemButtonWasDown(player) == true)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -327,7 +344,7 @@ static void K_ItemConfirmForTarget(player_t *bot, player_t *target, UINT16 amoun
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
static boolean K_BotGenericPressItem(player_t *player, ticcmd_t *cmd, SINT8 dir)
|
static boolean K_BotGenericPressItem(player_t *player, ticcmd_t *cmd, SINT8 dir)
|
||||||
{
|
{
|
||||||
if (player->pflags & PF_ATTACKDOWN)
|
if (K_ItemButtonWasDown(player) == true)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -352,7 +369,7 @@ static boolean K_BotGenericPressItem(player_t *player, ticcmd_t *cmd, SINT8 dir)
|
||||||
--------------------------------------------------*/
|
--------------------------------------------------*/
|
||||||
static void K_BotItemGenericTap(player_t *player, ticcmd_t *cmd)
|
static void K_BotItemGenericTap(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
if (!(player->pflags & PF_ATTACKDOWN))
|
if (K_ItemButtonWasDown(player) == false)
|
||||||
{
|
{
|
||||||
cmd->buttons |= BT_ATTACK;
|
cmd->buttons |= BT_ATTACK;
|
||||||
player->botvars.itemconfirm = 0;
|
player->botvars.itemconfirm = 0;
|
||||||
|
|
@ -475,7 +492,7 @@ static void K_BotItemSneaker(player_t *player, ticcmd_t *cmd)
|
||||||
|| player->speedboost > (FRACUNIT/8) // Have another type of boost (tethering)
|
|| player->speedboost > (FRACUNIT/8) // Have another type of boost (tethering)
|
||||||
|| player->botvars.itemconfirm > 4*TICRATE) // Held onto it for too long
|
|| player->botvars.itemconfirm > 4*TICRATE) // Held onto it for too long
|
||||||
{
|
{
|
||||||
if (!player->sneakertimer && !(player->pflags & PF_ATTACKDOWN))
|
if (player->sneakertimer == 0 && K_ItemButtonWasDown(player) == false)
|
||||||
{
|
{
|
||||||
cmd->buttons |= BT_ATTACK;
|
cmd->buttons |= BT_ATTACK;
|
||||||
player->botvars.itemconfirm = 2*TICRATE;
|
player->botvars.itemconfirm = 2*TICRATE;
|
||||||
|
|
@ -503,7 +520,7 @@ static void K_BotItemRocketSneaker(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
if (player->botvars.itemconfirm > TICRATE)
|
if (player->botvars.itemconfirm > TICRATE)
|
||||||
{
|
{
|
||||||
if (!player->sneakertimer && !(player->pflags & PF_ATTACKDOWN))
|
if (player->sneakertimer == 0 && K_ItemButtonWasDown(player) == false)
|
||||||
{
|
{
|
||||||
cmd->buttons |= BT_ATTACK;
|
cmd->buttons |= BT_ATTACK;
|
||||||
player->botvars.itemconfirm = 0;
|
player->botvars.itemconfirm = 0;
|
||||||
|
|
@ -1193,7 +1210,7 @@ static void K_BotItemRouletteMash(player_t *player, ticcmd_t *cmd)
|
||||||
{
|
{
|
||||||
boolean mash = false;
|
boolean mash = false;
|
||||||
|
|
||||||
if (player->pflags & PF_ATTACKDOWN)
|
if (K_ItemButtonWasDown(player) == true)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
32
src/k_kart.c
32
src/k_kart.c
|
|
@ -1159,9 +1159,6 @@ static void K_KartItemRoulette(player_t *player, ticcmd_t *cmd)
|
||||||
else if (!(player->itemroulette >= (TICRATE*3)))
|
else if (!(player->itemroulette >= (TICRATE*3)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (cmd->buttons & BT_ATTACK)
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (playeringame[i] && !players[i].spectator
|
if (playeringame[i] && !players[i].spectator
|
||||||
|
|
@ -2682,7 +2679,7 @@ void K_KartMoveAnimation(player_t *player)
|
||||||
|
|
||||||
if (!lookback)
|
if (!lookback)
|
||||||
{
|
{
|
||||||
player->pflags &= ~PF_LOOKDOWN;
|
player->pflags &= ~PF_GAINAX;
|
||||||
|
|
||||||
// Uses turning over steering -- it's important to show player feedback immediately.
|
// Uses turning over steering -- it's important to show player feedback immediately.
|
||||||
if (player->cmd.turning < -minturn)
|
if (player->cmd.turning < -minturn)
|
||||||
|
|
@ -2706,7 +2703,7 @@ void K_KartMoveAnimation(player_t *player)
|
||||||
destGlanceDir = -(2*intsign(player->aizdriftturn));
|
destGlanceDir = -(2*intsign(player->aizdriftturn));
|
||||||
player->glanceDir = destGlanceDir;
|
player->glanceDir = destGlanceDir;
|
||||||
drift = turndir = 0;
|
drift = turndir = 0;
|
||||||
player->pflags &= ~PF_LOOKDOWN;
|
player->pflags &= ~PF_GAINAX;
|
||||||
}
|
}
|
||||||
else if (player->aizdriftturn)
|
else if (player->aizdriftturn)
|
||||||
{
|
{
|
||||||
|
|
@ -2752,14 +2749,14 @@ void K_KartMoveAnimation(player_t *player)
|
||||||
gainaxstate = S_GAINAX_MID1;
|
gainaxstate = S_GAINAX_MID1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (destGlanceDir && !(player->pflags & PF_LOOKDOWN))
|
if (destGlanceDir && !(player->pflags & PF_GAINAX))
|
||||||
{
|
{
|
||||||
mobj_t *gainax = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_GAINAX);
|
mobj_t *gainax = P_SpawnMobjFromMobj(player->mo, 0, 0, 0, MT_GAINAX);
|
||||||
gainax->movedir = (destGlanceDir < 0) ? (ANGLE_270-ANG10) : (ANGLE_90+ANG10);
|
gainax->movedir = (destGlanceDir < 0) ? (ANGLE_270-ANG10) : (ANGLE_90+ANG10);
|
||||||
P_SetTarget(&gainax->target, player->mo);
|
P_SetTarget(&gainax->target, player->mo);
|
||||||
P_SetMobjState(gainax, gainaxstate);
|
P_SetMobjState(gainax, gainaxstate);
|
||||||
gainax->flags2 |= MF2_AMBUSH;
|
gainax->flags2 |= MF2_AMBUSH;
|
||||||
player->pflags |= PF_LOOKDOWN;
|
player->pflags |= PF_GAINAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (K_GetForwardMove(player) < 0 && destGlanceDir == 0)
|
else if (K_GetForwardMove(player) < 0 && destGlanceDir == 0)
|
||||||
|
|
@ -3016,7 +3013,7 @@ void K_KartMoveAnimation(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!player->glanceDir)
|
if (!player->glanceDir)
|
||||||
player->pflags &= ~PF_LOOKDOWN;
|
player->pflags &= ~PF_GAINAX;
|
||||||
|
|
||||||
// Update lastspeed value -- we use to display slow driving frames instead of fast driving when slowing down.
|
// Update lastspeed value -- we use to display slow driving frames instead of fast driving when slowing down.
|
||||||
player->lastspeed = player->speed;
|
player->lastspeed = player->speed;
|
||||||
|
|
@ -6069,11 +6066,6 @@ void K_DoSneaker(player_t *player, INT32 type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != 0)
|
|
||||||
{
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
player->sneakertimer = sneakertime;
|
player->sneakertimer = sneakertime;
|
||||||
|
|
||||||
// set angle for spun out players:
|
// set angle for spun out players:
|
||||||
|
|
@ -6082,8 +6074,7 @@ void K_DoSneaker(player_t *player, INT32 type)
|
||||||
|
|
||||||
static void K_DoShrink(player_t *user)
|
static void K_DoShrink(player_t *user)
|
||||||
{
|
{
|
||||||
S_StartSound(NULL, sfx_kc46); // Sound the BANG!
|
S_StartSound(user->mo, sfx_kc46); // Sound the BANG!
|
||||||
user->pflags |= PF_ATTACKDOWN;
|
|
||||||
|
|
||||||
Obj_CreateShrinkPohbees(user);
|
Obj_CreateShrinkPohbees(user);
|
||||||
|
|
||||||
|
|
@ -10076,7 +10067,7 @@ void K_UnsetItemOut(player_t *player)
|
||||||
void K_MoveKartPlayer(player_t *player, boolean onground)
|
void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
ticcmd_t *cmd = &player->cmd;
|
ticcmd_t *cmd = &player->cmd;
|
||||||
boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->pflags & PF_ATTACKDOWN));
|
boolean ATTACK_IS_DOWN = ((cmd->buttons & BT_ATTACK) && !(player->oldcmd.buttons & BT_ATTACK));
|
||||||
boolean HOLDING_ITEM = (player->pflags & (PF_ITEMOUT|PF_EGGMANOUT));
|
boolean HOLDING_ITEM = (player->pflags & (PF_ITEMOUT|PF_EGGMANOUT));
|
||||||
boolean NO_HYUDORO = (player->stealingtimer == 0);
|
boolean NO_HYUDORO = (player->stealingtimer == 0);
|
||||||
|
|
||||||
|
|
@ -10111,11 +10102,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->pflags &= ~PF_USERINGS;
|
player->pflags &= ~PF_USERINGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((player->pflags & PF_ATTACKDOWN) && !(cmd->buttons & BT_ATTACK))
|
|
||||||
player->pflags &= ~PF_ATTACKDOWN;
|
|
||||||
else if (cmd->buttons & BT_ATTACK)
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
|
||||||
|
|
||||||
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime)
|
if (player && player->mo && player->mo->health > 0 && !player->spectator && !P_PlayerInPain(player) && !mapreset && leveltime > introtime)
|
||||||
{
|
{
|
||||||
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
// First, the really specific, finicky items that function without the item being directly in your item slot.
|
||||||
|
|
@ -10123,7 +10109,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
// Ring boosting
|
// Ring boosting
|
||||||
if (player->pflags & PF_USERINGS)
|
if (player->pflags & PF_USERINGS)
|
||||||
{
|
{
|
||||||
if ((player->pflags & PF_ATTACKDOWN) && !player->ringdelay && player->rings > 0)
|
if ((cmd->buttons & BT_ATTACK) && !player->ringdelay && player->rings > 0)
|
||||||
{
|
{
|
||||||
mobj_t *ring = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RING);
|
mobj_t *ring = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_RING);
|
||||||
P_SetMobjState(ring, S_FASTRING1);
|
P_SetMobjState(ring, S_FASTRING1);
|
||||||
|
|
@ -10882,6 +10868,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
player->trickpanel = 0;
|
player->trickpanel = 0;
|
||||||
K_trickPanelTimingVisual(player, momz); // fail trick visual
|
K_trickPanelTimingVisual(player, momz); // fail trick visual
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
P_SetPlayerMobjState(player->mo, S_KART_SPINOUT);
|
||||||
|
if (player->pflags & (PF_ITEMOUT|PF_EGGMANOUT))
|
||||||
|
K_DropHnextList(player, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
else if (!(player->pflags & PF_TRICKDELAY)) // don't allow tricking at the same frame you tumble obv
|
||||||
|
|
|
||||||
|
|
@ -536,7 +536,7 @@ extern struct menutransition_s {
|
||||||
extern boolean menuwipe;
|
extern boolean menuwipe;
|
||||||
|
|
||||||
extern consvar_t cv_showfocuslost;
|
extern consvar_t cv_showfocuslost;
|
||||||
extern consvar_t cv_chooseskin, cv_serversort;
|
extern consvar_t cv_chooseskin, cv_serversort, cv_menujam_update;
|
||||||
|
|
||||||
void M_SetMenuDelay(UINT8 i);
|
void M_SetMenuDelay(UINT8 i);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,10 @@ consvar_t cv_showfocuslost = CVAR_INIT ("showfocuslost", "Yes", CV_SAVE, CV_YesN
|
||||||
static CV_PossibleValue_t skins_cons_t[MAXSKINS+1] = {{1, DEFAULTSKIN}};
|
static CV_PossibleValue_t skins_cons_t[MAXSKINS+1] = {{1, DEFAULTSKIN}};
|
||||||
consvar_t cv_chooseskin = CVAR_INIT ("chooseskin", DEFAULTSKIN, CV_HIDDEN, skins_cons_t, NULL);
|
consvar_t cv_chooseskin = CVAR_INIT ("chooseskin", DEFAULTSKIN, CV_HIDDEN, skins_cons_t, NULL);
|
||||||
|
|
||||||
|
consvar_t cv_menujam_update = CVAR_INIT ("menujam_update", "Off", CV_SAVE, CV_OnOff, NULL);
|
||||||
|
static CV_PossibleValue_t menujam_cons_t[] = {{0, "menu"}, {1, "menu2"}, {2, "menu3"}, {0, NULL}};
|
||||||
|
static consvar_t cv_menujam = CVAR_INIT ("menujam", "0", CV_SAVE, menujam_cons_t, NULL);
|
||||||
|
|
||||||
// This gametype list is integral for many different reasons.
|
// This gametype list is integral for many different reasons.
|
||||||
// When you add gametypes here, don't forget to update them in dehacked.c and doomstat.h!
|
// When you add gametypes here, don't forget to update them in dehacked.c and doomstat.h!
|
||||||
CV_PossibleValue_t gametype_cons_t[NUMGAMETYPES+1];
|
CV_PossibleValue_t gametype_cons_t[NUMGAMETYPES+1];
|
||||||
|
|
@ -945,7 +949,13 @@ void M_StartControlPanel(void)
|
||||||
paused = false;
|
paused = false;
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
|
|
||||||
S_ChangeMusicInternal("menu", true);
|
if (cv_menujam_update.value)
|
||||||
|
{
|
||||||
|
CV_AddValue(&cv_menujam, 1);
|
||||||
|
CV_SetValue(&cv_menujam_update, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
S_ChangeMusicInternal(cv_menujam.string, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
menuactive = true;
|
menuactive = true;
|
||||||
|
|
@ -1686,6 +1696,14 @@ void M_Init(void)
|
||||||
CV_RegisterVar(&cv_chooseskin);
|
CV_RegisterVar(&cv_chooseskin);
|
||||||
CV_RegisterVar(&cv_autorecord);
|
CV_RegisterVar(&cv_autorecord);
|
||||||
|
|
||||||
|
// don't lose your position in the jam cycle
|
||||||
|
CV_RegisterVar(&cv_menujam_update);
|
||||||
|
CV_RegisterVar(&cv_menujam);
|
||||||
|
|
||||||
|
#ifndef NONET
|
||||||
|
CV_RegisterVar(&cv_serversort);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (dedicated)
|
if (dedicated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
@ -1712,20 +1730,6 @@ void M_Init(void)
|
||||||
CV_RegisterVar(&cv_dummyaddonsearch);
|
CV_RegisterVar(&cv_dummyaddonsearch);
|
||||||
|
|
||||||
M_UpdateMenuBGImage(true);
|
M_UpdateMenuBGImage(true);
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifdef HWRENDER
|
|
||||||
// Permanently hide some options based on render mode
|
|
||||||
if (rendermode == render_soft)
|
|
||||||
OP_VideoOptionsMenu[op_video_ogl].status =
|
|
||||||
OP_VideoOptionsMenu[op_video_kartman].status =
|
|
||||||
OP_VideoOptionsMenu[op_video_md2] .status = IT_DISABLED;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NONET
|
|
||||||
CV_RegisterVar(&cv_serversort);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================================================
|
// ==================================================
|
||||||
|
|
|
||||||
|
|
@ -192,6 +192,8 @@ static int player_get(lua_State *L)
|
||||||
LUA_PushUserdata(L, plr->mo, META_MOBJ);
|
LUA_PushUserdata(L, plr->mo, META_MOBJ);
|
||||||
else if (fastcmp(field,"cmd"))
|
else if (fastcmp(field,"cmd"))
|
||||||
LUA_PushUserdata(L, &plr->cmd, META_TICCMD);
|
LUA_PushUserdata(L, &plr->cmd, META_TICCMD);
|
||||||
|
else if (fastcmp(field,"oldcmd"))
|
||||||
|
LUA_PushUserdata(L, &plr->oldcmd, META_TICCMD);
|
||||||
else if (fastcmp(field,"respawn"))
|
else if (fastcmp(field,"respawn"))
|
||||||
LUA_PushUserdata(L, &plr->respawn, META_RESPAWN);
|
LUA_PushUserdata(L, &plr->respawn, META_RESPAWN);
|
||||||
else if (fastcmp(field,"playerstate"))
|
else if (fastcmp(field,"playerstate"))
|
||||||
|
|
@ -530,6 +532,8 @@ static int player_set(lua_State *L)
|
||||||
}
|
}
|
||||||
else if (fastcmp(field,"cmd"))
|
else if (fastcmp(field,"cmd"))
|
||||||
return NOSET;
|
return NOSET;
|
||||||
|
else if (fastcmp(field,"oldcmd"))
|
||||||
|
return NOSET;
|
||||||
else if (fastcmp(field,"respawn"))
|
else if (fastcmp(field,"respawn"))
|
||||||
return NOSET;
|
return NOSET;
|
||||||
else if (fastcmp(field,"playerstate"))
|
else if (fastcmp(field,"playerstate"))
|
||||||
|
|
|
||||||
|
|
@ -1053,11 +1053,11 @@ void OP_ObjectplaceMovement(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (player->pflags & PF_ATTACKDOWN)
|
if (player->pflags & PF_STASIS)
|
||||||
{
|
{
|
||||||
// Are ANY objectplace buttons pressed? If no, remove flag.
|
// Are ANY objectplace buttons pressed? If no, remove flag.
|
||||||
if (!(cmd->buttons & (BT_ATTACK|BT_DRIFT)))
|
if (!(cmd->buttons & (BT_ATTACK|BT_DRIFT)))
|
||||||
player->pflags &= ~PF_ATTACKDOWN;
|
player->pflags &= ~PF_STASIS;
|
||||||
|
|
||||||
// Do nothing.
|
// Do nothing.
|
||||||
return;
|
return;
|
||||||
|
|
@ -1066,12 +1066,12 @@ void OP_ObjectplaceMovement(player_t *player)
|
||||||
/*if (cmd->buttons & BT_FORWARD)
|
/*if (cmd->buttons & BT_FORWARD)
|
||||||
{
|
{
|
||||||
OP_CycleThings(-1);
|
OP_CycleThings(-1);
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_STASIS;
|
||||||
}
|
}
|
||||||
else*/ if (cmd->buttons & BT_DRIFT)
|
else*/ if (cmd->buttons & BT_DRIFT)
|
||||||
{
|
{
|
||||||
OP_CycleThings(1);
|
OP_CycleThings(1);
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_STASIS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Place an object and add it to the maplist
|
// Place an object and add it to the maplist
|
||||||
|
|
@ -1082,7 +1082,7 @@ void OP_ObjectplaceMovement(player_t *player)
|
||||||
mobjtype_t spawnthing = op_currentdoomednum;
|
mobjtype_t spawnthing = op_currentdoomednum;
|
||||||
boolean ceiling;
|
boolean ceiling;
|
||||||
|
|
||||||
player->pflags |= PF_ATTACKDOWN;
|
player->pflags |= PF_STASIS;
|
||||||
|
|
||||||
if (cv_mapthingnum.value > 0 && cv_mapthingnum.value < 4096)
|
if (cv_mapthingnum.value > 0 && cv_mapthingnum.value < 4096)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2032,7 +2032,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
player->gateBoost = 0;
|
player->gateBoost = 0;
|
||||||
player->ringboost = 0;
|
player->ringboost = 0;
|
||||||
player->glanceDir = 0;
|
player->glanceDir = 0;
|
||||||
player->pflags &= ~PF_LOOKDOWN;
|
player->pflags &= ~PF_GAINAX;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4079,6 +4079,9 @@ static void P_InitGametype(void)
|
||||||
|
|
||||||
G_RecordDemo(buf);
|
G_RecordDemo(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Started a game? Move on to the next jam when you go back to the title screen
|
||||||
|
CV_SetValue(&cv_menujam_update, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Loads a level from a lump or external wad.
|
/** Loads a level from a lump or external wad.
|
||||||
|
|
|
||||||
|
|
@ -767,6 +767,11 @@ void P_Ticker(boolean run)
|
||||||
K_TimerInit();
|
K_TimerInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
G_CopyTiccmd(&players[i].oldcmd, &players[i].cmd, 1);
|
||||||
|
}
|
||||||
|
|
||||||
// Z_CheckMemCleanup();
|
// Z_CheckMemCleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
17
src/p_user.c
17
src/p_user.c
|
|
@ -2218,7 +2218,7 @@ void P_MovePlayer(player_t *player)
|
||||||
player->drawangle -= ANGLE_22h;
|
player->drawangle -= ANGLE_22h;
|
||||||
player->mo->rollangle = 0;
|
player->mo->rollangle = 0;
|
||||||
player->glanceDir = 0;
|
player->glanceDir = 0;
|
||||||
player->pflags &= ~PF_LOOKDOWN;
|
player->pflags &= ~PF_GAINAX;
|
||||||
}
|
}
|
||||||
else if ((player->pflags & PF_FAULT) || (player->spinouttimer > 0))
|
else if ((player->pflags & PF_FAULT) || (player->spinouttimer > 0))
|
||||||
{
|
{
|
||||||
|
|
@ -4186,7 +4186,7 @@ void P_PlayerThink(player_t *player)
|
||||||
}
|
}
|
||||||
else if (cmd->buttons & BT_ACCELERATE)
|
else if (cmd->buttons & BT_ACCELERATE)
|
||||||
{
|
{
|
||||||
if (!player->exiting && !(player->pflags & PF_ACCELDOWN))
|
if (!player->exiting && !(player->oldcmd.buttons & BT_ACCELERATE))
|
||||||
{
|
{
|
||||||
player->kickstartaccel = 0;
|
player->kickstartaccel = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -4394,19 +4394,6 @@ void P_PlayerThink(player_t *player)
|
||||||
P_DoBubbleBreath(player); // Spawn Sonic's bubbles
|
P_DoBubbleBreath(player); // Spawn Sonic's bubbles
|
||||||
P_CheckInvincibilityTimer(player); // Spawn Invincibility Sparkles
|
P_CheckInvincibilityTimer(player); // Spawn Invincibility Sparkles
|
||||||
|
|
||||||
// check for buttons
|
|
||||||
if (cmd->buttons & BT_ACCELERATE)
|
|
||||||
player->pflags |= PF_ACCELDOWN;
|
|
||||||
else
|
|
||||||
player->pflags &= ~PF_ACCELDOWN;
|
|
||||||
|
|
||||||
if (cmd->buttons & BT_BRAKE)
|
|
||||||
player->pflags |= PF_BRAKEDOWN;
|
|
||||||
else
|
|
||||||
player->pflags &= ~PF_BRAKEDOWN;
|
|
||||||
|
|
||||||
// PF_LOOKDOWN handled in K_KartMoveAnimation
|
|
||||||
|
|
||||||
// Counters, time dependent power ups.
|
// Counters, time dependent power ups.
|
||||||
// Time Bonus & Ring Bonus count settings
|
// Time Bonus & Ring Bonus count settings
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,7 @@ visplane_t *R_CheckPlane(visplane_t *pl, INT32 start, INT32 stop);
|
||||||
void R_ExpandPlane(visplane_t *pl, INT32 start, INT32 stop);
|
void R_ExpandPlane(visplane_t *pl, INT32 start, INT32 stop);
|
||||||
void R_PlaneBounds(visplane_t *plane);
|
void R_PlaneBounds(visplane_t *plane);
|
||||||
|
|
||||||
|
size_t R_FlatDimensionsFromLumpSize(size_t size);
|
||||||
void R_CheckFlatLength(size_t size);
|
void R_CheckFlatLength(size_t size);
|
||||||
boolean R_CheckPowersOfTwo(void);
|
boolean R_CheckPowersOfTwo(void);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -656,6 +656,44 @@ boolean R_CheckPowersOfTwo(void)
|
||||||
return ds_powersoftwo;
|
return ds_powersoftwo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// R_FlatDimensionsFromLumpSize
|
||||||
|
//
|
||||||
|
// Returns the flat's square size from its lump length.
|
||||||
|
//
|
||||||
|
size_t R_FlatDimensionsFromLumpSize(size_t size)
|
||||||
|
{
|
||||||
|
switch (size)
|
||||||
|
{
|
||||||
|
case 4194304: // 2048x2048 lump
|
||||||
|
return 2048;
|
||||||
|
|
||||||
|
case 1048576: // 1024x1024 lump
|
||||||
|
return 1024;
|
||||||
|
|
||||||
|
case 262144:// 512x512 lump
|
||||||
|
return 512;
|
||||||
|
|
||||||
|
case 65536: // 256x256 lump
|
||||||
|
return 256;
|
||||||
|
|
||||||
|
case 16384: // 128x128 lump
|
||||||
|
return 128;
|
||||||
|
|
||||||
|
case 1024: // 32x32 lump
|
||||||
|
return 32;
|
||||||
|
|
||||||
|
case 256: // 16x16 lump
|
||||||
|
return 16;
|
||||||
|
|
||||||
|
case 64: // 8x8 lump
|
||||||
|
return 8;
|
||||||
|
|
||||||
|
default: // 64x64 lump
|
||||||
|
return 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// R_CheckFlatLength
|
// R_CheckFlatLength
|
||||||
//
|
//
|
||||||
|
|
@ -707,6 +745,20 @@ void R_CheckFlatLength(size_t size)
|
||||||
nflatshiftup = 11;
|
nflatshiftup = 11;
|
||||||
ds_flatwidth = ds_flatheight = 32;
|
ds_flatwidth = ds_flatheight = 32;
|
||||||
break;
|
break;
|
||||||
|
case 256: // 16x16 lump
|
||||||
|
nflatmask = 0xF0;
|
||||||
|
nflatxshift = 28;
|
||||||
|
nflatyshift = 24;
|
||||||
|
nflatshiftup = 12;
|
||||||
|
ds_flatwidth = ds_flatheight = 16;
|
||||||
|
break;
|
||||||
|
case 64: // 8x8 lump
|
||||||
|
nflatmask = 0x38;
|
||||||
|
nflatxshift = 29;
|
||||||
|
nflatyshift = 26;
|
||||||
|
nflatshiftup = 13;
|
||||||
|
ds_flatwidth = ds_flatheight = 8;
|
||||||
|
break;
|
||||||
default: // 64x64 lump
|
default: // 64x64 lump
|
||||||
nflatmask = 0xFC0;
|
nflatmask = 0xFC0;
|
||||||
nflatxshift = 26;
|
nflatxshift = 26;
|
||||||
|
|
@ -774,30 +826,7 @@ Rloadflats (INT32 i, INT32 w)
|
||||||
W_ReadLumpHeaderPwad(wadnum, lumpnum, header, sizeof header, 0);
|
W_ReadLumpHeaderPwad(wadnum, lumpnum, header, sizeof header, 0);
|
||||||
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
lumplength = W_LumpLengthPwad(wadnum, lumpnum);
|
||||||
|
|
||||||
switch (lumplength)
|
flatsize = R_FlatDimensionsFromLumpSize(lumplength);
|
||||||
{
|
|
||||||
case 4194304: // 2048x2048 lump
|
|
||||||
flatsize = 2048;
|
|
||||||
break;
|
|
||||||
case 1048576: // 1024x1024 lump
|
|
||||||
flatsize = 1024;
|
|
||||||
break;
|
|
||||||
case 262144:// 512x512 lump
|
|
||||||
flatsize = 512;
|
|
||||||
break;
|
|
||||||
case 65536: // 256x256 lump
|
|
||||||
flatsize = 256;
|
|
||||||
break;
|
|
||||||
case 16384: // 128x128 lump
|
|
||||||
flatsize = 128;
|
|
||||||
break;
|
|
||||||
case 1024: // 32x32 lump
|
|
||||||
flatsize = 32;
|
|
||||||
break;
|
|
||||||
default: // 64x64 lump
|
|
||||||
flatsize = 64;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//CONS_Printf("\n\"%s\" is a flat, dimensions %d x %d",W_CheckNameForNumPwad((UINT16)w,texstart+j),flatsize,flatsize);
|
//CONS_Printf("\n\"%s\" is a flat, dimensions %d x %d",W_CheckNameForNumPwad((UINT16)w,texstart+j),flatsize,flatsize);
|
||||||
texture = textures[i] = Z_Calloc(sizeof(texture_t) + sizeof(texpatch_t), PU_STATIC, NULL);
|
texture = textures[i] = Z_Calloc(sizeof(texture_t) + sizeof(texpatch_t), PU_STATIC, NULL);
|
||||||
|
|
|
||||||
|
|
@ -1236,19 +1236,19 @@ void V_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatnum)
|
||||||
{
|
{
|
||||||
case 4194304: // 2048x2048 lump
|
case 4194304: // 2048x2048 lump
|
||||||
lflatsize = 2048;
|
lflatsize = 2048;
|
||||||
flatshift = 10;
|
flatshift = 11;
|
||||||
break;
|
break;
|
||||||
case 1048576: // 1024x1024 lump
|
case 1048576: // 1024x1024 lump
|
||||||
lflatsize = 1024;
|
lflatsize = 1024;
|
||||||
flatshift = 9;
|
flatshift = 10;
|
||||||
break;
|
break;
|
||||||
case 262144:// 512x512 lump
|
case 262144:// 512x512 lump
|
||||||
lflatsize = 512;
|
lflatsize = 512;
|
||||||
flatshift = 8;
|
flatshift = 9;
|
||||||
break;
|
break;
|
||||||
case 65536: // 256x256 lump
|
case 65536: // 256x256 lump
|
||||||
lflatsize = 256;
|
lflatsize = 256;
|
||||||
flatshift = 7;
|
flatshift = 8;
|
||||||
break;
|
break;
|
||||||
case 16384: // 128x128 lump
|
case 16384: // 128x128 lump
|
||||||
lflatsize = 128;
|
lflatsize = 128;
|
||||||
|
|
@ -1258,6 +1258,14 @@ void V_DrawFlatFill(INT32 x, INT32 y, INT32 w, INT32 h, lumpnum_t flatnum)
|
||||||
lflatsize = 32;
|
lflatsize = 32;
|
||||||
flatshift = 5;
|
flatshift = 5;
|
||||||
break;
|
break;
|
||||||
|
case 256: // 16x16 lump
|
||||||
|
lflatsize = 16;
|
||||||
|
flatshift = 4;
|
||||||
|
break;
|
||||||
|
case 64: // 8x8 lump
|
||||||
|
lflatsize = 8;
|
||||||
|
flatshift = 3;
|
||||||
|
break;
|
||||||
default: // 64x64 lump
|
default: // 64x64 lump
|
||||||
lflatsize = 64;
|
lflatsize = 64;
|
||||||
flatshift = 6;
|
flatshift = 6;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue