- migrated texture flags parsing from .def to RMAPINFO.

This was the final piece of non-tile-related data to be in there.
.def should be restricted to existing use cases concerning setup of render data, not for game content.
This commit is contained in:
Christoph Oelckers 2022-12-08 11:40:22 +01:00
parent 0bacb05c1b
commit 630276f7e0
12 changed files with 453 additions and 451 deletions

View file

@ -99,106 +99,23 @@ void VersionInfo::operator=(const char *string)
//
//==========================================================================
FScanner::FScanner()
FScanner::FScanner(TMap<FName, Symbol>* extsymbols) : symbols(extsymbols? *extsymbols : mysymbols)
{
ScriptOpen = false;
}
//==========================================================================
//
// FScanner Destructor
//
//==========================================================================
FScanner::~FScanner()
{
// Humm... Nothing to do in here.
}
//==========================================================================
//
// FScanner Copy Constructor
//
//==========================================================================
FScanner::FScanner(const FScanner &other)
{
ScriptOpen = false;
*this = other;
}
//==========================================================================
//
// FScanner OpenLumpNum Constructor
//
//==========================================================================
FScanner::FScanner(int lumpnum)
FScanner::FScanner(int lumpnum, TMap<FName, Symbol>* extsymbols) : symbols(extsymbols ? *extsymbols : mysymbols)
{
ScriptOpen = false;
OpenLumpNum(lumpnum);
}
//==========================================================================
//
// FScanner :: operator =
//
//==========================================================================
FScanner &FScanner::operator=(const FScanner &other)
{
if (this == &other)
{
return *this;
}
if (!other.ScriptOpen)
{
Close();
return *this;
}
// Copy protected members
ScriptOpen = true;
ScriptName = other.ScriptName;
ScriptBuffer = other.ScriptBuffer;
ScriptPtr = other.ScriptPtr;
ScriptEndPtr = other.ScriptEndPtr;
AlreadyGot = other.AlreadyGot;
AlreadyGotLine = other.AlreadyGotLine;
LastGotToken = other.LastGotToken;
LastGotPtr = other.LastGotPtr;
LastGotLine = other.LastGotLine;
CMode = other.CMode;
Escape = other.Escape;
StateMode = other.StateMode;
StateOptions = other.StateOptions;
// Copy public members
if (other.String == other.StringBuffer)
{
memcpy(StringBuffer, other.StringBuffer, sizeof(StringBuffer));
BigStringBuffer = "";
String = StringBuffer;
}
else
{
// Past practice means the string buffer must be writeable, which
// removes some of the benefit from using an FString to store
// the big string buffer.
BigStringBuffer = other.BigStringBuffer;
String = BigStringBuffer.LockBuffer();
}
StringLen = other.StringLen;
TokenType = other.TokenType;
Number = other.Number;
Float = other.Float;
Line = other.Line;
End = other.End;
Crossed = other.Crossed;
return *this;
}
//==========================================================================
//
// FScanner :: Open
@ -1229,7 +1146,7 @@ void FScanner::AddSymbol(const char *name, int64_t value)
{
Symbol sym;
sym.tokenType = TK_IntConst;
sym.Number = int(value);
sym.Number = value;
sym.Float = double(value);
symbols.Insert(name, sym);
}

View file

@ -54,16 +54,18 @@ public:
double Float;
};
using SymbolMap = TMap<FName, Symbol>;
TMap<FName, Symbol> symbols;
SymbolMap mysymbols;
SymbolMap& symbols;
TMap<FName, Symbol>& GetSymbols() { return symbols; }
// Methods ------------------------------------------------------
FScanner();
FScanner(const FScanner &other);
FScanner(int lumpnum);
~FScanner();
FScanner &operator=(const FScanner &other);
FScanner(TMap<FName, Symbol>* extsymbols = nullptr);
FScanner(const FScanner& other) = delete;
FScanner& operator=(const FScanner& other) = delete;
FScanner(int lumpnum, TMap<FName, Symbol>* extsymbols = nullptr);
~FScanner() = default;
void Open(const char *lumpname);
bool OpenFile(const char *filename);
@ -155,9 +157,9 @@ public:
void MustGetFloat(bool evaluate = false);
bool CheckFloat(bool evaluate = false);
double *LookupConstant(FName name)
Symbol *LookupSymbol(FName name)
{
return constants.CheckKey(name);
return symbols.CheckKey(name);
}
// Token based variant

View file

@ -226,6 +226,31 @@ void FMapInfoParser::ParseMusic(FString &name, int &order)
//
//==========================================================================
void FMapInfoParser::ParseConstants()
{
int num = -1;
// this block deliberately uses a 'flag = texture, texture...' syntax because it is a lot easier to handle than doing the reverse
sc.MustGetStringName("{");
while (!sc.CheckString("}"))
{
// Do not use internal lookup here because this code must be able to gracefully skip the definition if the flag constant does not exist.
// This also blocks passing in literal numbers which is quite intentional.
sc.MustGetString();
FString cname = sc.String;
ParseAssign();
sc.MustGetNumber(true);
sc.AddSymbol(cname, sc.Number);
} while (sc.CheckString(","));
}
//==========================================================================
//
//
//
//==========================================================================
void FMapInfoParser::ParseSpawnClasses()
{
FString fn;
@ -383,7 +408,6 @@ void FMapInfoParser::ParseBreakWall()
}
}
//==========================================================================
//
//
@ -455,6 +479,49 @@ void FMapInfoParser::ParseBreakCeiling()
//
//==========================================================================
void FMapInfoParser::ParseTextureFlags()
{
int num = -1;
// this block deliberately uses a 'flag = texture, texture...' syntax because it is a lot easier to handle than doing the reverse
sc.MustGetStringName("{");
while (!sc.CheckString("}"))
{
// Do not use internal lookup here because this code must be able to gracefully skip the definition if the flag constant does not exist.
// This also blocks passing in literal numbers which is quite intentional.
sc.MustGetString();
FName cname(sc.String, true);
auto lookup = cname == NAME_None ? nullptr : sc.LookupSymbol(cname);
num = 0;
if (lookup) num = int(lookup->Number);
else
sc.ScriptMessage("'%s': Unknown texture flag", sc.String);
ParseAssign();
do
{
sc.MustGetString();
int tile = TileFiles.tileForName(sc.String);
if (tile == -1)
{
sc.ScriptMessage("textureflags:Unknown texture name '%s'", sc.String);
}
else
{
TileFiles.tiledata[tile].tileflags |= num;
}
// tileflags |= sc.Number;
} while (sc.CheckString(","));
}
}
//==========================================================================
//
//
//
//==========================================================================
void FMapInfoParser::ParseCutscene(CutsceneDef& cdef)
{
FString sound;
@ -1408,6 +1475,7 @@ void FMapInfoParser::ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord
defaultinfo = gamedefaults;
defaultinfoptr = &defaultinfo;
#if 0 // this check is too dumb and affects constant defining includes as well.
if (ParsedLumps.Find(lump) != ParsedLumps.Size())
{
sc.ScriptMessage("MAPINFO file is processed more than once\n");
@ -1416,6 +1484,7 @@ void FMapInfoParser::ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord
{
ParsedLumps.Push(lump);
}
#endif
sc.SetCMode(true);
while (sc.GetString ())
{
@ -1436,9 +1505,9 @@ void FMapInfoParser::ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord
fileSystem.GetResourceFileFullName(fileSystem.GetFileContainer(inclump)), sc.String);
}
}
FScanner saved_sc = sc;
ParseMapInfo(inclump, gamedefaults, defaultinfo);
sc = saved_sc;
// use a new parser object to parse the include. Otherwise we'd have to save the entire FScanner in a local variable which is a lot more messy.
FMapInfoParser includer(&sc);
includer.ParseMapInfo(inclump, gamedefaults, defaultinfo);
}
else if (sc.Compare("gamedefaults"))
{
@ -1504,6 +1573,14 @@ void FMapInfoParser::ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord
{
ParseBreakCeiling();
}
else if (sc.Compare("textureflags"))
{
ParseTextureFlags();
}
else if (sc.Compare("constants"))
{
ParseConstants();
}
else if (sc.Compare("clearall"))
{
// clears all map and progression related data, so that a mod can start with a clean slate.

View file

@ -72,9 +72,9 @@ struct FMapInfoParser
bool Internal;
MapRecord* defaultinfoptr;
FMapInfoParser(bool internal = false)
FMapInfoParser(FScanner* parent = nullptr)
: sc(parent? &parent->GetSymbols() : nullptr)
{
Internal = internal;
}
bool CheckLegacyMapDefinition(FString& mapname);
@ -93,6 +93,8 @@ struct FMapInfoParser
void ParseSpawnClasses();
void ParseBreakWall();
void ParseBreakCeiling();
void ParseTextureFlags();
void ParseConstants();
void ParseMapInfo (int lump, MapRecord &gamedefaults, MapRecord &defaultinfo);
void ParseOpenBrace();

View file

@ -0,0 +1,17 @@
// Global constants for all Duke based games.
constants
{
// Tile flags.
TFLAG_WALLSWITCH = 1
TFLAG_ADULT = 2
TFLAG_ELECTRIC = 4
TFLAG_CLEARINVENTORY = 8
TFLAG_SLIME = 16
TFLAG_DOORWALL = 32
TFLAG_BLOCKDOOR = 64
TFLAG_OUTERSPACE = 128
TFLAG_NOBLOODSPLAT = 256
TFLAG_NOCIRCLEREFLECT = 512
TFLAG_MUDDY = 1024
}

View file

@ -1,14 +0,0 @@
// Global constants for all Duke based games.
// Tile flags.
define TFLAG_WALLSWITCH 1
define TFLAG_ADULT 2
define TFLAG_ELECTRIC 4
define TFLAG_CLEARINVENTORY 8
define TFLAG_SLIME 16
define TFLAG_DOORWALL 32
define TFLAG_BLOCKDOOR 64
define TFLAG_OUTERSPACE 128
define TFLAG_NOBLOODSPLAT 256
define TFLAG_NOCIRCLEREFLECT 512
define TFLAG_MUDDY 1024

View file

@ -1,136 +0,0 @@
include "engine/defines.def"
// most things in here will later go elsewhere, once better definition methods exist
tileflag TFLAG_WALLSWITCH {
HANDPRINTSWITCH
HANDPRINTSWITCHON
ALIENSWITCH
ALIENSWITCHON
MULTISWITCH
MULTISWITCH_2
MULTISWITCH_3
MULTISWITCH_4
ACCESSSWITCH
ACCESSSWITCH2
PULLSWITCH
PULLSWITCHON
HANDSWITCH
HANDSWITCHON
SLOTDOOR
SLOTDOORON
LIGHTSWITCH
LIGHTSWITCHON
SPACELIGHTSWITCH
SPACELIGHTSWITCHON
SPACEDOORSWITCH
SPACEDOORSWITCHON
FRANKENSTINESWITCH
FRANKENSTINESWITCHON
LIGHTSWITCH2
LIGHTSWITCH2ON
POWERSWITCH1
POWERSWITCH1ON
LOCKSWITCH1
LOCKSWITCH1ON
POWERSWITCH2
POWERSWITCH2ON
DIPSWITCH
DIPSWITCHON
DIPSWITCH2
DIPSWITCH2ON
TECHSWITCH
TECHSWITCHON
DIPSWITCH3
DIPSWITCH3ON }
tileflag TFLAG_ADULT {
FEM1
FEM2
FEM3
FEM4
FEM5
FEM6
FEM7
FEM8
FEM9
FEM10
MAN
MAN2
WOMAN
NAKED1
PODFEM1
FEMMAG1
FEMMAG2
FEMPIC1
FEMPIC2
FEMPIC3
FEMPIC4
FEMPIC5
FEMPIC6
FEMPIC7
BLOODYPOLE
FEM6PAD
STATUE
STATUEFLASH
OOZ
OOZ2
WALLBLOOD1
WALLBLOOD2
WALLBLOOD3
WALLBLOOD4
WALLBLOOD5
WALLBLOOD7
WALLBLOOD8
SUSHIPLATE1
SUSHIPLATE2
SUSHIPLATE3
SUSHIPLATE4
FETUS
FETUSJIB
FETUSBROKE
HOTMEAT
FOODOBJECT16
DOLPHIN1
DOLPHIN2
TOUGHGAL
TAMPON
XXXSTACY }
tileflag TFLAG_ELECTRIC { HURTRAIL }
tileflag TFLAG_CLEARINVENTORY { HURTRAIL FLOORSLIME FLOORPLASMA }
tileflag TFLAG_SLIME { FLOORSLIME FLOORSLIME1 FLOORSLIME2 }
tileflag TFLAG_DOORWALL {
DOORTILE1
DOORTILE2
DOORTILE3
DOORTILE4
DOORTILE5
DOORTILE6
DOORTILE7
DOORTILE8
DOORTILE9
DOORTILE10
DOORTILE11
DOORTILE12
DOORTILE14
DOORTILE15
DOORTILE16
DOORTILE17
DOORTILE18
DOORTILE19
DOORTILE20
DOORTILE21
DOORTILE22
DOORTILE23
}
tileflag TFLAG_OUTERSPACE {
MOONSKY1
BIGORBIT1
}
tileflag TFLAG_NOBLOODSPLAT {
BIGFORCE
}

View file

@ -0,0 +1,134 @@
include "constants.mi"
// most things in here will later go elsewhere, once better definition methods exist
textureflags
{
TFLAG_WALLSWITCH =
HANDPRINTSWITCH,
HANDPRINTSWITCHON,
ALIENSWITCH,
ALIENSWITCHON,
MULTISWITCH,
MULTISWITCH_2,
MULTISWITCH_3,
MULTISWITCH_4,
ACCESSSWITCH,
ACCESSSWITCH2,
PULLSWITCH,
PULLSWITCHON,
HANDSWITCH,
HANDSWITCHON,
SLOTDOOR,
SLOTDOORON,
LIGHTSWITCH,
LIGHTSWITCHON,
SPACELIGHTSWITCH,
SPACELIGHTSWITCHON,
SPACEDOORSWITCH,
SPACEDOORSWITCHON,
FRANKENSTINESWITCH,
FRANKENSTINESWITCHON,
LIGHTSWITCH2,
LIGHTSWITCH2ON,
POWERSWITCH1,
POWERSWITCH1ON,
LOCKSWITCH1,
LOCKSWITCH1ON,
POWERSWITCH2,
POWERSWITCH2ON,
DIPSWITCH,
DIPSWITCHON,
DIPSWITCH2,
DIPSWITCH2ON,
TECHSWITCH,
TECHSWITCHON,
DIPSWITCH3,
DIPSWITCH3ON
// Raze does not use this because the game never handled it well.
TFLAG_ADULT =
FEM1,
FEM2,
FEM3,
FEM4,
FEM5,
FEM6,
FEM7,
FEM8,
FEM9,
FEM10,
MAN,
MAN2,
WOMAN,
NAKED1,
PODFEM1,
FEMMAG1,
FEMMAG2,
FEMPIC1,
FEMPIC2,
FEMPIC3,
FEMPIC4,
FEMPIC5,
FEMPIC6,
FEMPIC7,
BLOODYPOLE,
FEM6PAD,
STATUE,
STATUEFLASH,
OOZ,
OOZ2,
WALLBLOOD1,
WALLBLOOD2,
WALLBLOOD3,
WALLBLOOD4,
WALLBLOOD5,
WALLBLOOD7,
WALLBLOOD8,
SUSHIPLATE1,
SUSHIPLATE2,
SUSHIPLATE3,
SUSHIPLATE4,
FETUS,
FETUSJIB,
FETUSBROKE,
HOTMEAT,
FOODOBJECT16,
DOLPHIN1,
DOLPHIN2,
TOUGHGAL,
TAMPON,
XXXSTACY
TFLAG_CLEARINVENTORY = HURTRAIL, FLOORSLIME, FLOORPLASMA
TFLAG_NOBLOODSPLAT = BIGFORCE
TFLAG_DOORWALL =
DOORTILE1,
DOORTILE2,
DOORTILE3,
DOORTILE4,
DOORTILE5,
DOORTILE6,
DOORTILE7,
DOORTILE8,
DOORTILE9,
DOORTILE10,
DOORTILE11,
DOORTILE12,
DOORTILE14,
DOORTILE15,
DOORTILE16,
DOORTILE17,
DOORTILE18,
DOORTILE19,
DOORTILE20,
DOORTILE21,
DOORTILE22,
DOORTILE23
// should be made terrain types later
//TFLAG_ELECTRIC = HURTRAIL
TFLAG_SLIME = FLOORSLIME, FLOORSLIME1, FLOORSLIME2
TFLAG_OUTERSPACE = MOONSKY1, BIGORBIT1
}

View file

@ -1,34 +0,0 @@
include "engine/defines.def"
tileflag TFLAG_WALLSWITCH {
MULTISWITCH2
MULTISWITCH2_2
MULTISWITCH2_3
MULTISWITCH2_4
IRONWHEELSWITCH
IRONWHEELSWITCHON }
tileflag TFLAG_BLOCKDOOR {
RRTILE1996
RRTILE2382
RRTILE2961
RRTILE3804
RRTILE7430
RRTILE7467
RRTILE7469
RRTILE7470
RRTILE7475
RRTILE7566
RRTILE7576
RRTILE7716
RRTILE8063
RRTILE8067
RRTILE8076
RRTILE8106
RRTILE8379
RRTILE8380
RRTILE8565
RRTILE8605
}

View file

@ -0,0 +1,36 @@
include "constants.mi"
textureflags
{
TFLAG_WALLSWITCH =
MULTISWITCH2,
MULTISWITCH2_2,
MULTISWITCH2_3,
MULTISWITCH2_4,
IRONWHEELSWITCH,
IRONWHEELSWITCHON
TFLAG_BLOCKDOOR =
RRTILE1996,
RRTILE2382,
RRTILE2961,
RRTILE3804,
RRTILE7430,
RRTILE7467,
RRTILE7469,
RRTILE7470,
RRTILE7475,
RRTILE7566,
RRTILE7576,
RRTILE7716,
RRTILE8063,
RRTILE8067,
RRTILE8076,
RRTILE8106,
RRTILE8379,
RRTILE8380,
RRTILE8565,
RRTILE8605
}

View file

@ -1,166 +0,0 @@
include "engine/defines.def"
tileflag TFLAG_WALLSWITCH {
HANDPRINTSWITCH
HANDPRINTSWITCHON
ALIENSWITCH
ALIENSWITCHON
MULTISWITCH
MULTISWITCH_2
MULTISWITCH_3
MULTISWITCH_4
ACCESSSWITCH
ACCESSSWITCH2
PULLSWITCH
PULLSWITCHON
HANDSWITCH
HANDSWITCHON
SLOTDOOR
SLOTDOORON
LIGHTSWITCH
LIGHTSWITCHON
SPACELIGHTSWITCH
SPACELIGHTSWITCHON
SPACEDOORSWITCH
SPACEDOORSWITCHON
FRANKENSTINESWITCH
FRANKENSTINESWITCHON
LIGHTSWITCH2
LIGHTSWITCH2ON
POWERSWITCH1
POWERSWITCH1ON
LOCKSWITCH1
LOCKSWITCH1ON
POWERSWITCH2
POWERSWITCH2ON
DIPSWITCH
DIPSWITCHON
DIPSWITCH2
DIPSWITCH2ON
TECHSWITCH
TECHSWITCHON
DIPSWITCH3
DIPSWITCH3ON
CHICKENPLANTBUTTON
CHICKENPLANTBUTTONON }
tileflag TFLAG_ELECTRIC { HURTRAIL }
tileflag TFLAG_CLEARINVENTORY { HURTRAIL FLOORSLIME FLOORPLASMA }
tileflag TFLAG_SLIME { FLOORSLIME FLOORSLIME1 FLOORSLIME2 }
tileflag TFLAG_DOORWALL {
DOORTILE1
DOORTILE2
DOORTILE3
DOORTILE4
DOORTILE5
DOORTILE6
DOORTILE7
DOORTILE8
DOORTILE9
DOORTILE10
DOORTILE11
DOORTILE12
DOORTILE14
DOORTILE15
DOORTILE16
DOORTILE17
DOORTILE18
DOORTILE19
DOORTILE20
DOORTILE21
DOORTILE22
RRTILE1856
RRTILE1877
}
tileflag TFLAG_BLOCKDOOR {
PICKUPBACK1
PICKUPBACK1
RRTILE1792
RRTILE1801
RRTILE1805
RRTILE1807
RRTILE1808
RRTILE1812
RRTILE1821
RRTILE1826
RRTILE1850
RRTILE1851
RRTILE1856
RRTILE1877
RRTILE1938
RRTILE1942
RRTILE1944
RRTILE1945
RRTILE1951
RRTILE1961
RRTILE1964
RRTILE1985
RRTILE1995
RRTILE2022
RRTILE2052
RRTILE2053
RRTILE2060
RRTILE2074
RRTILE2132
RRTILE2136
RRTILE2139
RRTILE2150
RRTILE2178
RRTILE2186
RRTILE2319
RRTILE2321
RRTILE2326
RRTILE2329
RRTILE2578
RRTILE2581
RRTILE2610
RRTILE2613
RRTILE2621
RRTILE2622
RRTILE2676
RRTILE2732
RRTILE2831
RRTILE2832
RRTILE2842
RRTILE2940
RRTILE2970
RRTILE3083
RRTILE3100
RRTILE3155
RRTILE3195
RRTILE3232
RRTILE3600
RRTILE3631
RRTILE3635
RRTILE3637
RRTILE3647
RRTILE3652
RRTILE3653
RRTILE3671
RRTILE3673
RRTILE3684
RRTILE3708
RRTILE3714
RRTILE3716
RRTILE3723
RRTILE3725
RRTILE3737
RRTILE3754
RRTILE3762
RRTILE3763
RRTILE3764
RRTILE3765
RRTILE3767
RRTILE3793
RRTILE3814
RRTILE3815
RRTILE3819
RRTILE3827
RRTILE3837
}
tileflag TFLAG_MUDDY { MUDDY }

View file

@ -0,0 +1,167 @@
include "constants.mi"
textureflags
{
TFLAG_WALLSWITCH =
HANDPRINTSWITCH,
HANDPRINTSWITCHON,
ALIENSWITCH,
ALIENSWITCHON,
MULTISWITCH,
MULTISWITCH_2,
MULTISWITCH_3,
MULTISWITCH_4,
ACCESSSWITCH,
ACCESSSWITCH2,
PULLSWITCH,
PULLSWITCHON,
HANDSWITCH,
HANDSWITCHON,
SLOTDOOR,
SLOTDOORON,
LIGHTSWITCH,
LIGHTSWITCHON,
SPACELIGHTSWITCH,
SPACELIGHTSWITCHON,
SPACEDOORSWITCH,
SPACEDOORSWITCHON,
FRANKENSTINESWITCH,
FRANKENSTINESWITCHON,
LIGHTSWITCH2,
LIGHTSWITCH2ON,
POWERSWITCH1,
POWERSWITCH1ON,
LOCKSWITCH1,
LOCKSWITCH1ON,
POWERSWITCH2,
POWERSWITCH2ON,
DIPSWITCH,
DIPSWITCHON,
DIPSWITCH2,
DIPSWITCH2ON,
TECHSWITCH,
TECHSWITCHON,
DIPSWITCH3,
DIPSWITCH3ON,
CHICKENPLANTBUTTON,
CHICKENPLANTBUTTONON
TFLAG_ELECTRIC = HURTRAIL
TFLAG_CLEARINVENTORY = HURTRAIL, FLOORSLIME, FLOORPLASMA
TFLAG_SLIME = FLOORSLIME, FLOORSLIME1, FLOORSLIME2
TFLAG_MUDDY = MUDDY
TFLAG_DOORWALL =
DOORTILE1,
DOORTILE2,
DOORTILE3,
DOORTILE4,
DOORTILE5,
DOORTILE6,
DOORTILE7,
DOORTILE8,
DOORTILE9,
DOORTILE10,
DOORTILE11,
DOORTILE12,
DOORTILE14,
DOORTILE15,
DOORTILE16,
DOORTILE17,
DOORTILE18,
DOORTILE19,
DOORTILE20,
DOORTILE21,
DOORTILE22,
RRTILE1856,
RRTILE1877
TFLAG_BLOCKDOOR =
PICKUPBACK1,
PICKUPBACK1,
RRTILE1792,
RRTILE1801,
RRTILE1805,
RRTILE1807,
RRTILE1808,
RRTILE1812,
RRTILE1821,
RRTILE1826,
RRTILE1850,
RRTILE1851,
RRTILE1856,
RRTILE1877,
RRTILE1938,
RRTILE1942,
RRTILE1944,
RRTILE1945,
RRTILE1951,
RRTILE1961,
RRTILE1964,
RRTILE1985,
RRTILE1995,
RRTILE2022,
RRTILE2052,
RRTILE2053,
RRTILE2060,
RRTILE2074,
RRTILE2132,
RRTILE2136,
RRTILE2139,
RRTILE2150,
RRTILE2178,
RRTILE2186,
RRTILE2319,
RRTILE2321,
RRTILE2326,
RRTILE2329,
RRTILE2578,
RRTILE2581,
RRTILE2610,
RRTILE2613,
RRTILE2621,
RRTILE2622,
RRTILE2676,
RRTILE2732,
RRTILE2831,
RRTILE2832,
RRTILE2842,
RRTILE2940,
RRTILE2970,
RRTILE3083,
RRTILE3100,
RRTILE3155,
RRTILE3195,
RRTILE3232,
RRTILE3600,
RRTILE3631,
RRTILE3635,
RRTILE3637,
RRTILE3647,
RRTILE3652,
RRTILE3653,
RRTILE3671,
RRTILE3673,
RRTILE3684,
RRTILE3708,
RRTILE3714,
RRTILE3716,
RRTILE3723,
RRTILE3725,
RRTILE3737,
RRTILE3754,
RRTILE3762,
RRTILE3763,
RRTILE3764,
RRTILE3765,
RRTILE3767,
RRTILE3793,
RRTILE3814,
RRTILE3815,
RRTILE3819,
RRTILE3827,
RRTILE3837
}