Allow virtual functions in NACT

This essentially reverts commit 7ffa8bc. With the new "ASYNCIFY_ADD"
emscripten option, we no longer need this workaround.
This commit is contained in:
kichikuou
2020-08-08 12:16:39 +09:00
parent 4526ffa517
commit 0e9bc5a10b
3 changed files with 213 additions and 176 deletions
+1
View File
@@ -38,6 +38,7 @@ elseif (EMSCRIPTEN)
"SHELL:-s ASYNCIFY=1 -s ASYNCIFY_IGNORE_INDIRECT=1"
"SHELL:-s ALLOW_MEMORY_GROWTH=1"
"SHELL:-s NO_EXIT_RUNTIME=1"
"SHELL:-s ASYNCIFY_ADD=\"['NACT::execute()']\""
"SHELL:-s EXPORTED_FUNCTIONS=\"['_main','_ags_setAntialiasedStringMode']\""
"SHELL:-s EXTRA_EXPORTED_RUNTIME_METHODS=\"['getValue','getMemory','addRunDependency','removeRunDependency']\"")
+39 -50
View File
@@ -123,17 +123,7 @@ void NACT::mainloop()
int sleep_cnt = 0;
while(!terminate) {
switch (sys_ver) {
case 1:
execute(static_cast<NACT_Sys1*>(this));
break;
case 2:
execute(static_cast<NACT_Sys2*>(this));
break;
case 3:
execute(static_cast<NACT_Sys3*>(this));
break;
}
execute();
// 512コマンド実行毎にSleep(10)
if(!(sleep_cnt = (sleep_cnt + 1) & 0x1ff)) {
SDL_Delay(10);
@@ -143,8 +133,7 @@ void NACT::mainloop()
// コマンドパーサ
template <class T>
void NACT::execute(T* impl)
void NACT::execute()
{
// アドレスの確認
if(scenario_addr < 2 || scenario_addr >= scenario_size) {
@@ -161,7 +150,7 @@ void NACT::execute(T* impl)
}
if(sys_ver == 1 && scenario_page == 0 && scenario_addr == 2) {
impl->opening();
opening();
}
// 1コマンド実行
@@ -176,117 +165,117 @@ void NACT::execute(T* impl)
if(verb_obj && cmd != '[' && cmd != ':') {
// 動詞-目的語メニューの表示
scenario_addr--;
impl->cmd_open_verb();
cmd_open_verb();
return;
}
switch(cmd) {
case '!':
impl->cmd_calc();
cmd_calc();
break;
case '{':
impl->cmd_branch();
cmd_branch();
break;
case '}':
break;
case '@':
impl->cmd_label_jump();
cmd_label_jump();
break;
case '\\':
impl->cmd_label_call();
cmd_label_call();
break;
case '&':
impl->cmd_page_jump();
cmd_page_jump();
break;
case '%':
impl->cmd_page_call();
cmd_page_call();
break;
case '$':
impl->cmd_set_menu();
cmd_set_menu();
break;
case '[':
impl->cmd_set_verbobj();
cmd_set_verbobj();
break;
case ':':
impl->cmd_set_verbobj2();
cmd_set_verbobj2();
break;
case ']':
impl->cmd_open_menu();
cmd_open_menu();
break;
case 'A':
impl->cmd_a();
cmd_a();
break;
case 'B':
impl->cmd_b();
cmd_b();
break;
case 'D':
impl->cmd_d();
cmd_d();
break;
case 'E':
impl->cmd_e();
cmd_e();
break;
case 'F':
impl->cmd_f();
cmd_f();
break;
case 'G':
impl->cmd_g();
cmd_g();
break;
case 'H':
impl->cmd_h();
cmd_h();
break;
case 'I':
impl->cmd_i();
cmd_i();
break;
case 'J':
impl->cmd_j();
cmd_j();
break;
case 'K':
impl->cmd_k();
cmd_k();
break;
case 'L':
impl->cmd_l();
cmd_l();
break;
case 'M':
impl->cmd_m();
cmd_m();
break;
case 'N':
impl->cmd_n();
cmd_n();
break;
case 'O':
impl->cmd_o();
cmd_o();
break;
case 'P':
impl->cmd_p();
cmd_p();
break;
case 'Q':
impl->cmd_q();
cmd_q();
break;
case 'R':
impl->cmd_r();
cmd_r();
break;
case 'S':
impl->cmd_s();
cmd_s();
break;
case 'T':
impl->cmd_t();
cmd_t();
break;
case 'U':
impl->cmd_u();
cmd_u();
break;
case 'V':
impl->cmd_v();
cmd_v();
break;
case 'W':
impl->cmd_w();
cmd_w();
break;
case 'X':
impl->cmd_x();
cmd_x();
break;
case 'Y':
impl->cmd_y();
cmd_y();
break;
case 'Z':
impl->cmd_z();
cmd_z();
break;
default:
if(cmd == 0x20 || (0xa1 <= cmd && cmd <= 0xdd)) {
+173 -126
View File
@@ -95,7 +95,7 @@ protected:
MAKO* mako;
// コマンドパーサ
template <class T> void execute(T* impl);
void execute();
void load_scenario(int page);
bool fatal_error = false;
@@ -124,6 +124,52 @@ protected:
char tvar_stack[30][10][22];
// int tvar_index;
// Commands
virtual void cmd_calc() = 0;
virtual void cmd_branch() = 0;
virtual void cmd_label_jump() = 0;
virtual void cmd_label_call() = 0;
virtual void cmd_page_jump() = 0;
virtual void cmd_page_call() = 0;
virtual void cmd_set_menu() = 0;
virtual void cmd_open_menu() = 0;
virtual void cmd_set_verbobj() = 0;
virtual void cmd_set_verbobj2() = 0;
virtual void cmd_open_verb() = 0;
virtual void cmd_open_obj(int verb) = 0;
virtual void cmd_a() = 0;
virtual void cmd_b() = 0;
virtual void cmd_d() = 0;
virtual void cmd_e() = 0;
virtual void cmd_f() = 0;
virtual void cmd_g() = 0;
virtual void cmd_h() = 0;
virtual void cmd_i() = 0;
virtual void cmd_j() = 0;
virtual void cmd_k() = 0;
virtual void cmd_l() = 0;
virtual void cmd_m() = 0;
virtual void cmd_n() = 0;
virtual void cmd_o() = 0;
virtual void cmd_p() = 0;
virtual void cmd_q() = 0;
virtual void cmd_r() = 0;
virtual void cmd_s() = 0;
virtual void cmd_t() = 0;
virtual void cmd_u() = 0;
virtual void cmd_v() = 0;
virtual void cmd_w() = 0;
virtual void cmd_x() = 0;
virtual void cmd_y() = 0;
virtual void cmd_z() = 0;
// SYSTEM1
virtual void opening() {}
// DPS
bool text_refresh;
@@ -152,6 +198,8 @@ protected:
int pcm[MAX_PCM];
// 下位関数
virtual uint16 cali() = 0;
virtual uint16 cali2() = 0;
uint8 getd() { return scenario_data[scenario_addr++]; }
uint16 getw() {
uint16 val = scenario_data[scenario_addr] | (scenario_data[scenario_addr + 1] << 8);
@@ -216,147 +264,146 @@ public:
void fatal(const char* msg, ...);
};
class NACT_Sys1 : public NACT {
class NACT_Sys1 final : public NACT {
public:
NACT_Sys1(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
void cmd_calc();
void cmd_branch();
void cmd_label_jump();
void cmd_label_call();
void cmd_page_jump();
void cmd_page_call();
void cmd_set_menu();
void cmd_open_menu();
void cmd_set_verbobj();
void cmd_set_verbobj2();
void cmd_open_verb();
void cmd_open_obj(int verb);
void cmd_a();
void cmd_b();
void cmd_d();
void cmd_e();
void cmd_f();
void cmd_g();
void cmd_h();
void cmd_i();
void cmd_j();
void cmd_k();
void cmd_l();
void cmd_m();
void cmd_n();
void cmd_o();
void cmd_p();
void cmd_q();
void cmd_r();
void cmd_s();
void cmd_t();
void cmd_u();
void cmd_v();
void cmd_w();
void cmd_x();
void cmd_y();
void cmd_z();
void opening();
protected:
void cmd_calc() override;
void cmd_branch() override;
void cmd_label_jump() override;
void cmd_label_call() override;
void cmd_page_jump() override;
void cmd_page_call() override;
void cmd_set_menu() override;
void cmd_open_menu() override;
void cmd_set_verbobj() override;
void cmd_set_verbobj2() override;
void cmd_open_verb() override;
void cmd_open_obj(int verb) override;
void cmd_a() override;
void cmd_b() override;
void cmd_d() override;
void cmd_e() override;
void cmd_f() override;
void cmd_g() override;
void cmd_h() override;
void cmd_i() override;
void cmd_j() override;
void cmd_k() override;
void cmd_l() override;
void cmd_m() override;
void cmd_n() override;
void cmd_o() override;
void cmd_p() override;
void cmd_q() override;
void cmd_r() override;
void cmd_s() override;
void cmd_t() override;
void cmd_u() override;
void cmd_v() override;
void cmd_w() override;
void cmd_x() override;
void cmd_y() override;
void cmd_z() override;
void opening() override;
uint16 cali() override;
uint16 cali2() override;
private:
uint16 cali();
uint16 cali2();
// Intruder Zコマンド
int paint_x;
int paint_y;
int map_page;
};
class NACT_Sys2 : public NACT {
class NACT_Sys2 final : public NACT {
public:
NACT_Sys2(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
void cmd_calc();
void cmd_branch();
void cmd_label_jump();
void cmd_label_call();
void cmd_page_jump();
void cmd_page_call();
void cmd_set_menu();
void cmd_open_menu();
void cmd_set_verbobj();
void cmd_set_verbobj2();
void cmd_open_verb();
void cmd_open_obj(int verb);
void cmd_a();
void cmd_b();
void cmd_d();
void cmd_e();
void cmd_f();
void cmd_g();
void cmd_h();
void cmd_i();
void cmd_j();
void cmd_k();
void cmd_l();
void cmd_m();
void cmd_n();
void cmd_o();
void cmd_p();
void cmd_q();
void cmd_r();
void cmd_s();
void cmd_t();
void cmd_u();
void cmd_v();
void cmd_w();
void cmd_x();
void cmd_y();
void cmd_z();
void opening() {}
private:
uint16 cali();
uint16 cali2();
protected:
void cmd_calc() override;
void cmd_branch() override;
void cmd_label_jump() override;
void cmd_label_call() override;
void cmd_page_jump() override;
void cmd_page_call() override;
void cmd_set_menu() override;
void cmd_open_menu() override;
void cmd_set_verbobj() override;
void cmd_set_verbobj2() override;
void cmd_open_verb() override;
void cmd_open_obj(int verb) override;
void cmd_a() override;
void cmd_b() override;
void cmd_d() override;
void cmd_e() override;
void cmd_f() override;
void cmd_g() override;
void cmd_h() override;
void cmd_i() override;
void cmd_j() override;
void cmd_k() override;
void cmd_l() override;
void cmd_m() override;
void cmd_n() override;
void cmd_o() override;
void cmd_p() override;
void cmd_q() override;
void cmd_r() override;
void cmd_s() override;
void cmd_t() override;
void cmd_u() override;
void cmd_v() override;
void cmd_w() override;
void cmd_x() override;
void cmd_y() override;
void cmd_z() override;
uint16 cali() override;
uint16 cali2() override;
};
class NACT_Sys3 : public NACT {
class NACT_Sys3 final : public NACT {
public:
NACT_Sys3(uint32 crc32_a, uint32 crc32_b, const char* font_file, const char* playlist);
void cmd_calc();
void cmd_branch();
void cmd_label_jump();
void cmd_label_call();
void cmd_page_jump();
void cmd_page_call();
void cmd_set_menu();
void cmd_open_menu();
void cmd_set_verbobj();
void cmd_set_verbobj2();
void cmd_open_verb();
void cmd_open_obj(int verb);
void cmd_a();
void cmd_b();
void cmd_d();
void cmd_e();
void cmd_f();
void cmd_g();
void cmd_h();
void cmd_i();
void cmd_j();
void cmd_k();
void cmd_l();
void cmd_m();
void cmd_n();
void cmd_o();
void cmd_p();
void cmd_q();
void cmd_r();
void cmd_s();
void cmd_t();
void cmd_u();
void cmd_v();
void cmd_w();
void cmd_x();
void cmd_y();
void cmd_z();
void opening() {}
protected:
void cmd_calc() override;
void cmd_branch() override;
void cmd_label_jump() override;
void cmd_label_call() override;
void cmd_page_jump() override;
void cmd_page_call() override;
void cmd_set_menu() override;
void cmd_open_menu() override;
void cmd_set_verbobj() override;
void cmd_set_verbobj2() override;
void cmd_open_verb() override;
void cmd_open_obj(int verb) override;
void cmd_a() override;
void cmd_b() override;
void cmd_d() override;
void cmd_e() override;
void cmd_f() override;
void cmd_g() override;
void cmd_h() override;
void cmd_i() override;
void cmd_j() override;
void cmd_k() override;
void cmd_l() override;
void cmd_m() override;
void cmd_n() override;
void cmd_o() override;
void cmd_p() override;
void cmd_q() override;
void cmd_r() override;
void cmd_s() override;
void cmd_t() override;
void cmd_u() override;
void cmd_v() override;
void cmd_w() override;
void cmd_x() override;
void cmd_y() override;
void cmd_z() override;
uint16 cali() override;
uint16 cali2() override;
private:
uint16 cali();
uint16 cali2();
int menu_select(int num_items);
};