- a lot more commands transitioned

# Conflicts:
#	source/games/duke/src/zz_gamedef.cpp
This commit is contained in:
Christoph Oelckers 2020-05-13 08:40:26 +02:00
parent 79c7748e90
commit 422faa99e1
4 changed files with 31 additions and 362 deletions

View file

@ -1162,24 +1162,25 @@ int parsecommand(int tw) // for now just run an externally parsed command.
transnum(); transnum();
transnum(); transnum();
break; break;
#if 0
case concmd_else: case concmd_else:
if (checking_ifelse) if (checking_ifelse)
{ {
checking_ifelse--; checking_ifelse--;
tempscrptr = scriptptr; tempscrptr = scriptpos();
scriptptr++; //Leave a spot for the fail location scriptptr++; //Leave a spot for the fail location
parsecommand(); parsecommand();
*tempscrptr = (intptr_t)scriptptr; setscriptvalue(tempscrptr, scriptpos());
} }
else else
{ {
popscriptvalue(); popscriptvalue();
warningcount++; warningcount++;
Printf(TEXTCOLOR_RED " * WARNING.(%s, line %d) Found 'else' with no 'if', ignored.\n", fn, line_number); Printf(TEXTCOLOR_YELLOW " * WARNING.(%s, line %d) Found 'else' with no 'if', ignored.\n", fn, line_number);
} }
return 0; return 0;
#if 0
case concmd_setvar: case concmd_setvar:
case concmd_addvar: case concmd_addvar:
// syntax: [rand|add|set]var <var1> <const1> // syntax: [rand|add|set]var <var1> <const1>
@ -1509,12 +1510,15 @@ int parsecommand(int tw) // for now just run an externally parsed command.
setscriptvalue(tempscrptr, scriptpos()); setscriptvalue(tempscrptr, scriptpos());
checking_ifelse++; checking_ifelse++;
return 0; return 0;
#if 0
case concmd_leftbrace: case concmd_leftbrace:
num_squigilly_brackets++; num_squigilly_brackets++;
#if 0
do do
done = parsecommand(); done = parsecommand();
while (done == 0); while (done == 0);
#else // TRANSITIONAL
C_ParseCommand(1);
#endif
return 0; return 0;
case concmd_rightbrace: case concmd_rightbrace:
num_squigilly_brackets--; num_squigilly_brackets--;
@ -1526,19 +1530,8 @@ int parsecommand(int tw) // for now just run an externally parsed command.
return 1; return 1;
case concmd_betaname: case concmd_betaname:
popscriptvalue(); popscriptvalue();
j = 0;
// not used anywhere, just parse over it. // not used anywhere, just parse over it.
while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) // JBF 20040127: end of file checked skiptoendofline();
{
j++; textptr++;
}
return 0;
case concmd_comment:
popscriptvalue(); //Negate the rem
while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0) // JBF 20040127: end of file checked
textptr++;
// line_number++;
return 0; return 0;
case concmd_definevolumename: case concmd_definevolumename:
@ -1557,7 +1550,7 @@ int parsecommand(int tw) // for now just run an externally parsed command.
textptr++, i++; textptr++, i++;
} }
parsebuffer.Push(0); parsebuffer.Push(0);
gVolumeNames[j] = FStringTable::MakeMacro(textptr, i); gVolumeNames[j] = FStringTable::MakeMacro(parsebuffer.Data(), i);
return 0; return 0;
case concmd_defineskillname: case concmd_defineskillname:
popscriptvalue(); popscriptvalue();
@ -1575,7 +1568,7 @@ int parsecommand(int tw) // for now just run an externally parsed command.
textptr++, i++; textptr++, i++;
} }
parsebuffer.Push(0); parsebuffer.Push(0);
gSkillNames[j] = FStringTable::MakeMacro(textptr, i); gSkillNames[j] = FStringTable::MakeMacro(parsebuffer.Data(), i);
return 0; return 0;
case concmd_definelevelname: case concmd_definelevelname:
@ -1596,7 +1589,7 @@ int parsecommand(int tw) // for now just run an externally parsed command.
textptr++, i++; textptr++, i++;
} }
parsebuffer.Push(0); parsebuffer.Push(0);
mapList[j * MAXLEVELS + k].SetFileName(tempbuf); mapList[j * MAXLEVELS + k].SetFileName(parsebuffer.Data());
while (*textptr == ' ') textptr++; while (*textptr == ' ') textptr++;
@ -1685,6 +1678,7 @@ int parsecommand(int tw) // for now just run an externally parsed command.
S_DefineSound(k, parsebuffer.Data(), ps, pe, pr, m, vo, 1.f); S_DefineSound(k, parsebuffer.Data(), ps, pe, pr, m, vo, 1.f);
return 0; return 0;
} }
#if 0
case concmd_endevent: case concmd_endevent:
if (parsing_event == 0) if (parsing_event == 0)
{ {

View file

@ -1053,7 +1053,16 @@ int32_t C_ParseCommand(int32_t loop)
case concmd_ifonboat: case concmd_ifonboat:
case concmd_ifsizedown: case concmd_ifsizedown:
case concmd_ifplaybackon: case concmd_ifplaybackon:
parsecommand(g_lastKeyword); case concmd_else:
case concmd_leftbrace:
case concmd_rightbrace:
case concmd_betaname:
case concmd_definevolumename:
case concmd_defineskillname:
case concmd_definelevelname:
case concmd_definequote:
case concmd_definesound:
if (parsecommand(g_lastKeyword)) return 1;
continue; continue;
case concmd_gamevar: case concmd_gamevar:
@ -1172,55 +1181,6 @@ int32_t C_ParseCommand(int32_t loop)
continue; continue;
case concmd_else:
{
if (EDUKE32_PREDICT_FALSE(!checking_ifelse))
{
scriptptr--;
intptr_t *tempscrptr = scriptptr;
warningcount++;
C_ReportError(-1);
Printf("%s:%d: warning: found `else' with no `if'.\n", g_scriptFileName, line_number);
if (C_GetKeyword() == concmd_leftbrace)
{
C_GetNextKeyword();
num_squigilly_brackets++;
C_ParseCommand(1);
}
else C_ParseCommand(0);
scriptptr = tempscrptr;
continue;
}
intptr_t const lastScriptPtr = scriptptr - apScript - 1;
g_skipBranch = 0;
checking_ifelse--;
if (C_CheckMalformedBranch(lastScriptPtr))
continue;
intptr_t const offset = (unsigned) (scriptptr-apScript);
scriptptr++; //Leave a spot for the fail location
if (!g_gotComment)
C_ParseCommand(0);
if (C_CheckEmptyBranch(tw, lastScriptPtr))
continue;
intptr_t *tempscrptr = (intptr_t *) apScript+offset;
*tempscrptr = (intptr_t) scriptptr;
BITPTR_SET(tempscrptr-apScript);
continue;
}
case concmd_addlogvar: case concmd_addlogvar:
g_labelsOnly = 1; g_labelsOnly = 1;
C_GetNextVar(); C_GetNextVar();
@ -1358,295 +1318,6 @@ ifvar:
} }
case concmd_leftbrace:
if (EDUKE32_PREDICT_FALSE(!(parsing_state || parsing_actor || g_scriptEventOffset)))
{
errorcount++;
C_ReportError(ERROR_SYNTAXERROR);
}
num_squigilly_brackets++;
C_ParseCommand(1);
continue;
case concmd_rightbrace:
num_squigilly_brackets--;
if ((*(scriptptr-2)>>12) == (IFELSE_MAGIC) &&
((*(scriptptr-2) & VM_INSTMASK) == concmd_leftbrace)) // rewrite "{ }" into "nullop"
{
// Printf("%s:%d: rewriting empty braces '{ }' as 'nullop' from right\n",g_szScriptFileName,line_number);
*(scriptptr-2) = concmd_nullop + (IFELSE_MAGIC<<12);
scriptptr -= 2;
if (C_GetKeyword() != concmd_else && (*(scriptptr-2) & VM_INSTMASK) != concmd_else)
g_skipBranch = 1;
else g_skipBranch = 0;
j = C_GetKeyword();
if (checking_ifelse && j != concmd_else)
checking_ifelse--;
return 1;
}
if (EDUKE32_PREDICT_FALSE(num_squigilly_brackets < 0))
{
C_ReportError(-1);
Printf("%s:%d: error: found more `}' than `{'.\n",g_scriptFileName,line_number);
errorcount++;
}
if (checking_ifelse && j != concmd_else)
checking_ifelse--;
return 1;
case concmd_betaname:
scriptptr--;
j = 0;
skiptoendofline();
continue;
case concmd_definevolumename:
scriptptr--;
C_GetNextValue(LABEL_DEFINE);
scriptptr--;
j = *scriptptr;
C_SkipSpace();
if (EDUKE32_PREDICT_FALSE((unsigned)j > MAXVOLUMES-1))
{
Printf("%s:%d: error: volume number exceeds maximum volume count.\n",
g_scriptFileName,line_number);
errorcount++;
skiptoendofline();
continue;
}
i = strcspn(textptr, "\r\n");
gVolumeNames[j] = FStringTable::MakeMacro(textptr, i);
textptr+=i;
g_volumeCnt = j+1;
continue;
case concmd_defineskillname:
scriptptr--;
C_GetNextValue(LABEL_DEFINE);
scriptptr--;
j = *scriptptr;
C_SkipSpace();
if (EDUKE32_PREDICT_FALSE((unsigned)j >= MAXSKILLS))
{
Printf("%s:%d: error: skill number exceeds maximum skill count %d.\n",
g_scriptFileName,line_number, MAXSKILLS);
errorcount++;
skiptoendofline();
continue;
}
i = strcspn(textptr, "\r\n");
gSkillNames[j] = FStringTable::MakeMacro(textptr, i);
textptr+=i;
for (i=0; i<MAXSKILLS; i++)
if (gSkillNames[i].IsEmpty())
break;
g_skillCnt = i;
continue;
case concmd_definelevelname:
scriptptr--;
C_GetNextValue(LABEL_DEFINE);
scriptptr--;
j = *scriptptr;
C_GetNextValue(LABEL_DEFINE);
scriptptr--;
k = *scriptptr;
C_SkipComments();
if (EDUKE32_PREDICT_FALSE((unsigned)j > MAXVOLUMES-1))
{
Printf("%s:%d: error: volume number exceeds maximum volume count.\n",g_scriptFileName,line_number);
errorcount++;
skiptoendofline();
continue;
}
if (EDUKE32_PREDICT_FALSE((unsigned)k > MAXLEVELS-1))
{
Printf("%s:%d: error: level number exceeds maximum number of levels per episode.\n",g_scriptFileName,line_number);
errorcount++;
skiptoendofline();
continue;
}
i = 0;
tempbuf[i] = '/';
while (*textptr != ' ' && *textptr != '\t' && *textptr != 0x0a)
{
tempbuf[i+1] = *textptr;
textptr++,i++;
if (EDUKE32_PREDICT_FALSE(i >= BMAX_PATH))
{
Printf("%s:%d: error: level file name exceeds limit of %d characters.\n",g_scriptFileName,line_number,BMAX_PATH);
errorcount++;
C_SkipSpace();
break;
}
}
tempbuf[i+1] = '\0';
mapList[j *MAXLEVELS+k].SetFileName(tempbuf);
C_SkipComments();
mapList[j *MAXLEVELS+k].parTime =
(((*(textptr+0)-'0')*10+(*(textptr+1)-'0'))*60)+
(((*(textptr+3)-'0')*10+(*(textptr+4)-'0')));
textptr += 5;
C_SkipSpace();
// cheap hack, 0.99 doesn't have the 3D Realms time
if (*(textptr+2) == ':')
{
mapList[j *MAXLEVELS+k].designerTime =
(((*(textptr+0)-'0')*10+(*(textptr+1)-'0'))*60)+
(((*(textptr+3)-'0')*10+(*(textptr+4)-'0')));
textptr += 5;
C_SkipSpace();
}
else if (g_scriptVersion == 10) g_scriptVersion = 9;
i = 0;
while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0)
{
tempbuf[i] = *textptr;
textptr++,i++;
if (EDUKE32_PREDICT_FALSE(i >= 32))
{
Printf("%s:%d: warning: truncating level name to %d characters.\n",
g_scriptFileName,line_number,32);
warningcount++;
skiptoendofline();
break;
}
}
tempbuf[i] = '\0';
mapList[j *MAXLEVELS+k].name = tempbuf;
continue;
case concmd_definequote:
{
scriptptr--;
C_GetNextValue(LABEL_DEFINE);
k = *(scriptptr-1);
if (EDUKE32_PREDICT_FALSE((unsigned)k >= MAXQUOTES))
{
Printf("%s:%d: error: quote number exceeds limit of %d.\n",g_scriptFileName,line_number,MAXQUOTES);
errorcount++;
}
else
{
C_AllocQuote(k);
}
scriptptr--;
i = 0;
C_SkipSpace();
buffer.Clear();
while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0)
{
buffer.Push(*textptr);
textptr++;
}
buffer.Push(0);
quoteMgr.InitializeQuote(k, buffer.Data(), true);
continue;
}
case concmd_definesound:
{
int ps, pe, vo, pr, m;
scriptptr--;
C_GetNextValue(LABEL_DEFINE);
// Ideally we could keep the value of i from C_GetNextValue() instead of having to hash_find() again.
// This depends on tempbuf remaining in place after C_GetNextValue():
j = findlabel(tempbuf);
k = scriptptr[-1];
if ((unsigned)k >= MAXSOUNDS - 1)
{
Printf("%s:%d: error: sound index exceeds limit of %d.\n", g_scriptFileName, line_number, MAXSOUNDS - 1);
errorcount++;
k = MAXSOUNDS - 1;
}
/*else if (g_sounds[k].filename != NULL)
{
Printf("%s:%d: warning: sound %d already defined (%s)\n", g_scriptFileName, line_number, k, g_sounds[k].filename);
warningcount++;
}*/
scriptptr--;
i = 0;
C_SkipComments();
buffer.Clear();
if (*textptr == '\"')
{
textptr++;
while (*textptr && *textptr != '\"')
{
buffer.Push(*textptr++);
}
textptr++;
}
else while (*textptr != ' ' && *textptr != '\t' && *textptr != '\r' && *textptr != '\n')
{
buffer.Push(*textptr++);
}
buffer.Push(0);
C_GetNextValue(LABEL_DEFINE);
ps = scriptptr[-1];
C_GetNextValue(LABEL_DEFINE);
pe = scriptptr[-1];
C_GetNextValue(LABEL_DEFINE);
pr = scriptptr[-1];
C_GetNextValue(LABEL_DEFINE);
m = scriptptr[-1];
C_GetNextValue(LABEL_DEFINE);
vo = scriptptr[-1];
scriptptr -= 5;
int res = S_DefineSound(k, buffer.Data(), ps, pe, pr, m, vo, 1.f);
continue;
}
case concmd_endevent: case concmd_endevent:

View file

@ -1228,7 +1228,7 @@ GAMEEXEC_STATIC void VM_Execute(native_t loop)
} }
else if (tw == concmd_else) else if (tw == concmd_else)
{ {
insptr = (intptr_t *)*(insptr + 1); insptr = apScript + *(insptr + 1);
continue; continue;
} }
else if (tw == concmd_state) else if (tw == concmd_state)

View file

@ -91,7 +91,11 @@ int GameInterface::GetStringTile(int font, const char* t, int f)
} }
} }
else else
return *t - '!' + font; // uses ASCII order {
int tt = *t;
if (tt >= 'a' && tt <= 'z') tt -= 32;
return tt - '!' + font; // uses ASCII order
}
} }