mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-02-09 06:20:49 +00:00
Added SLADE3's colourise and tint translations.
Includes support for ACS. Added tokens for '#' and '@' in sc_man_scanner.re.
This commit is contained in:
parent
b4079b9915
commit
ad89d3eea0
5 changed files with 135 additions and 12 deletions
|
@ -9088,6 +9088,35 @@ scriptwait:
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case PCD_TRANSLATIONRANGE4:
|
||||||
|
{ // Colourise translation
|
||||||
|
int start = STACK(5);
|
||||||
|
int end = STACK(4);
|
||||||
|
int r = STACK(3);
|
||||||
|
int g = STACK(2);
|
||||||
|
int b = STACK(1);
|
||||||
|
sp -= 5;
|
||||||
|
|
||||||
|
if (translation != NULL)
|
||||||
|
translation->AddColourisation(start, end, r, g, b);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PCD_TRANSLATIONRANGE5:
|
||||||
|
{ // Tint translation
|
||||||
|
int start = STACK(6);
|
||||||
|
int end = STACK(5);
|
||||||
|
int a = STACK(4);
|
||||||
|
int r = STACK(3);
|
||||||
|
int g = STACK(2);
|
||||||
|
int b = STACK(1);
|
||||||
|
sp -= 6;
|
||||||
|
|
||||||
|
if (translation != NULL)
|
||||||
|
translation->AddTint(start, end, r, g, b, a);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case PCD_ENDTRANSLATION:
|
case PCD_ENDTRANSLATION:
|
||||||
if (translation != NULL)
|
if (translation != NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -779,6 +779,8 @@ public:
|
||||||
/*380*/ PCD_STRCPYTOSCRIPTCHRANGE,
|
/*380*/ PCD_STRCPYTOSCRIPTCHRANGE,
|
||||||
PCD_LSPEC5EX,
|
PCD_LSPEC5EX,
|
||||||
PCD_LSPEC5EXRESULT,
|
PCD_LSPEC5EXRESULT,
|
||||||
|
PCD_TRANSLATIONRANGE4,
|
||||||
|
PCD_TRANSLATIONRANGE5,
|
||||||
|
|
||||||
/*381*/ PCODE_COMMAND_COUNT
|
/*381*/ PCODE_COMMAND_COUNT
|
||||||
};
|
};
|
||||||
|
|
|
@ -487,6 +487,56 @@ void FRemapTable::AddDesaturation(int start, int end, double r1, double g1, doub
|
||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FRemapTable::AddColourisation(int start, int end, int r, int g, int b)
|
||||||
|
{
|
||||||
|
for (int i = start; i < end; ++i)
|
||||||
|
{
|
||||||
|
float br = GPalette.BaseColors[i].r;
|
||||||
|
float bg = GPalette.BaseColors[i].g;
|
||||||
|
float bb = GPalette.BaseColors[i].b;
|
||||||
|
float grey = (br * 0.299 + bg * 0.587 + bb * 0.114) / 255.0f;
|
||||||
|
if (grey > 1.0) grey = 1.0;
|
||||||
|
br = r * grey;
|
||||||
|
bg = g * grey;
|
||||||
|
bb = b * grey;
|
||||||
|
|
||||||
|
int j = GPalette.Remap[i];
|
||||||
|
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
||||||
|
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void FRemapTable::AddTint(int start, int end, int r, int g, int b, int amount)
|
||||||
|
{
|
||||||
|
for (int i = start; i < end; ++i)
|
||||||
|
{
|
||||||
|
float br = GPalette.BaseColors[i].r;
|
||||||
|
float bg = GPalette.BaseColors[i].g;
|
||||||
|
float bb = GPalette.BaseColors[i].b;
|
||||||
|
float a = amount * 0.01f;
|
||||||
|
float ia = 1.0f - a;
|
||||||
|
br = br * ia + r * a;
|
||||||
|
bg = bg * ia + g * a;
|
||||||
|
bb = bb * ia + b * a;
|
||||||
|
|
||||||
|
int j = GPalette.Remap[i];
|
||||||
|
Palette[j] = PalEntry(j == 0 ? 0 : 255, int(br), int(bg), int(bb));
|
||||||
|
Remap[j] = ColorMatcher.Pick(Palette[j]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
|
||||||
void FRemapTable::AddToTranslation(const char *range)
|
void FRemapTable::AddToTranslation(const char *range)
|
||||||
{
|
{
|
||||||
int start,end;
|
int start,end;
|
||||||
|
@ -511,19 +561,9 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
}
|
}
|
||||||
|
|
||||||
sc.MustGetAnyToken();
|
sc.MustGetAnyToken();
|
||||||
|
Printf(0, "token type: %d", sc.TokenType);
|
||||||
|
|
||||||
if (sc.TokenType != '[' && sc.TokenType != '%')
|
if (sc.TokenType == '[')
|
||||||
{
|
|
||||||
int pal1,pal2;
|
|
||||||
|
|
||||||
sc.TokenMustBe(TK_IntConst);
|
|
||||||
pal1 = sc.Number;
|
|
||||||
sc.MustGetToken(':');
|
|
||||||
sc.MustGetToken(TK_IntConst);
|
|
||||||
pal2 = sc.Number;
|
|
||||||
AddIndexRange(start, end, pal1, pal2);
|
|
||||||
}
|
|
||||||
else if (sc.TokenType == '[')
|
|
||||||
{
|
{
|
||||||
// translation using RGB values
|
// translation using RGB values
|
||||||
int r1,g1,b1,r2,g2,b2;
|
int r1,g1,b1,r2,g2,b2;
|
||||||
|
@ -596,6 +636,54 @@ void FRemapTable::AddToTranslation(const char *range)
|
||||||
|
|
||||||
AddDesaturation(start, end, r1, g1, b1, r2, g2, b2);
|
AddDesaturation(start, end, r1, g1, b1, r2, g2, b2);
|
||||||
}
|
}
|
||||||
|
else if (sc.TokenType == '#')
|
||||||
|
{
|
||||||
|
// Colourise translation
|
||||||
|
int r, g, b;
|
||||||
|
sc.MustGetToken('[');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
r = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
g = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
b = sc.Number;
|
||||||
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
|
AddColourisation(start, end, r, g, b);
|
||||||
|
}
|
||||||
|
else if (sc.TokenType == '@')
|
||||||
|
{
|
||||||
|
// Tint translation
|
||||||
|
int a, r, g, b;
|
||||||
|
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
a = sc.Number;
|
||||||
|
sc.MustGetToken('[');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
r = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
g = sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
b = sc.Number;
|
||||||
|
sc.MustGetToken(']');
|
||||||
|
|
||||||
|
AddTint(start, end, r, g, b, a);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int pal1, pal2;
|
||||||
|
|
||||||
|
sc.TokenMustBe(TK_IntConst);
|
||||||
|
pal1 = sc.Number;
|
||||||
|
sc.MustGetToken(':');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
pal2 = sc.Number;
|
||||||
|
AddIndexRange(start, end, pal1, pal2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (CRecoverableError &err)
|
catch (CRecoverableError &err)
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,6 +42,8 @@ struct FRemapTable
|
||||||
void AddIndexRange(int start, int end, int pal1, int pal2);
|
void AddIndexRange(int start, int end, int pal1, int pal2);
|
||||||
void AddColorRange(int start, int end, int r1,int g1, int b1, int r2, int g2, int b2);
|
void AddColorRange(int start, int end, int r1,int g1, int b1, int r2, int g2, int b2);
|
||||||
void AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2);
|
void AddDesaturation(int start, int end, double r1, double g1, double b1, double r2, double g2, double b2);
|
||||||
|
void AddColourisation(int start, int end, int r, int g, int b);
|
||||||
|
void AddTint(int start, int end, int r, int g, int b, int amount);
|
||||||
void AddToTranslation(const char * range);
|
void AddToTranslation(const char * range);
|
||||||
int StoreTranslation(int slot);
|
int StoreTranslation(int slot);
|
||||||
|
|
||||||
|
|
|
@ -255,6 +255,8 @@ std2:
|
||||||
"^" { RET('^'); }
|
"^" { RET('^'); }
|
||||||
"|" { RET('|'); }
|
"|" { RET('|'); }
|
||||||
"?" { RET('?'); }
|
"?" { RET('?'); }
|
||||||
|
"#" { RET('#'); }
|
||||||
|
"@" { RET('@'); }
|
||||||
|
|
||||||
[ \t\v\f\r]+ { goto std1; }
|
[ \t\v\f\r]+ { goto std1; }
|
||||||
"\n" { goto newline; }
|
"\n" { goto newline; }
|
||||||
|
|
Loading…
Reference in a new issue