mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-01 03:18:07 +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);
|
||||
|
||||
|
||||
+1
-1
@@ -127,7 +127,7 @@ protected:
|
||||
char tvar_stack[30][10][22];
|
||||
// int tvar_index;
|
||||
|
||||
void message();
|
||||
void message(uint8 terminator);
|
||||
|
||||
// Commands
|
||||
virtual void cmd_calc() = 0;
|
||||
|
||||
@@ -212,6 +212,11 @@ void NACT_Sys1::cmd_branch()
|
||||
} else if(is_2byte_message(cmd)) {
|
||||
// message (2 bytes)
|
||||
getd();
|
||||
} else if (cmd == '\'' || cmd == '"') { // SysEng
|
||||
for (uint8_t c = getd(); c != cmd; c = getd()) {
|
||||
if (c == '\\')
|
||||
getd();
|
||||
}
|
||||
} else {
|
||||
if(cmd >= 0x20 && cmd < 0x7f) {
|
||||
fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
|
||||
+33
-15
@@ -171,15 +171,17 @@ void NACT_Sys2::cmd_branch()
|
||||
} else if(cmd == 'L') {
|
||||
getd();
|
||||
} else if(cmd == 'M') {
|
||||
for(;;) {
|
||||
uint8 val = getd();
|
||||
if(is_1byte_message(val)) {
|
||||
// message (1 byte)
|
||||
} else if(is_2byte_message(val)) {
|
||||
// message (2 bytes)
|
||||
getd();
|
||||
} else if(val == ':') {
|
||||
break;
|
||||
uint8 val = getd();
|
||||
if (val == '\'' || val == '"') { // SysEng
|
||||
for (uint8_t c = getd(); c != val; c = getd()) {
|
||||
if (c == '\\')
|
||||
getd();
|
||||
}
|
||||
} else {
|
||||
while (val != ':') {
|
||||
if(is_2byte_message(val))
|
||||
getd();
|
||||
val = getd();
|
||||
}
|
||||
}
|
||||
} else if(cmd == 'N') {
|
||||
@@ -262,6 +264,11 @@ void NACT_Sys2::cmd_branch()
|
||||
} else if(is_2byte_message(cmd)) {
|
||||
// message (2 bytes)
|
||||
getd();
|
||||
} else if (cmd == '\'' || cmd == '"') { // SysEng
|
||||
for (uint8_t c = getd(); c != cmd; c = getd()) {
|
||||
if (c == '\\')
|
||||
getd();
|
||||
}
|
||||
} else {
|
||||
if(cmd >= 0x20 && cmd < 0x7f) {
|
||||
fatal("Unknown Command: '%c' at page = %d, addr = %d", cmd, scenario_page, prev_addr);
|
||||
@@ -849,15 +856,26 @@ void NACT_Sys2::cmd_l()
|
||||
void NACT_Sys2::cmd_m()
|
||||
{
|
||||
char string[33];
|
||||
int d, p = 0;
|
||||
int p = 0;
|
||||
|
||||
while((d = getd()) != ':') {
|
||||
if(is_2byte_message(d)) {
|
||||
string[p++] = d;
|
||||
string[p++] = getd();
|
||||
} else {
|
||||
int d = getd();
|
||||
if (d == '\'' || d == '"') { // SysEng
|
||||
int terminator = d;
|
||||
while ((d = getd()) != terminator) {
|
||||
if (d == '\\')
|
||||
d = getd();
|
||||
string[p++] = d;
|
||||
}
|
||||
} else {
|
||||
while(d != ':') {
|
||||
if(is_2byte_message(d)) {
|
||||
string[p++] = d;
|
||||
string[p++] = getd();
|
||||
} else {
|
||||
string[p++] = d;
|
||||
}
|
||||
d = getd();
|
||||
}
|
||||
}
|
||||
string[p] = '\0';
|
||||
|
||||
|
||||
+17
-6
@@ -708,15 +708,26 @@ void NACT_Sys3::cmd_l()
|
||||
void NACT_Sys3::cmd_m()
|
||||
{
|
||||
char string[22];
|
||||
int d, p = 0;
|
||||
int p = 0;
|
||||
|
||||
while((d = getd()) != ':') {
|
||||
if(is_2byte_message(d)) {
|
||||
string[p++] = d;
|
||||
string[p++] = getd();
|
||||
} else {
|
||||
int d = getd();
|
||||
if (d == '\'' || d == '"') { // SysEng
|
||||
int terminator = d;
|
||||
while ((d = getd()) != terminator) {
|
||||
if (d == '\\')
|
||||
d = getd();
|
||||
string[p++] = d;
|
||||
}
|
||||
} else {
|
||||
while(d != ':') {
|
||||
if(is_2byte_message(d)) {
|
||||
string[p++] = d;
|
||||
string[p++] = getd();
|
||||
} else {
|
||||
string[p++] = d;
|
||||
}
|
||||
d = getd();
|
||||
}
|
||||
}
|
||||
string[p] = '\0';
|
||||
|
||||
|
||||
Reference in New Issue
Block a user