Rednukem: fix WW2GI events

This commit is contained in:
nukeykt 2020-02-08 01:00:05 +09:00 committed by Christoph Oelckers
parent d5e3be61c2
commit b9e9b25cc6

View file

@ -65,8 +65,6 @@ static int32_t C_SetScriptSize(int32_t size);
static intptr_t apScriptGameEventEnd[MAXEVENTS]; static intptr_t apScriptGameEventEnd[MAXEVENTS];
static intptr_t g_parsingActorPtr; static intptr_t g_parsingActorPtr;
static intptr_t g_scriptEventBreakOffset;
static intptr_t g_scriptEventChainOffset;
static intptr_t g_scriptEventOffset; static intptr_t g_scriptEventOffset;
static char *textptr; static char *textptr;
@ -1724,7 +1722,7 @@ static int32_t C_ParseCommand(int32_t loop)
} }
g_szCurrentBlockName[j] = 0; g_szCurrentBlockName[j] = 0;
// g_labelsOnly = 1; // g_labelsOnly = 1;
C_GetNextValue(LABEL_EVENT); C_GetNextValue(LABEL_DEFINE);
g_labelsOnly = 0; g_labelsOnly = 0;
g_scriptPtr--; g_scriptPtr--;
j= *g_scriptPtr; // type of event j= *g_scriptPtr; // type of event
@ -1738,15 +1736,7 @@ static int32_t C_ParseCommand(int32_t loop)
continue; continue;
} }
// if event has already been declared then store previous script location // if event has already been declared then store previous script location
if (!apScriptEvents[j]) apScriptEvents[j] = g_scriptEventOffset;
{
apScriptEvents[j] = g_scriptEventOffset;
}
else
{
g_scriptEventChainOffset = apScriptEvents[j];
apScriptEvents[j] = g_scriptEventOffset;
}
g_checkingIfElse = 0; g_checkingIfElse = 0;
@ -2152,7 +2142,7 @@ ifvar:
} }
case CON_LEFTBRACE: case CON_LEFTBRACE:
if (EDUKE32_PREDICT_FALSE(!(g_processingState || g_parsingActorPtr))) if (EDUKE32_PREDICT_FALSE(!(g_processingState || g_parsingActorPtr || g_scriptEventOffset)))
{ {
g_errorCnt++; g_errorCnt++;
C_ReportError(ERROR_SYNTAXERROR); C_ReportError(ERROR_SYNTAXERROR);
@ -2443,12 +2433,32 @@ ifvar:
continue; continue;
} }
case CON_ENDEVENT:
if (EDUKE32_PREDICT_FALSE(!g_scriptEventOffset))
{
C_ReportError(-1);
initprintf("%s:%d: error: found `endevent' without open `onevent'.\n",g_scriptFileName,g_lineNumber);
g_errorCnt++;
}
if (EDUKE32_PREDICT_FALSE(g_numBraces != 0))
{
C_ReportError(g_numBraces > 0 ? ERROR_OPENBRACKET : ERROR_CLOSEBRACKET);
g_errorCnt++;
}
g_scriptEventOffset = g_parsingActorPtr = 0;
g_currentEvent = -1;
Bsprintf(g_szCurrentBlockName,"(none)");
continue;
case CON_ENDA: case CON_ENDA:
if (EDUKE32_PREDICT_FALSE(!g_parsingActorPtr)) if (EDUKE32_PREDICT_FALSE(!g_parsingActorPtr || g_scriptEventOffset))
{ {
C_ReportError(-1); C_ReportError(-1);
initprintf("%s:%d: error: found `enda' without open `actor'.\n",g_scriptFileName,g_lineNumber); initprintf("%s:%d: error: found `enda' without open `actor'.\n",g_scriptFileName,g_lineNumber);
g_errorCnt++; g_errorCnt++;
g_scriptEventOffset = 0;
} }
if (EDUKE32_PREDICT_FALSE(g_numBraces != 0)) if (EDUKE32_PREDICT_FALSE(g_numBraces != 0))
{ {
@ -2719,8 +2729,8 @@ void C_ReportError(int32_t iError)
{ {
if (Bstrcmp(g_szCurrentBlockName,g_szLastBlockName)) if (Bstrcmp(g_szCurrentBlockName,g_szLastBlockName))
{ {
if (g_processingState || g_parsingActorPtr) if (g_scriptEventOffset || g_processingState || g_parsingActorPtr)
initprintf("%s: In %s `%s':\n",g_scriptFileName,g_parsingActorPtr?"actor":"state",g_szCurrentBlockName); initprintf("%s: In %s `%s':\n",g_scriptFileName,g_scriptEventOffset?"event":g_parsingActorPtr?"actor":"state",g_szCurrentBlockName);
else initprintf("%s: At top level:\n",g_scriptFileName); else initprintf("%s: At top level:\n",g_scriptFileName);
Bstrcpy(g_szLastBlockName,g_szCurrentBlockName); Bstrcpy(g_szLastBlockName,g_szCurrentBlockName);
} }