Merge remote-tracking branch 'origin/next' into subvsdub
Nep taking a sledgehammer to the codebase as refactors are happening :,) # Conflicts: # src/g_demo.c
This commit is contained in:
commit
74b76b8471
12 changed files with 200 additions and 66 deletions
|
|
@ -2739,7 +2739,7 @@ void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
|||
LUA_InvalidatePlayer(&players[playernum]);
|
||||
|
||||
// don't look through someone's view who isn't there
|
||||
G_ResetViews();
|
||||
G_ResetViews(false);
|
||||
|
||||
K_CheckBumpers();
|
||||
P_CheckRacers();
|
||||
|
|
|
|||
|
|
@ -1728,5 +1728,59 @@ struct int_const_s const INT_CONST[] = {
|
|||
{"PICKUPITEM_EGGMAN", PICKUPITEM_EGGMAN},
|
||||
{"PICKUPITEM_FLOATING", PICKUPITEM_FLOATING},
|
||||
|
||||
// kart_fullturn
|
||||
{"KART_FULLTURN", KART_FULLTURN},
|
||||
|
||||
// invin constants
|
||||
{"KART_NUMINVSPARKLESANIM", KART_NUMINVSPARKLESANIM},
|
||||
{"BASEINVINTIME", BASEINVINTIME},
|
||||
{"MININVINTIME", MININVINTIME},
|
||||
|
||||
// grow/shrink scale
|
||||
{"GROW_SCALE", GROW_SCALE},
|
||||
{"SHRINK_SCALE", SHRINK_SCALE},
|
||||
|
||||
// auto respawn
|
||||
{"AUTORESPAWN_TIME", AUTORESPAWN_TIME},
|
||||
{"AUTORESPAWN_THRESHOLD", AUTORESPAWN_THRESHOLD},
|
||||
|
||||
// flameshield
|
||||
{"FLAMESTOREMAX", FLAMESTOREMAX},
|
||||
|
||||
// k_kart: Flipover
|
||||
{"FLIPOVERDIST", FLIPOVERDIST},
|
||||
{"FLIPOVERTICS", FLIPOVERTICS},
|
||||
{"FLIPOVERHALFTICS", FLIPOVERHALFTICS},
|
||||
{"FLIPOVER_90DEGTIME", FLIPOVER_90DEGTIME},
|
||||
{"FLIPOVER_360DEGTIME", FLIPOVER_360DEGTIME},
|
||||
{"FLIPOVERLIMIT", FLIPOVERLIMIT},
|
||||
{"FLIPOVERANG", FLIPOVERANG},
|
||||
{"FLIPOVERSPEED", FLIPOVERSPEED},
|
||||
{"FLIPOVERHEIGHT", FLIPOVERHEIGHT},
|
||||
|
||||
// bubbleshield
|
||||
//{"MAXBUBBLEHEALTH", MAXBUBBLEHEALTH},
|
||||
//{"BUBBLEBUMPCHIP", BUBBLEBUMPCHIP},
|
||||
//{"BUBBLEITMDAMAGE", BUBBLEITMDAMAGE},
|
||||
{"BUBBLEMINWEIGHT", BUBBLEMINWEIGHT},
|
||||
|
||||
// ring visual/audio stuff
|
||||
{"MAXRINGVOLUME", MAXRINGVOLUME},
|
||||
{"MAXRINGTRANSPARENCY", MAXRINGTRANSPARENCY},
|
||||
{"MINRINGVOLUME", MINRINGVOLUME},
|
||||
{"MINRINGTRANSPARENCY", MINRINGTRANSPARENCY},
|
||||
{"RINGVOLUMECOLLECTPENALTY", RINGVOLUMECOLLECTPENALTY},
|
||||
{"RINGTRANSPARENCYCOLLECTPENALTY", RINGTRANSPARENCYCOLLECTPENALTY},
|
||||
{"RINGVOLUMEUSEPENALTY", RINGVOLUMEUSEPENALTY},
|
||||
{"RINGTRANSPARENCYUSEPENALTY", RINGTRANSPARENCYUSEPENALTY},
|
||||
{"RINGVOLUMEREGEN", RINGVOLUMEREGEN},
|
||||
{"RINGTRANSPARENCYREGEN", RINGTRANSPARENCYREGEN},
|
||||
|
||||
// bumpsparktype_t
|
||||
{"BUMPSPARK_NONE", BUMPSPARK_NONE},
|
||||
{"BUMPSPARK_NOCHARGE", BUMPSPARK_NOCHARGE},
|
||||
{"BUMPSPARK_RESET100", BUMPSPARK_RESET100},
|
||||
{"BUMPSPARK_ALL", BUMPSPARK_ALL},
|
||||
|
||||
{NULL,0}
|
||||
};
|
||||
|
|
|
|||
100
src/g_demo.c
100
src/g_demo.c
|
|
@ -1175,6 +1175,8 @@ void G_ReadDemoExtraData(void)
|
|||
demobuf.p = G_ReadRawExtraData(&extra, demobuf.p, demo.version);
|
||||
p = extra.playernum;
|
||||
|
||||
player_t *player = &players[p];
|
||||
|
||||
if (p == DW_END)
|
||||
break;
|
||||
|
||||
|
|
@ -1199,42 +1201,42 @@ void G_ReadDemoExtraData(void)
|
|||
G_AddPlayer(extra.playernum, extra.playernum);
|
||||
}
|
||||
|
||||
players[p].bot = extra.joindata.bot;
|
||||
if (players[p].bot)
|
||||
player->bot = extra.joindata.bot;
|
||||
if (player->bot)
|
||||
{
|
||||
players[p].botvars.difficulty = extra.joindata.difficulty;
|
||||
players[p].botvars.diffincrease = extra.joindata.diffincrease; // needed to avoid having to duplicate logic
|
||||
players[p].botvars.rival = extra.joindata.rival;
|
||||
player->botvars.difficulty = extra.joindata.difficulty;
|
||||
player->botvars.diffincrease = extra.joindata.diffincrease; // needed to avoid having to duplicate logic
|
||||
player->botvars.rival = extra.joindata.rival;
|
||||
}
|
||||
}
|
||||
if (extra.flags & DXD_PLAYSTATE)
|
||||
{
|
||||
switch (extra.playstate) {
|
||||
case DXD_PST_PLAYING:
|
||||
if (players[p].spectator == true)
|
||||
if (player->spectator == true)
|
||||
{
|
||||
if (players[p].bot)
|
||||
if (player->bot)
|
||||
{
|
||||
players[p].spectator = false;
|
||||
player->spectator = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
players[p].pflags |= PF_WANTSTOJOIN;
|
||||
player->pflags |= PF_WANTSTOJOIN;
|
||||
}
|
||||
}
|
||||
//CONS_Printf("player %s is despectating on tic %d\n", player_names[p], leveltime);
|
||||
break;
|
||||
|
||||
case DXD_PST_SPECTATING:
|
||||
if (players[p].spectator)
|
||||
if (player->spectator)
|
||||
{
|
||||
players[p].pflags &= ~PF_WANTSTOJOIN;
|
||||
player->pflags &= ~PF_WANTSTOJOIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (players[p].mo)
|
||||
if (player->mo)
|
||||
{
|
||||
P_DamageMobj(players[p].mo, NULL, NULL, 1, DMG_SPECTATOR);
|
||||
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_SPECTATOR);
|
||||
}
|
||||
P_SetPlayerSpectator(p);
|
||||
}
|
||||
|
|
@ -1246,7 +1248,7 @@ void G_ReadDemoExtraData(void)
|
|||
break;
|
||||
}
|
||||
|
||||
G_ResetViews();
|
||||
G_ResetViews(false); // dont reset our freecam pls thx!
|
||||
|
||||
// maybe these are necessary?
|
||||
K_CheckBumpers();
|
||||
|
|
@ -1262,31 +1264,31 @@ void G_ReadDemoExtraData(void)
|
|||
// Skin
|
||||
SetPlayerSkin(p, extra.skinname);
|
||||
|
||||
if (stricmp(skins[players[p].skin].name, extra.skinname) != 0)
|
||||
if (stricmp(skins[player->skin].name, extra.skinname) != 0)
|
||||
FindClosestSkinForStats(p, extra.kartspeed, extra.kartweight);
|
||||
|
||||
// Voice
|
||||
const INT32 vce = R_FindIDForVoice(&skins[players[p].skin], extra.voicename);
|
||||
const INT32 vce = R_FindIDForVoice(&skins[player->skin], extra.voicename);
|
||||
|
||||
if (vce == MAXSKINVOICES)
|
||||
{
|
||||
// The above function didn't find a voice, so we'll just fall back
|
||||
// to the skin's voice.
|
||||
players[p].voice_id = 0;
|
||||
player->voice_id = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
players[p].voice_id = (UINT16)vce;
|
||||
player->voice_id = (UINT16)vce;
|
||||
}
|
||||
|
||||
if (!P_MobjWasRemoved(players[p].mo))
|
||||
if (!P_MobjWasRemoved(player->mo))
|
||||
{
|
||||
// This player's mobj exists. So, attach the voice to the mobj!
|
||||
players[p].mo->voice = &skins[players[p].skin].voices[players[p].voice_id];
|
||||
player->mo->voice = &skins[player->skin].voices[player->voice_id];
|
||||
}
|
||||
|
||||
players[p].kartspeed = extra.kartspeed;
|
||||
players[p].kartweight = extra.kartweight;
|
||||
player->kartspeed = extra.kartspeed;
|
||||
player->kartweight = extra.kartweight;
|
||||
}
|
||||
if (extra.flags & DXD_COLOR)
|
||||
{
|
||||
|
|
@ -1294,9 +1296,9 @@ void G_ReadDemoExtraData(void)
|
|||
for (i = 0; i < numskincolors; i++)
|
||||
if (!stricmp(skincolors[i].name, extra.colorname)) // SRB2kart
|
||||
{
|
||||
players[p].skincolor = i;
|
||||
if (players[p].mo)
|
||||
players[p].mo->color = i;
|
||||
player->skincolor = i;
|
||||
if (player->mo)
|
||||
player->mo->color = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1309,16 +1311,16 @@ void G_ReadDemoExtraData(void)
|
|||
for (i = 0; i < numskincolors +2; i++) // +2 because of Match and Opposite
|
||||
if (!stricmp(Followercolor_cons_t[i].strvalue, extra.followercolor))
|
||||
{
|
||||
players[p].followercolor = i;
|
||||
player->followercolor = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (extra.flags & DXD_RESPAWN)
|
||||
{
|
||||
if (players[p].mo)
|
||||
if (player->mo)
|
||||
{
|
||||
// Is this how this should work..?
|
||||
P_DamageMobj(players[p].mo, NULL, NULL, 1, DMG_INSTAKILL);
|
||||
P_DamageMobj(player->mo, NULL, NULL, 1, DMG_INSTAKILL);
|
||||
}
|
||||
}
|
||||
if (extra.flags & DXD_WEAPONPREF)
|
||||
|
|
@ -2437,7 +2439,7 @@ void G_ConfirmRewind(tic_t rewindtime)
|
|||
displayplayers[2] = olddp3;
|
||||
displayplayers[3] = olddp4;
|
||||
R_ExecuteSetViewSize();
|
||||
G_ResetViews();
|
||||
G_ResetViews(true);
|
||||
|
||||
for (i = splitscreen; i >= 0; i--)
|
||||
P_ResetCamera(&players[displayplayers[i]], &camera[i]);
|
||||
|
|
@ -3803,36 +3805,38 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
{
|
||||
demoplayer_t *plr = &header.playerdata[pnum];
|
||||
UINT8 p = plr->playernum;
|
||||
player_t *player = &players[p];
|
||||
|
||||
|
||||
if (!playeringame[displayplayers[0]] || players[displayplayers[0]].spectator)
|
||||
displayplayers[0] = consoleplayer = serverplayer = p;
|
||||
|
||||
G_AddPlayer(p, p);
|
||||
players[p].spectator = !!(plr->flags & DEMO_SPECTATOR);
|
||||
player->spectator = !!(plr->flags & DEMO_SPECTATOR);
|
||||
|
||||
if (plr->flags & DEMO_KICKSTART)
|
||||
players[p].pflags |= PF_KICKSTARTACCEL;
|
||||
player->pflags |= PF_KICKSTARTACCEL;
|
||||
else
|
||||
players[p].pflags &= ~PF_KICKSTARTACCEL;
|
||||
player->pflags &= ~PF_KICKSTARTACCEL;
|
||||
|
||||
if (plr->flags & DEMO_SHRINKME)
|
||||
players[p].pflags |= PF_SHRINKME;
|
||||
player->pflags |= PF_SHRINKME;
|
||||
else
|
||||
players[p].pflags &= ~PF_SHRINKME;
|
||||
player->pflags &= ~PF_SHRINKME;
|
||||
|
||||
K_UpdateShrinkCheat(&players[p]);
|
||||
K_UpdateShrinkCheat(player);
|
||||
|
||||
if ((players[p].bot = !!(plr->flags & DEMO_BOT)) == true)
|
||||
if ((player->bot = !!(plr->flags & DEMO_BOT)) == true)
|
||||
{
|
||||
players[p].botvars.difficulty = plr->bot.difficulty;
|
||||
players[p].botvars.diffincrease = plr->bot.diffincrease; // needed to avoid having to duplicate logic
|
||||
players[p].botvars.rival = plr->bot.rival;
|
||||
player->botvars.difficulty = plr->bot.difficulty;
|
||||
player->botvars.diffincrease = plr->bot.diffincrease; // needed to avoid having to duplicate logic
|
||||
player->botvars.rival = plr->bot.rival;
|
||||
}
|
||||
|
||||
// Name
|
||||
strcpy(player_names[p], plr->name);
|
||||
|
||||
/*if (players[p].spectator)
|
||||
/*if (player->spectator)
|
||||
{
|
||||
CONS_Printf("player %s is spectator at start\n", player_names[p]);
|
||||
}*/
|
||||
|
|
@ -3844,7 +3848,7 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
for (i = 0; i < numskincolors; i++)
|
||||
if (!stricmp(skincolors[i].name, plr->color)) // SRB2kart
|
||||
{
|
||||
players[p].skincolor = i;
|
||||
player->skincolor = i;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -3852,17 +3856,17 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
// We'll only assign IDs, since the actual voice assignment happens during
|
||||
// player spawn.
|
||||
|
||||
const INT32 vce = R_FindIDForVoice(&skins[players[p].skin], plr->voice);
|
||||
const INT32 vce = R_FindIDForVoice(&skins[player->skin], plr->voice);
|
||||
|
||||
if (vce == MAXSKINVOICES)
|
||||
{
|
||||
// The above function didn't find a voice, so we'll just fall back to
|
||||
// the skin's voice.
|
||||
players[p].voice_id = 0;
|
||||
player->voice_id = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
players[p].voice_id = (UINT16)vce;
|
||||
player->voice_id = (UINT16)vce;
|
||||
}
|
||||
|
||||
// Follower
|
||||
|
|
@ -3872,23 +3876,23 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
for (i = 0; i < numskincolors +2; i++) // +2 because of Match and Opposite
|
||||
if (!stricmp(Followercolor_cons_t[i].strvalue, plr->followercolor))
|
||||
{
|
||||
players[p].followercolor = i;
|
||||
player->followercolor = i;
|
||||
break;
|
||||
}
|
||||
|
||||
// Score, since Kart uses this to determine where you start on the map
|
||||
players[p].score = plr->score;
|
||||
player->score = plr->score;
|
||||
|
||||
// Power Levels
|
||||
clientpowerlevels[p][gametype == GT_BATTLE ? PWRLV_BATTLE : PWRLV_RACE] = plr->powerlevel;
|
||||
|
||||
// Kart stats (set later)
|
||||
|
||||
if (stricmp(skins[players[p].skin].name, plr->skin) != 0)
|
||||
if (stricmp(skins[player->skin].name, plr->skin) != 0)
|
||||
FindClosestSkinForStats(p, plr->kartspeed, plr->kartweight);
|
||||
|
||||
// Followitem
|
||||
players[p].followitem = plr->followitem;
|
||||
player->followitem = plr->followitem;
|
||||
}
|
||||
|
||||
// end of player read (the 0xFF marker)
|
||||
|
|
|
|||
11
src/g_game.c
11
src/g_game.c
|
|
@ -2316,11 +2316,16 @@ void G_FixCamera(UINT8 view)
|
|||
// Increment a viewpoint by offset from the current player. A negative value
|
||||
// decrements.
|
||||
//
|
||||
void G_AdjustView(UINT8 viewnum, INT32 offset, boolean onlyactive)
|
||||
void G_AdjustViewEx(UINT8 viewnum, INT32 offset, boolean onlyactive, boolean resetfreecam)
|
||||
{
|
||||
INT32 *displayplayerp, oldview;
|
||||
displayplayerp = &displayplayers[viewnum-1];
|
||||
oldview = (*displayplayerp);
|
||||
|
||||
// turn off the freecam
|
||||
if (resetfreecam)
|
||||
camera[viewnum-1].freecam = false;
|
||||
|
||||
G_ResetView(viewnum, ( (*displayplayerp) + offset ), onlyactive);
|
||||
|
||||
// If no other view could be found, go back to what we had.
|
||||
|
|
@ -2333,7 +2338,7 @@ void G_AdjustView(UINT8 viewnum, INT32 offset, boolean onlyactive)
|
|||
// Ensures all viewpoints are valid
|
||||
// Also demotes splitscreen down to one player.
|
||||
//
|
||||
void G_ResetViews(void)
|
||||
void G_ResetViews(boolean resetfreecam)
|
||||
{
|
||||
UINT8 splits;
|
||||
UINT8 viewd;
|
||||
|
|
@ -2357,7 +2362,7 @@ void G_ResetViews(void)
|
|||
*/
|
||||
for (viewd = 1; viewd <= splits; ++viewd)
|
||||
{
|
||||
G_AdjustView(viewd, 0, false);
|
||||
G_AdjustViewEx(viewd, 0, false, resetfreecam);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -226,9 +226,10 @@ INT32 G_FindView(INT32 startview, UINT8 viewnum, boolean onlyactive, boolean rev
|
|||
INT32 G_CountPlayersPotentiallyViewable(boolean active);
|
||||
|
||||
void G_FixCamera(UINT8 view);
|
||||
void G_ResetViews(void);
|
||||
void G_ResetViews(boolean resetfreecam);
|
||||
void G_ResetView(UINT8 viewnum, INT32 playernum, boolean onlyactive);
|
||||
void G_AdjustView(UINT8 viewnum, INT32 offset, boolean onlyactive);
|
||||
void G_AdjustViewEx(UINT8 viewnum, INT32 offset, boolean onlyactive, boolean resetfreecam);
|
||||
#define G_AdjustView(v,o,oa) G_AdjustViewEx(v,o,oa, true)
|
||||
|
||||
void G_AddPlayer(INT32 playernum, INT32 console);
|
||||
|
||||
|
|
|
|||
|
|
@ -8970,6 +8970,9 @@ boolean K_AltShrinkArrowBulletCondition(player_t *player)
|
|||
if (!player)
|
||||
return false; // NULL player means there's no way we can BE an arrow bullet.
|
||||
|
||||
if (!K_IsAltShrunk(player)) // Not Alt. Shrunk!
|
||||
return false;
|
||||
|
||||
// Only if you're at or above the threshold percentage!
|
||||
return (K_GetSpeedPercentage(player) >= cv_kartaltshrink_arrowbulletthres.value);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,13 +28,12 @@ If states are ever added or removed
|
|||
Make sure this matches the actual number of states
|
||||
*/
|
||||
#define KART_NUMINVSPARKLESANIM 12
|
||||
#define BASEINVINTIME (10 * TICRATE)
|
||||
#define MININVINTIME (7 * TICRATE)
|
||||
|
||||
#define GROW_SCALE ((3*FRACUNIT)/2)
|
||||
#define SHRINK_SCALE ((6*FRACUNIT)/8)
|
||||
|
||||
#define BASEINVINTIME (10 * TICRATE)
|
||||
#define MININVINTIME (7 * TICRATE)
|
||||
|
||||
#define AUTORESPAWN_TIME (TICRATE/2)
|
||||
#define AUTORESPAWN_THRESHOLD (TICRATE/4)
|
||||
|
||||
|
|
|
|||
|
|
@ -4520,6 +4520,17 @@ static int lib_kMomentum3D(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kMissileOrKartItem(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
|
||||
if (!mo)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
|
||||
lua_pushboolean(L, K_IsMissileOrKartItem(mo));
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kAddNewScoreboardMod(lua_State *L)
|
||||
{
|
||||
const char *modname = luaL_checkstring(L, 1);
|
||||
|
|
@ -5536,6 +5547,9 @@ static luaL_Reg lib[] = {
|
|||
{"K_PlayerCanPunt", lib_kPlayerCanPunt},
|
||||
{"K_Momentum3D", lib_kMomentum3D},
|
||||
|
||||
// kart stuff that's in other places for some reason
|
||||
{"K_IsMissileOrKartItem", lib_kMissileOrKartItem},
|
||||
|
||||
// k_hud
|
||||
{"K_AddNewScoreboardMod", lib_kAddNewScoreboardMod},
|
||||
{"K_SetScoreboardModStatus", lib_kSetScoreboardModStatus},
|
||||
|
|
|
|||
|
|
@ -152,7 +152,8 @@ enum cameraf {
|
|||
camera_momz,
|
||||
camera_pan,
|
||||
camera_pitch,
|
||||
camera_pnum
|
||||
camera_pnum,
|
||||
camera_freecam,
|
||||
};
|
||||
|
||||
|
||||
|
|
@ -174,6 +175,7 @@ static const char *const camera_opt[] = {
|
|||
"pan",
|
||||
"pitch",
|
||||
"pnum",
|
||||
"freecam",
|
||||
NULL};
|
||||
|
||||
enum hudpatch {
|
||||
|
|
@ -332,10 +334,43 @@ static int camera_get(lua_State *L)
|
|||
case camera_pnum:
|
||||
lua_pushinteger(L, camnum);
|
||||
break;
|
||||
case camera_freecam:
|
||||
lua_pushboolean(L, cam->freecam);
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int lib_getCamera(lua_State *L)
|
||||
{
|
||||
// No cameras on dedicated
|
||||
if (dedicated)
|
||||
return 0;
|
||||
|
||||
if (lua_type(L, 2) == LUA_TNUMBER)
|
||||
{
|
||||
int i = lua_tonumber(L, 2);
|
||||
|
||||
if (i < 0 || i > splitscreen)
|
||||
return 0;
|
||||
|
||||
LUA_PushUserdata(L, &camera[i], META_CAMERA);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_lenCamera(lua_State *L)
|
||||
{
|
||||
if (dedicated)
|
||||
lua_pushinteger(L, 0);
|
||||
else
|
||||
lua_pushinteger(L, splitscreen+1); // splitscreen == 0 -> 1 active camera, splitscreen == 1 -> 2 cameras and so on
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//
|
||||
// lib_draw
|
||||
//
|
||||
|
|
@ -1671,6 +1706,16 @@ int LUA_HudLib(lua_State *L)
|
|||
lua_setfield(L, -2, "__index");
|
||||
lua_pop(L,1);
|
||||
|
||||
lua_newuserdata(L, 0);
|
||||
lua_createtable(L, 0, 2);
|
||||
lua_pushcfunction(L, lib_getCamera);
|
||||
lua_setfield(L, -2, "__index");
|
||||
|
||||
lua_pushcfunction(L, lib_lenCamera);
|
||||
lua_setfield(L, -2, "__len");
|
||||
lua_setmetatable(L, -2);
|
||||
lua_setglobal(L, "cameras");
|
||||
|
||||
luaL_register(L, "hud", lib_hud);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
10
src/p_mobj.c
10
src/p_mobj.c
|
|
@ -1112,6 +1112,7 @@ static void P_PlayerFlip(mobj_t *mo)
|
|||
fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||
{
|
||||
fixed_t gravityadd = 0;
|
||||
fixed_t gravitymul = FRACUNIT;
|
||||
sector_t *gravsector = NULL; // Custom gravity
|
||||
boolean goopgravity = false;
|
||||
boolean wasflip;
|
||||
|
|
@ -1119,6 +1120,8 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
I_Assert(mo != NULL);
|
||||
I_Assert(!P_MobjWasRemoved(mo));
|
||||
|
||||
gravitymul = mo->scale;
|
||||
|
||||
wasflip = (mo->eflags & MFE_VERTICALFLIP) != 0;
|
||||
mo->eflags &= ~MFE_VERTICALFLIP;
|
||||
|
||||
|
|
@ -1179,6 +1182,11 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
{
|
||||
gravityadd = 0;
|
||||
}
|
||||
|
||||
if (K_IsAltShrunk(mo->player))
|
||||
{
|
||||
gravitymul = mapobjectscale;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1263,7 +1271,7 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
|||
if (goopgravity)
|
||||
gravityadd = -gravityadd/5;
|
||||
|
||||
gravityadd = FixedMul(gravityadd, mo->scale);
|
||||
gravityadd = FixedMul(gravityadd, gravitymul);
|
||||
|
||||
return gravityadd;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1216,7 +1216,8 @@ static void R_SetupAimingFrame(int s)
|
|||
player_t *player = &players[displayplayers[s]];
|
||||
camera_t *thiscam = &camera[s];
|
||||
|
||||
if (player->awayviewtics)
|
||||
if (player->awayviewtics && player->awayviewmobj
|
||||
&& thiscam && !thiscam->freecam) // dont force this if we wanna freecam!
|
||||
{
|
||||
newview->aim = player->awayviewaiming;
|
||||
newview->angle = player->awayviewmobj->angle;
|
||||
|
|
@ -1265,10 +1266,10 @@ void R_SetupFrame(int s, boolean skybox)
|
|||
|
||||
R_SetupAimingFrame(s);
|
||||
|
||||
if (player->awayviewtics)
|
||||
if (player->awayviewtics && player->awayviewmobj // cut-away view stuff
|
||||
&& thiscam && !thiscam->freecam) // dont force this when we wanna freecam!
|
||||
{
|
||||
// cut-away view stuff
|
||||
r_viewmobj = player->awayviewmobj; // should be a MT_ALTVIEWMAN
|
||||
r_viewmobj = player->awayviewmobj; // should be a MT_ALTVIEWMAN whos altview man?
|
||||
I_Assert(r_viewmobj != NULL);
|
||||
|
||||
newview->x = r_viewmobj->x;
|
||||
|
|
@ -1476,7 +1477,7 @@ static void R_PortalFrame(portal_t *portal)
|
|||
}
|
||||
}
|
||||
|
||||
static void Mask_Pre (maskcount_t* m)
|
||||
static void Mask_Pre(maskcount_t* m)
|
||||
{
|
||||
m->drawsegs[0] = ds_p - drawsegs;
|
||||
m->vissprites[0] = visspritecount;
|
||||
|
|
@ -1486,7 +1487,7 @@ static void Mask_Pre (maskcount_t* m)
|
|||
m->viewsector = viewsector;
|
||||
}
|
||||
|
||||
static void Mask_Post (maskcount_t* m)
|
||||
static void Mask_Post(maskcount_t* m)
|
||||
{
|
||||
m->drawsegs[1] = ds_p - drawsegs;
|
||||
m->vissprites[1] = visspritecount;
|
||||
|
|
|
|||
|
|
@ -2125,7 +2125,7 @@ FUNCIERROR void ATTRNORETURN I_Error(const char *error, ...)
|
|||
W_Shutdown();
|
||||
|
||||
#if defined (PARANOIA) || defined (DEVELOP)
|
||||
*(INT32 *)0 = 4; //Alam: Debug!
|
||||
*(volatile INT32 *)0 = 4; //Alam: Debug!
|
||||
#endif
|
||||
|
||||
exit(-1);
|
||||
|
|
|
|||
Loading…
Reference in a new issue