2019-05-19 04:16:48 +00:00
# ifndef ACMD_WRAPPER_H
# define ACMD_WRAPPER_H
2019-05-17 16:24:04 +00:00
# include <switch.h>
# include "acmd_imports.hpp"
# include "l2c_imports.hpp"
2019-05-19 21:46:19 +00:00
# include <initializer_list>
2019-05-17 16:24:04 +00:00
using namespace lib ;
2019-05-20 23:07:01 +00:00
u64 load_module ( u64 module_accessor , u64 module_offset ) {
2019-05-27 19:33:40 +00:00
return LOAD64 ( module_accessor + module_offset ) ;
2019-05-20 23:07:01 +00:00
}
2019-05-19 21:46:19 +00:00
2019-05-20 23:07:01 +00:00
void * load_module_impl ( u64 module , u64 function_offset ) {
2019-05-27 19:33:40 +00:00
u64 function_impl = LOAD64 ( module ) + function_offset ;
return ( void * ) LOAD64 ( function_impl ) ;
2019-05-20 23:07:01 +00:00
}
2019-05-19 21:46:19 +00:00
2019-05-27 19:33:40 +00:00
namespace app : : sv_math {
int rand ( u64 , int ) asm ( " _ZN3app7sv_math4randEN3phx6Hash40Ei " ) LINKABLE ;
2019-05-19 21:46:19 +00:00
}
2019-05-27 19:33:40 +00:00
namespace app : : sv_system {
u64 battle_object ( u64 ) asm ( " _ZN3app9sv_system13battle_objectEP9lua_State " ) LINKABLE ;
u64 battle_object_module_accessor ( u64 ) asm ( " _ZN3app9sv_system29battle_object_module_accessorEP9lua_State " ) LINKABLE ;
u8 battle_object_category ( u64 ) asm ( " _ZN3app9sv_system22battle_object_categoryEP9lua_State " ) LINKABLE ;
int battle_object_kind ( u64 ) asm ( " _ZN3app9sv_system18battle_object_kindEP9lua_State " ) LINKABLE ;
2019-05-21 15:41:05 +00:00
}
2019-05-27 19:33:40 +00:00
namespace app : : lua_bind {
namespace AttackModule {
void clear_all ( u64 ) asm ( " _ZN3app8lua_bind28AttackModule__clear_all_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
}
namespace ControlModule {
bool check_button_on ( u64 , int ) asm ( " _ZN3app8lua_bind35ControlModule__check_button_on_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
2019-06-04 07:08:25 +00:00
bool check_button_trigger ( u64 , int ) asm ( " _ZN3app8lua_bind40ControlModule__check_button_trigger_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
2019-05-27 19:33:40 +00:00
}
2019-06-04 07:08:25 +00:00
namespace DamageModule {
float damage ( u64 , int ) asm ( " _ZN3app8lua_bind25DamageModule__damage_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
void add_damage ( u64 , float , int ) asm ( " _ZN3app8lua_bind29DamageModule__add_damage_implEPNS_26BattleObjectModuleAccessorEfi " ) LINKABLE ;
}
2019-05-27 19:33:40 +00:00
namespace EffectModule {
// boma, effect, joint, pos, rot, size, random_pos, random_rot, NO_SCALE?, attr?, unkint1, unkint2
uint req_on_joint ( u64 , u64 , u64 , const Vector3f * , const Vector3f * , float a6 , const Vector3f * , const Vector3f * , bool , uint , int , int )
asm ( " _ZN3app8lua_bind31EffectModule__req_on_joint_implEPNS_26BattleObjectModuleAccessorEN3phx6Hash40ES4_RKNS3_8Vector3fES7_fS7_S7_bjii " ) LINKABLE ;
void kill_kind ( u64 , u64 , bool , bool ) asm ( " _ZN3app8lua_bind28EffectModule__kill_kind_implEPNS_26BattleObjectModuleAccessorEN3phx6Hash40Ebb " ) LINKABLE ;
}
namespace FighterManager {
u64 get_fighter_information ( u64 , int ) asm ( " _ZN3app8lua_bind44FighterManager__get_fighter_information_implEPNS_14FighterManagerENS_14FighterEntryIDE " ) LINKABLE ;
}
namespace FighterInformation {
bool is_operation_cpu ( u64 ) asm ( " _ZN3app8lua_bind41FighterInformation__is_operation_cpu_implEPNS_18FighterInformationE " ) LINKABLE ;
}
2019-06-04 07:08:25 +00:00
namespace FighterStatusModuleImpl {
u64 set_fighter_status_data ( u64 , bool , int , bool , bool , bool , u64 , uint , uint , uint ) asm ( " _ZN3app8lua_bind53FighterStatusModuleImpl__set_fighter_status_data_implEPNS_26BattleObjectModuleAccessorEbibbbmjjj " ) LINKABLE ;
}
2019-05-27 19:33:40 +00:00
namespace MotionModule {
float frame ( u64 ) asm ( " _ZN3app8lua_bind24MotionModule__frame_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
u64 motion_kind ( u64 ) asm ( " _ZN3app8lua_bind30MotionModule__motion_kind_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
}
namespace PostureModule {
float lr ( u64 ) asm ( " _ZN3app8lua_bind22PostureModule__lr_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
2019-06-04 07:08:25 +00:00
void set_lr ( u64 , float ) asm ( " _ZN3app8lua_bind26PostureModule__set_lr_implEPNS_26BattleObjectModuleAccessorEf " ) LINKABLE ;
2019-05-27 19:33:40 +00:00
float pos_x ( u64 ) asm ( " _ZN3app8lua_bind25PostureModule__pos_x_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
float pos_y ( u64 ) asm ( " _ZN3app8lua_bind25PostureModule__pos_y_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
2019-06-04 07:08:25 +00:00
void set_pos ( u64 , const Vector3f * ) asm ( " _ZN3app8lua_bind27PostureModule__set_pos_implEPNS_26BattleObjectModuleAccessorERKN3phx8Vector3fE " ) LINKABLE ;
2019-05-27 19:33:40 +00:00
}
namespace StatusModule {
u64 change_status_request_from_script ( u64 , int , bool ) asm ( " _ZN3app8lua_bind52StatusModule__change_status_request_from_script_implEPNS_26BattleObjectModuleAccessorEib " ) LINKABLE ;
int status_kind ( u64 ) asm ( " _ZN3app8lua_bind30StatusModule__status_kind_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
int situation_kind ( u64 ) asm ( " _ZN3app8lua_bind33StatusModule__situation_kind_implEPNS_26BattleObjectModuleAccessorE " ) LINKABLE ;
2019-06-04 07:08:25 +00:00
u64 set_situation_kind ( u64 , int , bool ) asm ( " _ZN3app8lua_bind37StatusModule__set_situation_kind_implEPNS_26BattleObjectModuleAccessorENS_13SituationKindEb " ) LINKABLE ;
u64 init_settings ( u64 , int , int , uint , int , bool , int , int , int , int ) asm ( " _ZN3app8lua_bind32StatusModule__init_settings_implEPNS_26BattleObjectModuleAccessorENS_13SituationKindEijNS_20GroundCliffCheckKindEbiiii " ) LINKABLE ;
2019-05-27 19:33:40 +00:00
}
namespace WorkModule {
float get_float ( u64 , int ) asm ( " _ZN3app8lua_bind26WorkModule__get_float_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
2019-05-28 20:48:35 +00:00
bool get_int ( u64 , int ) asm ( " _ZN3app8lua_bind24WorkModule__get_int_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ; // this function must return a bool, otherwise Pokemon Trainer fails to load
2019-05-27 19:33:40 +00:00
void inc_int ( u64 , int ) asm ( " _ZN3app8lua_bind24WorkModule__inc_int_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
float get_param_float ( u64 , u64 , u64 ) asm ( " _ZN3app8lua_bind32WorkModule__get_param_float_implEPNS_26BattleObjectModuleAccessorEmm " ) LINKABLE ;
int get_param_int ( u64 , u64 , u64 ) asm ( " _ZN3app8lua_bind30WorkModule__get_param_int_implEPNS_26BattleObjectModuleAccessorEmm " ) LINKABLE ;
void on_flag ( u64 , int ) asm ( " _ZN3app8lua_bind24WorkModule__on_flag_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
void off_flag ( u64 , int ) asm ( " _ZN3app8lua_bind25WorkModule__off_flag_implEPNS_26BattleObjectModuleAccessorEi " ) LINKABLE ;
float set_float ( u64 , float , int ) asm ( " _ZN3app8lua_bind26WorkModule__set_float_implEPNS_26BattleObjectModuleAccessorEfi " ) LINKABLE ;
int set_int ( u64 , int , int ) asm ( " _ZN3app8lua_bind24WorkModule__set_int_implEPNS_26BattleObjectModuleAccessorEii " ) LINKABLE ;
}
2019-05-17 16:24:04 +00:00
}
2019-05-27 19:33:40 +00:00
struct ACMD {
L2CAgent * l2c_agent ;
u64 module_accessor ;
ACMD ( L2CAgent * agent ) {
l2c_agent = agent ;
module_accessor = app : : sv_system : : battle_object_module_accessor ( l2c_agent - > lua_state_agent ) ;
}
void frame ( float f ) {
l2c_agent - > clear_lua_stack ( ) ;
L2CValue frame_val ( f ) ;
l2c_agent - > push_lua_stack ( & frame_val ) ;
app : : sv_animcmd : : frame ( l2c_agent - > lua_state_agent , f ) ;
l2c_agent - > clear_lua_stack ( ) ;
}
void wait ( float f ) {
l2c_agent - > clear_lua_stack ( ) ;
L2CValue frame_val ( f ) ;
l2c_agent - > push_lua_stack ( & frame_val ) ;
app : : sv_animcmd : : wait ( l2c_agent - > lua_state_agent , f ) ;
l2c_agent - > clear_lua_stack ( ) ;
}
bool is_excute ( ) {
l2c_agent - > clear_lua_stack ( ) ;
app : : sv_animcmd : : is_excute ( l2c_agent - > lua_state_agent ) ;
L2CValue is_excute ;
l2c_agent - > get_lua_stack ( 1 , & is_excute ) ;
bool excute = ( bool ) ( is_excute ) ;
l2c_agent - > clear_lua_stack ( ) ;
return excute ;
}
void wrap ( u64 ( * acmd_func ) ( u64 ) , std : : initializer_list < L2CValue > list ) {
l2c_agent - > clear_lua_stack ( ) ;
for ( L2CValue elem : list )
l2c_agent - > push_lua_stack ( & elem ) ;
acmd_func ( l2c_agent - > lua_state_agent ) ;
l2c_agent - > clear_lua_stack ( ) ;
}
void ATTACK (
u64 i1 , // ID
u64 i2 , // Part
u64 h1 , // Bone
float f1 , // Damage
u64 i3 , // Angle
u64 i4 , // KBG
u64 i5 , // FKB
u64 i6 , // BKB
float f2 , // Size
float f3 , // X
float f4 , // Y
float f5 , // Z
// X2
// Y2
// Z2
float f6 , // Hitlag
float f7 , // SDI
u64 i7 , // Clang/Rebound
u64 i8 , // Facing Restriction
u64 i9 , // Fixed Weight
u64 i10 , // Shield Damage
float f8 , // Trip Chance
u64 i11 , // Rehit Rate
u64 i12 , // Reflectable
u64 i13 , // Absorbable
u64 i14 , // Flinchless
u64 i15 , // Disable Hitlag
u64 i16 , // Direct
u64 i17 , // Ground/Air
u64 i18 , // Hit Bits
u64 i19 , // Collision Bits
u64 i20 , // Friendly Fire
u64 h2 , // Effect
u64 i21 , // SFX Level
u64 i22 , // SFX Type
u64 i23 ) { // Move Type
wrap ( app : : sv_animcmd : : ATTACK , {
L2CValue ( i1 ) , L2CValue ( i2 ) , L2CValue ( h1 ) , L2CValue ( f1 ) ,
L2CValue ( i3 ) , L2CValue ( i4 ) , L2CValue ( i5 ) , L2CValue ( i6 ) ,
L2CValue ( f2 ) , L2CValue ( f3 ) , L2CValue ( f4 ) , L2CValue ( f5 ) ,
L2CValue ( ) , L2CValue ( ) , L2CValue ( ) , L2CValue ( f6 ) ,
L2CValue ( f7 ) , L2CValue ( i7 ) , L2CValue ( i8 ) , L2CValue ( i9 ) ,
L2CValue ( i10 ) , L2CValue ( f8 ) , L2CValue ( i11 ) , L2CValue ( i12 ) ,
L2CValue ( i13 ) , L2CValue ( i14 ) , L2CValue ( i15 ) , L2CValue ( i16 ) ,
L2CValue ( i17 ) , L2CValue ( i18 ) , L2CValue ( i19 ) , L2CValue ( i20 ) ,
L2CValue ( h2 ) , L2CValue ( i21 ) , L2CValue ( i22 ) , L2CValue ( i23 )
} ) ;
}
void ATTACK (
u64 i1 , // ID
u64 i2 , // Part
u64 h1 , // Bone
float f1 , // Damage
u64 i3 , // Angle
u64 i4 , // KBG
u64 i5 , // FKB
u64 i6 , // BKB
float f2 , // Size
float f3 , // X
float f4 , // Y
float f5 , // Z
float fX2 , // X2
float fY2 , // Y2
float fZ2 , // Z2
float f6 , // Hitlag
float f7 , // SDI
u64 i7 , // Clang/Rebound
u64 i8 , // Facing Restriction
u64 i9 , // Fixed Weight
u64 i10 , // Shield Damage
float f8 , // Trip Chance
u64 i11 , // Rehit Rate
u64 i12 , // Reflectable
u64 i13 , // Absorbable
u64 i14 , // Flinchless
u64 i15 , // Disable Hitlag
u64 i16 , // Direct
u64 i17 , // Ground/Air
u64 i18 , // Hit Bits
u64 i19 , // Collision Bits
u64 i20 , // Friendly Fire
u64 h2 , // Effect
u64 i21 , // SFX Level
u64 i22 , // SFX Type
u64 i23 ) { // Move Type
wrap ( app : : sv_animcmd : : ATTACK , {
L2CValue ( i1 ) , L2CValue ( i2 ) , L2CValue ( h1 ) , L2CValue ( f1 ) ,
L2CValue ( i3 ) , L2CValue ( i4 ) , L2CValue ( i5 ) , L2CValue ( i6 ) ,
L2CValue ( f2 ) , L2CValue ( f3 ) , L2CValue ( f4 ) , L2CValue ( f5 ) ,
L2CValue ( fX2 ) , L2CValue ( fY2 ) , L2CValue ( fZ2 ) , L2CValue ( f6 ) ,
L2CValue ( f7 ) , L2CValue ( i7 ) , L2CValue ( i8 ) , L2CValue ( i9 ) ,
L2CValue ( i10 ) , L2CValue ( f8 ) , L2CValue ( i11 ) , L2CValue ( i12 ) ,
L2CValue ( i13 ) , L2CValue ( i14 ) , L2CValue ( i15 ) , L2CValue ( i16 ) ,
L2CValue ( i17 ) , L2CValue ( i18 ) , L2CValue ( i19 ) , L2CValue ( i20 ) ,
L2CValue ( h2 ) , L2CValue ( i21 ) , L2CValue ( i22 ) , L2CValue ( i23 )
} ) ;
}
2019-05-19 04:16:48 +00:00
} ;
2019-05-27 19:33:40 +00:00
# endif // ACMD_WRAPPER_H