Support SysEng's quoted message commands

This commit is contained in:
kichikuou
2021-03-18 09:38:10 +09:00
parent 20e06235d2
commit 9a8ebbdcb0
5 changed files with 88 additions and 39 deletions
+32 -17
View File
@@ -275,10 +275,13 @@ void NACT::execute()
case 'Z':
cmd_z();
break;
case '\'': case '"':
message(cmd);
break;
default:
if(is_1byte_message(cmd) || is_2byte_message(cmd)) {
ungetd();
message();
message(0);
} else {
if(cmd >= 0x20 && cmd < 0x7f) {
fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr);
@@ -290,24 +293,36 @@ void NACT::execute()
}
}
void NACT::message()
void NACT::message(uint8_t terminator)
{
uint8* begin = &scenario_data[scenario_addr];
uint8* end = begin;
for (;;) {
if (is_1byte_message(*end))
end++;
else if (is_2byte_message(*end))
end += 2;
else
break;
}
int len = end - begin;
scenario_addr += len;
char buf[200];
if (terminator) { // SysEng
uint8* p = &scenario_data[scenario_addr];
char* q = buf;
while (*p != terminator) {
if (*p == '\\')
p++;
*q++ = *p++;
}
*q = '\0';
scenario_addr += p + 1 - &scenario_data[scenario_addr];
} else {
uint8* begin = &scenario_data[scenario_addr];
uint8* end = begin;
for (;;) {
if (is_1byte_message(*end))
end++;
else if (is_2byte_message(*end))
end += 2;
else
break;
}
int len = end - begin;
scenario_addr += len;
char* buf = (char*)alloca(len + 1);
strncpy(buf, reinterpret_cast<char*>(begin), len);
buf[len] = '\0';
strncpy(buf, reinterpret_cast<char*>(begin), len);
buf[len] = '\0';
}
ags->draw_text(buf, text_wait_enb);