2014-03-15 16:59:03 +00:00
// SONIC ROBO BLAST 2
//-----------------------------------------------------------------------------
2016-05-18 00:42:11 +00:00
// Copyright (C) 2012-2016 by John "JTE" Muniz.
2023-03-31 12:53:31 +00:00
// Copyright (C) 2012-2023 by Sonic Team Junior.
2014-03-15 16:59:03 +00:00
//
// This program is free software distributed under the
// terms of the GNU General Public License, version 2.
// See the 'LICENSE' file for more details.
//-----------------------------------------------------------------------------
/// \file lua_playerlib.c
/// \brief player object library for Lua scripting
# include "doomdef.h"
# include "fastcmp.h"
# include "p_mobj.h"
# include "d_player.h"
# include "g_game.h"
# include "p_local.h"
# include "lua_script.h"
# include "lua_libs.h"
# include "lua_hud.h" // hud_running errors
2020-07-17 05:08:38 +00:00
# include "lua_hook.h" // hook_cmd_running errors
2014-03-15 16:59:03 +00:00
static int lib_iteratePlayers ( lua_State * L )
{
INT32 i = - 1 ;
if ( lua_gettop ( L ) < 2 )
{
//return luaL_error(L, "Don't call players.iterate() directly, use it as 'for player in players.iterate do <block> end'.");
lua_pushcfunction ( L , lib_iteratePlayers ) ;
return 1 ;
}
lua_settop ( L , 2 ) ;
lua_remove ( L , 1 ) ; // state is unused.
if ( ! lua_isnil ( L , 1 ) )
i = ( INT32 ) ( * ( ( player_t * * ) luaL_checkudata ( L , 1 , META_PLAYER ) ) - players ) ;
for ( i + + ; i < MAXPLAYERS ; i + + )
{
if ( ! playeringame [ i ] )
continue ;
if ( ! players [ i ] . mo )
continue ;
LUA_PushUserdata ( L , & players [ i ] , META_PLAYER ) ;
return 1 ;
}
return 0 ;
}
static int lib_getPlayer ( lua_State * L )
{
const char * field ;
// i -> players[i]
if ( lua_type ( L , 2 ) = = LUA_TNUMBER )
{
lua_Integer i = luaL_checkinteger ( L , 2 ) ;
if ( i < 0 | | i > = MAXPLAYERS )
2016-05-01 21:14:42 +00:00
return luaL_error ( L , " players[] index %d out of range (0 - %d) " , i, MAXPLAYERS-1) ;
2014-03-15 16:59:03 +00:00
if ( ! playeringame [ i ] )
return 0 ;
if ( ! players [ i ] . mo )
return 0 ;
LUA_PushUserdata ( L , & players [ i ] , META_PLAYER ) ;
return 1 ;
}
field = luaL_checkstring ( L , 2 ) ;
if ( fastcmp ( field , " iterate " ) )
{
lua_pushcfunction ( L , lib_iteratePlayers ) ;
return 1 ;
}
return 0 ;
}
// #players -> MAXPLAYERS
static int lib_lenPlayer ( lua_State * L )
{
lua_pushinteger ( L , MAXPLAYERS ) ;
return 1 ;
}
2023-06-18 16:05:16 +00:00
enum player_e
{
player_valid ,
player_name ,
player_realmo ,
player_mo ,
player_cmd ,
player_playerstate ,
player_camerascale ,
player_shieldscale ,
player_viewz ,
player_viewheight ,
player_deltaviewheight ,
player_bob ,
player_viewrollangle ,
player_aiming ,
player_drawangle ,
player_rings ,
player_spheres ,
player_pity ,
player_currentweapon ,
player_ringweapons ,
player_ammoremoval ,
player_ammoremovaltimer ,
player_ammoremovalweapon ,
player_powers ,
player_pflags ,
player_panim ,
player_flashcount ,
player_flashpal ,
player_skincolor ,
player_skin ,
player_availabilities ,
player_score ,
player_dashspeed ,
player_normalspeed ,
player_runspeed ,
player_thrustfactor ,
player_accelstart ,
player_acceleration ,
player_charability ,
player_charability2 ,
player_charflags ,
player_thokitem ,
player_spinitem ,
player_revitem ,
player_followitem ,
player_followmobj ,
player_actionspd ,
player_mindash ,
player_maxdash ,
player_jumpfactor ,
player_height ,
player_spinheight ,
player_lives ,
player_continues ,
player_xtralife ,
player_gotcontinue ,
player_speed ,
player_secondjump ,
player_fly1 ,
player_scoreadd ,
player_glidetime ,
player_climbing ,
player_deadtimer ,
player_exiting ,
player_homing ,
player_dashmode ,
player_skidtime ,
player_cmomx ,
player_cmomy ,
player_rmomx ,
player_rmomy ,
player_numboxes ,
player_totalring ,
player_realtime ,
player_laps ,
player_ctfteam ,
player_gotflag ,
player_weapondelay ,
player_tossdelay ,
player_starpostx ,
player_starposty ,
player_starpostz ,
player_starpostnum ,
player_starposttime ,
player_starpostangle ,
player_starpostscale ,
player_angle_pos ,
player_old_angle_pos ,
player_axis1 ,
player_axis2 ,
player_bumpertime ,
player_flyangle ,
player_drilltimer ,
player_linkcount ,
player_linktimer ,
player_anotherflyangle ,
player_nightstime ,
player_drillmeter ,
player_drilldelay ,
player_bonustime ,
player_capsule ,
player_drone ,
player_oldscale ,
player_mare ,
player_marelap ,
player_marebonuslap ,
player_marebegunat ,
player_startedtime ,
player_finishedtime ,
player_lapbegunat ,
player_lapstartedtime ,
player_finishedspheres ,
player_finishedrings ,
player_marescore ,
player_lastmarescore ,
player_totalmarescore ,
player_lastmare ,
player_lastmarelap ,
player_lastmarebonuslap ,
player_totalmarelap ,
player_totalmarebonuslap ,
player_maxlink ,
player_texttimer ,
player_textvar ,
player_lastsidehit ,
player_lastlinehit ,
player_losstime ,
player_timeshit ,
player_onconveyor ,
player_awayviewmobj ,
player_awayviewtics ,
player_awayviewaiming ,
player_spectator ,
player_outofcoop ,
player_bot ,
player_botleader ,
player_lastbuttons ,
player_blocked ,
player_jointime ,
player_quittime ,
# ifdef HWRENDER
player_fovadd ,
# endif
} ;
static const char * const player_opt [ ] = {
" valid " ,
" name " ,
" realmo " ,
" mo " ,
" cmd " ,
" playerstate " ,
" camerascale " ,
" shieldscale " ,
" viewz " ,
" viewheight " ,
" deltaviewheight " ,
" bob " ,
" viewrollangle " ,
" aiming " ,
" drawangle " ,
" rings " ,
" spheres " ,
" pity " ,
" currentweapon " ,
" ringweapons " ,
" ammoremoval " ,
" ammoremovaltimer " ,
" ammoremovalweapon " ,
" powers " ,
" pflags " ,
" panim " ,
" flashcount " ,
" flashpal " ,
" skincolor " ,
" skin " ,
" availabilities " ,
" score " ,
" dashspeed " ,
" normalspeed " ,
" runspeed " ,
" thrustfactor " ,
" accelstart " ,
" acceleration " ,
" charability " ,
" charability2 " ,
" charflags " ,
" thokitem " ,
" spinitem " ,
" revitem " ,
" followitem " ,
" followmobj " ,
" actionspd " ,
" mindash " ,
" maxdash " ,
" jumpfactor " ,
" height " ,
" spinheight " ,
" lives " ,
" continues " ,
" xtralife " ,
" gotcontinue " ,
" speed " ,
" secondjump " ,
" fly1 " ,
" scoreadd " ,
" glidetime " ,
" climbing " ,
" deadtimer " ,
" exiting " ,
" homing " ,
" dashmode " ,
" skidtime " ,
" cmomx " ,
" cmomy " ,
" rmomx " ,
" rmomy " ,
" numboxes " ,
" totalring " ,
" realtime " ,
" laps " ,
" ctfteam " ,
" gotflag " ,
" weapondelay " ,
" tossdelay " ,
" starpostx " ,
" starposty " ,
" starpostz " ,
" starpostnum " ,
" starposttime " ,
" starpostangle " ,
" starpostscale " ,
" angle_pos " ,
" old_angle_pos " ,
" axis1 " ,
" axis2 " ,
" bumpertime " ,
" flyangle " ,
" drilltimer " ,
" linkcount " ,
" linktimer " ,
" anotherflyangle " ,
" nightstime " ,
" drillmeter " ,
" drilldelay " ,
" bonustime " ,
" capsule " ,
" drone " ,
" oldscale " ,
" mare " ,
" marelap " ,
" marebonuslap " ,
" marebegunat " ,
" startedtime " ,
" finishedtime " ,
" lapbegunat " ,
" lapstartedtime " ,
" finishedspheres " ,
" finishedrings " ,
" marescore " ,
" lastmarescore " ,
" totalmarescore " ,
" lastmare " ,
" lastmarelap " ,
" lastmarebonuslap " ,
" totalmarelap " ,
" totalmarebonuslap " ,
" maxlink " ,
" texttimer " ,
" textvar " ,
" lastsidehit " ,
" lastlinehit " ,
" losstime " ,
" timeshit " ,
" onconveyor " ,
" awayviewmobj " ,
" awayviewtics " ,
" awayviewaiming " ,
" spectator " ,
" outofcoop " ,
" bot " ,
" botleader " ,
" lastbuttons " ,
" blocked " ,
" jointime " ,
" quittime " ,
# ifdef HWRENDER
" fovadd " ,
# endif
NULL ,
} ;
static int player_fields_ref = LUA_NOREF ;
2014-03-15 16:59:03 +00:00
static int player_get ( lua_State * L )
{
player_t * plr = * ( ( player_t * * ) luaL_checkudata ( L , 1 , META_PLAYER ) ) ;
2023-06-18 16:05:16 +00:00
enum player_e field = Lua_optoption ( L , 2 , - 1 , player_fields_ref ) ;
lua_settop ( L , 2 ) ;
2014-03-15 16:59:03 +00:00
2023-06-18 16:05:16 +00:00
if ( ! plr )
{
if ( field = = player_valid )
{
2014-03-15 16:59:03 +00:00
lua_pushboolean ( L , false ) ;
return 1 ;
}
return LUA_ErrInvalid ( L , " player_t " ) ;
}
2023-06-18 16:05:16 +00:00
switch ( field )
{
case player_valid :
2014-03-15 16:59:03 +00:00
lua_pushboolean ( L , true ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_name :
2014-03-15 16:59:03 +00:00
lua_pushstring ( L , player_names [ plr - players ] ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_realmo :
2020-02-03 18:42:37 +00:00
LUA_PushUserdata ( L , plr - > mo , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
2020-02-03 18:42:37 +00:00
// Kept for backward-compatibility
// Should be fixed to work like "realmo" later
2023-06-18 16:05:16 +00:00
case player_mo :
2014-03-15 16:59:03 +00:00
if ( plr - > spectator )
lua_pushnil ( L ) ;
else
LUA_PushUserdata ( L , plr - > mo , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_cmd :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , & plr - > cmd , META_TICCMD ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_playerstate :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > playerstate ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_camerascale :
2016-09-25 17:21:52 +00:00
lua_pushfixed ( L , plr - > camerascale ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_shieldscale :
2016-09-25 17:21:52 +00:00
lua_pushfixed ( L , plr - > shieldscale ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewz :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > viewz ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewheight :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > viewheight ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_deltaviewheight :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > deltaviewheight ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bob :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > bob ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewrollangle :
2020-01-15 05:29:56 +00:00
lua_pushangle ( L , plr - > viewrollangle ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_aiming :
2015-05-21 03:54:04 +00:00
lua_pushangle ( L , plr - > aiming ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drawangle :
2017-02-05 18:15:20 +00:00
lua_pushangle ( L , plr - > drawangle ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rings :
2015-08-15 20:07:16 +00:00
lua_pushinteger ( L , plr - > rings ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spheres :
2018-06-03 21:41:54 +00:00
lua_pushinteger ( L , plr - > spheres ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_pity :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > pity ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_currentweapon :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > currentweapon ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ringweapons :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > ringweapons ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremoval :
2019-08-26 23:07:17 +00:00
lua_pushinteger ( L , plr - > ammoremoval ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremovaltimer :
2019-08-26 23:07:17 +00:00
lua_pushinteger ( L , plr - > ammoremovaltimer ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremovalweapon :
2019-08-26 23:07:17 +00:00
lua_pushinteger ( L , plr - > ammoremovalweapon ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_powers :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , plr - > powers , META_POWERS ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_pflags :
2014-03-18 17:56:54 +00:00
lua_pushinteger ( L , plr - > pflags ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_panim :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > panim ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flashcount :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > flashcount ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flashpal :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > flashpal ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_skincolor :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > skincolor ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_skin :
2020-11-25 18:35:36 +00:00
lua_pushinteger ( L , plr - > skin ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_availabilities :
2020-11-25 18:35:36 +00:00
lua_pushinteger ( L , plr - > availabilities ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_score :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > score ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_dashspeed :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > dashspeed ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_normalspeed :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > normalspeed ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_runspeed :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > runspeed ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_thrustfactor :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > thrustfactor ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_accelstart :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > accelstart ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_acceleration :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > acceleration ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charability :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > charability ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charability2 :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > charability2 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charflags :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > charflags ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_thokitem :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > thokitem ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spinitem :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > spinitem ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_revitem :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > revitem ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_followitem :
2017-10-02 13:08:58 +00:00
lua_pushinteger ( L , plr - > followitem ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_followmobj :
2017-10-02 13:08:58 +00:00
LUA_PushUserdata ( L , plr - > followmobj , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_actionspd :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > actionspd ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_mindash :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > mindash ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_maxdash :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > maxdash ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_jumpfactor :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > jumpfactor ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_height :
2016-09-25 17:21:52 +00:00
lua_pushfixed ( L , plr - > height ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spinheight :
2016-09-25 17:21:52 +00:00
lua_pushfixed ( L , plr - > spinheight ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lives :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > lives ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_continues :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > continues ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_xtralife :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > xtralife ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_gotcontinue :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > gotcontinue ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_speed :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > speed ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_secondjump :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > secondjump ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_fly1 :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > fly1 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_scoreadd :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > scoreadd ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_glidetime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > glidetime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_climbing :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > climbing ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_deadtimer :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > deadtimer ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_exiting :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > exiting ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_homing :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > homing ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_dashmode :
2016-01-25 11:47:33 +00:00
lua_pushinteger ( L , plr - > dashmode ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_skidtime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > skidtime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_cmomx :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > cmomx ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_cmomy :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > cmomy ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rmomx :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > rmomx ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rmomy :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > rmomy ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_numboxes :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > numboxes ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalring :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > totalring ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_realtime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > realtime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_laps :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > laps ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ctfteam :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > ctfteam ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_gotflag :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > gotflag ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_weapondelay :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > weapondelay ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_tossdelay :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > tossdelay ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostx :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > starpostx ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starposty :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > starposty ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostz :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > starpostz ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostnum :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > starpostnum ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starposttime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > starposttime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostangle :
2015-05-21 03:54:04 +00:00
lua_pushangle ( L , plr - > starpostangle ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostscale :
2019-09-07 21:11:33 +00:00
lua_pushfixed ( L , plr - > starpostscale ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_angle_pos :
2015-05-21 03:54:04 +00:00
lua_pushangle ( L , plr - > angle_pos ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_old_angle_pos :
2015-05-21 03:54:04 +00:00
lua_pushangle ( L , plr - > old_angle_pos ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_axis1 :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , plr - > axis1 , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_axis2 :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , plr - > axis2 , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bumpertime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > bumpertime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flyangle :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > flyangle ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drilltimer :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > drilltimer ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_linkcount :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > linkcount ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_linktimer :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > linktimer ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_anotherflyangle :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > anotherflyangle ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_nightstime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > nightstime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drillmeter :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > drillmeter ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drilldelay :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > drilldelay ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bonustime :
2014-08-04 03:49:33 +00:00
lua_pushboolean ( L , plr - > bonustime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_capsule :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , plr - > capsule , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drone :
2018-08-10 23:25:49 +00:00
LUA_PushUserdata ( L , plr - > drone , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_oldscale :
2018-08-11 04:49:28 +00:00
lua_pushfixed ( L , plr - > oldscale ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_mare :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > mare ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marelap :
2018-03-30 18:36:49 +00:00
lua_pushinteger ( L , plr - > marelap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marebonuslap :
2018-03-30 18:36:49 +00:00
lua_pushinteger ( L , plr - > marebonuslap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marebegunat :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > marebegunat ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_startedtime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > startedtime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedtime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > finishedtime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lapbegunat :
2018-08-10 21:12:26 +00:00
lua_pushinteger ( L , plr - > lapbegunat ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lapstartedtime :
2018-08-10 21:12:26 +00:00
lua_pushinteger ( L , plr - > lapstartedtime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedspheres :
2018-06-03 21:41:54 +00:00
lua_pushinteger ( L , plr - > finishedspheres ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedrings :
2018-08-10 08:05:20 +00:00
lua_pushinteger ( L , plr - > finishedrings ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marescore :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > marescore ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarescore :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > lastmarescore ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarescore :
2018-08-12 23:59:34 +00:00
lua_pushinteger ( L , plr - > totalmarescore ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmare :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > lastmare ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarelap :
2018-08-10 20:30:49 +00:00
lua_pushinteger ( L , plr - > lastmarelap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarebonuslap :
2018-08-10 20:30:49 +00:00
lua_pushinteger ( L , plr - > lastmarebonuslap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarelap :
2018-08-12 23:57:33 +00:00
lua_pushinteger ( L , plr - > totalmarelap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarebonuslap :
2018-08-12 23:57:33 +00:00
lua_pushinteger ( L , plr - > totalmarebonuslap ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_maxlink :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > maxlink ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_texttimer :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > texttimer ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_textvar :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > textvar ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastsidehit :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > lastsidehit ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastlinehit :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > lastlinehit ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_losstime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > losstime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_timeshit :
2016-04-30 08:19:00 +00:00
lua_pushinteger ( L , plr - > timeshit ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_onconveyor :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > onconveyor ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_awayviewmobj :
2014-03-15 16:59:03 +00:00
LUA_PushUserdata ( L , plr - > awayviewmobj , META_MOBJ ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_awayviewtics :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > awayviewtics ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_awayviewaiming :
2015-05-21 03:54:04 +00:00
lua_pushangle ( L , plr - > awayviewaiming ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spectator :
2015-05-21 03:54:04 +00:00
lua_pushboolean ( L , plr - > spectator ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_outofcoop :
2017-07-04 13:58:58 +00:00
lua_pushboolean ( L , plr - > outofcoop ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bot :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > bot ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_botleader :
2021-01-23 14:49:57 +00:00
LUA_PushUserdata ( L , plr - > botleader , META_PLAYER ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastbuttons :
2021-01-23 15:06:47 +00:00
lua_pushinteger ( L , plr - > lastbuttons ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_blocked :
2021-01-23 22:05:36 +00:00
lua_pushboolean ( L , plr - > blocked ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_jointime :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , plr - > jointime ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_quittime :
2020-01-22 02:05:08 +00:00
lua_pushinteger ( L , plr - > quittime ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
# ifdef HWRENDER
2023-06-18 16:05:16 +00:00
case player_fovadd :
2015-05-21 03:54:04 +00:00
lua_pushfixed ( L , plr - > fovadd ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
# endif
2023-06-18 16:05:16 +00:00
default :
2014-03-15 16:59:03 +00:00
lua_getfield ( L , LUA_REGISTRYINDEX , LREG_EXTVARS ) ;
I_Assert ( lua_istable ( L , - 1 ) ) ;
lua_pushlightuserdata ( L , plr ) ;
lua_rawget ( L , - 2 ) ;
if ( ! lua_istable ( L , - 1 ) ) { // no extra values table
2023-06-18 16:05:16 +00:00
CONS_Debug ( DBG_LUA , M_GetText ( " '%s' has no extvars table or field named '%s'; returning nil. \n " ) , " player_t " , lua_tostring ( L , 2 ) ) ;
2014-03-15 16:59:03 +00:00
return 0 ;
}
2023-06-18 16:05:16 +00:00
lua_pushvalue ( L , 2 ) ; // field name
lua_gettable ( L , - 2 ) ;
2014-03-15 16:59:03 +00:00
if ( lua_isnil ( L , - 1 ) ) // no value for this field
2023-06-18 16:05:16 +00:00
CONS_Debug ( DBG_LUA , M_GetText ( " '%s' has no field named '%s'; returning nil. \n " ) , " player_t " , lua_tostring ( L , 2 ) ) ;
break ;
2014-03-15 16:59:03 +00:00
}
return 1 ;
}
# define NOSET luaL_error(L, LUA_QL("player_t") " field " LUA_QS " should not be set directly.", field)
static int player_set ( lua_State * L )
{
player_t * plr = * ( ( player_t * * ) luaL_checkudata ( L , 1 , META_PLAYER ) ) ;
2023-06-18 16:05:16 +00:00
enum player_e field = Lua_optoption ( L , 2 , player_cmd , player_fields_ref ) ;
2014-03-15 16:59:03 +00:00
if ( ! plr )
return LUA_ErrInvalid ( L , " player_t " ) ;
if ( hud_running )
return luaL_error ( L , " Do not alter player_t in HUD rendering code! " ) ;
2020-07-17 05:08:38 +00:00
if ( hook_cmd_running )
return luaL_error ( L , " Do not alter player_t in CMD building code! " ) ;
2014-03-15 16:59:03 +00:00
2023-06-18 16:05:16 +00:00
switch ( field )
{
case player_mo :
case player_realmo :
{
2014-08-04 03:49:33 +00:00
mobj_t * newmo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
plr - > mo - > player = NULL ; // remove player pointer from old mobj
( newmo - > player = plr ) - > mo = newmo ; // set player pointer for new mobj, and set new mobj as the player's mobj
2023-06-18 16:05:16 +00:00
break ;
2014-04-19 17:41:29 +00:00
}
2023-06-18 16:05:16 +00:00
case player_cmd :
2014-03-15 16:59:03 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
case player_playerstate :
2014-03-15 16:59:03 +00:00
plr - > playerstate = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_camerascale :
2016-09-25 17:21:52 +00:00
plr - > camerascale = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_shieldscale :
2016-09-25 17:21:52 +00:00
plr - > shieldscale = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewz :
2015-05-21 03:54:04 +00:00
plr - > viewz = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewheight :
2015-05-21 03:54:04 +00:00
plr - > viewheight = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_deltaviewheight :
2015-05-21 03:54:04 +00:00
plr - > deltaviewheight = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bob :
2015-05-21 03:54:04 +00:00
plr - > bob = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_viewrollangle :
2020-01-15 05:29:56 +00:00
plr - > viewrollangle = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_aiming :
{
2015-05-21 03:54:04 +00:00
plr - > aiming = luaL_checkangle ( L , 3 ) ;
2014-08-04 03:49:33 +00:00
if ( plr = = & players [ consoleplayer ] )
2014-03-15 16:59:03 +00:00
localaiming = plr - > aiming ;
else if ( plr = = & players [ secondarydisplayplayer ] )
localaiming2 = plr - > aiming ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
}
2023-06-18 16:05:16 +00:00
case player_drawangle :
2017-02-05 18:15:20 +00:00
plr - > drawangle = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rings :
2015-08-15 20:07:16 +00:00
plr - > rings = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spheres :
2018-06-03 21:41:54 +00:00
plr - > spheres = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_pity :
2014-03-15 16:59:03 +00:00
plr - > pity = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_currentweapon :
2014-03-15 16:59:03 +00:00
plr - > currentweapon = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ringweapons :
2014-03-15 16:59:03 +00:00
plr - > ringweapons = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremoval :
2019-08-26 23:07:17 +00:00
plr - > ammoremoval = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremovaltimer :
2019-08-26 23:07:17 +00:00
plr - > ammoremovaltimer = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ammoremovalweapon :
2019-08-26 23:07:17 +00:00
plr - > ammoremovalweapon = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_powers :
2014-03-15 16:59:03 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
case player_pflags :
2014-03-18 17:56:54 +00:00
plr - > pflags = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_panim :
2014-03-15 16:59:03 +00:00
plr - > panim = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flashcount :
2014-03-15 16:59:03 +00:00
plr - > flashcount = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flashpal :
2014-03-15 16:59:03 +00:00
plr - > flashpal = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_skincolor :
2016-05-14 22:52:40 +00:00
{
2020-05-24 00:29:07 +00:00
UINT16 newcolor = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2020-02-15 08:18:41 +00:00
if ( newcolor > = numskincolors )
return luaL_error ( L , " player.skincolor %d out of range (0 - %d) . " , newcolor, numskincolors-1) ;
2016-05-14 22:52:40 +00:00
plr - > skincolor = newcolor ;
2023-06-18 16:05:16 +00:00
break ;
2016-05-14 22:52:40 +00:00
}
2023-06-18 16:05:16 +00:00
case player_skin :
2020-11-25 18:35:36 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
case player_availabilities :
2020-11-25 18:35:36 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
case player_score :
2014-03-15 16:59:03 +00:00
plr - > score = ( UINT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_dashspeed :
2015-05-21 03:54:04 +00:00
plr - > dashspeed = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_normalspeed :
2015-05-21 03:54:04 +00:00
plr - > normalspeed = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_runspeed :
2015-05-21 03:54:04 +00:00
plr - > runspeed = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_thrustfactor :
2014-03-15 16:59:03 +00:00
plr - > thrustfactor = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_accelstart :
2014-03-15 16:59:03 +00:00
plr - > accelstart = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_acceleration :
2014-03-15 16:59:03 +00:00
plr - > acceleration = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charability :
2014-03-15 16:59:03 +00:00
plr - > charability = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charability2 :
2014-03-15 16:59:03 +00:00
plr - > charability2 = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_charflags :
2014-03-15 16:59:03 +00:00
plr - > charflags = ( UINT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_thokitem :
2014-03-15 16:59:03 +00:00
plr - > thokitem = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spinitem :
2014-03-15 16:59:03 +00:00
plr - > spinitem = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_revitem :
2014-03-15 16:59:03 +00:00
plr - > revitem = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_followitem :
2017-10-02 13:08:58 +00:00
plr - > followitem = luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_followmobj :
2019-07-13 12:43:22 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > followmobj , mo ) ;
2023-06-18 16:05:16 +00:00
break ;
2019-07-13 12:43:22 +00:00
}
2023-06-18 16:05:16 +00:00
case player_actionspd :
2014-03-15 16:59:03 +00:00
plr - > actionspd = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_mindash :
2014-03-15 16:59:03 +00:00
plr - > mindash = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_maxdash :
2014-03-15 16:59:03 +00:00
plr - > maxdash = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_jumpfactor :
2014-03-15 16:59:03 +00:00
plr - > jumpfactor = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_height :
2016-09-25 17:21:52 +00:00
plr - > height = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spinheight :
2016-09-25 17:21:52 +00:00
plr - > spinheight = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lives :
2014-03-21 18:42:55 +00:00
plr - > lives = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_continues :
2014-03-21 18:42:55 +00:00
plr - > continues = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_xtralife :
2014-03-21 18:42:55 +00:00
plr - > xtralife = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_gotcontinue :
2014-03-15 16:59:03 +00:00
plr - > gotcontinue = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_speed :
2015-05-21 03:54:04 +00:00
plr - > speed = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_secondjump :
2014-03-15 16:59:03 +00:00
plr - > secondjump = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_fly1 :
2014-03-15 16:59:03 +00:00
plr - > fly1 = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_scoreadd :
2014-03-15 16:59:03 +00:00
plr - > scoreadd = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_glidetime :
2014-03-15 16:59:03 +00:00
plr - > glidetime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_climbing :
2014-03-15 16:59:03 +00:00
plr - > climbing = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_deadtimer :
2014-03-15 16:59:03 +00:00
plr - > deadtimer = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_exiting :
2014-03-15 16:59:03 +00:00
plr - > exiting = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_homing :
2014-03-15 16:59:03 +00:00
plr - > homing = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_dashmode :
2016-01-25 11:47:33 +00:00
plr - > dashmode = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_skidtime :
2014-03-15 16:59:03 +00:00
plr - > skidtime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_cmomx :
2015-05-21 03:54:04 +00:00
plr - > cmomx = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_cmomy :
2015-05-21 03:54:04 +00:00
plr - > cmomy = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rmomx :
2015-05-21 03:54:04 +00:00
plr - > rmomx = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_rmomy :
2015-05-21 03:54:04 +00:00
plr - > rmomy = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_numboxes :
2014-03-21 18:42:55 +00:00
plr - > numboxes = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalring :
2014-03-21 18:42:55 +00:00
plr - > totalring = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_realtime :
2014-03-15 16:59:03 +00:00
plr - > realtime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_laps :
2014-03-21 18:42:55 +00:00
plr - > laps = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_ctfteam :
2014-03-15 16:59:03 +00:00
plr - > ctfteam = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_gotflag :
2014-03-15 16:59:03 +00:00
plr - > gotflag = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_weapondelay :
2014-03-15 16:59:03 +00:00
plr - > weapondelay = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_tossdelay :
2014-03-15 16:59:03 +00:00
plr - > tossdelay = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostx :
2014-03-15 16:59:03 +00:00
plr - > starpostx = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starposty :
2014-03-15 16:59:03 +00:00
plr - > starposty = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostz :
2014-03-15 16:59:03 +00:00
plr - > starpostz = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostnum :
2014-03-15 16:59:03 +00:00
plr - > starpostnum = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starposttime :
2014-03-15 16:59:03 +00:00
plr - > starposttime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostangle :
2015-05-21 03:54:04 +00:00
plr - > starpostangle = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_starpostscale :
2019-09-07 21:11:33 +00:00
plr - > starpostscale = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_angle_pos :
2015-05-21 03:54:04 +00:00
plr - > angle_pos = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_old_angle_pos :
2015-05-21 03:54:04 +00:00
plr - > old_angle_pos = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_axis1 :
2019-07-13 12:43:22 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > axis1 , mo ) ;
2023-06-18 16:05:16 +00:00
break ;
2019-07-13 12:43:22 +00:00
}
2023-06-18 16:05:16 +00:00
case player_axis2 :
2019-07-13 12:43:22 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > axis2 , mo ) ;
2023-06-18 16:05:16 +00:00
break ;
2019-07-13 12:43:22 +00:00
}
2023-06-18 16:05:16 +00:00
case player_bumpertime :
2014-03-15 16:59:03 +00:00
plr - > bumpertime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_flyangle :
2014-03-15 16:59:03 +00:00
plr - > flyangle = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drilltimer :
2014-03-15 16:59:03 +00:00
plr - > drilltimer = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_linkcount :
2014-03-15 16:59:03 +00:00
plr - > linkcount = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_linktimer :
2014-03-15 16:59:03 +00:00
plr - > linktimer = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_anotherflyangle :
2014-03-15 16:59:03 +00:00
plr - > anotherflyangle = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_nightstime :
2014-03-15 16:59:03 +00:00
plr - > nightstime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drillmeter :
2014-03-15 16:59:03 +00:00
plr - > drillmeter = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_drilldelay :
2014-03-15 16:59:03 +00:00
plr - > drilldelay = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bonustime :
2014-03-15 16:59:03 +00:00
plr - > bonustime = luaL_checkboolean ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_capsule :
2014-03-15 16:59:03 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > capsule , mo ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
}
2023-06-18 16:05:16 +00:00
case player_drone :
2018-08-10 23:25:49 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > drone , mo ) ;
2023-06-18 16:05:16 +00:00
break ;
2018-08-10 23:25:49 +00:00
}
2023-06-18 16:05:16 +00:00
case player_oldscale :
2018-08-11 04:49:28 +00:00
plr - > oldscale = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_mare :
2014-03-15 16:59:03 +00:00
plr - > mare = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marelap :
2018-03-30 18:36:49 +00:00
plr - > marelap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marebonuslap :
2018-03-30 18:36:49 +00:00
plr - > marebonuslap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marebegunat :
2014-03-15 16:59:03 +00:00
plr - > marebegunat = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_startedtime :
2014-03-15 16:59:03 +00:00
plr - > startedtime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedtime :
2014-03-15 16:59:03 +00:00
plr - > finishedtime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lapbegunat :
2018-08-10 21:12:26 +00:00
plr - > lapbegunat = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lapstartedtime :
2018-08-10 21:12:26 +00:00
plr - > lapstartedtime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedspheres :
2018-06-03 21:41:54 +00:00
plr - > finishedspheres = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_finishedrings :
2018-08-10 08:05:20 +00:00
plr - > finishedrings = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_marescore :
2014-03-15 16:59:03 +00:00
plr - > marescore = ( UINT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarescore :
2014-03-15 16:59:03 +00:00
plr - > lastmarescore = ( UINT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarescore :
2018-08-12 23:59:34 +00:00
plr - > totalmarescore = ( UINT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmare :
2014-03-15 16:59:03 +00:00
plr - > lastmare = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarelap :
2018-08-10 20:30:49 +00:00
plr - > lastmarelap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastmarebonuslap :
2018-08-10 20:30:49 +00:00
plr - > lastmarebonuslap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarelap :
2018-08-12 23:57:33 +00:00
plr - > totalmarelap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_totalmarebonuslap :
2018-08-12 23:57:33 +00:00
plr - > totalmarebonuslap = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_maxlink :
2014-03-15 16:59:03 +00:00
plr - > maxlink = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_texttimer :
2014-03-15 16:59:03 +00:00
plr - > texttimer = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_textvar :
2014-03-15 16:59:03 +00:00
plr - > textvar = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastsidehit :
2014-03-15 16:59:03 +00:00
plr - > lastsidehit = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_lastlinehit :
2014-03-15 16:59:03 +00:00
plr - > lastlinehit = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_losstime :
2014-03-15 16:59:03 +00:00
plr - > losstime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_timeshit :
2016-04-30 08:19:00 +00:00
plr - > timeshit = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_onconveyor :
2014-03-15 16:59:03 +00:00
plr - > onconveyor = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_awayviewmobj :
2014-03-15 16:59:03 +00:00
{
mobj_t * mo = NULL ;
if ( ! lua_isnil ( L , 3 ) )
mo = * ( ( mobj_t * * ) luaL_checkudata ( L , 3 , META_MOBJ ) ) ;
P_SetTarget ( & plr - > awayviewmobj , mo ) ;
2023-06-03 20:43:58 +00:00
if ( plr = = & players [ displayplayer ] )
P_ResetCamera ( plr , & camera ) ; // reset p1 camera on p1 getting an awayviewmobj
else if ( splitscreen & & plr = = & players [ secondarydisplayplayer ] )
P_ResetCamera ( plr , & camera2 ) ; // reset p2 camera on p2 getting an awayviewmobj
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
}
2023-06-18 16:05:16 +00:00
case player_awayviewtics :
2014-03-15 16:59:03 +00:00
plr - > awayviewtics = ( INT32 ) luaL_checkinteger ( L , 3 ) ;
if ( plr - > awayviewtics & & ! plr - > awayviewmobj ) // awayviewtics must ALWAYS have an awayviewmobj set!!
P_SetTarget ( & plr - > awayviewmobj , plr - > mo ) ; // but since the script might set awayviewmobj immediately AFTER setting awayviewtics, use player mobj as filler for now.
2023-06-18 16:05:16 +00:00
break ;
case player_awayviewaiming :
2015-05-21 03:54:04 +00:00
plr - > awayviewaiming = luaL_checkangle ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_spectator :
2014-03-15 16:59:03 +00:00
plr - > spectator = lua_toboolean ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_outofcoop :
2017-07-04 13:58:58 +00:00
plr - > outofcoop = lua_toboolean ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_bot :
2014-03-15 16:59:03 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
case player_botleader :
2021-01-23 15:06:47 +00:00
{
player_t * player = NULL ;
if ( ! lua_isnil ( L , 3 ) )
player = * ( ( player_t * * ) luaL_checkudata ( L , 3 , META_PLAYER ) ) ;
plr - > botleader = player ;
2023-06-18 16:05:16 +00:00
break ;
2021-01-23 15:06:47 +00:00
}
2023-06-18 16:05:16 +00:00
case player_lastbuttons :
2021-01-23 15:06:47 +00:00
plr - > lastbuttons = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_blocked :
2021-01-23 22:05:36 +00:00
plr - > blocked = ( UINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_jointime :
2014-03-15 16:59:03 +00:00
plr - > jointime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case player_quittime :
2020-01-22 02:05:08 +00:00
plr - > quittime = ( tic_t ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
# ifdef HWRENDER
2023-06-18 16:05:16 +00:00
case player_fovadd :
2015-05-21 03:54:04 +00:00
plr - > fovadd = luaL_checkfixed ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
# endif
2023-06-18 16:05:16 +00:00
default :
2014-03-15 16:59:03 +00:00
lua_getfield ( L , LUA_REGISTRYINDEX , LREG_EXTVARS ) ;
I_Assert ( lua_istable ( L , - 1 ) ) ;
lua_pushlightuserdata ( L , plr ) ;
lua_rawget ( L , - 2 ) ;
if ( lua_isnil ( L , - 1 ) ) {
// This index doesn't have a table for extra values yet, let's make one.
lua_pop ( L , 1 ) ;
2023-06-18 16:05:16 +00:00
CONS_Debug ( DBG_LUA , M_GetText ( " '%s' has no field named '%s'; adding it as Lua data. \n " ) , " player_t " , lua_tostring ( L , 2 ) ) ;
2014-03-15 16:59:03 +00:00
lua_newtable ( L ) ;
lua_pushlightuserdata ( L , plr ) ;
lua_pushvalue ( L , - 2 ) ; // ext value table
lua_rawset ( L , - 4 ) ; // LREG_EXTVARS table
}
2023-06-18 16:05:16 +00:00
lua_pushvalue ( L , 2 ) ; // key
2014-03-15 16:59:03 +00:00
lua_pushvalue ( L , 3 ) ; // value to store
2023-06-18 16:05:16 +00:00
lua_settable ( L , - 3 ) ;
2014-03-15 16:59:03 +00:00
lua_pop ( L , 2 ) ;
2023-06-18 16:05:16 +00:00
break ;
2014-03-15 16:59:03 +00:00
}
return 0 ;
}
# undef NOSET
static int player_num ( lua_State * L )
{
player_t * plr = * ( ( player_t * * ) luaL_checkudata ( L , 1 , META_PLAYER ) ) ;
if ( ! plr )
return luaL_error ( L , " accessed player_t doesn't exist anymore. " ) ;
lua_pushinteger ( L , plr - players ) ;
return 1 ;
}
// powers, p -> powers[p]
static int power_get ( lua_State * L )
{
UINT16 * powers = * ( ( UINT16 * * ) luaL_checkudata ( L , 1 , META_POWERS ) ) ;
powertype_t p = luaL_checkinteger ( L , 2 ) ;
2014-08-04 03:49:33 +00:00
if ( p > = NUMPOWERS )
2019-11-18 20:39:41 +00:00
return luaL_error ( L , LUA_QL ( " powertype_t " ) " cannot be %d " , ( INT16 ) p ) ;
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , powers [ p ] ) ;
return 1 ;
}
// powers, p, value -> powers[p] = value
static int power_set ( lua_State * L )
{
UINT16 * powers = * ( ( UINT16 * * ) luaL_checkudata ( L , 1 , META_POWERS ) ) ;
powertype_t p = luaL_checkinteger ( L , 2 ) ;
UINT16 i = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2014-08-04 03:49:33 +00:00
if ( p > = NUMPOWERS )
2019-11-18 20:39:41 +00:00
return luaL_error ( L , LUA_QL ( " powertype_t " ) " cannot be %d " , ( INT16 ) p ) ;
2014-03-15 16:59:03 +00:00
if ( hud_running )
return luaL_error ( L , " Do not alter player_t in HUD rendering code! " ) ;
2020-07-17 05:08:38 +00:00
if ( hook_cmd_running )
return luaL_error ( L , " Do not alter player_t in CMD building code! " ) ;
2014-03-15 16:59:03 +00:00
powers [ p ] = i ;
2014-08-27 03:56:30 +00:00
return 0 ;
2014-03-15 16:59:03 +00:00
}
// #powers -> NUMPOWERS
static int power_len ( lua_State * L )
{
lua_pushinteger ( L , NUMPOWERS ) ;
return 1 ;
}
# define NOFIELD luaL_error(L, LUA_QL("ticcmd_t") " has no field named " LUA_QS, field)
2021-04-21 23:58:14 +00:00
# define NOSET luaL_error(L, LUA_QL("ticcmd_t") " field " LUA_QS " should not be set directly.", field)
2014-03-15 16:59:03 +00:00
2023-06-18 16:05:16 +00:00
enum ticcmd_e
{
ticcmd_forwardmove ,
ticcmd_sidemove ,
ticcmd_angleturn ,
ticcmd_aiming ,
ticcmd_buttons ,
ticcmd_latency ,
} ;
static const char * const ticcmd_opt [ ] = {
" forwardmove " ,
" sidemove " ,
" angleturn " ,
" aiming " ,
" buttons " ,
" latency " ,
NULL ,
} ;
static int ticcmd_fields_ref = LUA_NOREF ;
2014-03-15 16:59:03 +00:00
static int ticcmd_get ( lua_State * L )
{
ticcmd_t * cmd = * ( ( ticcmd_t * * ) luaL_checkudata ( L , 1 , META_TICCMD ) ) ;
2023-06-18 16:05:16 +00:00
enum ticcmd_e field = Lua_optoption ( L , 2 , - 1 , ticcmd_fields_ref ) ;
2014-03-15 16:59:03 +00:00
if ( ! cmd )
return LUA_ErrInvalid ( L , " player_t " ) ;
2023-06-18 16:05:16 +00:00
switch ( field )
{
case ticcmd_forwardmove :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , cmd - > forwardmove ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_sidemove :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , cmd - > sidemove ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_angleturn :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , cmd - > angleturn ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_aiming :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , cmd - > aiming ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_buttons :
2014-03-15 16:59:03 +00:00
lua_pushinteger ( L , cmd - > buttons ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_latency :
2021-04-21 23:58:14 +00:00
lua_pushinteger ( L , cmd - > latency ) ;
2023-06-18 16:05:16 +00:00
break ;
default :
2014-03-15 16:59:03 +00:00
return NOFIELD ;
2023-06-18 16:05:16 +00:00
}
2014-03-15 16:59:03 +00:00
return 1 ;
}
static int ticcmd_set ( lua_State * L )
{
ticcmd_t * cmd = * ( ( ticcmd_t * * ) luaL_checkudata ( L , 1 , META_TICCMD ) ) ;
2023-06-18 16:05:16 +00:00
enum ticcmd_e field = Lua_optoption ( L , 2 , - 1 , ticcmd_fields_ref ) ;
2014-03-15 16:59:03 +00:00
if ( ! cmd )
return LUA_ErrInvalid ( L , " ticcmd_t " ) ;
if ( hud_running )
return luaL_error ( L , " Do not alter player_t in HUD rendering code! " ) ;
2023-06-18 16:05:16 +00:00
switch ( field )
{
case ticcmd_forwardmove :
2014-03-15 16:59:03 +00:00
cmd - > forwardmove = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_sidemove :
2014-03-15 16:59:03 +00:00
cmd - > sidemove = ( SINT8 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_angleturn :
2014-03-15 16:59:03 +00:00
cmd - > angleturn = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_aiming :
2014-03-15 16:59:03 +00:00
cmd - > aiming = ( INT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_buttons :
2014-03-15 16:59:03 +00:00
cmd - > buttons = ( UINT16 ) luaL_checkinteger ( L , 3 ) ;
2023-06-18 16:05:16 +00:00
break ;
case ticcmd_latency :
2021-04-21 23:58:14 +00:00
return NOSET ;
2023-06-18 16:05:16 +00:00
default :
2014-03-15 16:59:03 +00:00
return NOFIELD ;
2023-06-18 16:05:16 +00:00
}
2014-03-15 16:59:03 +00:00
return 0 ;
}
# undef NOFIELD
2021-04-21 23:58:14 +00:00
# undef NOSET
2014-03-15 16:59:03 +00:00
int LUA_PlayerLib ( lua_State * L )
{
luaL_newmetatable ( L , META_PLAYER ) ;
lua_pushcfunction ( L , player_get ) ;
lua_setfield ( L , - 2 , " __index " ) ;
lua_pushcfunction ( L , player_set ) ;
lua_setfield ( L , - 2 , " __newindex " ) ;
lua_pushcfunction ( L , player_num ) ;
lua_setfield ( L , - 2 , " __len " ) ;
lua_pop ( L , 1 ) ;
2023-06-18 16:05:16 +00:00
player_fields_ref = Lua_CreateFieldTable ( L , player_opt ) ;
2014-03-15 16:59:03 +00:00
luaL_newmetatable ( L , META_POWERS ) ;
lua_pushcfunction ( L , power_get ) ;
lua_setfield ( L , - 2 , " __index " ) ;
lua_pushcfunction ( L , power_set ) ;
lua_setfield ( L , - 2 , " __newindex " ) ;
lua_pushcfunction ( L , power_len ) ;
lua_setfield ( L , - 2 , " __len " ) ;
lua_pop ( L , 1 ) ;
luaL_newmetatable ( L , META_TICCMD ) ;
lua_pushcfunction ( L , ticcmd_get ) ;
lua_setfield ( L , - 2 , " __index " ) ;
lua_pushcfunction ( L , ticcmd_set ) ;
lua_setfield ( L , - 2 , " __newindex " ) ;
lua_pop ( L , 1 ) ;
2023-06-18 16:05:16 +00:00
ticcmd_fields_ref = Lua_CreateFieldTable ( L , ticcmd_opt ) ;
2014-03-15 16:59:03 +00:00
lua_newuserdata ( L , 0 ) ;
lua_createtable ( L , 0 , 2 ) ;
lua_pushcfunction ( L , lib_getPlayer ) ;
lua_setfield ( L , - 2 , " __index " ) ;
lua_pushcfunction ( L , lib_lenPlayer ) ;
lua_setfield ( L , - 2 , " __len " ) ;
lua_setmetatable ( L , - 2 ) ;
lua_setglobal ( L , " players " ) ;
return 0 ;
}