Merge remote-tracking branch 'origin/cherries' into blankart-dev
This commit is contained in:
commit
d748cf360e
9 changed files with 195 additions and 370 deletions
|
|
@ -367,7 +367,6 @@ consvar_t cv_joyscale[MAXSPLITSCREENPLAYERS] = { //Alam: Dummy for save
|
|||
#endif
|
||||
|
||||
// SRB2kart
|
||||
consvar_t cv_superring = CVAR_INIT ("superring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_sneaker = CVAR_INIT ("sneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_rocketsneaker = CVAR_INIT ("rocketsneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_invincibility = CVAR_INIT ("invincibility", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
|
@ -376,18 +375,19 @@ consvar_t cv_eggmanmonitor = CVAR_INIT ("eggmanmonitor", "On", CV_NETVAR|CV_C
|
|||
consvar_t cv_orbinaut = CVAR_INIT ("orbinaut", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_jawz = CVAR_INIT ("jawz", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_mine = CVAR_INIT ("mine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_landmine = CVAR_INIT ("landmine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_droptarget = CVAR_INIT ("droptarget", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_ballhog = CVAR_INIT ("ballhog", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_selfpropelledbomb = CVAR_INIT ("selfpropelledbomb", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_grow = CVAR_INIT ("grow", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_shrink = CVAR_INIT ("shrink", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_thundershield = CVAR_INIT ("thundershield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_bubbleshield = CVAR_INIT ("bubbleshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_flameshield = CVAR_INIT ("flameshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_hyudoro = CVAR_INIT ("hyudoro", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_pogospring = CVAR_INIT ("pogospring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_kitchensink = CVAR_INIT ("kitchensink", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_superring = CVAR_INIT ("superring", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_landmine = CVAR_INIT ("landmine", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_bubbleshield = CVAR_INIT ("bubbleshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_flameshield = CVAR_INIT ("flameshield", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_droptarget = CVAR_INIT ("droptarget", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
||||
consvar_t cv_dualsneaker = CVAR_INIT ("dualsneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
consvar_t cv_triplesneaker = CVAR_INIT ("triplesneaker", "On", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL);
|
||||
|
|
@ -2114,6 +2114,12 @@ void D_Cheat(INT32 playernum, INT32 cheat, ...)
|
|||
|
||||
switch (cheat)
|
||||
{
|
||||
case CHEAT_SAVECHECKPOINT:
|
||||
COPY(WRITEFIXED, fixed_t); // x
|
||||
COPY(WRITEFIXED, fixed_t); // y
|
||||
COPY(WRITEFIXED, fixed_t); // z
|
||||
break;
|
||||
|
||||
case CHEAT_RINGS:
|
||||
case CHEAT_LIVES:
|
||||
// If you're confused why 'int' instead of
|
||||
|
|
@ -2129,6 +2135,12 @@ void D_Cheat(INT32 playernum, INT32 cheat, ...)
|
|||
COPY(WRITEINT32, INT32);
|
||||
break;
|
||||
|
||||
case CHEAT_RELATIVE_TELEPORT:
|
||||
COPY(WRITEFIXED, fixed_t);
|
||||
COPY(WRITEFIXED, fixed_t);
|
||||
COPY(WRITEFIXED, fixed_t);
|
||||
break;
|
||||
|
||||
case CHEAT_DEVMODE:
|
||||
COPY(WRITEUINT32, UINT32);
|
||||
break;
|
||||
|
|
@ -5713,6 +5725,20 @@ static void Got_Cheat(UINT8 **cp, INT32 playernum)
|
|||
break;
|
||||
}
|
||||
|
||||
case CHEAT_SAVECHECKPOINT: {
|
||||
fixed_t x = READFIXED(*cp);
|
||||
fixed_t y = READFIXED(*cp);
|
||||
fixed_t z = READFIXED(*cp);
|
||||
|
||||
player->starpostx = x>>FRACBITS;
|
||||
player->starposty = y>>FRACBITS;
|
||||
player->starpostz = z>>FRACBITS;
|
||||
|
||||
CV_CheaterWarning(targetPlayer, va("temporary checkpoint created at %d, %d, %d",
|
||||
x / FRACUNIT, y / FRACUNIT, z / FRACUNIT));
|
||||
break;
|
||||
}
|
||||
|
||||
case CHEAT_RINGS: {
|
||||
SINT8 rings = READSINT8(*cp);
|
||||
|
||||
|
|
@ -5776,6 +5802,39 @@ static void Got_Cheat(UINT8 **cp, INT32 playernum)
|
|||
break;
|
||||
}
|
||||
|
||||
case CHEAT_RELATIVE_TELEPORT: {
|
||||
fixed_t x = READFIXED(*cp);
|
||||
fixed_t y = READFIXED(*cp);
|
||||
fixed_t z = READFIXED(*cp);
|
||||
|
||||
float f[3] = {
|
||||
FIXED_TO_FLOAT(x),
|
||||
FIXED_TO_FLOAT(y),
|
||||
FIXED_TO_FLOAT(z),
|
||||
};
|
||||
char t[3][9];
|
||||
|
||||
if (!P_MobjWasRemoved(player->mo))
|
||||
{
|
||||
P_MapStart();
|
||||
P_SetOrigin(player->mo,
|
||||
player->mo->x + x,
|
||||
player->mo->y + y,
|
||||
player->mo->z + z);
|
||||
P_MapEnd();
|
||||
|
||||
S_StartSound(player->mo, sfx_mixup);
|
||||
}
|
||||
|
||||
strlcpy(t[0], M_Ftrim(f[0]), sizeof t[0]);
|
||||
strlcpy(t[1], M_Ftrim(f[1]), sizeof t[1]);
|
||||
strlcpy(t[2], M_Ftrim(f[2]), sizeof t[2]);
|
||||
|
||||
CV_CheaterWarning(targetPlayer, va("relative teleport by %d%s, %d%s, %d%s",
|
||||
(int)f[0], t[0], (int)f[1], t[1], (int)f[2], t[2]));
|
||||
break;
|
||||
}
|
||||
|
||||
case CHEAT_DEVMODE: {
|
||||
UINT32 flags = READUINT32(*cp);
|
||||
cht_debug = flags;
|
||||
|
|
|
|||
|
|
@ -71,14 +71,37 @@ extern consvar_t cv_spectatorreentry, cv_antigrief;
|
|||
#endif
|
||||
|
||||
// SRB2kart items
|
||||
extern consvar_t cv_superring, cv_sneaker, cv_rocketsneaker, cv_invincibility, cv_banana;
|
||||
extern consvar_t cv_eggmanmonitor, cv_orbinaut, cv_jawz, cv_mine, cv_landmine, cv_droptarget;
|
||||
extern consvar_t cv_ballhog, cv_selfpropelledbomb, cv_grow, cv_shrink;
|
||||
extern consvar_t cv_thundershield, cv_bubbleshield, cv_flameshield;
|
||||
extern consvar_t cv_hyudoro, cv_pogospring, cv_kitchensink;
|
||||
extern consvar_t
|
||||
cv_sneaker,
|
||||
cv_rocketsneaker,
|
||||
cv_invincibility,
|
||||
cv_banana,
|
||||
cv_eggmanmonitor,
|
||||
cv_orbinaut,
|
||||
cv_jawz,
|
||||
cv_mine,
|
||||
cv_ballhog,
|
||||
cv_selfpropelledbomb,
|
||||
cv_grow,
|
||||
cv_shrink,
|
||||
cv_thundershield,
|
||||
cv_hyudoro,
|
||||
cv_pogospring,
|
||||
cv_kitchensink,
|
||||
cv_superring,
|
||||
cv_landmine,
|
||||
cv_bubbleshield,
|
||||
cv_flameshield,
|
||||
cv_droptarget;
|
||||
|
||||
extern consvar_t cv_dualsneaker, cv_triplesneaker, cv_triplebanana, cv_decabanana;
|
||||
extern consvar_t cv_tripleorbinaut, cv_quadorbinaut, cv_dualjawz;
|
||||
extern consvar_t
|
||||
cv_dualsneaker,
|
||||
cv_triplesneaker,
|
||||
cv_triplebanana,
|
||||
cv_decabanana,
|
||||
cv_tripleorbinaut,
|
||||
cv_quadorbinaut,
|
||||
cv_dualjawz;
|
||||
|
||||
extern consvar_t cv_kartminimap;
|
||||
extern consvar_t cv_kartcheck;
|
||||
|
|
|
|||
|
|
@ -562,10 +562,6 @@ extern int compuncommitted;
|
|||
#undef UPDATE_ALERT
|
||||
#endif
|
||||
|
||||
/// - SRB2Kart options -
|
||||
/// Camera always has noclip.
|
||||
#define NOCLIPCAM
|
||||
|
||||
// p_sight.c
|
||||
#define TRAVERSE_MAX 8
|
||||
|
||||
|
|
|
|||
56
src/k_hud.c
56
src/k_hud.c
|
|
@ -113,7 +113,7 @@ static patch_t *kp_itemtimer[2];
|
|||
static patch_t *kp_itemmulsticker[2];
|
||||
static patch_t *kp_itemx;
|
||||
|
||||
static patch_t *kp_superring[2];
|
||||
static patch_t *kp_sadface[2];
|
||||
static patch_t *kp_sneaker[4];
|
||||
static patch_t *kp_rocketsneaker[2];
|
||||
static patch_t *kp_invincibility[13];
|
||||
|
|
@ -122,19 +122,19 @@ static patch_t *kp_eggman[2];
|
|||
static patch_t *kp_orbinaut[5];
|
||||
static patch_t *kp_jawz[3];
|
||||
static patch_t *kp_mine[2];
|
||||
static patch_t *kp_landmine[2];
|
||||
static patch_t *kp_droptarget[2];
|
||||
static patch_t *kp_ballhog[2];
|
||||
static patch_t *kp_selfpropelledbomb[2];
|
||||
static patch_t *kp_grow[2];
|
||||
static patch_t *kp_shrink[2];
|
||||
static patch_t *kp_thundershield[2];
|
||||
static patch_t *kp_bubbleshield[2];
|
||||
static patch_t *kp_flameshield[2];
|
||||
static patch_t *kp_hyudoro[2];
|
||||
static patch_t *kp_pogospring[2];
|
||||
static patch_t *kp_kitchensink[2];
|
||||
static patch_t *kp_sadface[2];
|
||||
static patch_t *kp_superring[2];
|
||||
static patch_t *kp_landmine[2];
|
||||
static patch_t *kp_bubbleshield[2];
|
||||
static patch_t *kp_flameshield[2];
|
||||
static patch_t *kp_droptarget[2];
|
||||
|
||||
static patch_t *kp_check[6];
|
||||
|
||||
|
|
@ -305,7 +305,7 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_itemmulsticker[0], "K_ITMUL");
|
||||
HU_UpdatePatch(&kp_itemx, "K_ITX");
|
||||
|
||||
HU_UpdatePatch(&kp_superring[0], "K_ITRING");
|
||||
HU_UpdatePatch(&kp_sadface[0], "K_ITSAD");
|
||||
HU_UpdatePatch(&kp_sneaker[0], "K_ITSHOE");
|
||||
HU_UpdatePatch(&kp_sneaker[1], "K_ITSHO2");
|
||||
HU_UpdatePatch(&kp_sneaker[2], "K_ITSHO3");
|
||||
|
|
@ -331,19 +331,19 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_jawz[0], "K_ITJAWZ");
|
||||
HU_UpdatePatch(&kp_jawz[1], "K_ITJAW2");
|
||||
HU_UpdatePatch(&kp_mine[0], "K_ITMINE");
|
||||
HU_UpdatePatch(&kp_landmine[0], "K_ITLNDM");
|
||||
HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG");
|
||||
HU_UpdatePatch(&kp_ballhog[0], "K_ITBHOG");
|
||||
HU_UpdatePatch(&kp_selfpropelledbomb[0], "K_ITSPB");
|
||||
HU_UpdatePatch(&kp_grow[0], "K_ITGROW");
|
||||
HU_UpdatePatch(&kp_shrink[0], "K_ITSHRK");
|
||||
HU_UpdatePatch(&kp_thundershield[0], "K_ITTHNS");
|
||||
HU_UpdatePatch(&kp_bubbleshield[0], "K_ITBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[0], "K_ITFLMS");
|
||||
HU_UpdatePatch(&kp_hyudoro[0], "K_ITHYUD");
|
||||
HU_UpdatePatch(&kp_pogospring[0], "K_ITPOGO");
|
||||
HU_UpdatePatch(&kp_kitchensink[0], "K_ITSINK");
|
||||
HU_UpdatePatch(&kp_sadface[0], "K_ITSAD");
|
||||
HU_UpdatePatch(&kp_superring[0], "K_ITRING");
|
||||
HU_UpdatePatch(&kp_landmine[0], "K_ITLNDM");
|
||||
HU_UpdatePatch(&kp_bubbleshield[0], "K_ITBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[0], "K_ITFLMS");
|
||||
HU_UpdatePatch(&kp_droptarget[0], "K_ITDTRG");
|
||||
|
||||
// Splitscreen
|
||||
HU_UpdatePatch(&kp_itembg[2], "K_ISBG");
|
||||
|
|
@ -351,7 +351,7 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_itemtimer[1], "K_ISIMER");
|
||||
HU_UpdatePatch(&kp_itemmulsticker[1], "K_ISMUL");
|
||||
|
||||
HU_UpdatePatch(&kp_superring[1], "K_ISRING");
|
||||
HU_UpdatePatch(&kp_sadface[1], "K_ISSAD");
|
||||
HU_UpdatePatch(&kp_sneaker[3], "K_ISSHOE");
|
||||
HU_UpdatePatch(&kp_rocketsneaker[1], "K_ISRSHE");
|
||||
sprintf(buffer, "K_ISINVx");
|
||||
|
|
@ -365,19 +365,19 @@ void K_LoadKartHUDGraphics(void)
|
|||
HU_UpdatePatch(&kp_orbinaut[4], "K_ISORBN");
|
||||
HU_UpdatePatch(&kp_jawz[2], "K_ISJAWZ");
|
||||
HU_UpdatePatch(&kp_mine[1], "K_ISMINE");
|
||||
HU_UpdatePatch(&kp_landmine[1], "K_ISLNDM");
|
||||
HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG");
|
||||
HU_UpdatePatch(&kp_ballhog[1], "K_ISBHOG");
|
||||
HU_UpdatePatch(&kp_selfpropelledbomb[1], "K_ISSPB");
|
||||
HU_UpdatePatch(&kp_grow[1], "K_ISGROW");
|
||||
HU_UpdatePatch(&kp_shrink[1], "K_ISSHRK");
|
||||
HU_UpdatePatch(&kp_thundershield[1], "K_ISTHNS");
|
||||
HU_UpdatePatch(&kp_bubbleshield[1], "K_ISBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[1], "K_ISFLMS");
|
||||
HU_UpdatePatch(&kp_hyudoro[1], "K_ISHYUD");
|
||||
HU_UpdatePatch(&kp_pogospring[1], "K_ISPOGO");
|
||||
HU_UpdatePatch(&kp_kitchensink[1], "K_ISSINK");
|
||||
HU_UpdatePatch(&kp_sadface[1], "K_ISSAD");
|
||||
HU_UpdatePatch(&kp_superring[1], "K_ISRING");
|
||||
HU_UpdatePatch(&kp_landmine[1], "K_ISLNDM");
|
||||
HU_UpdatePatch(&kp_bubbleshield[1], "K_ISBUBS");
|
||||
HU_UpdatePatch(&kp_flameshield[1], "K_ISFLMS");
|
||||
HU_UpdatePatch(&kp_droptarget[1], "K_ISDTRG");
|
||||
|
||||
// CHECK indicators
|
||||
sprintf(buffer, "K_CHECKx");
|
||||
|
|
@ -496,8 +496,6 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
|||
return (tiny ? "K_ISJAWZ" : "K_ITJAWZ");
|
||||
case KITEM_MINE:
|
||||
return (tiny ? "K_ISMINE" : "K_ITMINE");
|
||||
case KITEM_LANDMINE:
|
||||
return (tiny ? "K_ISLNDM" : "K_ITLNDM");
|
||||
case KITEM_BALLHOG:
|
||||
return (tiny ? "K_ISBHOG" : "K_ITBHOG");
|
||||
case KITEM_SPB:
|
||||
|
|
@ -508,20 +506,22 @@ const char *K_GetItemPatch(UINT8 item, boolean tiny)
|
|||
return (tiny ? "K_ISSHRK" : "K_ITSHRK");
|
||||
case KITEM_THUNDERSHIELD:
|
||||
return (tiny ? "K_ISTHNS" : "K_ITTHNS");
|
||||
case KITEM_BUBBLESHIELD:
|
||||
return (tiny ? "K_ISBUBS" : "K_ITBUBS");
|
||||
case KITEM_FLAMESHIELD:
|
||||
return (tiny ? "K_ISFLMS" : "K_ITFLMS");
|
||||
case KITEM_HYUDORO:
|
||||
return (tiny ? "K_ISHYUD" : "K_ITHYUD");
|
||||
case KITEM_POGOSPRING:
|
||||
return (tiny ? "K_ISPOGO" : "K_ITPOGO");
|
||||
case KITEM_SUPERRING:
|
||||
return (tiny ? "K_ISRING" : "K_ITRING");
|
||||
case KITEM_DROPTARGET:
|
||||
return (tiny ? "K_ISDTRG" : "K_ITDTRG");
|
||||
case KITEM_KITCHENSINK:
|
||||
return (tiny ? "K_ISSINK" : "K_ITSINK");
|
||||
case KITEM_SUPERRING:
|
||||
return (tiny ? "K_ISRING" : "K_ITRING");
|
||||
case KITEM_LANDMINE:
|
||||
return (tiny ? "K_ISLNDM" : "K_ITLNDM");
|
||||
case KITEM_BUBBLESHIELD:
|
||||
return (tiny ? "K_ISBUBS" : "K_ITBUBS");
|
||||
case KITEM_FLAMESHIELD:
|
||||
return (tiny ? "K_ISFLMS" : "K_ITFLMS");
|
||||
case KITEM_DROPTARGET:
|
||||
return (tiny ? "K_ISDTRG" : "K_ITDTRG");
|
||||
case KRITEM_DUALSNEAKER:
|
||||
return (tiny ? "K_ISSHOE" : "K_ITSHO2");
|
||||
case KRITEM_TRIPLESNEAKER:
|
||||
|
|
|
|||
116
src/k_kart.c
116
src/k_kart.c
|
|
@ -397,68 +397,68 @@ consvar_t *KartItemCVars[NUMKARTRESULTS-1] =
|
|||
// Less ugly 2D arrays
|
||||
static UINT8 K_KartItemOddsRace[NUMKARTRESULTS-1][8] =
|
||||
{
|
||||
//P-Odds 0 1 2 3 4 5 6 7
|
||||
/*Sneaker*/ { 0, 0, 4, 6, 7, 0, 0, 0 }, // Sneaker
|
||||
/*Rocket Sneaker*/ { 0, 0, 0, 0, 1, 4, 6, 3 }, // Rocket Sneaker
|
||||
/*Invincibility*/ { 0, 0, 0, 0, 1, 4, 6,10 }, // Invincibility
|
||||
/*Banana*/ { 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana
|
||||
/*Eggman Monitor*/ { 3, 2, 1, 0, 0, 0, 0, 0 }, // Eggman Monitor
|
||||
/*Orbinaut*/ { 5, 6, 4, 2, 0, 0, 0, 0 }, // Orbinaut
|
||||
/*Jawz*/ { 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz
|
||||
/*Mine*/ { 0, 2, 2, 1, 0, 0, 0, 0 }, // Mine
|
||||
/*Ballhog*/ { 0, 0, 2, 1, 0, 0, 0, 0 }, // Ballhog
|
||||
/*Self-Propelled Bomb*/ { 0, 1, 2, 3, 4, 2, 2, 0 }, // Self-Propelled Bomb
|
||||
/*Grow*/ { 0, 0, 0, 0, 0, 2, 5, 7 }, // Grow
|
||||
/*Shrink*/ { 0, 0, 0, 0, 0, 0, 1, 0 }, // Shrink
|
||||
/*Thunder Shield*/ { 1, 2, 0, 0, 0, 0, 0, 0 }, // Thunder Shield
|
||||
/*Hyudoro*/ { 0, 0, 0, 1, 2, 1, 0, 0 }, // Hyudoro
|
||||
/*Pogo Spring*/ { 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring
|
||||
/*Kitchen Sink*/ { 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink
|
||||
/*Super Ring*/ { 1, 2, 2, 0, 0, 0, 0, 0 }, // Super Ring
|
||||
/*Land Mine*/ { 3, 0, 0, 0, 0, 0, 0, 0 }, // Land Mine
|
||||
/*Bubble Shield*/ { 0, 1, 2, 1, 0, 0, 0, 0 }, // Bubble Shield
|
||||
/*Flame Shield*/ { 0, 0, 0, 0, 0, 2, 4, 5 }, // Flame Shield
|
||||
/*Drop Target*/ { 1, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target
|
||||
/*Sneaker x2*/ { 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2
|
||||
/*Sneaker x3*/ { 0, 0, 0, 1, 6,10, 5, 0 }, // Sneaker x3
|
||||
/*Banana x3*/ { 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3
|
||||
/*Banana x10*/ { 0, 0, 0, 1, 0, 0, 0, 0 }, // Banana x10
|
||||
/*Orbinaut x3*/ { 0, 0, 1, 0, 0, 0, 0, 0 }, // Orbinaut x3
|
||||
/*Orbinaut x4*/ { 0, 0, 0, 1, 1, 0, 0, 0 }, // Orbinaut x4
|
||||
/*Jawz x2*/ { 0, 0, 1, 2, 0, 0, 0, 0 } // Jawz x2
|
||||
//B C D E F G H I
|
||||
{ 0, 0, 4, 6, 7, 0, 0, 0 }, // Sneaker
|
||||
{ 0, 0, 0, 0, 1, 4, 6, 3 }, // Rocket Sneaker
|
||||
{ 0, 0, 0, 0, 1, 4, 6,10 }, // Invincibility
|
||||
{ 9, 4, 2, 1, 0, 0, 0, 0 }, // Banana
|
||||
{ 3, 2, 1, 0, 0, 0, 0, 0 }, // Eggman Monitor
|
||||
{ 5, 6, 4, 2, 0, 0, 0, 0 }, // Orbinaut
|
||||
{ 0, 3, 2, 1, 1, 0, 0, 0 }, // Jawz
|
||||
{ 0, 2, 2, 1, 0, 0, 0, 0 }, // Mine
|
||||
{ 0, 0, 2, 1, 0, 0, 0, 0 }, // Ballhog
|
||||
{ 0, 1, 2, 3, 4, 2, 2, 0 }, // Self-Propelled Bomb
|
||||
{ 0, 0, 0, 0, 0, 2, 5, 7 }, // Grow
|
||||
{ 0, 0, 0, 0, 0, 0, 1, 0 }, // Shrink
|
||||
{ 1, 2, 0, 0, 0, 0, 0, 0 }, // Thunder Shield
|
||||
{ 0, 0, 0, 1, 2, 1, 0, 0 }, // Hyudoro
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Pogo Spring
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0 }, // Kitchen Sink
|
||||
{ 1, 2, 2, 0, 0, 0, 0, 0 }, // Super Ring
|
||||
{ 3, 0, 0, 0, 0, 0, 0, 0 }, // Land Mine
|
||||
{ 0, 1, 2, 1, 0, 0, 0, 0 }, // Bubble Shield
|
||||
{ 0, 0, 0, 0, 0, 2, 4, 5 }, // Flame Shield
|
||||
{ 1, 0, 0, 0, 0, 0, 0, 0 }, // Drop Target
|
||||
{ 0, 0, 2, 2, 2, 0, 0, 0 }, // Sneaker x2
|
||||
{ 0, 0, 0, 1, 6,10, 5, 0 }, // Sneaker x3
|
||||
{ 0, 1, 1, 0, 0, 0, 0, 0 }, // Banana x3
|
||||
{ 0, 0, 0, 1, 0, 0, 0, 0 }, // Banana x10
|
||||
{ 0, 0, 1, 0, 0, 0, 0, 0 }, // Orbinaut x3
|
||||
{ 0, 0, 0, 1, 1, 0, 0, 0 }, // Orbinaut x4
|
||||
{ 0, 0, 1, 2, 0, 0, 0, 0 } // Jawz x2
|
||||
};
|
||||
|
||||
static UINT8 K_KartItemOddsBattle[NUMKARTRESULTS][2] =
|
||||
{
|
||||
//P-Odds 0 1
|
||||
/*Sneaker*/ { 2, 1 }, // Sneaker
|
||||
/*Rocket Sneaker*/ { 0, 0 }, // Rocket Sneaker
|
||||
/*Invincibility*/ { 4, 1 }, // Invincibility
|
||||
/*Banana*/ { 0, 0 }, // Banana
|
||||
/*Eggman Monitor*/ { 1, 0 }, // Eggman Monitor
|
||||
/*Orbinaut*/ { 8, 0 }, // Orbinaut
|
||||
/*Jawz*/ { 8, 1 }, // Jawz
|
||||
/*Mine*/ { 6, 1 }, // Mine
|
||||
/*Ballhog*/ { 2, 1 }, // Ballhog
|
||||
/*Self-Propelled Bomb*/ { 0, 0 }, // Self-Propelled Bomb
|
||||
/*Grow*/ { 2, 1 }, // Grow
|
||||
/*Shrink*/ { 0, 0 }, // Shrink
|
||||
/*Thunder Shield*/ { 4, 0 }, // Thunder Shield
|
||||
/*Hyudoro*/ { 2, 0 }, // Hyudoro
|
||||
/*Pogo Spring*/ { 3, 0 }, // Pogo Spring
|
||||
/*Kitchen Sink*/ { 0, 0 }, // Kitchen Sink
|
||||
/*Super Ring*/ { 0, 0 }, // Super Ring
|
||||
/*Land Mine*/ { 2, 0 }, // Land Mine
|
||||
/*Bubble Shield*/ { 1, 0 }, // Bubble Shield
|
||||
/*Flame Shield*/ { 1, 0 }, // Flame Shield
|
||||
/*Drop Target*/ { 2, 0 }, // Drop Target
|
||||
/*Sneaker x2*/ { 0, 0 }, // Sneaker x2
|
||||
/*Sneaker x3*/ { 0, 1 }, // Sneaker x3
|
||||
/*Banana x3*/ { 0, 0 }, // Banana x3
|
||||
/*Banana x10*/ { 1, 1 }, // Banana x10
|
||||
/*Orbinaut x3*/ { 2, 0 }, // Orbinaut x3
|
||||
/*Orbinaut x4*/ { 1, 1 }, // Orbinaut x4
|
||||
/*Jawz x2*/ { 5, 1 } // Jawz x2
|
||||
//K L
|
||||
{ 2, 1 }, // Sneaker
|
||||
{ 0, 0 }, // Rocket Sneaker
|
||||
{ 4, 1 }, // Invincibility
|
||||
{ 0, 0 }, // Banana
|
||||
{ 1, 0 }, // Eggman Monitor
|
||||
{ 8, 0 }, // Orbinaut
|
||||
{ 8, 1 }, // Jawz
|
||||
{ 6, 1 }, // Mine
|
||||
{ 2, 1 }, // Ballhog
|
||||
{ 0, 0 }, // Self-Propelled Bomb
|
||||
{ 2, 1 }, // Grow
|
||||
{ 0, 0 }, // Shrink
|
||||
{ 4, 0 }, // Thunder Shield
|
||||
{ 2, 0 }, // Hyudoro
|
||||
{ 3, 0 }, // Pogo Spring
|
||||
{ 0, 0 }, // Kitchen Sink
|
||||
{ 0, 0 }, // Super Ring
|
||||
{ 2, 0 }, // Land Mine
|
||||
{ 1, 0 }, // Bubble Shield
|
||||
{ 1, 0 }, // Flame Shield
|
||||
{ 2, 0 }, // Drop Target
|
||||
{ 0, 0 }, // Sneaker x2
|
||||
{ 0, 1 }, // Sneaker x3
|
||||
{ 0, 0 }, // Banana x3
|
||||
{ 1, 1 }, // Banana x10
|
||||
{ 2, 0 }, // Orbinaut x3
|
||||
{ 1, 1 }, // Orbinaut x4
|
||||
{ 5, 1 } // Jawz x2
|
||||
};
|
||||
|
||||
#define DISTVAR (2048) // Magic number distance for use with item roulette tiers
|
||||
|
|
|
|||
|
|
@ -337,64 +337,21 @@ void Command_Hurtme_f(void)
|
|||
|
||||
void Command_RTeleport_f(void)
|
||||
{
|
||||
fixed_t intx, inty, intz;
|
||||
size_t i;
|
||||
player_t *p = &players[consoleplayer];
|
||||
subsector_t *ss;
|
||||
float x = atof(COM_Argv(1));
|
||||
float y = atof(COM_Argv(2));
|
||||
float z = atof(COM_Argv(3));
|
||||
|
||||
REQUIRE_DEVMODE;
|
||||
REQUIRE_INLEVEL;
|
||||
REQUIRE_SINGLEPLAYER;
|
||||
|
||||
if (COM_Argc() < 3 || COM_Argc() > 7)
|
||||
if (COM_Argc() != 4)
|
||||
{
|
||||
CONS_Printf(M_GetText("rteleport -x <value> -y <value> -z <value>: relative teleport to a location\n"));
|
||||
CONS_Printf(M_GetText("rteleport <x> <y> <z>: relative teleport to a location\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!p->mo)
|
||||
return;
|
||||
|
||||
i = COM_CheckParm("-x");
|
||||
if (i)
|
||||
intx = atoi(COM_Argv(i + 1));
|
||||
else
|
||||
intx = 0;
|
||||
|
||||
i = COM_CheckParm("-y");
|
||||
if (i)
|
||||
inty = atoi(COM_Argv(i + 1));
|
||||
else
|
||||
inty = 0;
|
||||
|
||||
ss = R_PointInSubsectorOrNull(p->mo->x + intx*FRACUNIT, p->mo->y + inty*FRACUNIT);
|
||||
if (!ss || ss->sector->ceilingheight - ss->sector->floorheight < p->mo->height)
|
||||
{
|
||||
CONS_Alert(CONS_NOTICE, M_GetText("Not a valid location.\n"));
|
||||
return;
|
||||
}
|
||||
i = COM_CheckParm("-z");
|
||||
if (i)
|
||||
{
|
||||
intz = atoi(COM_Argv(i + 1));
|
||||
intz <<= FRACBITS;
|
||||
intz += p->mo->z;
|
||||
if (intz < ss->sector->floorheight)
|
||||
intz = ss->sector->floorheight;
|
||||
if (intz > ss->sector->ceilingheight - p->mo->height)
|
||||
intz = ss->sector->ceilingheight - p->mo->height;
|
||||
}
|
||||
else
|
||||
intz = p->mo->z;
|
||||
|
||||
CONS_Printf(M_GetText("Teleporting by %d, %d, %d...\n"), intx, inty, FixedInt((intz-p->mo->z)));
|
||||
|
||||
P_MapStart();
|
||||
if (!P_SetOrigin(p->mo, p->mo->x+intx*FRACUNIT, p->mo->y+inty*FRACUNIT, intz))
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Unable to teleport to that spot!\n"));
|
||||
else
|
||||
S_StartSound(p->mo, sfx_mixup);
|
||||
P_MapEnd();
|
||||
D_Cheat(consoleplayer, CHEAT_RELATIVE_TELEPORT,
|
||||
FLOAT_TO_FIXED(x), FLOAT_TO_FIXED(y), FLOAT_TO_FIXED(z));
|
||||
}
|
||||
|
||||
void Command_Teleport_f(void)
|
||||
|
|
@ -702,15 +659,15 @@ void Command_Dumplua_f(void)
|
|||
|
||||
void Command_Savecheckpoint_f(void)
|
||||
{
|
||||
mobj_t *thing = players[consoleplayer].mo;
|
||||
|
||||
REQUIRE_DEVMODE;
|
||||
REQUIRE_INLEVEL;
|
||||
REQUIRE_SINGLEPLAYER;
|
||||
|
||||
players[consoleplayer].starpostx = players[consoleplayer].mo->x;
|
||||
players[consoleplayer].starposty = players[consoleplayer].mo->y;
|
||||
players[consoleplayer].starpostz = players[consoleplayer].mo->floorz;
|
||||
|
||||
CONS_Printf(M_GetText("Temporary checkpoint created at %d, %d, %d\n"), players[consoleplayer].starpostx, players[consoleplayer].starposty, players[consoleplayer].starpostz);
|
||||
if (!P_MobjWasRemoved(thing))
|
||||
{
|
||||
D_Cheat(consoleplayer, CHEAT_SAVECHECKPOINT, thing->x, thing->y, thing->z);
|
||||
}
|
||||
}
|
||||
|
||||
// Like M_GetAllEmeralds() but for console devmode junkies.
|
||||
|
|
|
|||
|
|
@ -26,11 +26,13 @@ extern "C" {
|
|||
typedef enum {
|
||||
CHEAT_NOCLIP,
|
||||
CHEAT_GOD,
|
||||
CHEAT_SAVECHECKPOINT,
|
||||
CHEAT_RINGS,
|
||||
CHEAT_LIVES,
|
||||
CHEAT_SCALE,
|
||||
CHEAT_FLIP,
|
||||
CHEAT_HURT,
|
||||
CHEAT_RELATIVE_TELEPORT,
|
||||
CHEAT_DEVMODE,
|
||||
|
||||
NUMBER_OF_CHEATS
|
||||
|
|
|
|||
|
|
@ -2326,11 +2326,7 @@ boolean P_TryCameraMove(fixed_t x, fixed_t y, camera_t *thiscam)
|
|||
fixed_t tryx = thiscam->x;
|
||||
fixed_t tryy = thiscam->y;
|
||||
|
||||
#ifndef NOCLIPCAM
|
||||
if ((players[displayplayers[i]].pflags & PF_NOCLIP) || (leveltime < introtime)) // Noclipping player camera noclips too!!
|
||||
#else
|
||||
if (!(players[displayplayers[i]].pflags & PF_NOCONTEST)) // Time Over should not clip through walls
|
||||
#endif
|
||||
{
|
||||
g_tm.floatok = true;
|
||||
thiscam->floorz = thiscam->z;
|
||||
|
|
|
|||
208
src/p_user.c
208
src/p_user.c
|
|
@ -2799,10 +2799,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
|||
mobj_t *mo;
|
||||
fixed_t f1, f2;
|
||||
fixed_t speed;
|
||||
#ifndef NOCLIPCAM
|
||||
boolean cameranoclip;
|
||||
subsector_t *newsubsec;
|
||||
#endif
|
||||
|
||||
sonicloopcamvars_t *loop = &player->loop.camera;
|
||||
tic_t loop_out = leveltime - loop->enter_tic;
|
||||
|
|
@ -2860,12 +2856,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
|||
return true;
|
||||
}
|
||||
|
||||
#ifndef NOCLIPCAM
|
||||
cameranoclip = ((player->pflags & PF_NOCLIP)
|
||||
|| (mo->flags & (MF_NOCLIP|MF_NOCLIPHEIGHT)) // Noclipping player camera noclips too!!
|
||||
|| (leveltime < introtime)); // Kart intro cam
|
||||
#endif
|
||||
|
||||
if ((player->pflags & PF_NOCONTEST)) // 1 for momentum keep, 2 for turnaround
|
||||
timeover = (player->karthud[khud_timeovercam] > 2*TICRATE ? 2 : 1);
|
||||
else
|
||||
|
|
@ -3167,204 +3157,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall
|
|||
z = mo->z + pviewheight + distz;
|
||||
}
|
||||
|
||||
#ifndef NOCLIPCAM // Disable all z-clipping for noclip cam
|
||||
// move camera down to move under lower ceilings
|
||||
newsubsec = R_PointInSubsectorOrNull(((mo->x>>FRACBITS) + (thiscam->x>>FRACBITS))<<(FRACBITS-1), ((mo->y>>FRACBITS) + (thiscam->y>>FRACBITS))<<(FRACBITS-1));
|
||||
|
||||
if (!newsubsec)
|
||||
newsubsec = thiscam->subsector;
|
||||
|
||||
if (newsubsec)
|
||||
{
|
||||
fixed_t myfloorz, myceilingz;
|
||||
fixed_t midz = thiscam->z + (thiscam->z - mo->z)/2;
|
||||
fixed_t midx = ((mo->x>>FRACBITS) + (thiscam->x>>FRACBITS))<<(FRACBITS-1);
|
||||
fixed_t midy = ((mo->y>>FRACBITS) + (thiscam->y>>FRACBITS))<<(FRACBITS-1);
|
||||
|
||||
// Cameras use the heightsec's heights rather then the actual sector heights.
|
||||
// If you can see through it, why not move the camera through it too?
|
||||
if (newsubsec->sector->camsec >= 0)
|
||||
{
|
||||
myfloorz = sectors[newsubsec->sector->camsec].floorheight;
|
||||
myceilingz = sectors[newsubsec->sector->camsec].ceilingheight;
|
||||
}
|
||||
else if (newsubsec->sector->heightsec >= 0)
|
||||
{
|
||||
myfloorz = sectors[newsubsec->sector->heightsec].floorheight;
|
||||
myceilingz = sectors[newsubsec->sector->heightsec].ceilingheight;
|
||||
}
|
||||
else
|
||||
{
|
||||
myfloorz = P_CameraGetFloorZ(thiscam, newsubsec->sector, midx, midy, NULL);
|
||||
myceilingz = P_CameraGetCeilingZ(thiscam, newsubsec->sector, midx, midy, NULL);
|
||||
}
|
||||
|
||||
// Check list of fake floors and see if floorz/ceilingz need to be altered.
|
||||
if (newsubsec->sector->ffloors)
|
||||
{
|
||||
ffloor_t *rover;
|
||||
fixed_t delta1, delta2;
|
||||
INT32 thingtop = midz + thiscam->height;
|
||||
|
||||
for (rover = newsubsec->sector->ffloors; rover; rover = rover->next)
|
||||
{
|
||||
fixed_t topheight, bottomheight;
|
||||
if (!(rover->flags & FF_BLOCKOTHERS) || !(rover->flags & FF_EXISTS) || !(rover->flags & FF_RENDERALL) || GETSECSPECIAL(rover->master->frontsector->special, 4) == 12)
|
||||
continue;
|
||||
|
||||
topheight = P_CameraGetFOFTopZ(thiscam, newsubsec->sector, rover, midx, midy, NULL);
|
||||
bottomheight = P_CameraGetFOFBottomZ(thiscam, newsubsec->sector, rover, midx, midy, NULL);
|
||||
|
||||
delta1 = midz - (bottomheight
|
||||
+ ((topheight - bottomheight)/2));
|
||||
delta2 = thingtop - (bottomheight
|
||||
+ ((topheight - bottomheight)/2));
|
||||
if (topheight > myfloorz && abs(delta1) < abs(delta2))
|
||||
myfloorz = topheight;
|
||||
if (bottomheight < myceilingz && abs(delta1) >= abs(delta2))
|
||||
myceilingz = bottomheight;
|
||||
}
|
||||
}
|
||||
|
||||
// Check polyobjects and see if floorz/ceilingz need to be altered
|
||||
{
|
||||
INT32 xl, xh, yl, yh, bx, by;
|
||||
validcount++;
|
||||
|
||||
xl = (unsigned)(tmbbox[BOXLEFT] - bmaporgx)>>MAPBLOCKSHIFT;
|
||||
xh = (unsigned)(tmbbox[BOXRIGHT] - bmaporgx)>>MAPBLOCKSHIFT;
|
||||
yl = (unsigned)(tmbbox[BOXBOTTOM] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||
yh = (unsigned)(tmbbox[BOXTOP] - bmaporgy)>>MAPBLOCKSHIFT;
|
||||
|
||||
BMBOUNDFIX(xl, xh, yl, yh);
|
||||
|
||||
for (by = yl; by <= yh; by++)
|
||||
for (bx = xl; bx <= xh; bx++)
|
||||
{
|
||||
INT32 offset;
|
||||
polymaplink_t *plink; // haleyjd 02/22/06
|
||||
|
||||
if (bx < 0 || by < 0 || bx >= bmapwidth || by >= bmapheight)
|
||||
continue;
|
||||
|
||||
offset = by*bmapwidth + bx;
|
||||
|
||||
// haleyjd 02/22/06: consider polyobject lines
|
||||
plink = polyblocklinks[offset];
|
||||
|
||||
while (plink)
|
||||
{
|
||||
polyobj_t *po = plink->po;
|
||||
|
||||
if (po->validcount != validcount) // if polyobj hasn't been checked
|
||||
{
|
||||
sector_t *polysec;
|
||||
fixed_t delta1, delta2, thingtop;
|
||||
fixed_t polytop, polybottom;
|
||||
|
||||
po->validcount = validcount;
|
||||
|
||||
if (!P_PointInsidePolyobj(po, x, y) || !(po->flags & POF_SOLID))
|
||||
{
|
||||
plink = (polymaplink_t *)(plink->link.next);
|
||||
continue;
|
||||
}
|
||||
|
||||
// We're inside it! Yess...
|
||||
polysec = po->lines[0]->backsector;
|
||||
|
||||
if (GETSECSPECIAL(polysec->special, 4) == 12)
|
||||
{ // Camera noclip polyobj.
|
||||
plink = (polymaplink_t *)(plink->link.next);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (po->flags & POF_CLIPPLANES)
|
||||
{
|
||||
polytop = polysec->ceilingheight;
|
||||
polybottom = polysec->floorheight;
|
||||
}
|
||||
else
|
||||
{
|
||||
polytop = INT32_MAX;
|
||||
polybottom = INT32_MIN;
|
||||
}
|
||||
|
||||
thingtop = midz + thiscam->height;
|
||||
delta1 = midz - (polybottom + ((polytop - polybottom)/2));
|
||||
delta2 = thingtop - (polybottom + ((polytop - polybottom)/2));
|
||||
|
||||
if (polytop > myfloorz && abs(delta1) < abs(delta2))
|
||||
myfloorz = polytop;
|
||||
|
||||
if (polybottom < myceilingz && abs(delta1) >= abs(delta2))
|
||||
myceilingz = polybottom;
|
||||
}
|
||||
plink = (polymaplink_t *)(plink->link.next);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// crushed camera
|
||||
if (myceilingz <= myfloorz + thiscam->height && !resetcalled && !cameranoclip)
|
||||
{
|
||||
P_ResetCamera(player, thiscam);
|
||||
return true;
|
||||
}
|
||||
|
||||
// camera fit?
|
||||
if (myceilingz != myfloorz
|
||||
&& myceilingz - thiscam->height < z)
|
||||
{
|
||||
/* // no fit
|
||||
if (!resetcalled && !cameranoclip)
|
||||
{
|
||||
P_ResetCamera(player, thiscam);
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
z = myceilingz - thiscam->height-FixedMul(11*FRACUNIT, mo->scale);
|
||||
// is the camera fit is there own sector
|
||||
}
|
||||
|
||||
// Make the camera a tad smarter with 3d floors
|
||||
if (newsubsec->sector->ffloors && !cameranoclip)
|
||||
{
|
||||
ffloor_t *rover;
|
||||
|
||||
for (rover = newsubsec->sector->ffloors; rover; rover = rover->next)
|
||||
{
|
||||
fixed_t topheight, bottomheight;
|
||||
if ((rover->flags & FF_BLOCKOTHERS) && (rover->flags & FF_RENDERALL) && (rover->flags & FF_EXISTS) && GETSECSPECIAL(rover->master->frontsector->special, 4) == 12)
|
||||
{
|
||||
topheight = P_CameraGetFOFTopZ(thiscam, newsubsec->sector, rover, midx, midy, NULL);
|
||||
bottomheight = P_CameraGetFOFBottomZ(thiscam, newsubsec->sector, rover, midx, midy, NULL);
|
||||
|
||||
if (bottomheight - thiscam->height < z
|
||||
&& midz < bottomheight)
|
||||
z = bottomheight - thiscam->height-FixedMul(11*FRACUNIT, mo->scale);
|
||||
|
||||
else if (topheight + thiscam->height > z
|
||||
&& midz > topheight)
|
||||
z = topheight;
|
||||
|
||||
if ((mo->z >= topheight && midz < bottomheight)
|
||||
|| ((mo->z < bottomheight && mo->z+mo->height < topheight) && midz >= topheight))
|
||||
{
|
||||
// Can't see
|
||||
if (!resetcalled)
|
||||
P_ResetCamera(player, thiscam);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (thiscam->z < thiscam->floorz && !cameranoclip)
|
||||
thiscam->z = thiscam->floorz;
|
||||
#endif // NOCLIPCAM
|
||||
|
||||
z += player->cameraOffset;
|
||||
|
||||
// point viewed by the camera
|
||||
|
|
|
|||
Loading…
Reference in a new issue