2022-11-22 22:21:45 +00:00
# include "vm.h"
# include "ns.h"
# include "buildtiles.h"
# include "global.h"
# include "funct.h"
2022-01-25 23:57:52 +00:00
BEGIN_DUKE_NS
2022-11-21 20:33:27 +00:00
void resetswitch ( int tag ) ;
2022-11-21 07:15:41 +00:00
// Workaround so that the script code can be written in its final form. This must go away later.
int PicForName ( int intname )
{
int picnum = - 1 ;
// this is still a hack so it can spawn actors which haven't been scriptified yet. This will go away later.
if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeToiletWater " ) )
{
picnum = TileFiles . tileForName ( " TOILETWATER " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeBurning " ) )
{
picnum = TileFiles . tileForName ( " BURNIMG " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeBloodPool " ) )
{
picnum = TileFiles . tileForName ( " BLOODPOOL " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeExplosion2 " ) )
{
picnum = TileFiles . tileForName ( " EXPLOSION2 " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeTransporterStar " ) )
{
picnum = TileFiles . tileForName ( " TRANSPORTERSTAR " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " RedneckRabbit " ) )
{
picnum = TileFiles . tileForName ( " RABBIT " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " RedneckFeather " ) )
{
picnum = TileFiles . tileForName ( " FEATHER " ) ;
}
2022-11-25 23:19:37 +00:00
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeBatteryAmmo " ) )
{
picnum = TileFiles . tileForName ( " BATTERYAMMO " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " RedneckDynamite " ) )
{
picnum = TileFiles . tileForName ( " DYNAMITE " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeSixpak " ) )
{
picnum = TileFiles . tileForName ( " SIXPAK " ) ;
}
else if ( FName ( ENamedName ( intname ) ) = = FName ( " DukeAtomicHealth " ) )
{
picnum = TileFiles . tileForName ( " ATOMICHEALTH " ) ;
}
2022-11-21 07:15:41 +00:00
return picnum ;
}
2022-01-25 23:57:52 +00:00
//---------------------------------------------------------------------------
//
// global exports
//
//---------------------------------------------------------------------------
2022-11-17 17:38:25 +00:00
player_struct * duke_getviewplayer ( )
2022-01-25 23:57:52 +00:00
{
2022-11-17 17:38:25 +00:00
return & ps [ screenpeek ] ;
2022-01-25 23:57:52 +00:00
}
2022-11-17 17:38:25 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , getviewplayer , duke_getviewplayer )
2022-01-25 23:57:52 +00:00
{
2022-11-17 17:38:25 +00:00
PARAM_PROLOGUE ;
ACTION_RETURN_POINTER ( duke_getviewplayer ( ) ) ;
2022-01-25 23:57:52 +00:00
}
DEFINE_ACTION_FUNCTION ( _Duke , MaxAmmoAmount )
{
PARAM_PROLOGUE ;
PARAM_INT ( weap ) ;
int max = weap < 0 | | weap > = MAX_WEAPONS ? 0 : gs . max_ammo_amount [ weap ] ;
ACTION_RETURN_INT ( max ) ;
}
void S_PlaySpecialMusic ( unsigned int m ) ;
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , PlaySpecialMusic , S_PlaySpecialMusic )
{
PARAM_PROLOGUE ;
PARAM_INT ( song ) ;
S_PlaySpecialMusic ( song ) ;
return 0 ;
}
2022-11-24 20:27:08 +00:00
static int duke_PlaySound ( int num , int chan , int flags , double vol )
2022-01-25 23:57:52 +00:00
{
2022-11-24 20:27:08 +00:00
return S_PlaySound ( FSoundID : : fromInt ( num ) , chan , EChanFlags : : FromInt ( flags ) , float ( vol ) ) ;
2022-01-25 23:57:52 +00:00
}
2022-11-24 20:27:08 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , PlaySound , duke_PlaySound )
2022-01-25 23:57:52 +00:00
{
PARAM_PROLOGUE ;
PARAM_INT ( snd ) ;
PARAM_INT ( chan ) ;
PARAM_INT ( flags ) ;
PARAM_FLOAT ( vol ) ;
2022-11-24 20:27:08 +00:00
ACTION_RETURN_INT ( duke_PlaySound ( snd , chan , flags , vol ) ) ;
2022-01-25 23:57:52 +00:00
}
static void StopSound ( int num )
{
S_StopSound ( num ) ;
}
2022-11-24 20:27:08 +00:00
void duke_StopSound ( int snd )
{
S_StopSound ( FSoundID : : fromInt ( snd ) ) ;
}
2022-01-25 23:57:52 +00:00
2022-11-24 20:27:08 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , StopSound , duke_StopSound )
2022-01-25 23:57:52 +00:00
{
PARAM_PROLOGUE ;
PARAM_INT ( snd ) ;
2022-11-24 20:27:08 +00:00
duke_StopSound ( snd ) ;
2022-01-25 23:57:52 +00:00
return 0 ;
}
2022-11-24 20:27:08 +00:00
int duke_CheckSoundPlaying ( int snd )
{
return S_CheckSoundPlaying ( FSoundID : : fromInt ( snd ) ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , CheckSoundPlaying , duke_CheckSoundPlaying )
2022-01-25 23:57:52 +00:00
{
PARAM_PROLOGUE ;
PARAM_INT ( snd ) ;
2022-11-24 20:27:08 +00:00
ACTION_RETURN_INT ( duke_CheckSoundPlaying ( snd ) ) ;
2022-01-25 23:57:52 +00:00
}
2022-02-20 23:19:26 +00:00
player_struct * duke_checkcursectnums ( sectortype * sector )
{
if ( ! sector ) return nullptr ;
int pp = checkcursectnums ( sector ) ;
2022-11-13 17:47:50 +00:00
return pp > = 0 ? & ps [ pp ] : nullptr ;
2022-02-20 23:19:26 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , checkcursectnums , duke_checkcursectnums )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , sectortype ) ;
ACTION_RETURN_POINTER ( duke_checkcursectnums ( sect ) ) ;
}
2022-11-19 11:54:50 +00:00
int duke_global_random ( )
{
return global_random ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , global_random , duke_global_random )
{
PARAM_PROLOGUE ;
ACTION_RETURN_INT ( global_random ) ;
}
2022-11-24 20:27:08 +00:00
int duke_GetSoundFlags ( int sndid )
{
return S_GetUserFlags ( FSoundID : : fromInt ( sndid ) ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , GetSoundFlags , duke_GetSoundFlags )
2022-11-20 07:10:15 +00:00
{
PARAM_PROLOGUE ;
PARAM_INT ( snd ) ;
2022-11-24 20:27:08 +00:00
ACTION_RETURN_INT ( duke_GetSoundFlags ( snd ) ) ;
2022-11-20 07:10:15 +00:00
}
2022-11-20 10:58:19 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _Duke , badguyID , badguypic )
{
PARAM_PROLOGUE ;
PARAM_INT ( p ) ;
ACTION_RETURN_INT ( badguypic ( p ) ) ;
}
2022-11-20 19:40:46 +00:00
2022-01-25 23:57:52 +00:00
DEFINE_GLOBAL_UNSIZED ( dlevel )
2022-01-21 00:04:08 +00:00
DEFINE_GLOBAL ( camsprite )
2022-01-25 23:57:52 +00:00
//---------------------------------------------------------------------------
//
// DukeActor
//
//---------------------------------------------------------------------------
DEFINE_FIELD ( DDukeActor , ownerActor )
DEFINE_FIELD ( DDukeActor , hitOwnerActor )
DEFINE_FIELD ( DDukeActor , cgg )
DEFINE_FIELD ( DDukeActor , spriteextra )
DEFINE_FIELD ( DDukeActor , hitang )
DEFINE_FIELD ( DDukeActor , hitextra )
DEFINE_FIELD ( DDukeActor , movflag )
2022-09-14 21:30:10 +00:00
DEFINE_FIELD ( DDukeActor , tempval )
2022-01-25 23:57:52 +00:00
DEFINE_FIELD ( DDukeActor , timetosleep )
DEFINE_FIELD ( DDukeActor , floorz )
DEFINE_FIELD ( DDukeActor , ceilingz )
DEFINE_FIELD ( DDukeActor , saved_ammo )
DEFINE_FIELD ( DDukeActor , palvals )
DEFINE_FIELD ( DDukeActor , temp_data )
DEFINE_FIELD ( DDukeActor , temp_actor )
DEFINE_FIELD ( DDukeActor , seek_actor )
DEFINE_FIELD ( DDukeActor , flags1 )
DEFINE_FIELD ( DDukeActor , flags2 )
2022-01-26 21:51:36 +00:00
DEFINE_FIELD ( DDukeActor , spritesetindex )
2022-02-20 23:19:26 +00:00
DEFINE_FIELD ( DDukeActor , temp_walls )
DEFINE_FIELD ( DDukeActor , temp_sect )
DEFINE_FIELD ( DDukeActor , actorstayput )
2022-11-17 17:38:25 +00:00
DEFINE_FIELD ( DDukeActor , temp_pos )
DEFINE_FIELD ( DDukeActor , temp_pos2 )
DEFINE_FIELD ( DDukeActor , temp_angle )
2022-01-26 21:51:36 +00:00
static void setSpritesetImage ( DDukeActor * self , unsigned int index )
{
auto & spriteset = static_cast < PClassActor * > ( self - > GetClass ( ) ) - > ActorInfo ( ) - > SpriteSet ;
if ( index > = spriteset . Size ( ) )
{
ThrowAbortException ( X_ARRAY_OUT_OF_BOUNDS , " Bad sprite set index %d (max. allowed is %d " , index , spriteset . Size ( ) - 1 ) ;
}
self - > spritesetindex = index ;
self - > spr . picnum = spriteset [ index ] ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , SetSpritesetImage , setSpritesetImage )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_UINT ( index ) ;
setSpritesetImage ( self , index ) ;
return 0 ;
}
2022-01-25 23:57:52 +00:00
2022-01-20 07:31:08 +00:00
static int getSpritesetSize ( DDukeActor * self )
{
auto & spriteset = static_cast < PClassActor * > ( self - > GetClass ( ) ) - > ActorInfo ( ) - > SpriteSet ;
return spriteset . Size ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , GetSpritesetSize , getSpritesetSize )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
ACTION_RETURN_INT ( getSpritesetSize ( self ) ) ;
}
2022-02-20 23:19:26 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , getglobalz , getglobalz )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
getglobalz ( self ) ;
return 0 ;
}
2022-11-17 17:38:25 +00:00
player_struct * DukeActor_findplayer ( DDukeActor * self , double * dist )
2022-02-20 23:19:26 +00:00
{
2022-09-14 20:49:01 +00:00
double a ;
2022-11-17 17:38:25 +00:00
return & ps [ findplayer ( self , dist ? dist : & a ) ] ;
2022-02-20 23:19:26 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , findplayer , DukeActor_findplayer )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
2022-11-17 17:38:25 +00:00
double d ;
auto p = DukeActor_findplayer ( self , & d ) ;
if ( numret > 0 ) ret [ 0 ] . SetPointer ( p ) ;
if ( numret > 1 ) ret [ 1 ] . SetFloat ( d ) ;
return min ( numret , 2 ) ;
2022-02-20 23:19:26 +00:00
}
int DukeActor_ifhitbyweapon ( DDukeActor * self )
{
return fi . ifhitbyweapon ( self ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , ifhitbyweapon , DukeActor_ifhitbyweapon )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
ACTION_RETURN_INT ( DukeActor_ifhitbyweapon ( self ) ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , domove , ssp )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( clipmask ) ;
ACTION_RETURN_INT ( ssp ( self , clipmask ) ) ;
}
2022-11-20 07:10:15 +00:00
int DukeActor_PlayActorSound ( DDukeActor * self , int snd , int chan , int flags )
2022-02-20 23:19:26 +00:00
{
2022-11-24 20:27:08 +00:00
return S_PlayActorSound ( FSoundID : : fromInt ( snd ) , self , chan , EChanFlags : : FromInt ( flags ) ) ;
2022-02-20 23:19:26 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , PlayActorSound , DukeActor_PlayActorSound )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( snd ) ;
2022-11-20 07:10:15 +00:00
PARAM_INT ( chan ) ;
PARAM_INT ( flags ) ;
ACTION_RETURN_INT ( DukeActor_PlayActorSound ( self , snd , chan , flags ) ) ;
}
2022-11-21 08:25:46 +00:00
void DukeActor_StopSound ( DDukeActor * self , int snd , int flags )
2022-11-20 07:10:15 +00:00
{
2022-11-24 20:27:08 +00:00
S_StopSound ( FSoundID : : fromInt ( snd ) , self , flags ) ;
2022-11-20 07:10:15 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , StopSound , DukeActor_StopSound )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( snd ) ;
PARAM_INT ( chan ) ;
2022-11-21 08:25:46 +00:00
DukeActor_StopSound ( self , snd , chan ) ;
return 0 ;
2022-02-20 23:19:26 +00:00
}
2022-11-14 09:30:59 +00:00
DDukeActor * DukeActor_Spawn ( DDukeActor * origin , int intname )
{
2022-11-21 07:15:41 +00:00
int picnum = PicForName ( intname ) ;
2022-11-14 09:30:59 +00:00
if ( picnum = = - 1 )
{
auto cls = PClass : : FindActor ( FName ( ENamedName ( intname ) ) ) ;
if ( cls ) return spawn ( origin , cls ) ;
}
else
{
return spawn ( origin , picnum ) ;
}
return nullptr ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , spawn , DukeActor_Spawn )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( type ) ;
ACTION_RETURN_POINTER ( DukeActor_Spawn ( self , type ) ) ;
}
2022-11-21 07:15:41 +00:00
void DukeActor_Lotsofstuff ( DDukeActor * actor , int count , int intname )
{
int picnum = PicForName ( intname ) ;
// Todo: make this class aware.
lotsofstuff ( actor , count , picnum ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , lotsofstuff , DukeActor_Lotsofstuff )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( type ) ;
PARAM_INT ( count ) ;
DukeActor_Lotsofstuff ( self , count , type ) ;
return 0 ;
}
2022-11-22 22:21:45 +00:00
double DukeActor_gutsoffset ( DDukeActor * self )
2022-11-21 07:15:41 +00:00
{
2022-11-22 22:21:45 +00:00
return gs . actorinfo [ self - > spr . picnum ] . gutsoffset ;
2022-11-21 07:15:41 +00:00
}
2022-11-22 22:21:45 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , gutsoffset , DukeActor_gutsoffset )
2022-11-21 07:15:41 +00:00
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
2022-11-22 22:21:45 +00:00
ACTION_RETURN_FLOAT ( DukeActor_gutsoffset ( self ) ) ;
2022-11-21 07:15:41 +00:00
return 0 ;
}
int DukeActor_movesprite ( DDukeActor * actor , double velx , double vely , double velz , int clipmask )
{
Collision coll ;
return movesprite_ex ( actor , DVector3 ( velx , vely , velz ) , clipmask , coll ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , movesprite , DukeActor_movesprite )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_FLOAT ( velx ) ;
PARAM_FLOAT ( vely ) ;
PARAM_FLOAT ( velz ) ;
PARAM_INT ( clipmask ) ;
ACTION_RETURN_INT ( DukeActor_movesprite ( self , velx , vely , velz , clipmask ) ) ;
}
2022-11-19 18:01:17 +00:00
DDukeActor * DukeActor_Spawnsprite ( DDukeActor * origin , int picnum )
{
if ( picnum > = 0 & & picnum < MAXTILES )
{
return spawn ( origin , picnum ) ;
}
return nullptr ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , spawnsprite , DukeActor_Spawnsprite )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( type ) ;
ACTION_RETURN_POINTER ( DukeActor_Spawnsprite ( self , type ) ) ;
}
2022-11-14 22:55:46 +00:00
DDukeActor * DukeActor_spawnweaponorammo ( DDukeActor * origin , unsigned intname )
{
if ( intname > 14 ) return nullptr ;
return spawn ( origin , gs . weaponsandammosprites [ intname ] ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , spawnweaponorammo , DukeActor_spawnweaponorammo )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( type ) ;
ACTION_RETURN_POINTER ( DukeActor_spawnweaponorammo ( self , type ) ) ;
}
2022-11-14 09:30:59 +00:00
void DukeActor_Lotsofglass ( DDukeActor * origin , int count )
{
lotsofglass ( origin , nullptr , count ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , lotsofglass , DukeActor_Lotsofglass )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( count ) ;
DukeActor_Lotsofglass ( self , count ) ;
return 0 ;
}
2022-02-20 23:19:26 +00:00
2022-11-14 15:31:45 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , makeitfall , makeitfall )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
makeitfall ( self ) ;
return 0 ;
}
2022-11-17 17:38:25 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , RandomScrap , RANDOMSCRAP )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
RANDOMSCRAP ( self ) ;
return 0 ;
}
void DukeActor_hitradius ( DDukeActor * actor , int r , int hp1 , int hp2 , int hp3 , int hp4 )
{
fi . hitradius ( actor , r , hp1 , hp2 , hp3 , hp4 ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , hitradius , DukeActor_hitradius )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( r ) ;
PARAM_INT ( h1 ) ;
PARAM_INT ( h2 ) ;
PARAM_INT ( h3 ) ;
PARAM_INT ( h4 ) ;
DukeActor_hitradius ( self , r , h1 , h2 , h3 , h4 ) ;
return 0 ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , hitasprite , hitasprite )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
DDukeActor * p ;
double d = hitasprite ( self , & p ) ;
if ( numret > 0 ) ret [ 0 ] . SetFloat ( d ) ;
if ( numret > 1 ) ret [ 1 ] . SetPointer ( p ) ;
return min ( numret , 2 ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , ChangeSector , ChangeActorSect )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_POINTER ( sec , sectortype ) ;
PARAM_INT ( tail ) ;
ChangeActorSect ( self , sec , tail ) ;
return 0 ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , ChangeStat , ChangeActorStat )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( stat ) ;
PARAM_INT ( tail ) ;
ChangeActorStat ( self , stat , tail ) ;
return 0 ;
}
2022-11-17 18:30:21 +00:00
void DukeActor_detonate ( DDukeActor * origin , int intname )
{
// all callers use "EXPLOSION2", so ignore the parameter for now
int picnum = TileFiles . tileForName ( " EXPLOSION2 " ) ;
detonate ( origin , picnum ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , detonate , DukeActor_detonate )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( type ) ;
DukeActor_detonate ( self , type ) ;
return 0 ;
}
2022-01-20 07:31:08 +00:00
void DukeActor_checkhitdefault ( DDukeActor * origin , DDukeActor * proj )
{
fi . checkhitdefault ( origin , proj ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , checkhitdefault , DukeActor_checkhitdefault )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_OBJECT ( proj , DDukeActor ) ;
DukeActor_checkhitdefault ( self , proj ) ;
return 0 ;
}
2022-11-17 17:38:25 +00:00
2022-11-19 08:02:40 +00:00
void DukeActor_operatesectors ( DDukeActor * origin , sectortype * sector )
{
operatesectors ( sector , origin ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , operatesectors , DukeActor_operatesectors )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_POINTER ( sec , sectortype ) ;
operatesectors ( sec , self ) ;
return 0 ;
}
2022-11-20 19:40:46 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , badguy , badguy )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
ACTION_RETURN_INT ( badguy ( self ) ) ;
}
int duke_isplayer ( DDukeActor * act )
{
return act - > isPlayer ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( DDukeActor , isplayer , duke_isplayer )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
ACTION_RETURN_INT ( duke_isplayer ( self ) ) ;
}
2022-11-17 17:38:25 +00:00
// temporary helpers to hide the fact that these flags are not part of the actor yet.
2022-11-14 15:31:45 +00:00
DEFINE_ACTION_FUNCTION ( DDukeActor , actorflag1 )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( mask ) ;
ACTION_RETURN_BOOL ( ! ! actorflag ( self , EDukeFlags1 : : FromInt ( mask ) ) ) ;
}
DEFINE_ACTION_FUNCTION ( DDukeActor , actorflag2 )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( mask ) ;
ACTION_RETURN_BOOL ( ! ! actorflag ( self , EDukeFlags2 : : FromInt ( mask ) ) ) ;
}
DEFINE_ACTION_FUNCTION ( DDukeActor , attackerflag1 )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( mask ) ;
ACTION_RETURN_BOOL ( ! ! attackerflag ( self , EDukeFlags1 : : FromInt ( mask ) ) ) ;
}
DEFINE_ACTION_FUNCTION ( DDukeActor , attackerflag2 )
{
PARAM_SELF_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( mask ) ;
ACTION_RETURN_BOOL ( ! ! attackerflag ( self , EDukeFlags2 : : FromInt ( mask ) ) ) ;
}
2022-01-25 23:57:52 +00:00
//---------------------------------------------------------------------------
//
// DukePlayer
//
//---------------------------------------------------------------------------
DEFINE_FIELD_X ( DukePlayer , player_struct , gotweapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , pals )
DEFINE_FIELD_X ( DukePlayer , player_struct , weapon_sway )
DEFINE_FIELD_X ( DukePlayer , player_struct , oweapon_sway )
DEFINE_FIELD_X ( DukePlayer , player_struct , weapon_pos )
DEFINE_FIELD_X ( DukePlayer , player_struct , kickback_pic )
DEFINE_FIELD_X ( DukePlayer , player_struct , random_club_frame )
DEFINE_FIELD_X ( DukePlayer , player_struct , oweapon_pos )
DEFINE_FIELD_X ( DukePlayer , player_struct , okickback_pic )
DEFINE_FIELD_X ( DukePlayer , player_struct , orandom_club_frame )
DEFINE_FIELD_X ( DukePlayer , player_struct , hard_landing )
DEFINE_FIELD_X ( DukePlayer , player_struct , ohard_landing )
DEFINE_FIELD_X ( DukePlayer , player_struct , psectlotag )
//DEFINE_FIELD_X(DukePlayer, player_struct, exitx)
//DEFINE_FIELD_X(DukePlayer, player_struct, exity)
//DEFINE_FIELD_X(DukePlayer, player_struct, loogiex)
//DEFINE_FIELD_X(DukePlayer, player_struct, loogiey)
DEFINE_FIELD_X ( DukePlayer , player_struct , numloogs )
DEFINE_FIELD_X ( DukePlayer , player_struct , loogcnt )
DEFINE_FIELD_X ( DukePlayer , player_struct , invdisptime )
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposx)
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposy)
DEFINE_FIELD_X ( DukePlayer , player_struct , pyoff )
DEFINE_FIELD_X ( DukePlayer , player_struct , opyoff )
//DEFINE_FIELD_X(DukePlayer, player_struct, posxv)
//DEFINE_FIELD_X(DukePlayer, player_struct, posyv)
//DEFINE_FIELD_X(DukePlayer, player_struct, poszv)
DEFINE_FIELD_X ( DukePlayer , player_struct , last_pissed_time )
2022-02-04 16:49:48 +00:00
DEFINE_FIELD_X ( DukePlayer , player_struct , truefz )
DEFINE_FIELD_X ( DukePlayer , player_struct , truecz )
2022-01-25 23:57:52 +00:00
DEFINE_FIELD_X ( DukePlayer , player_struct , player_par )
DEFINE_FIELD_X ( DukePlayer , player_struct , visibility )
DEFINE_FIELD_X ( DukePlayer , player_struct , bobcounter )
DEFINE_FIELD_X ( DukePlayer , player_struct , randomflamex )
DEFINE_FIELD_X ( DukePlayer , player_struct , crack_time )
DEFINE_FIELD_X ( DukePlayer , player_struct , aim_mode )
DEFINE_FIELD_X ( DukePlayer , player_struct , ftt )
DEFINE_FIELD_X ( DukePlayer , player_struct , cursector )
DEFINE_FIELD_X ( DukePlayer , player_struct , last_extra )
DEFINE_FIELD_X ( DukePlayer , player_struct , subweapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , ammo_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , frag )
DEFINE_FIELD_X ( DukePlayer , player_struct , fraggedself )
DEFINE_FIELD_X ( DukePlayer , player_struct , curr_weapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , last_weapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , tipincs )
DEFINE_FIELD_X ( DukePlayer , player_struct , wantweaponfire )
DEFINE_FIELD_X ( DukePlayer , player_struct , holoduke_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , hurt_delay )
DEFINE_FIELD_X ( DukePlayer , player_struct , hbomb_hold_delay )
DEFINE_FIELD_X ( DukePlayer , player_struct , jumping_counter )
DEFINE_FIELD_X ( DukePlayer , player_struct , airleft )
DEFINE_FIELD_X ( DukePlayer , player_struct , knee_incs )
DEFINE_FIELD_X ( DukePlayer , player_struct , access_incs )
DEFINE_FIELD_X ( DukePlayer , player_struct , ftq )
DEFINE_FIELD_X ( DukePlayer , player_struct , access_wall )
DEFINE_FIELD_X ( DukePlayer , player_struct , got_access )
DEFINE_FIELD_X ( DukePlayer , player_struct , weapon_ang )
DEFINE_FIELD_X ( DukePlayer , player_struct , firstaid_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , actor )
DEFINE_FIELD_X ( DukePlayer , player_struct , one_parallax_sectnum )
DEFINE_FIELD_X ( DukePlayer , player_struct , over_shoulder_on )
DEFINE_FIELD_X ( DukePlayer , player_struct , fist_incs )
DEFINE_FIELD_X ( DukePlayer , player_struct , cheat_phase )
DEFINE_FIELD_X ( DukePlayer , player_struct , extra_extra8 )
DEFINE_FIELD_X ( DukePlayer , player_struct , quick_kick )
DEFINE_FIELD_X ( DukePlayer , player_struct , last_quick_kick )
DEFINE_FIELD_X ( DukePlayer , player_struct , heat_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , timebeforeexit )
DEFINE_FIELD_X ( DukePlayer , player_struct , customexitsound )
DEFINE_FIELD_X ( DukePlayer , player_struct , weaprecs )
DEFINE_FIELD_X ( DukePlayer , player_struct , weapreccnt )
DEFINE_FIELD_X ( DukePlayer , player_struct , interface_toggle_flag )
DEFINE_FIELD_X ( DukePlayer , player_struct , dead_flag )
DEFINE_FIELD_X ( DukePlayer , player_struct , show_empty_weapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , scuba_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , jetpack_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , steroids_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , shield_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , pycount )
DEFINE_FIELD_X ( DukePlayer , player_struct , frag_ps )
DEFINE_FIELD_X ( DukePlayer , player_struct , transporter_hold )
DEFINE_FIELD_X ( DukePlayer , player_struct , last_full_weapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , footprintshade )
DEFINE_FIELD_X ( DukePlayer , player_struct , boot_amount )
DEFINE_FIELD_X ( DukePlayer , player_struct , on_warping_sector )
DEFINE_FIELD_X ( DukePlayer , player_struct , footprintcount )
DEFINE_FIELD_X ( DukePlayer , player_struct , hbomb_on )
DEFINE_FIELD_X ( DukePlayer , player_struct , jumping_toggle )
DEFINE_FIELD_X ( DukePlayer , player_struct , rapid_fire_hold )
DEFINE_FIELD_X ( DukePlayer , player_struct , on_ground )
DEFINE_FIELD_X ( DukePlayer , player_struct , inven_icon )
DEFINE_FIELD_X ( DukePlayer , player_struct , buttonpalette )
DEFINE_FIELD_X ( DukePlayer , player_struct , jetpack_on )
DEFINE_FIELD_X ( DukePlayer , player_struct , spritebridge )
DEFINE_FIELD_X ( DukePlayer , player_struct , lastrandomspot )
DEFINE_FIELD_X ( DukePlayer , player_struct , scuba_on )
DEFINE_FIELD_X ( DukePlayer , player_struct , footprintpal )
DEFINE_FIELD_X ( DukePlayer , player_struct , heat_on )
DEFINE_FIELD_X ( DukePlayer , player_struct , holster_weapon )
DEFINE_FIELD_X ( DukePlayer , player_struct , falling_counter )
DEFINE_FIELD_X ( DukePlayer , player_struct , refresh_inventory )
DEFINE_FIELD_X ( DukePlayer , player_struct , toggle_key_flag )
DEFINE_FIELD_X ( DukePlayer , player_struct , knuckle_incs )
DEFINE_FIELD_X ( DukePlayer , player_struct , walking_snd_toggle )
DEFINE_FIELD_X ( DukePlayer , player_struct , palookup )
DEFINE_FIELD_X ( DukePlayer , player_struct , quick_kick_msg )
DEFINE_FIELD_X ( DukePlayer , player_struct , max_secret_rooms )
DEFINE_FIELD_X ( DukePlayer , player_struct , secret_rooms )
DEFINE_FIELD_X ( DukePlayer , player_struct , max_actors_killed )
DEFINE_FIELD_X ( DukePlayer , player_struct , actors_killed )
DEFINE_FIELD_X ( DukePlayer , player_struct , resurrected )
DEFINE_FIELD_X ( DukePlayer , player_struct , stairs )
DEFINE_FIELD_X ( DukePlayer , player_struct , detonate_count )
//DEFINE_FIELD_X(DukePlayer, player_struct, noise.X)
//DEFINE_FIELD_X(DukePlayer, player_struct, noise.Y)
DEFINE_FIELD_X ( DukePlayer , player_struct , noise_radius )
DEFINE_FIELD_X ( DukePlayer , player_struct , drink_timer )
DEFINE_FIELD_X ( DukePlayer , player_struct , eat_timer )
DEFINE_FIELD_X ( DukePlayer , player_struct , SlotWin )
DEFINE_FIELD_X ( DukePlayer , player_struct , recoil )
DEFINE_FIELD_X ( DukePlayer , player_struct , detonate_time )
DEFINE_FIELD_X ( DukePlayer , player_struct , yehaa_timer )
DEFINE_FIELD_X ( DukePlayer , player_struct , drink_amt )
DEFINE_FIELD_X ( DukePlayer , player_struct , eat )
DEFINE_FIELD_X ( DukePlayer , player_struct , drunkang )
DEFINE_FIELD_X ( DukePlayer , player_struct , eatang )
DEFINE_FIELD_X ( DukePlayer , player_struct , shotgun_state )
DEFINE_FIELD_X ( DukePlayer , player_struct , donoise )
DEFINE_FIELD_X ( DukePlayer , player_struct , keys )
DEFINE_FIELD_X ( DukePlayer , player_struct , drug_aspect )
DEFINE_FIELD_X ( DukePlayer , player_struct , drug_timer )
DEFINE_FIELD_X ( DukePlayer , player_struct , SeaSick )
DEFINE_FIELD_X ( DukePlayer , player_struct , MamaEnd )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_drink )
DEFINE_FIELD_X ( DukePlayer , player_struct , TiltStatus )
DEFINE_FIELD_X ( DukePlayer , player_struct , oTiltStatus )
DEFINE_FIELD_X ( DukePlayer , player_struct , VBumpNow )
DEFINE_FIELD_X ( DukePlayer , player_struct , VBumpTarget )
DEFINE_FIELD_X ( DukePlayer , player_struct , TurbCount )
DEFINE_FIELD_X ( DukePlayer , player_struct , drug_stat )
DEFINE_FIELD_X ( DukePlayer , player_struct , DrugMode )
DEFINE_FIELD_X ( DukePlayer , player_struct , lotag800kill )
DEFINE_FIELD_X ( DukePlayer , player_struct , sea_sick_stat )
DEFINE_FIELD_X ( DukePlayer , player_struct , hurt_delay2 )
DEFINE_FIELD_X ( DukePlayer , player_struct , nocheat )
DEFINE_FIELD_X ( DukePlayer , player_struct , OnMotorcycle )
DEFINE_FIELD_X ( DukePlayer , player_struct , OnBoat )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_underwater )
DEFINE_FIELD_X ( DukePlayer , player_struct , NotOnWater )
DEFINE_FIELD_X ( DukePlayer , player_struct , MotoOnGround )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_do_bump )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_bump_fast )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_on_oil )
DEFINE_FIELD_X ( DukePlayer , player_struct , moto_on_mud )
DEFINE_FIELD_X ( DukePlayer , player_struct , vehForwardScale )
DEFINE_FIELD_X ( DukePlayer , player_struct , vehReverseScale )
DEFINE_FIELD_X ( DukePlayer , player_struct , MotoSpeed )
DEFINE_FIELD_X ( DukePlayer , player_struct , vehTurnLeft )
DEFINE_FIELD_X ( DukePlayer , player_struct , vehTurnRight )
DEFINE_FIELD_X ( DukePlayer , player_struct , vehBraking )
DEFINE_FIELD_X ( DukePlayer , player_struct , holoduke_on )
2022-02-20 23:19:26 +00:00
DEFINE_FIELD_X ( DukePlayer , player_struct , actorsqu )
DEFINE_FIELD_X ( DukePlayer , player_struct , wackedbyactor )
DEFINE_FIELD_X ( DukePlayer , player_struct , on_crane )
DEFINE_FIELD_X ( DukePlayer , player_struct , somethingonplayer )
DEFINE_FIELD_X ( DukePlayer , player_struct , access_spritenum )
DEFINE_FIELD_X ( DukePlayer , player_struct , dummyplayersprite )
DEFINE_FIELD_X ( DukePlayer , player_struct , newOwner )
2022-11-12 20:55:14 +00:00
DEFINE_FIELD_X ( DukePlayer , player_struct , fric )
2022-01-25 23:57:52 +00:00
DEFINE_ACTION_FUNCTION ( _DukePlayer , IsFrozen )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
ACTION_RETURN_BOOL ( self - > GetActor ( ) - > spr . pal = = 1 & & self - > last_extra < 2 ) ;
}
DEFINE_ACTION_FUNCTION ( _DukePlayer , GetGameVar )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
PARAM_STRING ( name ) ;
PARAM_INT ( def ) ;
ACTION_RETURN_INT ( GetGameVar ( name , def , self - > GetActor ( ) , self - > GetPlayerNum ( ) ) . safeValue ( ) ) ;
}
2022-02-20 23:19:26 +00:00
void dukeplayer_backuppos ( player_struct * self )
{
self - > backuppos ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , backuppos , dukeplayer_backuppos )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
dukeplayer_backuppos ( self ) ;
return 0 ;
}
2022-11-12 20:55:14 +00:00
void dukeplayer_backupxyz ( player_struct * self )
{
2022-11-15 08:27:07 +00:00
self - > GetActor ( ) - > backuppos ( ) ;
2022-11-12 20:55:14 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , backupxyz , dukeplayer_backupxyz )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
dukeplayer_backupxyz ( self ) ;
return 0 ;
}
2022-02-20 23:19:26 +00:00
void dukeplayer_setpos ( player_struct * self , double x , double y , double z )
{
2022-11-21 02:39:48 +00:00
self - > GetActor ( ) - > spr . pos = { x , y , z + self - > GetActor ( ) - > viewzoffset } ;
2022-02-20 23:19:26 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , setpos , dukeplayer_setpos )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
PARAM_FLOAT ( x ) ;
PARAM_FLOAT ( y ) ;
PARAM_FLOAT ( z ) ;
dukeplayer_setpos ( self , x , y , z ) ;
return 0 ;
}
2022-11-19 14:40:35 +00:00
void dukeplayer_addpos ( player_struct * self , double x , double y , double z )
{
2022-11-21 02:30:26 +00:00
self - > GetActor ( ) - > spr . pos + = { x , y , z } ;
2022-11-19 14:40:35 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , addpos , dukeplayer_addpos )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
PARAM_FLOAT ( x ) ;
PARAM_FLOAT ( y ) ;
PARAM_FLOAT ( z ) ;
dukeplayer_addpos ( self , x , y , z ) ;
return 0 ;
}
2022-11-12 20:55:14 +00:00
void dukeplayer_settargetangle ( player_struct * self , double a , int backup )
{
2022-11-25 06:09:11 +00:00
self - > Angles . setYaw ( DAngle : : fromDeg ( a ) , backup ) ;
2022-11-12 20:55:14 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , settargetangle , dukeplayer_settargetangle )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
PARAM_FLOAT ( a ) ;
PARAM_BOOL ( bak ) ;
dukeplayer_settargetangle ( self , a , bak ) ;
return 0 ;
}
double dukeplayer_angle ( player_struct * self )
{
2022-11-25 11:30:40 +00:00
return self - > GetActor ( ) - > spr . Angles . Yaw . Degrees ( ) ;
2022-11-12 20:55:14 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , angle , dukeplayer_angle )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
ACTION_RETURN_FLOAT ( dukeplayer_angle ( self ) ) ;
}
2022-01-25 23:57:52 +00:00
2022-01-21 00:04:08 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , clearcameras , clearcameras )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
clearcameras ( self ) ;
return 0 ;
}
2022-11-21 20:33:27 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _DukePlayer , quickkill , quickkill )
{
PARAM_SELF_STRUCT_PROLOGUE ( player_struct ) ;
quickkill ( self ) ;
return 0 ;
}
2022-01-21 00:04:08 +00:00
2022-11-12 18:09:38 +00:00
static DDukeActor * duke_firstStat ( DukeStatIterator * it , int statnum )
{
it - > Reset ( statnum ) ;
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeStatIterator , First , duke_firstStat )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeStatIterator ) ;
PARAM_INT ( Sect ) ;
ACTION_RETURN_POINTER ( duke_firstStat ( self , Sect ) ) ;
}
static DDukeActor * duke_nextStat ( DukeStatIterator * it )
{
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeStatIterator , Next , duke_nextStat )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeStatIterator ) ;
ACTION_RETURN_POINTER ( duke_nextStat ( self ) ) ;
}
static DDukeActor * duke_firstSect ( DukeSectIterator * it , sectortype * sect )
{
if ( sect = = nullptr ) return nullptr ;
it - > Reset ( sect ) ;
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeSectIterator , First , duke_firstSect )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeSectIterator ) ;
PARAM_POINTER ( sect , sectortype ) ;
ACTION_RETURN_POINTER ( duke_firstSect ( self , sect ) ) ;
}
static DDukeActor * duke_nextSect ( DukeSectIterator * it )
{
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeSectIterator , Next , duke_nextSect )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeSectIterator ) ;
ACTION_RETURN_POINTER ( duke_nextSect ( self ) ) ;
}
static DDukeActor * duke_firstSprite ( DukeSpriteIterator * it )
{
it - > Reset ( ) ;
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeSpriteIterator , First , duke_firstSprite )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeSpriteIterator ) ;
ACTION_RETURN_POINTER ( duke_firstSprite ( self ) ) ;
}
static DDukeActor * duke_nextSprite ( DukeSpriteIterator * it )
{
return it - > Next ( ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeSpriteIterator , Next , duke_nextSprite )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeSpriteIterator ) ;
ACTION_RETURN_POINTER ( duke_nextSprite ( self ) ) ;
}
2022-11-15 09:17:23 +00:00
DDukeActor * DukeLevel_SpawnActor ( DukeLevel * self , sectortype * sect , double x , double y , double z , PClassActor * type , int shade , double scalex , double scaley , double angle , double vel , double zvel , DDukeActor * owner , int stat )
{
return SpawnActor ( sect , DVector3 ( x , y , z ) , type , shade , DVector2 ( scalex , scaley ) , DAngle : : fromDeg ( angle ) , vel , zvel , owner , stat ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , SpawnActor , DukeLevel_SpawnActor )
{
PARAM_SELF_STRUCT_PROLOGUE ( DukeLevel ) ;
PARAM_POINTER ( sect , sectortype ) ;
PARAM_FLOAT ( x ) ;
PARAM_FLOAT ( y ) ;
PARAM_FLOAT ( z ) ;
PARAM_CLASS ( type , DDukeActor ) ;
PARAM_INT ( shade ) ;
PARAM_FLOAT ( scalex ) ;
PARAM_FLOAT ( scaley ) ;
PARAM_FLOAT ( angle ) ;
PARAM_FLOAT ( vel ) ;
PARAM_FLOAT ( zvel ) ;
PARAM_OBJECT ( owner , DDukeActor ) ;
PARAM_INT ( stat ) ;
ACTION_RETURN_POINTER ( DukeLevel_SpawnActor ( self , sect , x , y , z , static_cast < PClassActor * > ( type ) , shade , scalex , scaley , angle , vel , zvel , owner , stat ) ) ;
}
2022-11-19 14:40:35 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , check_activator_motion , check_activator_motion )
{
PARAM_PROLOGUE ;
PARAM_INT ( lotag ) ;
ACTION_RETURN_INT ( check_activator_motion ( lotag ) ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , operatemasterswitches , operatemasterswitches )
{
PARAM_PROLOGUE ;
PARAM_INT ( lotag ) ;
operatemasterswitches ( lotag ) ;
return 0 ;
}
2022-11-20 12:57:51 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , operateactivators , operateactivators )
2022-11-19 14:40:35 +00:00
{
PARAM_PROLOGUE ;
PARAM_INT ( lotag ) ;
PARAM_POINTER ( p , player_struct ) ;
operateactivators ( lotag , p ) ;
return 0 ;
}
2022-11-20 12:57:51 +00:00
int duke_floorflags ( sectortype * sector )
{
2022-11-25 12:45:18 +00:00
return tileflags ( sector - > floorpicnum ) ;
2022-11-20 12:57:51 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , floorflags , duke_floorflags )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , sectortype ) ;
ACTION_RETURN_INT ( duke_floorflags ( sect ) ) ;
}
2022-11-24 06:42:17 +00:00
int duke_wallflags ( walltype * wal )
{
return tileflags ( wal - > picnum ) ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , wallflags , duke_wallflags )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , walltype ) ;
ACTION_RETURN_INT ( duke_wallflags ( sect ) ) ;
}
int duke_ismirror ( walltype * wal )
{
return wal - > picnum = = TILE_MIRROR | | wal - > overpicnum = = TILE_MIRROR ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , ismirror , duke_ismirror )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( wal , walltype ) ;
ACTION_RETURN_BOOL ( duke_ismirror ( wal ) ) ;
}
2022-11-20 12:57:51 +00:00
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , addcycler , addcycler )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , sectortype ) ;
PARAM_INT ( lotag ) ;
PARAM_INT ( shade ) ;
PARAM_INT ( shade2 ) ;
PARAM_INT ( hitag ) ;
PARAM_INT ( state ) ;
addcycler ( sect , lotag , shade , shade2 , hitag , state ) ;
return 0 ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , addtorch , addtorch )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , sectortype ) ;
PARAM_INT ( shade ) ;
PARAM_INT ( lotag ) ;
addtorch ( sect , shade , lotag ) ;
return 0 ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , addlightning , addlightning )
{
PARAM_PROLOGUE ;
PARAM_POINTER ( sect , sectortype ) ;
PARAM_INT ( shade ) ;
addlightning ( sect , shade ) ;
return 0 ;
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , addambient , addambient )
{
PARAM_PROLOGUE ;
PARAM_INT ( hitag ) ;
PARAM_INT ( lotag ) ;
ACTION_RETURN_INT ( addambient ( hitag , lotag ) ) ;
2022-11-21 20:33:27 +00:00
}
DEFINE_ACTION_FUNCTION_NATIVE ( _DukeLevel , resetswitch , resetswitch )
{
PARAM_PROLOGUE ;
PARAM_INT ( tag ) ;
resetswitch ( tag ) ;
2022-11-20 12:57:51 +00:00
return 0 ;
}
2022-11-21 20:33:27 +00:00
2022-11-14 09:23:54 +00:00
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , playerfriction ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , gravity ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , respawnactortime ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , bouncemineblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , respawnitemtime ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , morterblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , numfreezebounces ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , pipebombblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , rpgblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , seenineblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , shrinkerblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , tripbombblastradius ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , camerashitable ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , max_player_health ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , max_armour_amount ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , lasermode ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , freezerhurtowner ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , impact_damage ) ;
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , playerheight ) ;
2022-11-22 22:21:45 +00:00
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , gutsscale ) ;
2022-11-14 09:23:54 +00:00
DEFINE_FIELD_X ( DukeGameInfo , DukeGameInfo , displayflags ) ;
DEFINE_GLOBAL_UNSIZED ( gs )
2022-11-12 18:09:38 +00:00
2022-11-17 17:38:25 +00:00
DEFINE_FIELD_X ( DukeUserDefs , user_defs , god ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , cashman ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , eog ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , clipping ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , user_pals ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , from_bonus ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , last_level ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , secretlevel ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , const_visibility ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , coop ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , respawn_monsters ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , respawn_items ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , respawn_inventory ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , recstat ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , monsters_off ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , brightness ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , ffire ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , multimode ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , player_skill ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , marker ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , bomb_tag ) ;
DEFINE_FIELD_X ( DukeUserDefs , user_defs , cameraactor ) ;
2022-11-21 07:15:41 +00:00
DEFINE_FIELD_X ( DukeUserDefs , user_defs , chickenplant ) ;
2022-11-17 17:38:25 +00:00
DEFINE_GLOBAL_UNSIZED ( ud )
2022-11-14 22:55:46 +00:00
// this is only a temporary helper until weaponsandammosprites can be migrated to real class types. We absolutely do not want any access to tile numbers in the scripts - even now.
void tspritetype_setWeaponOrAmmoSprite ( tspritetype * targ , unsigned z )
{
if ( z < 15 )
{
targ - > picnum = gs . weaponsandammosprites [ z ] ;
}
}
DEFINE_ACTION_FUNCTION_NATIVE ( _tspritetype , setWeaponOrAmmoSprite , tspritetype_setWeaponOrAmmoSprite )
{
PARAM_SELF_STRUCT_PROLOGUE ( tspritetype ) ;
PARAM_INT ( z ) ;
tspritetype_setWeaponOrAmmoSprite ( self , z ) ;
return 0 ;
}
2022-11-24 06:42:17 +00:00
// this must still work around the lack of proper texture support on the script side.
DEFINE_ACTION_FUNCTION ( DDukeGenericDestructible , SetBroken )
{
PARAM_SELF_STRUCT_PROLOGUE ( DDukeActor ) ;
PARAM_INT ( bust ) ;
int tilenum = self - > IntVar ( bust ? NAME_brokenstate : NAME_spawnstate ) ;
2022-11-25 19:54:51 +00:00
if ( tilenum > = 0 ) self - > spr . picnum = tilenum ;
ACTION_RETURN_BOOL ( tilenum < 0 ) ;
2022-11-24 06:42:17 +00:00
}
2022-11-14 22:55:46 +00:00
2022-11-22 22:21:45 +00:00
void spawnguts ( DDukeActor * origin , PClass * type , int count )
{
IFVM ( DukeActor , spawnguts )
{
VMValue params [ ] = { ( DObject * ) origin , type , count } ;
VMCall ( func , params , 3 , nullptr , 0 ) ;
}
}
2022-02-04 16:36:38 +00:00
END_DUKE_NS