9 auto* max = vm->find_symbol_by_name(
"MAX_FIGHTAI");
10 int count = max !=
nullptr ? max->get_int() : 0;
14 fAi.resize(
size_t(count));
15 for(
size_t i=1;i<fAi.size();++i)
16 fAi[i] = loadAi(*vm,i);
26zenkit::IFightAi FightAi::loadAi(zenkit::DaedalusVm& vm, std::string_view name) {
27 auto id = vm.find_symbol_by_name(name);
30 auto* move = vm.find_symbol_by_name(
"C_FIGHTAI.MOVE");
35 auto fai = vm.init_opaque_instance(
id);
36 zenkit::IFightAi ret = {};
38 for(
size_t i=0; i<zenkit::IFightAi::move_count && i<move->count(); ++i) {
39 ret.move[i] = zenkit::FightAiMove(move->get_int(uint16_t(i), fai.get()));
43 catch(
const zenkit::DaedalusScriptError&) {
50FightAi::FA FightAi::loadAi(zenkit::DaedalusVm &vm,
size_t id) {
54 ret.enemy_prehit = loadAi(vm,name);
56 name =
string_frm(
"FA_ENEMY_STORMPREHIT_",
int(
id));
57 ret.enemy_stormprehit = loadAi(vm,name);
60 ret.my_w_combo = loadAi(vm,name);
63 ret.my_w_runto = loadAi(vm,name);
66 ret.my_w_strafe = loadAi(vm,name);
69 ret.my_w_focus = loadAi(vm,name);
72 ret.my_w_nofocus = loadAi(vm,name);
75 ret.my_g_combo = loadAi(vm,name);
78 ret.my_g_runto = loadAi(vm,name);
81 ret.my_g_strafe = loadAi(vm,name);
84 ret.my_g_focus = loadAi(vm,name);
87 ret.my_fk_focus = loadAi(vm,name);
89 name =
string_frm(
"FA_MY_G_FK_NOFOCUS_",
int(
id));
90 ret.my_g_fk_nofocus = loadAi(vm,name);
92 name =
string_frm(
"FA_MY_FK_FOCUS_FAR_",
int(
id));
93 ret.my_fk_focus_far = loadAi(vm,name);
95 name =
string_frm(
"FA_MY_FK_NOFOCUS_FAR_",
int(
id));
96 ret.my_fk_nofocus_far = loadAi(vm,name);
98 name =
string_frm(
"FA_MY_FK_FOCUS_MAG_",
int(
id));
99 ret.my_fk_focus_mag = loadAi(vm,name);
101 name =
string_frm(
"FA_MY_FK_NOFOCUS_MAG_",
int(
id));
102 ret.my_fk_nofocus_mag = loadAi(vm,name);
const FA & operator[](size_t i) const
std::unique_ptr< zenkit::DaedalusVm > createPhoenixVm(std::string_view datFile, const ScriptLang lang=ScriptLang::NONE)