diff --git a/parse.c b/parse.c index 593df8d..d04ad5c 100644 --- a/parse.c +++ b/parse.c @@ -2473,6 +2473,7 @@ static void LeadingHudMessage(void) // replacement: palrep | colorrep // palrep: exp : exp // colorrep: [exp,exp,exp]:[exp,exp,exp] +// desatrep: %colorrep //========================================================================== static void LeadingCreateTranslation(void) @@ -2484,6 +2485,8 @@ static void LeadingCreateTranslation(void) PC_AppendCmd(PCD_STARTTRANSLATION); while (tk_Token == TK_COMMA) { + pcd_t translationcode; + TK_NextToken(); EvalExpression(); // Get first palette entry in range TK_TokenMustBe(TK_COLON, ERR_MISSING_COLON); @@ -2492,6 +2495,15 @@ static void LeadingCreateTranslation(void) TK_TokenMustBe(TK_ASSIGN, ERR_MISSING_ASSIGN); TK_NextToken(); + if(tk_Token == TK_PERCENT) + { + translationcode = PCD_TRANSLATIONRANGE3; + TK_NextTokenMustBe(TK_LBRACKET, ERR_MISSING_LBRACKET); + } + else + { + translationcode = PCD_TRANSLATIONRANGE2; + } if(tk_Token == TK_LBRACKET) { // Replacement is color range int i, j; @@ -2520,7 +2532,6 @@ static void LeadingCreateTranslation(void) TK_NextToken(); } } - PC_AppendCmd(PCD_TRANSLATIONRANGE2); } else { // Replacement is palette range @@ -2528,8 +2539,9 @@ static void LeadingCreateTranslation(void) TK_TokenMustBe(TK_COLON, ERR_MISSING_COLON); TK_NextToken(); EvalExpression(); - PC_AppendCmd(PCD_TRANSLATIONRANGE1); + translationcode = PCD_TRANSLATIONRANGE1; } + PC_AppendCmd(translationcode); } PC_AppendCmd(PCD_ENDTRANSLATION); TK_TokenMustBe(TK_RPAREN, ERR_MISSING_RPAREN); diff --git a/pcode.c b/pcode.c index 9b4f2fe..9d5fd41 100644 --- a/pcode.c +++ b/pcode.c @@ -475,6 +475,7 @@ static char *PCDNames[PCODE_COMMAND_COUNT] = "PCD_PUSHFUNCTION", // from Eternity "PCD_CALLSTACK", // from Eternity "PCD_SCRIPTWAITNAMED", + "PCD_TRANSLATIONRANGE3", }; // CODE -------------------------------------------------------------------- diff --git a/pcode.h b/pcode.h index 5b10c87..fdad84e 100644 --- a/pcode.h +++ b/pcode.h @@ -424,6 +424,7 @@ typedef enum PCD_PUSHFUNCTION, // from Eternity PCD_CALLSTACK, // from Eternity PCD_SCRIPTWAITNAMED, + PCD_TRANSLATIONRANGE3, PCODE_COMMAND_COUNT } pcd_t;