mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-09-29 18:38:13 +03:00
Support SysEng's quoted message commands
This commit is contained in:
+32
-17
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user