summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9785609)
raw | patch | inline | side by side (parent: 9785609)
author | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Sat, 9 Sep 2017 10:56:33 +0000 (13:56 +0300) | ||
committer | Ketmar Dark <ketmar@ketmar.no-ip.org> | |
Sat, 9 Sep 2017 10:56:42 +0000 (13:56 +0300) |
diff --git a/src/game/g_map.pas b/src/game/g_map.pas
index c395dab92374f94db5ffefe36903406bf1646bfd..ac54bd535a9d82d6e3d1c00ae97795761348f24c 100644 (file)
--- a/src/game/g_map.pas
+++ b/src/game/g_map.pas
moveSpeed{, moveStart, moveEnd}: TDFPoint;
//moveActive: Boolean;
pan: TPanel;
+ mapOk: Boolean = false;
begin
mapGrid.Free();
mapGrid := nil;
exit;
end;
+ gCurrentMap := mapReader;
+
generateExternalResourcesList(mapReader);
mapTextureList := mapReader['texture'];
// get all other lists here too
begin
e_WriteLog('error loading map: invalid texture index for panel', MSG_FATALERROR);
result := false;
+ gCurrentMap := nil;
+ gCurrentMapFileName := '';
exit;
end;
end;
stt := curTimeMicro()-stt;
e_LogWritefln('map loaded in %s.%s milliseconds', [Integer(stt div 1000), Integer(stt mod 1000)]);
+ mapOk := true;
finally
sfsGCEnable(); // enable releasing unused volumes
mapReader.Free();
e_ClearInputBuffer(); // why not?
+ if not mapOk then
+ begin
+ gCurrentMap := nil;
+ gCurrentMapFileName := '';
+ end;
end;
e_WriteLog('Done loading map.', MSG_NOTIFY);
index 71619512a3648a3d69e88eb390f5a5f2f8941a20..834220a1b40d316a4634bfc93f432739c077f860 100644 (file)
--- a/src/game/g_monsters.pas
+++ b/src/game/g_monsters.pas
mNeedSend: Boolean; // for network
+ mEDamageType: Integer;
+
procedure Turn();
function findNewPrey(): Boolean;
procedure ActivateTriggers();
procedure setGameX (v: Integer); inline;
procedure setGameY (v: Integer); inline;
+ procedure doDamage (v: Integer);
+
public
FNoRespawn: Boolean;
FFireTime: Integer;
property proxyId: Integer read mProxyId;
property arrIdx: Integer read mArrIdx;
- published
property MonsterType: Byte read FMonsterType;
property MonsterHealth: Integer read FHealth write FHealth;
property MonsterAmmo: Integer read FAmmo write FAmmo;
property GameDirection: TDirection read FDirection write FDirection;
property StartID: Integer read FStartID;
+
+ published
+ property eMonsterType: Byte read FMonsterType;
+ property eMonsterHealth: Integer read FHealth write FHealth;
+ property eMonsterAmmo: Integer read FAmmo write FAmmo;
+ property eMonsterTargetUID: Word read FTargetUID write FTargetUID;
+ property eMonsterTargetTime: Integer read FTargetTime write FTargetTime;
+ property eMonsterBehaviour: Byte read FBehaviour write FBehaviour;
+ property eMonsterSleep: Integer read FSleep write FSleep;
+ property eMonsterState: Byte read FState write FState;
+ property eMonsterRemoved: Boolean read FRemoved;
+ property eMonsterPain: Integer read FPain write FPain;
+ property eMonsterAnim: Byte read FCurAnim;
+
+ property eUID: Word read FUID;
+ property eSpawnTrigger: Integer read FSpawnTrigger;
+
+ property eGameX: Integer read FObj.X write setGameX;
+ property eGameY: Integer read FObj.Y write setGameY;
+ property eGameVelX: Integer read FObj.Vel.X write FObj.Vel.X;
+ property eGameVelY: Integer read FObj.Vel.Y write FObj.Vel.Y;
+ property eGameAccelX: Integer read FObj.Accel.X write FObj.Accel.X;
+ property eGameAccelY: Integer read FObj.Accel.Y write FObj.Accel.Y;
+ property eGameDirection: TDirection read FDirection write FDirection;
+
+ property eStartID: Integer read FStartID;
+
+ // set this before assigning something to `eDamage`
+ property eDamageType: Integer read mEDamageType write mEDamageType;
+ property eDamage: Integer write doDamage;
end;
end;
end;
+procedure TMonster.doDamage (v: Integer);
+begin
+ if (v <= 0) then exit;
+ if (v > 32767) then v := 32767;
+ Damage(v, 0, 0, 0, mEDamageType);
+end;
procedure TMonster.ActionSound();
begin
FFireTime := 0;
FFirePainTime := 0;
FFireAttacker := 0;
+ mEDamageType := HIT_SOME;
mProxyId := -1;
mArrIdx := -1;
diff --git a/src/game/g_net.pas b/src/game/g_net.pas
index 95f96739e62eea4e74a3d662097d2421261c1a50..78b8eeaa6d0da6e722a118ee4c6c60b06ce6347d 100644 (file)
--- a/src/game/g_net.pas
+++ b/src/game/g_net.pas
interface
uses
- e_log, e_msg, ENet, Classes;
+ e_log, e_msg, ENet, Classes, MAPDEF;
const
NET_PROTOCOL_VER = 173;
diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index fb96ef9e3d56654ab0074c557ebc05f8c62aa23c..9c20c904f520d41a9855248c2a9822ee95e46138 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
FNoReload: Boolean;
FJustTeleported: Boolean;
FNetTime: LongWord;
-
- function CollideLevel(XInc, YInc: Integer): Boolean;
- function StayOnStep(XInc, YInc: Integer): Boolean;
- function HeadInLiquid(XInc, YInc: Integer): Boolean;
- function BodyInLiquid(XInc, YInc: Integer): Boolean;
- function BodyInAcid(XInc, YInc: Integer): Boolean;
- function FullInLift(XInc, YInc: Integer): Integer;
- {procedure CollideItem();}
- procedure FlySmoke(Times: DWORD = 1);
- procedure OnFireFlame(Times: DWORD = 1);
- function GetAmmoByWeapon(Weapon: Byte): Word;
- procedure SetAction(Action: Byte; Force: Boolean = False);
- procedure OnDamage(Angle: SmallInt); virtual;
- function firediry(): Integer;
-
- procedure Run(Direction: TDirection);
- procedure NextWeapon();
- procedure PrevWeapon();
- procedure SeeUp();
- procedure SeeDown();
- procedure Fire();
- procedure Jump();
- procedure Use();
+ mEDamageType: Integer;
+
+
+ function CollideLevel(XInc, YInc: Integer): Boolean;
+ function StayOnStep(XInc, YInc: Integer): Boolean;
+ function HeadInLiquid(XInc, YInc: Integer): Boolean;
+ function BodyInLiquid(XInc, YInc: Integer): Boolean;
+ function BodyInAcid(XInc, YInc: Integer): Boolean;
+ function FullInLift(XInc, YInc: Integer): Integer;
+ {procedure CollideItem();}
+ procedure FlySmoke(Times: DWORD = 1);
+ procedure OnFireFlame(Times: DWORD = 1);
+ function GetAmmoByWeapon(Weapon: Byte): Word;
+ procedure SetAction(Action: Byte; Force: Boolean = False);
+ procedure OnDamage(Angle: SmallInt); virtual;
+ function firediry(): Integer;
+
+ procedure Run(Direction: TDirection);
+ procedure NextWeapon();
+ procedure PrevWeapon();
+ procedure SeeUp();
+ procedure SeeDown();
+ procedure Fire();
+ procedure Jump();
+ procedure Use();
function getNextWeaponIndex (): Byte; // return 255 for "no switch"
procedure resetWeaponQueue ();
function hasAmmoForWeapon (weapon: Byte): Boolean;
+ procedure doDamage (v: Integer);
+
public
FDamageBuffer: Integer;
property Vel: TPoint2i read FObj.Vel;
property Obj: TObj read FObj;
- published
property Name: String read FName write FName;
property Model: TPlayerModel read FModel;
property Health: Integer read FHealth write FHealth;
property UID: Word read FUID write FUID;
property JustTeleported: Boolean read FJustTeleported write FJustTeleported;
property NetTime: LongWord read FNetTime write FNetTime;
+
+ published
+ property eName: String read FName write FName;
+ property eHealth: Integer read FHealth write FHealth;
+ property eLives: Byte read FLives write FLives;
+ property eArmor: Integer read FArmor write FArmor;
+ property eAir: Integer read FAir write FAir;
+ property eJetFuel: Integer read FJetFuel write FJetFuel;
+ property eFrags: Integer read FFrags write FFrags;
+ property eDeath: Integer read FDeath write FDeath;
+ property eKills: Integer read FKills write FKills;
+ property eCurrWeap: Byte read FCurrWeap write FCurrWeap;
+ property eMonsterKills: Integer read FMonsterKills write FMonsterKills;
+ property eSecrets: Integer read FSecrets write FSecrets;
+ property eGodMode: Boolean read FGodMode write FGodMode;
+ property eNoTarget: Boolean read FNoTarget write FNoTarget;
+ property eNoReload: Boolean read FNoReload write FNoReload;
+ property eAlive: Boolean read FAlive write FAlive;
+ property eFlag: Byte read FFlag;
+ property eTeam: Byte read FTeam write FTeam;
+ property eDirection: TDirection read FDirection;
+ property eGameX: Integer read FObj.X write FObj.X;
+ property eGameY: Integer read FObj.Y write FObj.Y;
+ property eGameVelX: Integer read FObj.Vel.X write FObj.Vel.X;
+ property eGameVelY: Integer read FObj.Vel.Y write FObj.Vel.Y;
+ property eGameAccelX: Integer read FObj.Accel.X write FObj.Accel.X;
+ property eGameAccelY: Integer read FObj.Accel.Y write FObj.Accel.Y;
+ property eIncCam: Integer read FIncCam write FIncCam;
+ property eUID: Word read FUID;
+ property eJustTeleported: Boolean read FJustTeleported;
+ property eNetTime: LongWord read FNetTime;
+
+ // set this before assigning something to `eDamage`
+ property eDamageType: Integer read mEDamageType write mEDamageType;
+ property eDamage: Integer write doDamage;
end;
TDifficult = record
viewPortY := 0;
viewPortW := 0;
viewPortH := 0;
+ mEDamageType := HIT_SOME;
FIamBot := False;
FDummy := False;
begin
end;
+procedure TPlayer.doDamage (v: Integer);
+begin
+ if (v <= 0) then exit;
+ if (v > 32767) then v := 32767;
+ Damage(v, 0, 0, 0, mEDamageType);
+end;
+
procedure TPlayer.Damage(value: Word; SpawnerUID: Word; vx, vy: Integer; t: Byte);
var
c: Word;
index e49a4ef493e49baed5ab454213ceae3125545729..2aa9cfa7fb9b6a17c1cfe81ab4a50f47dcfed398 100644 (file)
--- a/src/game/g_triggers.pas
+++ b/src/game/g_triggers.pas
end;
+// ////////////////////////////////////////////////////////////////////////// //
+type
+ TMyConstList = class(TExprConstList)
+ public
+ function valid (const cname: AnsiString): Boolean; override;
+ function get (const cname: AnsiString; out v: Variant): Boolean; override;
+ end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function TMyConstList.valid (const cname: AnsiString): Boolean;
+begin
+ //writeln('CHECK: ''', cname, '''');
+ result :=
+ (cname = 'player') or
+ (cname = 'self') or
+ false;
+end;
+
+function TMyConstList.get (const cname: AnsiString; out v: Variant): Boolean;
+var
+ eidx: Integer;
+ ebs: TDynEBS;
+begin
+ //if (cname = 'answer') then begin v := LongInt(42); result := true; exit; end;
+ result := false;
+ if (gCurrentMap = nil) then exit;
+ for eidx := 0 to gCurrentMap.mapdef.ebsTypeCount-1 do
+ begin
+ ebs := gCurrentMap.mapdef.ebsTypeAt[eidx];
+ if ebs.has[cname] then
+ begin
+ //writeln('FOUND: ''', cname, '''');
+ v := ebs[cname];
+ result := true;
+ exit;
+ end;
+ end;
+end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
constructor TTrigScope.Create ();
begin
- plrprops := TPropHash.Create(TPlayer);
- monsprops := TPropHash.Create(TMonster);
- platprops := TPropHash.Create(TPanel);
+ plrprops := TPropHash.Create(TPlayer, 'e');
+ monsprops := TPropHash.Create(TMonster, 'e');
+ platprops := TPropHash.Create(TPanel, 'e');
me := nil;
end;
// ////////////////////////////////////////////////////////////////////////// //
var
tgscope: TTrigScope = nil;
+ tgclist: TMyConstList = nil;
// ////////////////////////////////////////////////////////////////////////// //
tvval := Trigger.exoCheck.value(tgscope);
tgscope.me := nil;
if not Boolean(tvval) then exit;
- except
- tgscope.me := nil;
- conwritefln('trigger exocheck error: %s', [Trigger.exoCheck.toString()]);
- exit;
+ except on e: Exception do
+ begin
+ tgscope.me := nil;
+ conwritefln('trigger exocheck error: %s [%s]', [e.message, Trigger.exoCheck.toString()]);
+ exit;
+ end;
end;
end;
tgscope.me := @Trigger;
Trigger.exoAction.value(tgscope);
tgscope.me := nil;
- except
- tgscope.me := nil;
- conwritefln('trigger exoactivate error: %s', [Trigger.exoAction.toString()]);
- exit;
+ except on e: Exception do
+ begin
+ tgscope.me := nil;
+ conwritefln('trigger exoactivate error: %s [%s]', [e.message, Trigger.exoAction.toString()]);
+ exit;
+ end;
end;
end;
f, olen: Integer;
begin
if (tgscope = nil) then tgscope := TTrigScope.Create();
+ if (tgclist = nil) then tgclist := TMyConstList.Create();
// Íå ñîçäàâàòü âûõîä, åñëè èãðà áåç âûõîäà
if (Trigger.TriggerType = TRIGGER_EXIT) and
gTriggers[find_id].userVars := nil; //THashStrVariant.Create(hsihash, hsiequ);
try
- gTriggers[find_id].exoThink := TExprBase.parseStatList(VarToStr(trec.user['exoma_think']));
+ gTriggers[find_id].exoThink := TExprBase.parseStatList(tgclist, VarToStr(trec.user['exoma_think']));
except
- conwritefln('*** ERROR parsing exoma_think: [%s]', [VarToStr(trec.user['exoma_think'])]);
- gTriggers[find_id].exoThink := nil;
+ on e: TExomaParseException do
+ begin
+ conwritefln('*** ERROR parsing exoma_think (%s,%s): %s [%s]', [e.tokLine, e.tokCol, e.message, VarToStr(trec.user['exoma_think'])]);
+ gTriggers[find_id].exoThink := nil;
+ end;
+ else
+ raise;
end;
try
- gTriggers[find_id].exoCheck := TExprBase.parse(VarToStr(trec.user['exoma_check']));
+ gTriggers[find_id].exoCheck := TExprBase.parse(tgclist, VarToStr(trec.user['exoma_check']));
except
- conwritefln('*** ERROR parsing exoma_check: [%s]', [VarToStr(trec.user['exoma_check'])]);
- gTriggers[find_id].exoCheck := nil;
+ on e: TExomaParseException do
+ begin
+ conwritefln('*** ERROR parsing exoma_check (%s,%s): %s [%s]', [e.tokLine, e.tokCol, e.message, VarToStr(trec.user['exoma_check'])]);
+ gTriggers[find_id].exoCheck := nil;
+ end;
+ else
+ raise;
end;
try
- gTriggers[find_id].exoAction := TExprBase.parseStatList(VarToStr(trec.user['exoma_action']));
+ gTriggers[find_id].exoAction := TExprBase.parseStatList(tgclist, VarToStr(trec.user['exoma_action']));
except
- conwritefln('*** ERROR parsing exoma_action: [%s]', [VarToStr(trec.user['exoma_action'])]);
- gTriggers[find_id].exoAction := nil;
+ on e: TExomaParseException do
+ begin
+ conwritefln('*** ERROR parsing exoma_action (%s,%s): %s [%s]', [e.tokLine, e.tokCol, e.message, VarToStr(trec.user['exoma_action'])]);
+ gTriggers[find_id].exoAction := nil;
+ end;
+ else
+ raise;
end;
try
- gTriggers[find_id].exoInit := TExprBase.parseStatList(VarToStr(trec.user['exoma_init']));
+ gTriggers[find_id].exoInit := TExprBase.parseStatList(tgclist, VarToStr(trec.user['exoma_init']));
except
- conwritefln('*** ERROR parsing exoma_init: [%s]', [VarToStr(trec.user['exoma_init'])]);
- gTriggers[find_id].exoInit := nil;
+ on e: TExomaParseException do
+ begin
+ conwritefln('*** ERROR parsing exoma_init (%s,%s): %s [%s]', [e.tokLine, e.tokCol, e.message, VarToStr(trec.user['exoma_init'])]);
+ gTriggers[find_id].exoInit := nil;
+ end;
+ else
+ raise;
end;
if (forceInternalIndex < 0) and (gTriggers[find_id].exoInit <> nil) then
diff --git a/src/game/g_weapons.pas b/src/game/g_weapons.pas
index 034642c34561165f8398d2d11153c2764cd5c071..5ba00a7ad526f3a3e025954efc7dbd20510eefa1 100644 (file)
--- a/src/game/g_weapons.pas
+++ b/src/game/g_weapons.pas
uses
g_textures, g_basic, e_graphics, g_phys, BinEditor, xprofiler;
+{
const
HIT_SOME = 0;
HIT_ROCKET = 1;
HIT_FLAME = 8;
HIT_SELF = 9;
HIT_DISCON = 10;
+}
type
TShot = record
diff --git a/src/mapdef/mapdef.txt b/src/mapdef/mapdef.txt
index afa87222a21dd5c5312a1f45f26f2be0cc0c435b..ab27f7f8336d7d59f77b611a38e2fb3b1cdb709e 100644 (file)
--- a/src/mapdef/mapdef.txt
+++ b/src/mapdef/mapdef.txt
KEY_BLUETEAM, // 16
}
+enum HitType {
+ HIT_SOME, // 0
+ HIT_ROCKET, // 1
+ HIT_BFG, // 2
+ HIT_TRAP, // 3
+ HIT_FALL, // 4
+ HIT_WATER, // 5
+ HIT_ACID, // 6
+ HIT_ELECTRO, // 7
+ HIT_FLAME, // 8
+ HIT_SELF, // 9
+ HIT_DISCON, // 10
+}
+
////////////////////////////////////////////////////////////////////////////////
// various triggers
diff --git a/src/shared/exoma.pas b/src/shared/exoma.pas
index 8e8cc3ff1f4a490ffa65173c25536df843440fff..8616b7ba21d138914aaf2f109b91c7669799f7ef 100644 (file)
--- a/src/shared/exoma.pas
+++ b/src/shared/exoma.pas
pc: Integer;
public
- constructor Create (aklass: TClass);
+ constructor Create (aklass: TClass; const apfx: AnsiString='');
destructor Destroy (); override;
function get (obj: TObject; const fldname: AnsiString; out v: Variant): Boolean;
end;
+// ////////////////////////////////////////////////////////////////////////// //
+type
+ TExprConstList = class
+ public
+ function valid (const cname: AnsiString): Boolean; virtual; abstract;
+ function get (const cname: AnsiString; out v: Variant): Boolean; virtual; abstract;
+ end;
+
+
// ////////////////////////////////////////////////////////////////////////// //
type
TExprScope = class
class procedure errorfmt (const afmt: AnsiString; const args: array of const);
class procedure parseError (pr: TTextParser; const amsg: AnsiString);
- class procedure parseError (pr: TTextParser; const afmt: AnsiString; const args: array of const);
+ class procedure parseErrorFmt (pr: TTextParser; const afmt: AnsiString; const args: array of const);
- class function parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
- class function parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
- class function parseStatList (const str: AnsiString): TExprBase;
+ class function parse (clist: TExprConstList; pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+ class function parse (clist: TExprConstList; const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+ class function parseStatList (clist: TExprConstList; const str: AnsiString): TExprBase;
class function isFloat (var v: Variant): Boolean; inline;
class function isInt (var v: Variant): Boolean; inline;
public
constructor Create ();
destructor Destroy (); override;
+ procedure append (e: TExprBase);
function value (scope: TExprScope): Variant; override;
function toString (): AnsiString; override;
function clone (): TExprBase; override;
constructor Create (aval: Boolean);
constructor Create (aval: LongInt);
constructor Create (const aval: AnsiString);
+ constructor Create (var v: Variant);
function value (scope: TExprScope): Variant; override;
function toString (): AnsiString; override;
// ////////////////////////////////////////////////////////////////////////// //
-constructor TPropHash.Create (aklass: TClass);
+constructor TPropHash.Create (aklass: TClass; const apfx: AnsiString='');
var
pi: PTypeInfo;
pt: PTypeData;
idx: Integer;
+ n: AnsiString;
begin
mClass := aklass;
mNames := hashNewStrInt();
pt := GetTypeData(pi);
GetMem(pl, pt^.PropCount*sizeof(Pointer));
pc := GetPropList(pi, [tkInteger, tkBool, tkSString, tkLString, tkAString, {tkSet,} tkEnumeration], pl);
- for idx := 0 to pc-1 do mNames.put(pl^[idx].name, idx);
+ for idx := 0 to pc-1 do
+ begin
+ if (Length(apfx) > 0) then
+ begin
+ if (Length(pl^[idx].name) < Length(apfx)) then continue;
+ n := pl^[idx].name;
+ if (Copy(n, 1, Length(apfx)) <> apfx) then continue;
+ Delete(n, 1, Length(apfx));
+ mNames.put(n, idx);
+ end
+ else
+ begin
+ mNames.put(pl^[idx].name, idx);
+ end;
+ end;
end;
destructor TPropHash.Destroy ();
@@ -413,7 +439,7 @@ class procedure TExprBase.error (const amsg: AnsiString); begin raise TExomaExce
class procedure TExprBase.errorfmt (const afmt: AnsiString; const args: array of const); begin raise TExomaException.CreateFmt(afmt, args); end;
class procedure TExprBase.parseError (pr: TTextParser; const amsg: AnsiString); begin raise TExomaParseException.Create(pr, amsg); end;
-class procedure TExprBase.parseError (pr: TTextParser; const afmt: AnsiString; const args: array of const); begin raise TExomaParseException.CreateFmt(pr, afmt, args); end;
+class procedure TExprBase.parseErrorFmt (pr: TTextParser; const afmt: AnsiString; const args: array of const); begin raise TExomaParseException.CreateFmt(pr, afmt, args); end;
class function TExprBase.coerce2bool (var v0: Variant): Boolean;
begin
@@ -476,6 +502,15 @@ procedure TExprBase.assign (scope: TExprScope; var v: Variant); begin error('not
constructor TExprStatList.Create (); begin mList := nil; end;
destructor TExprStatList.Destroy (); var f: Integer; begin for f := 0 to High(mList) do mList[f].Free(); mList := nil; end;
+procedure TExprStatList.append (e: TExprBase);
+begin
+ if (e <> nil) then
+ begin
+ SetLength(mList, Length(mList)+1);
+ mList[High(mList)] := e;
+ end;
+end;
+
function TExprStatList.value (scope: TExprScope): Variant;
var
f: Integer;
@@ -539,6 +574,7 @@ function TObjExpr.clone (): TExprBase; begin result := TObjExpr.Create(mName); e
constructor TLitExpr.Create (aval: Boolean); begin mValue := aval; end;
constructor TLitExpr.Create (aval: LongInt); begin mValue := aval; end;
constructor TLitExpr.Create (const aval: AnsiString); begin mValue := aval; end;
+constructor TLitExpr.Create (var v: Variant); begin mValue := v; end;
function TLitExpr.value (scope: TExprScope): Variant; begin result := mValue; end;
function TLitExpr.toString (): AnsiString; begin result := VarToStr(mValue); if isStr(mValue) then result := quoteStr(result); end;
function TLitExpr.clone (): TExprBase; begin result := TLitExpr.Create(0); (result as TLitExpr).mValue := mValue; end;
@@ -868,43 +904,54 @@ function TBinAssign.toString (): AnsiString; begin result := mOp0.toString()+'='
// ////////////////////////////////////////////////////////////////////////// //
-class function TExprBase.parse (const str: AnsiString; allowAssign: Boolean=false): TExprBase;
+class function TExprBase.parse (clist: TExprConstList; const str: AnsiString; allowAssign: Boolean=false): TExprBase;
var
pr: TTextParser;
begin
pr := TStrTextParser.Create(str);
try
- result := parse(pr, allowAssign);
+ result := parse(clist, pr, allowAssign);
if (pr.tokType <> pr.TTEOF) then begin result.Free(); parseError(pr, 'extra code in expression'); end;
finally
pr.Free();
end;
end;
-class function TExprBase.parseStatList (const str: AnsiString): TExprBase;
+class function TExprBase.parseStatList (clist: TExprConstList; const str: AnsiString): TExprBase;
var
- pr: TTextParser;
- r: TExprStatList;
- e: TExprBase;
+ pr: TTextParser = nil;
+ r: TExprStatList = nil;
+ e: TExprBase = nil;
begin
pr := TStrTextParser.Create(str);
if (pr.tokType = pr.TTEOF) then begin pr.Free(); result := nil; exit; end;
r := TExprStatList.Create();
result := nil;
try
- while true do
- begin
- while pr.eatTT(pr.TTSemi) do begin end;
- if (pr.tokType = pr.TTEOF) then break;
- e := parse(pr, true);
- if (e = nil) then break;
- SetLength(r.mList, Length(r.mList)+1);
- r.mList[High(r.mList)] := e;
- if (pr.tokType = pr.TTEOF) then break;
- pr.expectTT(pr.TTSemi);
+ try
+ while true do
+ begin
+ while pr.eatTT(pr.TTSemi) do begin end;
+ if (pr.tokType = pr.TTEOF) then break;
+ e := parse(clist, pr, true);
+ if (e = nil) then break;
+ //writeln(': ', e.toString());
+ r.append(e);
+ if (pr.tokType = pr.TTEOF) then break;
+ //writeln('tt=', pr.tokType, ' <', pr.tokStr, '>');
+ //writeln(r.toString());
+ pr.expectTT(pr.TTSemi);
+ end;
+ result := r;
+ r := nil;
+ except
+ on e: TExomaException do
+ raise TExomaParseException.Create(pr, e.message);
+ on e: Exception do
+ raise TExomaParseException.Create(pr, e.message);
+ else
+ raise;
end;
- result := r;
- r := nil;
finally
r.Free();
pr.Free();
end;
-class function TExprBase.parse (pr: TTextParser; allowAssign: Boolean=false): TExprBase;
+class function TExprBase.parse (clist: TExprConstList; pr: TTextParser; allowAssign: Boolean=false): TExprBase;
function expr (): TExprBase; forward;
function doTerm (): TExprBase;
+ var
+ id: AnsiString;
+ v: Variant;
begin
result := nil;
try
@@ -931,7 +981,17 @@ class function TExprBase.parse (pr: TTextParser; allowAssign: Boolean=false): TE
if (pr.tokStr = 'true') then begin result := TLitExpr.Create(true); pr.skipToken(); exit; end;
if (pr.tokStr = 'false') then begin result := TLitExpr.Create(false); pr.skipToken(); exit; end;
if (CompareText(pr.tokStr, 'true') = 0) or (CompareText(pr.tokStr, 'false') = 0) then parseError(pr, '`true` and `false` are case-sensitive');
- result := TObjExpr.Create(pr.expectId());
+ id := pr.expectId();
+ if (clist <> nil) then
+ begin
+ if clist.get(id, v) then
+ begin
+ result := TLitExpr.Create(v);
+ exit;
+ end;
+ if not clist.valid(id) then parseErrorFmt(pr, 'unknown identifier ''%s''', [id]);
+ end;
+ result := TObjExpr.Create(id);
while (pr.tokType = pr.TTDelim) and (pr.tokChar = '.') do
begin
pr.skipToken();
@@ -1054,34 +1114,56 @@ class function TExprBase.parse (pr: TTextParser; allowAssign: Boolean=false): TE
// &&
// ||
- function expr (): TExprBase;
+ function expr0 (): TExprBase;
var
- neg: Boolean = false;
+ neg: Boolean;
+ e: TExprBase = nil;
+ list: TExprStatList = nil;
begin
- if pr.eatDelim('-') then neg := true
- else if pr.eatDelim('+') then neg := false;
- result := doLogOr();
- if neg then result := TUnExprNeg.Create(result);
+ result := nil;
+ try
+ while true do
+ begin
+ if pr.eatDelim('-') then neg := true
+ else if pr.eatDelim('+') then neg := false
+ else neg := false;
+ e := doLogOr();
+ if neg then e := TUnExprNeg.Create(e);
+ if allowAssign and pr.eatDelim('=') then e := TBinAssign.Create(e, expr());
+ if not pr.eatTT(pr.TTComma) then
+ begin
+ if (result = nil) then result := e else list.append(e);
+ break;
+ end;
+ //assert(false);
+ if (list = nil) then
+ begin
+ list := TExprStatList.Create();
+ result := list;
+ end;
+ list.append(e);
+ e := nil;
+ end;
+ except
+ e.Free();
+ list.Free();
+ end;
end;
- function exprMain (): TExprBase;
+ function expr (): TExprBase;
var
- neg: Boolean = false;
c: TExprCond;
begin
- if pr.eatDelim('-') then neg := true
- else if pr.eatDelim('+') then neg := false;
- result := doLogOr();
- if neg then result := TUnExprNeg.Create(result);
+ result := expr0();
// ternary
if pr.eatDelim('?') then
begin
c := TExprCond.Create();
c.mCond := result;
try
- c.mTrue := exprMain();
+ c.mTrue := expr();
pr.expectTT(pr.TTColon);
- c.mFalse := exprMain();
+ c.mFalse := expr();
result := c;
except
c.Free();
try
pr.allowSignedNumbers := false;
try
- result := exprMain();
- if allowAssign and pr.eatDelim('=') then
- try
- result := TBinAssign.Create(result, expr());
- except
- result.Free();
- end;
+ result := expr();
finally
pr.allowSignedNumbers := oas;
end;
diff --git a/src/shared/mapdef.inc b/src/shared/mapdef.inc
index 1fe1c0363f03904daafb1d02382ec3bc5a79f2e8..f65ba0d4cd8a2265a22b638c89d9ce89f8181be1 100644 (file)
--- a/src/shared/mapdef.inc
+++ b/src/shared/mapdef.inc
KEY_REDTEAM = 8;
KEY_BLUETEAM = 16;
+// HitType
+const
+ HIT_SOME = 0;
+ HIT_ROCKET = 1;
+ HIT_BFG = 2;
+ HIT_TRAP = 3;
+ HIT_FALL = 4;
+ HIT_WATER = 5;
+ HIT_ACID = 6;
+ HIT_ELECTRO = 7;
+ HIT_FLAME = 8;
+ HIT_SELF = 9;
+ HIT_DISCON = 10;
+
// TriggerScoreTeam
const
TRIGGER_SCORE_TEAM_MINE_RED = 0;
#32#47#47#32#49#10#32#32#75#69#89#95#71#82#69#69#78#44#32#47#47#32#50#10#32+
#32#75#69#89#95#66#76#85#69#44#32#47#47#32#52#10#32#32#75#69#89#95#82#69#68+
#84#69#65#77#44#32#47#47#32#56#10#32#32#75#69#89#95#66#76#85#69#84#69#65#77+
- #44#32#47#47#32#49#54#10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47+
+ #44#32#47#47#32#49#54#10#125#10#10#101#110#117#109#32#72#105#116#84#121#112+
+ #101#32#123#10#32#32#72#73#84#95#83#79#77#69#44#32#47#47#32#48#10#32#32#72+
+ #73#84#95#82#79#67#75#69#84#44#32#47#47#32#49#10#32#32#72#73#84#95#66#70#71+
+ #44#32#47#47#32#50#10#32#32#72#73#84#95#84#82#65#80#44#32#47#47#32#51#10#32+
+ #32#72#73#84#95#70#65#76#76#44#32#47#47#32#52#10#32#32#72#73#84#95#87#65#84+
+ #69#82#44#32#47#47#32#53#10#32#32#72#73#84#95#65#67#73#68#44#32#47#47#32#54+
+ #10#32#32#72#73#84#95#69#76#69#67#84#82#79#44#32#47#47#32#55#10#32#32#72#73+
+ #84#95#70#76#65#77#69#44#32#47#47#32#56#10#32#32#72#73#84#95#83#69#76#70#44+
+ #32#47#47#32#57#10#32#32#72#73#84#95#68#73#83#67#79#78#44#32#47#47#32#49#48+
+ #10#125#10#10#10#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47+
- #47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114+
- #105#111#117#115#32#116#114#105#103#103#101#114#115#10#84#114#105#103#103+
- #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84+
- #32#123#10#32#32#34#109#97#112#34#32#116#121#112#101#32#99#104#97#114#91#49+
- #54#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32+
- #32#34#116#97#114#103#101#116#34#32#116#121#112#101#32#112#111#105#110#116+
- #32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#56#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108+
- #116#32#102#97#108#115#101#59#10#32#32#34#100#105#114#101#99#116#105#111#110+
- #34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #49#48#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101#102#97#117+
- #108#116#32#68#73#82#95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101+
- #114#68#97#116#97#32#102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78+
- #68#79#79#82#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32+
- #84#82#73#71#71#69#82#95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79+
- #82#53#44#32#84#82#73#71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82+
- #73#71#71#69#82#95#84#82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85+
- #80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71+
- #71#69#82#95#76#73#70#84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#48#32#112+
- #97#110#101#108#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32+
- #32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32+
- #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#102#97#108+
- #115#101#59#10#32#32#34#100#50#100#34#32#116#121#112#101#32#98#111#111#108+
- #32#111#102#102#115#101#116#32#53#32#100#101#102#97#117#108#116#32#102#97+
- #108#115#101#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#40#84#82#73#71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71+
- #69#82#95#79#78#44#32#84#82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71+
- #69#82#95#79#78#79#70#70#41#32#123#10#32#32#34#112#111#115#105#116#105#111+
- #110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101#116+
- #32#48#32#97#115#32#116#120#121#32#100#101#102#97#117#108#116#32#40#48#32#48+
- #41#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105+
- #122#101#34#32#116#121#112#101#32#115#105#122#101#32#111#102#102#115#101#116+
- #32#56#32#97#115#32#116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48+
- #41#59#10#32#32#34#119#97#105#116#34#32#116#121#112#101#32#117#115#104#111+
- #114#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116+
- #32#48#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#112#114+
- #101#115#115#67#111#117#110#116#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48+
- #59#10#32#32#34#109#111#110#115#116#101#114#105#100#34#32#116#121#112#101#32+
- #105#110#116#32#111#102#102#115#101#116#32#49#54#32#109#111#110#115#116#101+
- #114#32#97#115#32#109#111#110#115#116#101#114#105#100#32#100#101#102#97#117+
- #108#116#32#110#117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111+
- #109#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
- #50#48#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47+
- #32#116#104#105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118+
- #105#110#103#32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110+
- #101#108#105#100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32+
- #110#117#108#108#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112+
- #101#32#98#111#111#108#32#100#101#102#97#117#108#116#32#116#114#117#101#59+
- #10#32#32#34#115#111#117#110#100#34#32#116#121#112#101#32#115#116#114#105+
- #110#103#32#100#101#102#97#117#108#116#32#34#34#59#10#125#10#10#101#110#117+
- #109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#123#10+
- #32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69+
- #95#82#69#68#44#32#47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82+
- #69#95#84#69#65#77#95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10#32#32+
- #84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95+
- #82#69#68#44#32#47#47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69+
- #95#84#69#65#77#95#70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10#125#10+
- #10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71+
- #69#82#95#83#69#67#82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114+
- #68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69+
- #32#123#10#32#32#34#97#99#116#105#118#97#116#101#95#111#110#99#101#34#32#116+
- #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#48#32#100#101+
- #102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102+
- #97#117#108#116#59#10#32#32#34#97#110#105#109#97#116#101#95#111#110#99#101+
- #34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#32+
- #100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#79#85#78#68#32#123#10#32#32+
- #34#115#111#117#110#100#95#110#97#109#101#34#32#116#121#112#101#32#99#104#97+
- #114#91#54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#32#32#34#118#111#108#117#109#101#34#32#116#121+
- #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#100+
- #101#102#97#117#108#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32+
- #34#112#97#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#54#53#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#108+
- #111#99#97#108#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
- #101#116#32#54#54#32#100#101#102#97#117#108#116#32#116#114#117#101#59#32#47+
- #47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#108+
- #97#121#95#99#111#117#110#116#34#32#116#121#112#101#32#117#98#121#116#101#32+
- #111#102#102#115#101#116#32#54#55#32#100#101#102#97#117#108#116#32#49#59#10+
- #32#32#34#115#111#117#110#100#95#115#119#105#116#99#104#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#54#56#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#59#32#47#47#63#63#63#32#100#101#102#97+
- #117#108#116#32#63#63#63#10#125#10#10#84#114#105#103#103#101#114#68#97#116+
- #97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84+
- #69#82#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112+
- #101#32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32+
- #116#120#121#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
- #34#116#121#112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#77#111#110+
- #115#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#56#32#101#110#117#109#32#77#111#110#115#116#101#114#32#100+
- #101#102#97#117#108#116#32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#32#32#34#104#101#97#108#116#104#34+
- #32#116#121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#105#114+
- #101#99#116#105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111+
- #102#102#115#101#116#32#49#54#32#101#110#117#109#32#68#105#114#84#121#112+
- #101#32#100#101#102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119#114#105+
- #116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118#101#34+
- #32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#55#32+
- #100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110+
- #116#34#32#97#108#105#97#115#32#109#111#110#115#67#111#117#110#116#32#116+
- #121#112#101#32#105#110#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
- #102#97#117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#50#52#32#101#110#117#109#32#69#102+
- #102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70+
- #70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108+
- #116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#54#32#100#101#102#97#117#108#116#32#49+
- #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101+
- #108#97#121#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
- #115#101#116#32#50#56#32#100#101#102#97#117#108#116#32#49#48#48#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#98#101#104#97#118+
- #105#111#117#114#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
- #115#101#116#32#51#48#32#101#110#117#109#32#77#111#110#115#116#101#114#66+
- #101#104#97#118#105#111#117#114#32#100#101#102#97#117#108#116#32#66#72#95#78+
- #79#82#77#65#76#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
- #102#111#114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10+
- #32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111+
- #105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112+
- #101#34#32#97#108#105#97#115#32#115#112#97#119#110#73#116#101#109#84#121#112+
- #101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #56#32#101#110#117#109#32#73#116#101#109#32#100#101#102#97#117#108#116#32#73+
- #84#69#77#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111+
- #111#108#32#111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32+
- #116#114#117#101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121#112+
- #101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#48#32#100#101#102#97+
- #117#108#116#32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116#34#32+
- #97#108#105#97#115#32#105#116#101#109#67#111#117#110#116#32#116#121#112#101+
- #32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117+
- #108#116#32#49#59#10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#54#32#101#110#117+
- #109#32#69#102#102#101#99#116#65#99#116#105#111#110#32#100#101#102#97#117+
- #108#116#32#69#70#70#69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#49#56#32#100#101#102#97+
- #117#108#116#32#49#59#10#32#32#34#100#101#108#97#121#34#32#116#121#112#101+
- #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48#32#100#101+
- #102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
- #114#32#84#82#73#71#71#69#82#95#77#85#83#73#67#32#123#10#32#32#34#110#97#109+
- #101#34#32#97#108#105#97#115#32#109#117#115#105#99#78#97#109#101#32#116#121+
- #112#101#32#99#104#97#114#91#54#52#93#32#111#102#102#115#101#116#32#48#32+
- #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#97#99#116#105+
- #111#110#34#32#97#108#105#97#115#32#109#117#115#105#99#65#99#116#105#111#110+
- #32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#54+
- #52#32#101#110#117#109#32#84#114#105#103#103#101#114#77#117#115#105#99#65#99+
- #116#105#111#110#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125+
- #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71+
- #71#69#82#95#80#85#83#72#32#123#10#32#32#34#97#110#103#108#101#34#32#116#121+
- #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
- #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#102#111#114#99+
- #101#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
- #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#114+
- #101#115#101#116#95#118#101#108#111#99#105#116#121#34#32#116#121#112#101#32+
- #98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97#117#108+
- #116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
- #84#82#73#71#71#69#82#95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111+
- #110#34#32#97#108#105#97#115#32#115#99#111#114#101#65#99#116#105#111#110#32+
- #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32+
- #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#65#99#116+
- #105#111#110#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67+
- #79#82#69#95#65#67#84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101+
- #102#97#117#108#116#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97+
- #115#32#115#99#111#114#101#67#111#117#110#116#32#116#121#112#101#32#117#98+
- #121#116#101#32#111#102#102#115#101#116#32#49#32#100#101#102#97#117#108#116+
- #32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
- #101#97#109#34#32#97#108#105#97#115#32#115#99#111#114#101#84#101#97#109#32+
- #116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32+
- #101#110#117#109#32#84#114#105#103#103#101#114#83#99#111#114#101#84#101#97+
- #109#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111+
- #110#115#111#108#101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111+
- #110#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#51+
- #32#100#101#102#97#117#108#116#32#102#97#108#115#101#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32+
- #97#108#105#97#115#32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98+
- #111#111#108#32#111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116+
- #32#116#114#117#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #47#47#47#47#47#47#47#47#47#47#10#47#47#32#118#97#114#105#111#117#115#32#116+
+ #114#105#103#103#101#114#115#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#84#82#73#71#71#69#82#95#69#88#73#84#32#123#10#32#32#34#109+
+ #97#112#34#32#116#121#112#101#32#99#104#97#114#91#49#54#93#32#111#102#102+
+ #115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
- #73#71#71#69#82#95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100+
+ #73#71#71#69#82#95#84#69#76#69#80#79#82#84#32#123#10#32#32#34#116#97#114#103+
+ #101#116#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115#101+
+ #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
+ #100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101+
+ #116#32#56#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32+
+ #34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#59#10#32#32#34#100#105#114#101#99#116#105#111#110#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#49#48#32#101#110#117+
+ #109#32#68#105#114#84#121#112#101#32#100#101#102#97#117#108#116#32#68#73#82+
+ #95#76#69#70#84#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32+
+ #102#111#114#32#40#84#82#73#71#71#69#82#95#79#80#69#78#68#79#79#82#44#32#84+
+ #82#73#71#71#69#82#95#67#76#79#83#69#68#79#79#82#44#32#84#82#73#71#71#69#82+
+ #95#68#79#79#82#44#32#84#82#73#71#71#69#82#95#68#79#79#82#53#44#32#84#82#73+
+ #71#71#69#82#95#67#76#79#83#69#84#82#65#80#44#32#84#82#73#71#71#69#82#95#84+
+ #82#65#80#44#32#84#82#73#71#71#69#82#95#76#73#70#84#85#80#44#32#84#82#73#71+
+ #71#69#82#95#76#73#70#84#68#79#87#78#44#32#84#82#73#71#71#69#82#95#76#73#70+
+ #84#41#32#123#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101+
+ #32#105#110#116#32#111#102#102#115#101#116#32#48#32#112#97#110#101#108#32+
+ #119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#108+
+ #101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101+
+ #116#32#52#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32+
+ #34#100#50#100#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#53#32#100#101#102#97#117#108#116#32#102#97#108#115#101#59#10#125+
+ #10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#40#84#82#73+
+ #71#71#69#82#95#80#82#69#83#83#44#32#84#82#73#71#71#69#82#95#79#78#44#32#84+
+ #82#73#71#71#69#82#95#79#70#70#44#32#84#82#73#71#71#69#82#95#79#78#79#70#70+
+ #41#32#123#10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101+
+ #32#112#111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116+
+ #120#121#32#100#101#102#97#117#108#116#32#40#48#32#48#41#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#122#101#34#32#116#121+
+ #112#101#32#115#105#122#101#32#111#102#102#115#101#116#32#56#32#97#115#32+
+ #116#119#104#32#100#101#102#97#117#108#116#32#40#48#32#48#41#59#10#32#32#34+
+ #119#97#105#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
+ #102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34+
+ #99#111#117#110#116#34#32#97#108#105#97#115#32#112#114#101#115#115#67#111+
+ #117#110#116#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102+
+ #115#101#116#32#49#52#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#109+
+ #111#110#115#116#101#114#105#100#34#32#116#121#112#101#32#105#110#116#32#111+
+ #102#102#115#101#116#32#49#54#32#109#111#110#115#116#101#114#32#97#115#32+
+ #109#111#110#115#116#101#114#105#100#32#100#101#102#97#117#108#116#32#110+
+ #117#108#108#59#10#32#32#34#101#120#116#95#114#97#110#100#111#109#34#32#116+
+ #121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#50#48#32#100+
+ #101#102#97#117#108#116#32#102#97#108#115#101#59#10#32#32#47#47#32#116#104+
+ #105#115#32#111#110#101#32#105#115#32#102#111#114#32#109#111#118#105#110#103+
+ #32#112#108#97#116#102#111#114#109#115#10#32#32#34#112#97#110#101#108#105+
+ #100#34#32#112#97#110#101#108#32#100#101#102#97#117#108#116#32#110#117#108+
+ #108#59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111+
+ #111#108#32#100#101#102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#115+
+ #111#117#110#100#34#32#116#121#112#101#32#115#116#114#105#110#103#32#100#101+
+ #102#97#117#108#116#32#34#34#59#10#125#10#10#101#110#117#109#32#84#114#105+
+ #103#103#101#114#83#99#111#114#101#84#101#97#109#32#123#10#32#32#84#82#73#71+
+ #71#69#82#95#83#67#79#82#69#95#84#69#65#77#95#77#73#78#69#95#82#69#68#44#32+
+ #47#47#32#48#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77+
+ #95#77#73#78#69#95#66#76#85#69#44#32#47#47#32#49#10#32#32#84#82#73#71#71#69+
+ #82#95#83#67#79#82#69#95#84#69#65#77#95#70#79#82#67#69#95#82#69#68#44#32#47+
+ #47#32#50#10#32#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#84#69#65#77#95+
+ #70#79#82#67#69#95#66#76#85#69#44#32#47#47#32#51#10#125#10#10#84#114#105#103+
+ #103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#83#69#67+
+ #82#69#84#32#123#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
+ #111#114#32#84#82#73#71#71#69#82#95#84#69#88#84#85#82#69#32#123#10#32#32#34+
+ #97#99#116#105#118#97#116#101#95#111#110#99#101#34#32#116#121#112#101#32#98+
+ #111#111#108#32#111#102#102#115#101#116#32#48#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
+ #10#32#32#34#97#110#105#109#97#116#101#95#111#110#99#101#34#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
+ #114#32#84#82#73#71#71#69#82#95#83#79#85#78#68#32#123#10#32#32#34#115#111+
+ #117#110#100#95#110#97#109#101#34#32#116#121#112#101#32#99#104#97#114#91#54+
+ #52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#118#111#108#117#109#101#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#100#101#102#97+
+ #117#108#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#32+
+ #47#47#63#63#63#32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#97+
+ #110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#54#53#32#100#101#102#97#117#108#116#32#48#59#10#32#32#34#108#111#99#97+
+ #108#34#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115#101#116#32+
+ #54#54#32#100#101#102#97#117#108#116#32#116#114#117#101#59#32#47#47#63#63#63+
+ #32#100#101#102#97#117#108#116#32#63#63#63#10#32#32#34#112#108#97#121#95#99+
+ #111#117#110#116#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102+
+ #115#101#116#32#54#55#32#100#101#102#97#117#108#116#32#49#59#10#32#32#34#115+
+ #111#117#110#100#95#115#119#105#116#99#104#34#32#116#121#112#101#32#98#111+
+ #111#108#32#111#102#102#115#101#116#32#54#56#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#59#32#47#47#63#63#63#32#100#101#102#97#117#108#116#32+
+ #63#63#63#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111+
+ #114#32#84#82#73#71#71#69#82#95#83#80#65#87#78#77#79#78#83#84#69#82#32#123+
+ #10#32#32#34#112#111#115#105#116#105#111#110#34#32#116#121#112#101#32#112+
+ #111#105#110#116#32#111#102#102#115#101#116#32#48#32#97#115#32#116#120#121+
+ #32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#121+
+ #112#101#34#32#97#108#105#97#115#32#115#112#97#119#110#77#111#110#115#84#121+
+ #112#101#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116+
+ #32#56#32#101#110#117#109#32#77#111#110#115#116#101#114#32#100#101#102#97+
+ #117#108#116#32#77#79#78#83#84#69#82#95#73#77#80#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#104#101#97#108#116#104#34#32#116#121+
+ #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#105#114#101#99#116+
+ #105#111#110#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115+
+ #101#116#32#49#54#32#101#110#117#109#32#68#105#114#84#121#112#101#32#100#101+
+ #102#97#117#108#116#32#68#73#82#95#76#69#70#84#32#119#114#105#116#101#100+
+ #101#102#97#117#108#116#59#10#32#32#34#97#99#116#105#118#101#34#32#116#121+
+ #112#101#32#98#111#111#108#32#111#102#102#115#101#116#32#49#55#32#100#101+
+ #102#97#117#108#116#32#116#114#117#101#59#10#32#32#34#99#111#117#110#116#34+
+ #32#97#108#105#97#115#32#109#111#110#115#67#111#117#110#116#32#116#121#112+
+ #101#32#105#110#116#32#111#102#102#115#101#116#32#50#48#32#100#101#102#97+
+ #117#108#116#32#49#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116#101+
+ #32#111#102#102#115#101#116#32#50#52#32#101#110#117#109#32#69#102#102#101#99+
+ #116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70#69#67+
+ #84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
+ #102#102#115#101#116#32#50#54#32#100#101#102#97#117#108#116#32#49#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#100#101#108#97#121#34+
+ #32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32+
+ #50#56#32#100#101#102#97#117#108#116#32#49#48#48#48#32#119#114#105#116#101+
+ #100#101#102#97#117#108#116#59#10#32#32#34#98#101#104#97#118#105#111#117#114+
#34#32#116#121#112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32+
- #48#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
- #101#75#105#110#100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95+
- #77#69#83#83#65#71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105+
- #97#115#32#109#115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116+
- #101#32#101#110#117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103+
- #101#68#101#115#116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101+
- #120#116#34#32#116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102+
+ #51#48#32#101#110#117#109#32#77#111#110#115#116#101#114#66#101#104#97#118+
+ #105#111#117#114#32#100#101#102#97#117#108#116#32#66#72#95#78#79#82#77#65#76+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#80#65#87#78#73#84#69#77#32#123#10#32#32#34#112+
+ #111#115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32+
+ #111#102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108+
+ #105#97#115#32#115#112#97#119#110#73#116#101#109#84#121#112#101#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#56#32#101#110+
+ #117#109#32#73#116#101#109#32#100#101#102#97#117#108#116#32#73#84#69#77#95+
+ #78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#103#114#97#118#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#57#32#100#101#102#97#117#108#116#32#116#114#117+
+ #101#59#10#32#32#34#100#109#111#110#108#121#34#32#116#121#112#101#32#98#111+
+ #111#108#32#111#102#102#115#101#116#32#49#48#32#100#101#102#97#117#108#116+
+ #32#102#97#108#115#101#59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97+
+ #115#32#105#116#101#109#67#111#117#110#116#32#116#121#112#101#32#105#110#116+
+ #32#111#102#102#115#101#116#32#49#50#32#100#101#102#97#117#108#116#32#49#59+
+ #10#32#32#34#101#102#102#101#99#116#34#32#116#121#112#101#32#117#98#121#116+
+ #101#32#111#102#102#115#101#116#32#49#54#32#101#110#117#109#32#69#102#102+
+ #101#99#116#65#99#116#105#111#110#32#100#101#102#97#117#108#116#32#69#70#70+
+ #69#67#84#95#78#79#78#69#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#109#97#120#34#32#116#121#112#101#32#117#115#104#111#114#116+
+ #32#111#102#102#115#101#116#32#49#56#32#100#101#102#97#117#108#116#32#49#59+
+ #10#32#32#34#100#101#108#97#121#34#32#116#121#112#101#32#117#115#104#111#114+
+ #116#32#111#102#102#115#101#116#32#50#48#32#100#101#102#97#117#108#116#32#49+
+ #48#48#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10+
+ #84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69+
+ #82#95#77#85#83#73#67#32#123#10#32#32#34#110#97#109#101#34#32#97#108#105#97+
+ #115#32#109#117#115#105#99#78#97#109#101#32#116#121#112#101#32#99#104#97#114+
+ #91#54#52#93#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105#97+
+ #115#32#109#117#115#105#99#65#99#116#105#111#110#32#116#121#112#101#32#117+
+ #98#121#116#101#32#111#102#102#115#101#116#32#54#52#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#77#117#115#105#99#65#99#116#105#111#110#32#119#114+
+ #105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114#105#103#103+
+ #101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95#80#85#83#72+
+ #32#123#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104+
+ #111#114#116#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#102#111#114#99#101#34#32#116#121#112#101+
+ #32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#119#114#105#116+
+ #101#100#101#102#97#117#108#116#59#10#32#32#34#114#101#115#101#116#95#118+
+ #101#108#111#99#105#116#121#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#51#32#100#101#102#97#117#108#116#32#102#97#108#115+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
+ #114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
+ #95#83#67#79#82#69#32#123#10#32#32#34#97#99#116#105#111#110#34#32#97#108#105+
+ #97#115#32#115#99#111#114#101#65#99#116#105#111#110#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#65#99#116#105#111#110#32#100+
+ #101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#67#79#82#69#95#65#67+
+ #84#73#79#78#95#65#68#68#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#32#32#34#99#111#117#110#116#34#32#97#108#105#97#115#32#115#99#111#114+
+ #101#67#111#117#110#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#49#32#100#101#102#97#117#108#116#32#49#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#116#101#97#109#34#32#97+
+ #108#105#97#115#32#115#99#111#114#101#84#101#97#109#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109#32+
+ #84#114#105#103#103#101#114#83#99#111#114#101#84#101#97#109#32#119#114#105+
+ #116#101#100#101#102#97#117#108#116#59#10#32#32#34#99#111#110#115#111#108+
+ #101#34#32#97#108#105#97#115#32#115#99#111#114#101#67#111#110#32#116#121#112+
+ #101#32#98#111#111#108#32#111#102#102#115#101#116#32#51#32#100#101#102#97+
+ #117#108#116#32#102#97#108#115#101#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#109#101#115#115#97#103#101#34#32#97#108#105#97#115+
+ #32#115#99#111#114#101#77#115#103#32#116#121#112#101#32#98#111#111#108#32+
+ #111#102#102#115#101#116#32#52#32#100#101#102#97#117#108#116#32#116#114#117+
+ #101#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84+
+ #114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82+
+ #95#77#69#83#83#65#71#69#32#123#10#32#32#34#107#105#110#100#34#32#116#121+
+ #112#101#32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#75#105#110+
+ #100#32#100#101#102#97#117#108#116#32#84#82#73#71#71#69#82#95#77#69#83#83#65+
+ #71#69#95#75#73#78#68#95#71#65#77#69#32#119#114#105#116#101#100#101#102#97+
+ #117#108#116#59#10#32#32#34#100#101#115#116#34#32#97#108#105#97#115#32#109+
+ #115#103#68#101#115#116#32#116#121#112#101#32#117#98#121#116#101#32#101#110+
+ #117#109#32#84#114#105#103#103#101#114#77#101#115#115#97#103#101#68#101#115+
+ #116#32#111#102#102#115#101#116#32#49#59#10#32#32#34#116#101#120#116#34#32+
+ #116#121#112#101#32#99#104#97#114#91#49#48#48#93#32#111#102#102#115#101#116+
+ #32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#116+
+ #105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105#109#101#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#48+
+ #50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#125#10#10#84#114+
+ #105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82#73#71#71#69#82#95+
+ #68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110#116#34#32#116#121+
+ #112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#48#32#119+
+ #114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34#105#110#116#101+
+ #114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59+
- #10#32#32#34#116#105#109#101#34#32#97#108#105#97#115#32#109#115#103#84#105+
- #109#101#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
- #101#116#32#49#48#50#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84+
+ #82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97#109#111#117+
+ #110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111+
+ #114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97#115#32#104#101+
+ #97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111#102#102#115+
+ #101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32+
+ #34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111#108#32#111+
+ #102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97#117#108#116+
+ #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
+ #84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111#115#105#116+
+ #105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111#102#102#115+
+ #101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101#100#101#102+
+ #97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105#97#115#32+
+ #115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10+
+ #32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32#115#104#111#116+
+ #84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116#101#32#111#102+
+ #102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103#103#101#114#83+
+ #104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100#101#102#97#117+
+ #108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112#101#32#110#101+
+ #103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32#47#47#32#110+
+ #101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121#112#101#32+
+ #98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110#117#109#32#84+
+ #114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101#102#97#117#108+
+ #116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68#69#70#65#85#76+
+ #84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121#112#101#32#105+
+ #110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110#101#108#32#100+
+ #101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116#101#100#101+
+ #102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116#121#112#101+
+ #32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54#59#10#32#32+
+ #34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111#114#116#32+
+ #111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116#34#32#116+
+ #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#48+
+ #59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32#117#115+
+ #104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34#97#109+
+ #109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115+
+ #101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116#121#112+
+ #101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54#59#10+
#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32#84#82+
- #73#71#71#69#82#95#68#65#77#65#71#69#32#123#10#32#32#34#97#109#111#117#110+
- #116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101+
- #116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116#59#10#32#32#34+
- #105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117#115#104#111#114+
- #116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#72#69#65#76#84#72#32#123#10#32#32#34#97+
- #109#111#117#110#116#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111+
- #102#102#115#101#116#32#48#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#105#110#116#101#114#118#97#108#34#32#116#121#112#101#32#117+
- #115#104#111#114#116#32#111#102#102#115#101#116#32#50#32#119#114#105#116#101+
- #100#101#102#97#117#108#116#59#10#32#32#34#109#97#120#34#32#97#108#105#97+
- #115#32#104#101#97#108#77#97#120#32#116#121#112#101#32#98#111#111#108#32#111+
- #102#102#115#101#116#32#52#32#119#114#105#116#101#100#101#102#97#117#108#116+
- #59#10#32#32#34#115#105#108#101#110#116#34#32#116#121#112#101#32#98#111#111+
- #108#32#111#102#102#115#101#116#32#53#32#119#114#105#116#101#100#101#102#97+
- #117#108#116#59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102+
- #111#114#32#84#82#73#71#71#69#82#95#83#72#79#84#32#123#10#32#32#34#112#111+
- #115#105#116#105#111#110#34#32#116#121#112#101#32#112#111#105#110#116#32#111+
- #102#102#115#101#116#32#48#32#97#115#32#116#120#121#32#119#114#105#116#101+
+ #73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110#116+
+ #34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101#32+
+ #117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116#101+
#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108#105+
- #97#115#32#115#104#111#116#84#121#112#101#32#116#121#112#101#32#117#98#121+
- #116#101#32#111#102#102#115#101#116#32#56#32#101#110#117#109#32#84#114#105+
- #103#103#101#114#83#104#111#116#32#119#114#105#116#101#100#101#102#97#117+
- #108#116#59#10#32#32#34#116#97#114#103#101#116#34#32#97#108#105#97#115#32+
- #115#104#111#116#84#97#114#103#101#116#32#116#121#112#101#32#117#98#121#116+
- #101#32#111#102#102#115#101#116#32#57#32#101#110#117#109#32#84#114#105#103+
- #103#101#114#83#104#111#116#84#97#114#103#101#116#32#119#114#105#116#101#100+
- #101#102#97#117#108#116#59#10#32#32#34#113#117#105#101#116#34#32#116#121#112+
- #101#32#110#101#103#98#111#111#108#32#111#102#102#115#101#116#32#49#48#59#32+
- #47#47#32#110#101#103#98#111#111#108#33#10#32#32#34#97#105#109#34#32#116#121+
- #112#101#32#98#121#116#101#32#111#102#102#115#101#116#32#49#49#32#101#110+
- #117#109#32#84#114#105#103#103#101#114#83#104#111#116#65#105#109#32#100#101+
- #102#97#117#108#116#32#84#82#73#71#71#69#82#95#83#72#79#84#95#65#73#77#95#68+
- #69#70#65#85#76#84#59#10#32#32#34#112#97#110#101#108#105#100#34#32#116#121+
- #112#101#32#105#110#116#32#111#102#102#115#101#116#32#49#50#32#112#97#110+
- #101#108#32#100#101#102#97#117#108#116#32#110#117#108#108#32#119#114#105#116+
- #101#100#101#102#97#117#108#116#59#10#32#32#34#115#105#103#104#116#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#49#54+
- #59#10#32#32#34#97#110#103#108#101#34#32#116#121#112#101#32#117#115#104#111+
- #114#116#32#111#102#102#115#101#116#32#49#56#59#10#32#32#34#119#97#105#116+
- #34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116+
- #32#50#48#59#10#32#32#34#97#99#99#117#114#97#99#121#34#32#116#121#112#101#32+
- #117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#50#59#10#32#32#34+
- #97#109#109#111#34#32#116#121#112#101#32#117#115#104#111#114#116#32#111#102+
- #102#115#101#116#32#50#52#59#10#32#32#34#114#101#108#111#97#100#34#32#116+
- #121#112#101#32#117#115#104#111#114#116#32#111#102#102#115#101#116#32#50#54+
- #59#10#125#10#10#84#114#105#103#103#101#114#68#97#116#97#32#102#111#114#32+
- #84#82#73#71#71#69#82#95#69#70#70#69#67#84#32#123#10#32#32#34#99#111#117#110+
- #116#34#32#97#108#105#97#115#32#70#88#67#111#117#110#116#32#116#121#112#101+
- #32#117#98#121#116#101#32#111#102#102#115#101#116#32#48#32#119#114#105#116+
- #101#100#101#102#97#117#108#116#59#10#32#32#34#116#121#112#101#34#32#97#108+
- #105#97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101+
- #32#111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103+
- #101#114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71+
- #71#69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
+ #97#115#32#70#88#84#121#112#101#32#116#121#112#101#32#117#98#121#116#101#32+
+ #111#102#102#115#101#116#32#49#32#101#110#117#109#32#84#114#105#103#103#101+
+ #114#69#102#102#101#99#116#32#100#101#102#97#117#108#116#32#84#82#73#71#71+
+ #69#82#95#69#70#70#69#67#84#95#80#65#82#84#73#67#76#69#32#119#114#105#116+
#101#100#101#102#97#117#108#116#59#10#32#32#34#115#117#98#116#121#112#101#34+
#32#97#108#105#97#115#32#70#88#83#117#98#84#121#112#101#32#116#121#112#101+
#32#117#98#121#116#101#32#111#102#102#115#101#116#32#50#32#101#110#117#109+
diff --git a/src/shared/xdynrec.pas b/src/shared/xdynrec.pas
index 53bda03d96112b758ace00a676b9b235fc0cb59c..c992997d32ce55a4f21c73b764ad62dbbaa3cc95 100644 (file)
--- a/src/shared/xdynrec.pas
+++ b/src/shared/xdynrec.pas
property typeName: AnsiString read mTypeName; // enum/bitset type name
property isEnum: Boolean read mIsEnum; // is this enum? `false` means "bitset"
property has[const aname: AnsiString]: Boolean read hasByName;
- property field[const aname: AnsiString]: Integer read getFieldByName;
+ property field[const aname: AnsiString]: Integer read getFieldByName; default;
property tip: AnsiString read mTip;
property help: AnsiString read mHelp;