diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 3a8013c12..52cc7c211 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -547,6 +547,7 @@ consvar_t cv_autobalance = CVAR_INIT ("autobalance", "Off", CV_SAVE|CV_NETVAR|CV consvar_t cv_teamscramble = CVAR_INIT ("teamscramble", "Off", CV_SAVE|CV_NETVAR|CV_CALL|CV_NOINIT, teamscramble_cons_t, TeamScramble_OnChange); consvar_t cv_scrambleonchange = CVAR_INIT ("scrambleonchange", "Off", CV_SAVE|CV_NETVAR, teamscramble_cons_t, NULL); +consvar_t cv_friendlyfire = CVAR_INIT ("friendlyfire", "Off", CV_NETVAR|CV_NOSHOWHELP, CV_OnOff, NULL); consvar_t cv_itemfinder = CVAR_INIT ("itemfinder", "Off", CV_CALL|CV_NOSHOWHELP, CV_OnOff, ItemFinder_OnChange); // Scoring type options @@ -837,6 +838,7 @@ void D_RegisterServerCommands(void) CV_RegisterVar(&cv_itemrespawn); // misc + CV_RegisterVar(&cv_friendlyfire); CV_RegisterVar(&cv_pointlimit); CV_RegisterVar(&cv_numlaps); diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 7d1abb725..352a13faa 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -1168,6 +1168,26 @@ static int lib_pSpawnShadowMobj(lua_State *L) // P_USER //////////// +static int lib_pGetPlayerHeight(lua_State *L) +{ + player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + //HUDSAFE + if (!player) + return LUA_ErrInvalid(L, "player_t"); + lua_pushfixed(L, P_GetPlayerHeight(player)); + return 1; +} + +static int lib_pGetPlayerSpinHeight(lua_State *L) +{ + player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + //HUDSAFE + if (!player) + return LUA_ErrInvalid(L, "player_t"); + lua_pushfixed(L, P_GetPlayerSpinHeight(player)); + return 1; +} + static int lib_pAddPlayerScore(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -4165,6 +4185,8 @@ static luaL_Reg lib[] = { {"P_SpawnShadowMobj",lib_pSpawnShadowMobj}, // p_user + {"P_GetPlayerHeight",lib_pGetPlayerHeight}, + {"P_GetPlayerSpinHeight",lib_pGetPlayerSpinHeight}, {"P_AddPlayerScore",lib_pAddPlayerScore}, {"P_PlayerInPain",lib_pPlayerInPain}, {"P_ResetPlayer",lib_pResetPlayer}, diff --git a/src/lua_hudlib.c b/src/lua_hudlib.c index 2cd3e4592..5419566df 100644 --- a/src/lua_hudlib.c +++ b/src/lua_hudlib.c @@ -1059,10 +1059,25 @@ static int libd_getColormap(lua_State *L) else if (lua_type(L, 1) == LUA_TNUMBER) // skin number { skinnum = (INT32)luaL_checkinteger(L, 1); - if (skinnum >= MAXSKINS) - return luaL_error(L, "skin number %d is out of range (>%d)", skinnum, MAXSKINS-1); - else if (skinnum < 0 && skinnum > TC_DEFAULT) - return luaL_error(L, "translation colormap index is out of range"); + + if (lua_compatmode) + { + if (skinnum >= MAXSKINS) + return luaL_error(L, "skin number %d is out of range (>%d)", skinnum, MAXSKINS-1); + else if (skinnum < 0 && skinnum > TC_DEFAULT) + { + // Why clamp you wonder? Using OG v1's trick causes a sigsev :p + skinnum = CLAMP(skinnum, 0, TC_DEFAULT); + } + } + else + { + if (skinnum >= MAXSKINS) + return luaL_error(L, "skin number %d is out of range (>%d)", skinnum, MAXSKINS-1); + else if (skinnum < 0 && skinnum > TC_DEFAULT) + return luaL_error(L, "translation colormap index is out of range"); + } + } else // skin name { diff --git a/src/p_local.h b/src/p_local.h index 25c9c94c4..4076b7a87 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -178,6 +178,8 @@ boolean P_PlayerInPain(player_t *player); void P_ResetPlayer(player_t *player); boolean P_PlayerCanDamage(player_t *player, mobj_t *thing); +fixed_t P_GetPlayerHeight(player_t *player); +fixed_t P_GetPlayerSpinHeight(player_t *player); boolean P_IsLocalPlayer(player_t *player); boolean P_IsMachineLocalPlayer(player_t *player); boolean P_IsDisplayPlayer(player_t *player); diff --git a/src/p_user.c b/src/p_user.c index 89d278171..87adc94c1 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -1076,6 +1076,28 @@ void P_SetObjectMomZ(mobj_t *mo, fixed_t value, boolean relative) mo->momz = value; } +// +// P_GetPlayerHeight +// +// Returns the height +// of the player. +// +fixed_t P_GetPlayerHeight(player_t *player) +{ + return FixedMul(player->mo->info->height, player->mo->scale); +} + +// +// P_GetPlayerSpinHeight +// +// Returns the 'spin height' +// of the player. +// +fixed_t P_GetPlayerSpinHeight(player_t *player) +{ + return FixedMul(FixedMul(player->mo->info->height, player->mo->scale),2*FRACUNIT/3); +} + // // P_IsMachineLocalPlayer //