📄 gamedef.c
字号:
do
{
textptr++;
if(*textptr == 0x0a) line_number++;
if( *textptr == 0 )
{
printf(" * ERROR!(L%ld) Found '/*' with no '*/'.\n",j,label+(labelcnt<<6));
error++;
return 0;
}
}
while( *textptr != '*' || *(textptr+1) != '/' );
textptr+=2;
return 0;
case 17:
if( parsing_actor == 0 && parsing_state == 0 )
{
getlabel();
scriptptr--;
labelcode[labelcnt] = (long) scriptptr;
labelcnt++;
parsing_state = 1;
return 0;
}
getlabel();
for(i=0;i<NUMKEYWORDS;i++)
if( strcmp( label+(labelcnt<<6),keyw[i]) == 0 )
{
error++;
printf(" * ERROR!(L%ld) Symbol '%s' is a key word.\n",line_number,label+(labelcnt<<6));
return 0;
}
for(j=0;j<labelcnt;j++)
{
if( strcmp(label+(j<<6),label+(labelcnt<<6)) == 0 )
{
*scriptptr = labelcode[j];
break;
}
}
if(j==labelcnt)
{
printf(" * ERROR!(L%ld) State '%s' not found.\n",line_number,label+(labelcnt<<6));
error++;
}
scriptptr++;
return 0;
case 15:
case 92:
case 87:
case 89:
case 93:
transnum();
return 0;
case 18:
if( parsing_state == 0 )
{
printf(" * ERROR!(L%ld) Found 'ends' with no 'state'.\n",line_number);
error++;
}
// else
{
if( num_squigilly_brackets > 0 )
{
printf(" * ERROR!(L%ld) Found more '{' than '}' before 'ends'.\n",line_number);
error++;
}
if( num_squigilly_brackets < 0 )
{
printf(" * ERROR!(L%ld) Found more '}' than '{' before 'ends'.\n",line_number);
error++;
}
parsing_state = 0;
}
return 0;
case 19:
getlabel();
// Check to see it's already defined
for(i=0;i<NUMKEYWORDS;i++)
if( strcmp( label+(labelcnt<<6),keyw[i]) == 0 )
{
error++;
printf(" * ERROR!(L%ld) Symbol '%s' is a key word.\n",line_number,label+(labelcnt<<6));
return 0;
}
for(i=0;i<labelcnt;i++)
{
if( strcmp(label+(labelcnt<<6),label+(i<<6)) == 0 )
{
warning++;
printf(" * WARNING.(L%ld) Duplicate definition '%s' ignored.\n",line_number,label+(labelcnt<<6));
break;
}
}
transnum();
if(i == labelcnt)
labelcode[labelcnt++] = *(scriptptr-1);
scriptptr -= 2;
return 0;
case 14:
for(j = 0;j < 4;j++)
{
if( keyword() == -1 )
transnum();
else break;
}
while(j < 4)
{
*scriptptr = 0;
scriptptr++;
j++;
}
return 0;
case 32:
if( parsing_actor || parsing_state )
{
transnum();
j = 0;
while(keyword() == -1)
{
transnum();
scriptptr--;
j |= *scriptptr;
}
*scriptptr = j;
scriptptr++;
}
else
{
scriptptr--;
getlabel();
// Check to see it's already defined
for(i=0;i<NUMKEYWORDS;i++)
if( strcmp( label+(labelcnt<<6),keyw[i]) == 0 )
{
error++;
printf(" * ERROR!(L%ld) Symbol '%s' is a key word.\n",line_number,label+(labelcnt<<6));
return 0;
}
for(i=0;i<labelcnt;i++)
if( strcmp(label+(labelcnt<<6),label+(i<<6)) == 0 )
{
warning++;
printf(" * WARNING.(L%ld) Duplicate move '%s' ignored.\n",line_number,label+(labelcnt<<6));
break;
}
if(i == labelcnt)
labelcode[labelcnt++] = (long) scriptptr;
for(j=0;j<2;j++)
{
if(keyword() >= 0) break;
transnum();
}
for(k=j;k<2;k++)
{
*scriptptr = 0;
scriptptr++;
}
}
return 0;
case 54:
{
scriptptr--;
transnum(); // Volume Number (0/4)
scriptptr--;
k = *scriptptr-1;
if(k >= 0) // if it's background music
{
i = 0;
while(keyword() == -1)
{
while( isaltok(*textptr) == 0 )
{
if(*textptr == 0x0a) line_number++;
textptr++;
if( *textptr == 0 ) break;
}
j = 0;
while( isaltok(*(textptr+j)) )
{
music_fn[k][i][j] = textptr[j];
j++;
}
music_fn[k][i][j] = '\0';
textptr += j;
if(i > 9) break;
i++;
}
}
else
{
i = 0;
while(keyword() == -1)
{
while( isaltok(*textptr) == 0 )
{
if(*textptr == 0x0a) line_number++;
textptr++;
if( *textptr == 0 ) break;
}
j = 0;
while( isaltok(*(textptr+j)) )
{
env_music_fn[i][j] = textptr[j];
j++;
}
env_music_fn[i][j] = '\0';
textptr += j;
if(i > 9) break;
i++;
}
}
}
return 0;
case 55:
scriptptr--;
while( isaltok(*textptr) == 0 )
{
if(*textptr == 0x0a) line_number++;
textptr++;
if( *textptr == 0 ) break;
}
j = 0;
while( isaltok(*textptr) )
{
tempbuf[j] = *(textptr++);
j++;
}
tempbuf[j] = '\0';
fp = kopen4load(tempbuf,loadfromgrouponly);
if(fp == 0)
{
error++;
printf(" * ERROR!(L%ld) Could not find '%s'.\n",line_number,label+(labelcnt<<6));
return 0;
}
j = kfilelength(fp);
printf("Including: '%s'.\n",tempbuf);
temp_line_number = line_number;
line_number = 1;
temp_ifelse_check = checking_ifelse;
checking_ifelse = 0;
origtptr = textptr;
textptr = last_used_text+last_used_size;
*(textptr+j) = 0;
kread(fp,(char *)textptr,j);
kclose(fp);
do
done = parsecommand();
while( done == 0 );
textptr = origtptr;
total_lines += line_number;
line_number = temp_line_number;
checking_ifelse = temp_ifelse_check;
return 0;
case 24:
if( parsing_actor || parsing_state )
transnum();
else
{
scriptptr--;
getlabel();
for(i=0;i<NUMKEYWORDS;i++)
if( strcmp( label+(labelcnt<<6),keyw[i]) == 0 )
{
error++;
printf(" * ERROR!(L%ld) Symbol '%s' is a key word.\n",line_number,label+(labelcnt<<6));
return 0;
}
for(i=0;i<labelcnt;i++)
if( strcmp(label+(labelcnt<<6),label+(i<<6)) == 0 )
{
warning++;
printf(" * WARNING.(L%ld) Duplicate ai '%s' ignored.\n",line_number,label+(labelcnt<<6));
break;
}
if(i == labelcnt)
labelcode[labelcnt++] = (long) scriptptr;
for(j=0;j<3;j++)
{
if(keyword() >= 0) break;
if(j == 2)
{
k = 0;
while(keyword() == -1)
{
transnum();
scriptptr--;
k |= *scriptptr;
}
*scriptptr = k;
scriptptr++;
return 0;
}
else transnum();
}
for(k=j;k<3;k++)
{
*scriptptr = 0;
scriptptr++;
}
}
return 0;
case 7:
if( parsing_actor || parsing_state )
transnum();
else
{
scriptptr--;
getlabel();
// Check to see it's already defined
for(i=0;i<NUMKEYWORDS;i++)
if( strcmp( label+(labelcnt<<6),keyw[i]) == 0 )
{
error++;
printf(" * ERROR!(L%ld) Symbol '%s' is a key word.\n",line_number,label+(labelcnt<<6));
return 0;
}
for(i=0;i<labelcnt;i++)
if( strcmp(label+(labelcnt<<6),label+(i<<6)) == 0 )
{
warning++;
printf(" * WARNING.(L%ld) Duplicate action '%s' ignored.\n",line_number,label+(labelcnt<<6));
break;
}
if(i == labelcnt)
labelcode[labelcnt++] = (long) scriptptr;
for(j=0;j<5;j++)
{
if(keyword() >= 0) break;
transnum();
}
for(k=j;k<5;k++)
{
*scriptptr = 0;
scriptptr++;
}
}
return 0;
case 1:
if( parsing_state )
{
printf(" * ERROR!(L%ld) Found 'actor' within 'state'.\n",line_number);
error++;
}
if( parsing_actor )
{
printf(" * ERROR!(L%ld) Found 'actor' within 'actor'.\n",line_number);
error++;
}
num_squigilly_brackets = 0;
scriptptr--;
parsing_actor = scriptptr;
transnum();
scriptptr--;
actorscrptr[*scriptptr] = parsing_actor;
for(j=0;j<4;j++)
{
*(parsing_actor+j) = 0;
if(j == 3)
{
j = 0;
while(keyword() == -1)
{
transnum();
scriptptr--;
j |= *scriptptr;
}
*scriptptr = j;
scriptptr++;
break;
}
else
{
if(keyword() >= 0)
{
scriptptr += (4-j);
break;
}
transnum();
*(parsing_actor+j) = *(scriptptr-1);
}
}
checking_ifelse = 0;
return 0;
case 98:
if( parsing_state )
{
printf(" * ERROR!(L%ld) Found 'useritem' within 'state'.\n",line_number);
error++;
}
if( parsing_actor )
{
printf(" * ERROR!(L%ld) Found 'useritem' within 'actor'.\n",line_number);
error++;
}
num_squigilly_brackets = 0;
scriptptr--;
parsing_actor = scriptptr;
transnum();
scriptptr--;
j = *scriptptr;
transnum();
scriptptr--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -