1 (*
2  * Hedgewars, a free turn based strategy game
3  * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; version 2 of the License
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  *)
18 
19 {$INCLUDE "options.inc"}
20 
21 unit uVariables;
22 interface
23 
24 uses SDLh, uTypes, uFloat, GLunit, uConsts, Math, uUtils{$IFDEF GL2}, uMatrix{$ENDIF};
25 
26 procedure initScreenSpaceVars();
27 
28 var
29 /////// init flags ///////
30     cMinScreenWidth    : LongInt;
31     cMinScreenHeight   : LongInt;
32     cFullscreenWidth   : LongInt;
33     cFullscreenHeight  : LongInt;
34     cWindowedWidth     : LongInt;
35     cWindowedHeight    : LongInt;
36     cWindowedMaximized : boolean;
37     cScreenWidth       : LongInt;
38     cScreenHeight      : LongInt;
39     cNewScreenWidth    : LongInt;
40     cNewScreenHeight   : LongInt;
41     cScreenResizeDelay : LongWord;
42     ipcPort            : Word;
43     AprilOne           : boolean;
44     cFullScreen        : boolean;
45     cLanguageFName     : shortstring;
46     cLanguage          : shortstring;
47     cTimerInterval     : LongInt;
48     PathPrefix         : ansistring;
49     UserPathPrefix     : ansistring;
50     cShowFPS           : boolean;
51     cFlattenFlakes     : boolean;
52     cFlattenClouds     : boolean;
53     cIce               : boolean;
54     cSnow              : boolean;
55     isInChatMode       : boolean;
56 
57     cAltDamage         : boolean;
58     cReducedQuality    : LongWord;
59     cHolidaySilliness  : boolean;
60     UserNick           : shortstring;
61     recordFileName     : shortstring;
62     cReadyDelay        : Longword;
63     cStereoMode        : TStereoMode;
64     cOnlyStats         : boolean;
65 {$IFDEF USE_VIDEO_RECORDING}
66     RecPrefix          : shortstring;
67     cAVFormat          : shortstring;
68     cVideoCodec        : shortstring;
69     cVideoFramerateNum : LongInt;
70     cVideoFramerateDen : LongInt;
71     cVideoQuality      : LongInt;
72     cAudioCodec        : shortstring;
73 {$ENDIF}
74 //////////////////////////
75     cMapName           : shortstring;
76     syncedPixelDigest  : LongInt;
77     isCursorVisible : boolean;
78     isInLag         : boolean;
79     isPaused        : boolean;
80     isInMultiShoot  : boolean;
81     isSpeed         : boolean;
82     isAFK           : boolean;
83     isShowMission   : boolean;
84     isShowGearInfo  : boolean;
85     isForceMission  : boolean;
86     SpeedStart      : LongWord;
87 
88     fastUntilLag    : boolean;
89     fastScrolling   : boolean;
90     autoCameraOn    : boolean;
91 
92     CheckSum        : LongWord;
93     CampaignVariable: shortstring;
94     MissionVariable : shortstring;
95     GameTicks       : LongWord;
96     OuchTauntTimer  : LongWord; // Timer which blocks sndOuch from being played too often and fast
97     GameState       : TGameState;
98     GameType        : TGameType;
99     InputMask       : LongWord;
100     GameFlags       : Longword;
101     WorldEdge       : TWorldEdge;
102     LeftImpactTimer : LongWord;
103     RightImpactTimer: LongWord;
104     TurnTimeLeft    : Longword;
105     TurnClockActive : boolean;
106     TagTurnTimeLeft : Longword;
107     ReadyTimeLeft   : Longword;
108     IsGetAwayTime   : boolean;
109     GameOver        : boolean;
110     cSuddenDTurns   : LongInt;
111     LastSuddenDWarn : LongInt; // last round in which the last SD warning appeared. -2 = no warning so far
112     cInitHealth     : LongInt; // initial hedgehog health (from game scheme. note the real hog health is sent directly
113                                // from frontend, this is only used to inform Lua scripts)
114     cDamagePercent  : LongInt;
115     cMineDudPercent : LongWord;
116     cTemplateFilter : LongInt;
117     cFeatureSize    : LongInt;
118     cMapGen         : TMapGen;
119     cRopePercent    : LongWord;
120     cRopeNodeStep   : LongWord;
121     cRopeLayers     : LongInt;
122     cGetAwayTime    : LongWord;
123 
124     cAdvancedMapGenMode: boolean;
125 
126     cHedgehogTurnTime: Longword;
127     cMinesTime       : LongInt;
128     cMaxAIThinkTime  : Longword;
129 
130     cHealthCaseProb  : LongInt;
131     cHealthCaseAmount: LongInt;
132     cWaterRise       : LongInt;
133     cHealthDecrease  : LongInt;
134 
135     cCloudsNumber    : LongWord;
136     cSDCloudsNumber  : LongWord;
137 
138     cTagsMask        : byte;
139     cPrevTagsMask    : byte;
140     zoom             : GLfloat; // current zoom
141     ZoomValue        : GLfloat; // aimed zoom
142     UserZoom         : GLfloat; // user-chosen initial and default zoom
143 
144     cWaterLine       : LongInt;
145     cGearScrEdgesDist: LongInt;
146     isAudioMuted     : boolean;
147 
148     // originally typed consts
149     ExplosionBorderColorR,
150     ExplosionBorderColorG,
151     ExplosionBorderColorB,
152     ExplosionBorderColorNoA,
153     ExplosionBorderColor:  LongWord;
154     IceColor            : LongWord;
155     IceEdgeColor        : LongWord;
156     WaterOpacity: byte;
157     SDWaterOpacity: byte;
158     GrayScale: Boolean;
159 
160     CountTexz: array[0..Pred(AMMO_INFINITE)] of PTexture;
161     LAND_WIDTH       : LongInt;
162     LAND_HEIGHT      : LongInt;
163     LAND_WIDTH_MASK  : LongWord;
164     LAND_HEIGHT_MASK : LongWord;
165 
166     ChefHatTexture : PTexture;
167     CrosshairTexture : PTexture;
168     GenericHealthTexture : PTexture;
169 
170     cLeftScreenBorder     : LongInt;
171     cRightScreenBorder    : LongInt;
172     cScreenSpace          : Longword;
173 
174     cCaseFactor     : Longword;
175     cMaxCaseDrops   : Longword; // Max. number of crates which can be in the game when dropping
176 
177     cLandMines      : Longword;
178     cAirMines       : Longword;
179     cExplosives     : Longword;
180 
181     cScriptName     : shortstring;
182     cScriptParam    : shortstring;
183     cSeed           : shortstring;
184     cIsSoundEnabled : boolean; // If the sound system is enabled
185     cVolumeDelta    : LongInt;
186     cVolumeUpKey    : boolean;
187     cVolumeDownKey  : boolean;
188     cMuteToggle     : boolean; // Mute toggle requested
189     cHasFocus       : boolean;
190     cInactDelay     : Longword;
191 
192     bBetweenTurns   : boolean;
193     bWaterRising    : boolean;
194     bDuringWaterRise: boolean;
195 
196     CrosshairX      : LongInt;
197     CrosshairY      : LongInt;
198     CrosshairGear   : PGear;
199     CursorMovementX : LongInt;
200     CursorMovementY : LongInt;
201     cWaveHeight     : LongInt;
202     cDrownSpeed     : hwFloat;
203     cDrownSpeedf    : real;
204     cMaxWindSpeed   : hwFloat;
205     cWindSpeed      : hwFloat;
206     cWindSpeedf     : real;
207     cElastic        : hwFloat;
208     cGravity        : hwFloat;
209     cGravityf       : real;
210     cLowGravity     : boolean;
211     cBuildMaxDist   : LongInt;
212     cDamageModifier : hwFloat;
213     cLaserSighting  : boolean;
214     cLaserSightingSniper : boolean;
215     cVampiric       : boolean;
216     WeaponTooltipTex: PTexture;
217     AmmoMenuInvalidated: boolean;
218     AmmoRect        : TSDL_Rect;
219     HHTexture       : PTexture;
220     cMaxZoomLevel   : real;
221     cMinZoomLevel   : real;
222     cZoomDelta      : real;
223     cZoomDeltaSmall : real;
224     cMinMaxZoomLevelDelta : real;
225     cDemoClockFPSOffsetY : LongInt;
226 
227 
228     flagMakeCapture : boolean;
229     flagDumpLand    : boolean;
230 
231     InitStepsFlags  : Longword;
232     RealTicks       : Longword;
233     AttackBar       : LongInt;
234 
235     WaterColorArray : array[0..7] of HwColor4f;
236     SDWaterColorArray : array[0..7] of HwColor4f;
237     ClanColorArray : array[0..Pred(cClanColors)] of Longword;
238 
239     TargetCursorPoint     : TPoint;
240     CursorPoint           : TPoint;
241     CursorPointDelta      : TPoint;
242     TargetPoint           : TPoint;
243 
244     ScreenFade      : TScreenFade;
245     ScreenFadeValue : LongInt;
246     ScreenFadeSpeed : LongInt;
247     InCinematicMode : boolean;
248     CinematicSteps  : LongInt;
249     CinematicBarH   : LongInt;
250     CinematicScript : boolean;
251 
252     UIDisplay       : TUIDisplay;
253     LocalMessage    : LongWord;
254 
255     Theme           : shortstring;
256     disableLandBack : boolean;
257 
258     WorldDx: LongInt;
259     WorldDy: LongInt;
260 
261     SpeechHogNumber: LongInt;
262 
263     // for tracking the limits of the visible grid based on cScaleFactor
264     ViewLeftX, ViewRightX, ViewBottomY, ViewTopY, ViewWidth, ViewHeight: LongInt;
265 
266     // for debugging the view limits visually
267     cViewLimitsDebug: boolean;
268 
269     dirtyLandTexCount: LongInt;
270 
271     hiTicks: Word;
272 
273     LuaGoals        : ansistring;
274 
275     LuaTemplateNumber : LongWord;
276 
277     // for EndTurn Lua call
278     LuaEndTurnRequested: boolean;
279     LuaNoEndTurnTaunts: boolean;
280 
281     // whether Lua requested to pause the clock
282     LuaClockPaused: boolean;
283 
284     // whether /lua command was used
285     LuaCmdUsed: boolean;
286 
287     MaskedSounds : array[TSound] of boolean;
288 
289     LastVoice : TVoice;
290 
291     mobileRecord: TMobileRecord;
292 
293     MaxTextureSize: LongInt;
294 
295     SDLwindow: PSDL_Window;
296     SDLGLcontext: PSDL_GLContext;
297 
298 /////////////////////////////////////
299 //Buttons
300 {$IFDEF USE_TOUCH_INTERFACE}
301     buttonScale: GLFloat;
302     bounceButtonPressed: boolean;
303 
304     arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget;
305     firebutton, jumpWidget, AMWidget          : TOnScreenWidget;
306     pauseButton, utilityWidget                : TOnScreenWidget;
307     utilityWidget2                            : TOnScreenWidget;
308 {$ENDIF}
309 
310 
311 var
312     // these consts are here because they would cause circular dependencies in uConsts/uTypes
313     cPathz: array[TPathType] of shortstring;
314 
315 const
316     cPathzInit: array[TPathType] of shortstring = (
317         '',                              // ptNone
318         '//',                            // ptData
319         '/Graphics',                     // ptGraphics
320         '/Themes',                       // ptThemes
321         '/Themes/Nature',                // ptCurrTheme
322         '/Config',                       // ptConfig
323         '/Config/Teams',                 // ptTeams
324         '/Maps',                         // ptMaps
325         '',                              // ptMapCurrent
326         '/Demos',                        // ptDemos
327         '/Sounds',                       // ptSounds
328         '/Graphics/Graves',              // ptGraves
329         '/Fonts',                        // ptFonts
330         '/Forts',                        // ptForts
331         '/Locale',                       // ptLocale
332         '/Graphics/AmmoMenu',            // ptAmmoMenu
333         '/Graphics/Hedgehog',            // ptHedgehog
334         '/Sounds/voices',                // ptVoices
335         '/Graphics/Hats',                // ptHats
336         '/Graphics/Flags',               // ptFlags
337         '/Missions/Maps',                // ptMissionMaps
338         '/Graphics/SuddenDeath',         // ptSuddenDeath
339         '/Graphics/Buttons',             // ptButton
340         '/Shaders',                      // ptShaders
341         '/Sounds/voices/Default',        // ptDefaultVoice
342         '/misc'                          // ptMisc
343     );
344 
345 var
346     Fontz: array[THWFont] of THHFont;
347 
348 const
349     FontzInit: array[THWFont] of THHFont = (
350             (Handle: nil;
351             Height: 12*HDPIScaleFactor;
352             style: TTF_STYLE_NORMAL;
353             Name: 'DejaVuSans-Bold.ttf'),
354             (Handle: nil;
355             Height: 24*HDPIScaleFactor;
356             style: TTF_STYLE_NORMAL;
357             Name: 'DejaVuSans-Bold.ttf'),
358             (Handle: nil;
359             Height: 10*HDPIScaleFactor;
360             style: TTF_STYLE_NORMAL;
361             Name: 'DejaVuSans-Bold.ttf')
362             {$IFNDEF MOBILE}, // remove chinese fonts for now
363             (Handle: nil;
364             Height: 12*HDPIScaleFactor;
365             style: TTF_STYLE_NORMAL;
366             Name: 'wqy-zenhei.ttc'),
367             (Handle: nil;
368             Height: 24*HDPIScaleFactor;
369             style: TTF_STYLE_NORMAL;
370             Name: 'wqy-zenhei.ttc'),
371             (Handle: nil;
372             Height: 10*HDPIScaleFactor;
373             style: TTF_STYLE_NORMAL;
374             Name: 'wqy-zenhei.ttc')
375             {$ENDIF}
376             );
377 
378 var
379     SpritesData: array[TSprite] of TSpriteData;
380 
381 const
382     SpritesDataInit: array[TSprite] of TSpriteData = (
383             (FileName:  'BlueWater'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
384             Width:   0; Height:  -1; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: true; getImageDimensions: true),// sprWater
385             (FileName:     'Clouds'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
386             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCloud
387             (FileName:       'Bomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
388             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBomb
389             (FileName:  'BigDigits'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
390             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBigDigit
391             (FileName: 'BigDigitsGray'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
392             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBigDigitGray
393             (FileName: 'BigDigitsGreen'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
394             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBigDigitGreen
395             (FileName: 'BigDigitsRed'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
396             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBigDigitRed
397             (FileName:      'Frame'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
398             Width:   4; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFrame
399             (FileName:        'Lag'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
400             Width:  65; Height: 65; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprLag
401             (FileName:      'Arrow'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
402             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCursor
403             (FileName:'BazookaShell'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
404             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBazookaShell
405             (FileName:    'Targetp'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
406             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetP
407             (FileName:        'Bee'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
408             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBee
409             (FileName: 'SmokeTrace'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
410             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSmokeTrace
411             (FileName:   'RopeHook'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
412             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprRopeHook
413             (FileName:     'Expl50'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
414             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprExplosion50
415             (FileName:    'MineOff'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
416             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMineOff
417             (FileName:     'MineOn'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
418             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMineOn
419             (FileName:     'MineDead'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
420             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMineDead
421             (FileName:       'Case'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
422             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCase
423             (FileName:   'FirstAid'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
424             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprFAid
425             (FileName:   'dynamite'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
426             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprDynamite
427             (FileName:      'Power'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
428             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprPower
429             (FileName:     'ClBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
430             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprClusterBomb
431             (FileName: 'ClParticle'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
432             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprClusterParticle
433             (FileName:      'Flame'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
434             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlame
435             (FileName:   'horizont'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
436             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizont
437             (FileName:  'horizontL'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
438             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizontL
439             (FileName:  'horizontR'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
440             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizontR
441             (FileName:        'Sky'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
442             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSky
443             (FileName:       'SkyL'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
444             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSkyL
445             (FileName:       'SkyR'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
446             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSkyR
447             (FileName:   'Slot'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
448             Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlot
449             (FileName:      'Ammos_base'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
450             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMAmmos
451             (FileName:   'Ammos_bw_base'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
452             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprAMAmmosBW
453             (FileName:   'SlotKeys'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
454             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlotKeys
455             (FileName:  'Corners'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
456             Width:  2; Height: 2; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMCorners
457             (FileName:     'Finger'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
458             Width:  32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFinger
459             (FileName:    'AirBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
460             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAirBomb
461             (FileName:   'Airplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
462             Width: 256; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAirplane
463             (FileName: 'amAirplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
464             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmAirplane
465             (FileName:   'amGirder'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
466             Width: 160; Height:160; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmGirder
467             (FileName:     'hhMask'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
468             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHHTelepMask
469             (FileName:     'Switch'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
470             Width:  40; Height: 40; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSwitch
471             (FileName:  'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
472             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprParachute
473             (FileName:     'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
474             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTarget
475             (FileName:   'RopeNode'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
476             Width:   16; Height:  16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprRopeNode
477             (FileName:   'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
478             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprQuestion
479             (FileName:   'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
480             Width: 256; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPowerBar
481             (FileName:    'WindBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
482             Width: 151; Height: 17; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWindBar
483             (FileName:      'WindL'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
484             Width:  80; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWindL
485             (FileName:      'WindR'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
486             Width:  80; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWindR
487 {$IFDEF USE_TOUCH_INTERFACE}
488             (FileName: 'firebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
489             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprFireButton
490             (FileName: 'arrowup'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
491             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowUp
492             (FileName: 'arrowdown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
493             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowDown
494             (FileName: 'arrowleft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
495             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowLeft
496             (FileName: 'arrowright'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
497             Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowRight
498             (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
499             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprAMWidget
500             (FileName: 'backjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
501             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprJumpWidget
502             (FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
503             Width: 120; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprPauseButton
504             (FileName: 'timerbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
505             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
506             (FileName: 'targetbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
507             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
508             (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
509             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
510             (FileName: 'bouncebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
511             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBounceButton
512 {$ENDIF}
513             (FileName:      'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
514             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
515             (FileName:     'amRope'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
516             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandRope
517             (FileName:  'amBazooka'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
518             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandBazooka
519             (FileName:  'amShotgun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
520             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandShotgun
521             (FileName:   'amDEagle'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
522             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandDEagle
523             (FileName:'amAirAttack'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
524             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandAirAttack
525             (FileName: 'amBaseball'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
526             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandBaseball
527             (FileName:     'Hammer'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
528             Width:  32; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPHammer
529             (FileName: 'amBTorch_i'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
530             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandBlowTorch
531             (FileName: 'amBTorch_w'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
532             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBlowTorch
533             (FileName:   'Teleport'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
534             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTeleport
535             (FileName:    'HHDeath'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
536             Width:  32; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprHHDeath
537             (FileName:'amShotgun_w'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
538             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprShotgun
539             (FileName: 'amDEagle_w'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
540             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprDEagle
541             (FileName:       'Idle'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
542             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprHHIdle
543             (FileName:     'Mortar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
544             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMortar
545             (FileName:  'TurnsLeft'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
546             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTurnsLeft
547             (FileName: 'amKamikaze'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
548             Width: 128; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprKamikaze
549             (FileName:     'amWhip'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
550             Width: 128; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWhip
551             (FileName:     'Kowtow'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
552             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprKowtow
553             (FileName:        'Sad'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
554             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprSad
555             (FileName:       'Wave'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
556             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprWave
557             (FileName:     'Hurrah'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
558             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprHurrah
559             (FileName:'ILoveLemonade';Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
560             Width: 128; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprLemonade
561             (FileName:      'Shrug'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
562             Width: 32;  Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprShrug
563             (FileName:     'Juggle'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
564             Width: 32;  Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprJuggle
565             (FileName:   'ExplPart'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
566             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprExplPart
567             (FileName:  'ExplPart2'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
568             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprExplPart2
569             (FileName:  'Cake_walk'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
570             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCakeWalk
571             (FileName:  'Cake_down'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
572             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCakeDown
573             (FileName: 'Watermelon'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
574             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWatermelon
575             (FileName:  'EvilTrace'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
576             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprEvilTrace
577             (FileName:'HellishBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
578             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHellishBomb
579             (FileName:  'Seduction'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
580             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSeduction
581             (FileName:    'HHDress'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
582             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprDress
583             (FileName:   'Censored'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
584             Width:  64; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprCensored
585             (FileName:      'Drill'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
586             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprDrill
587             (FileName:    'amDrill'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
588             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandDrill
589             (FileName:  'amBallgun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
590             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandBallgun
591             (FileName:      'Balls'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
592             Width:  32; Height: 20; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprBalls
593             (FileName:    'RCPlane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
594             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPlane
595             (FileName:  'amRCPlane'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
596             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandPlane
597             (FileName:    'Utility'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
598             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprUtility
599             (FileName:'Invulnerable';Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
600             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprInvulnerable
601             (FileName:   'Vampiric'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
602             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprVampiric
603             (FileName:   'amGirder'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
604             Width: 512; Height:512; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprGirder
605             (FileName:'SpeechCorner';Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
606             Width:  12; Height: 9; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprSpeechCorner
607             (FileName: 'SpeechEdge'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
608             Width:  25; Height: 9; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprSpeechEdge
609             (FileName: 'SpeechTail'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
610             Width:  25; Height: 26; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprSpeechTail
611             (FileName:'ThoughtCorner';Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
612             Width:  49; Height: 37; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprThoughtCorner
613             (FileName:'ThoughtEdge'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
614             Width:  23; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprThoughtEdge
615             (FileName:'ThoughtTail'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
616             Width:  45; Height: 65; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprThoughtTail
617             (FileName:'ShoutCorner'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
618             Width:  34; Height: 23; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprShoutCorner
619             (FileName:  'ShoutEdge'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
620             Width:  30; Height: 20; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprShoutEdge
621             (FileName:  'ShoutTail'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
622             Width:  30; Height: 37; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprShoutTail
623             (FileName:'amSniperRifle';Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
624             Width: 128; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSniperRifle
625             (FileName:    'Bubbles'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
626             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprBubbles
627             (FileName:  'amJetpack'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
628             Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprJetpack
629             (FileName:  'Health'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
630             Width: 16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprHealth
631             (FileName:  'amMolotov'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
632             Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),//sprHandMolotov
633             (FileName:  'Molotov'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
634             Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMolotov
635             (FileName: 'Smoke'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
636             Width:  22; Height: 22; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSmoke
637             (FileName: 'SmokeWhite'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
638             Width:  22; Height: 22; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSmokeWhite
639             (FileName: 'Shells'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
640             Width:  8; Height: 8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: true),// sprShell
641             (FileName: 'Dust'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
642             Width:  22; Height: 22; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprDust
643             (FileName: 'SnowDust'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
644             Width:  22; Height: 22; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSnowDust
645             (FileName: 'Explosives'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
646             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprExplosives
647             (FileName: 'ExplosivesRoll'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
648             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprExplosivesRoll
649             (FileName: 'amTeleport'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
650             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmTeleport
651             (FileName: 'Splash'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
652             Width:  80; Height: 50; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSplash
653             (FileName: 'Droplet'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
654             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprDroplet
655             (FileName: 'Birdy'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
656             Width:  75; Height: 75; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBirdy
657             (FileName:  'amCake'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
658             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandCake
659             (FileName:  'amConstruction'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
660             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandConstruction
661             (FileName:  'amGrenade'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
662             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandGrenade
663             (FileName:  'amMelon'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
664             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandMelon
665             (FileName:  'amMortar'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
666             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandMortar
667             (FileName:  'amSkip'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
668             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandSkip
669             (FileName:  'amCluster'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
670             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandCluster
671             (FileName:  'amDynamite'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
672             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandDynamite
673             (FileName:  'amHellish'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
674             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandHellish
675             (FileName:  'amMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
676             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandMine
677             (FileName:  'amSeduction'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
678             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandSeduction
679             (FileName:  'amVamp'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
680             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandVamp
681             (FileName:  'BigExplosion'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
682             Width:  385; Height: 385; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprBigExplosion
683             (FileName:  'SmokeRing'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
684             Width:  200; Height: 200; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSmokeRing
685             (FileName:  'BeeTrace'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
686             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprBeeTrace
687             (FileName:  'Egg'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
688             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprEgg
689             (FileName:  'TargetBee'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
690             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetBee
691             (FileName:  'amBee'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
692             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandBee
693             (FileName:  'Feather'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
694             Width:  15; Height: 25; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFeather
695             (FileName:  'Piano'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
696             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPiano
697             (FileName:  'amSineGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
698             Width:  128; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandSineGun
699             (FileName:  'amPortalGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
700             Width: 128; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPortalGun
701             (FileName:  'Portal'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
702             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPortal
703             (FileName:  'cheese'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
704             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCheese
705             (FileName:  'amCheese'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
706             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandCheese
707             (FileName:  'amFlamethrower'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
708             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandFlamethrower
709             (FileName:  'Chunk'; Path: ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
710             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprChunk
711             (FileName:  'Note'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
712             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprNote
713             (FileName:   'SMineOff'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
714             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSMineOff
715             (FileName:    'SMineOn'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
716             Width:   8; Height:  8; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSMineOn
717             (FileName:   'amSMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
718             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandSMine
719             (FileName:  'amHammer'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
720             Width: 128; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHammer
721             (FileName: 'amResurrector'; Path: ptHedgehog; AltPath: ptNone;
722                 Texture: nil; Surface: nil; Width: 32; Height: 32;
723                 imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority:
724                 tpMedium; getDimensions: false; getImageDimensions: true),
725             //sprHandResurrector
726             (FileName: 'Cross'; Path: ptGraphics; AltPath: ptNone;
727                 Texture: nil; Surface: nil; Width: 108; Height: 138;
728                 imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority:
729                 tpMedium; getDimensions: false; getImageDimensions: true),
730             //sprCross
731             (FileName:  'AirDrill'; Path: ptGraphics; AltPath: ptNone;
732                 Texture: nil; Surface: nil; Width:  16; Height: 16;
733                 imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority:
734                 tpMedium; getDimensions: false; getImageDimensions: true),
735             // sprAirDrill
736             (FileName:  'NapalmBomb'; Path: ptGraphics; AltPath: ptNone;
737                 Texture: nil; Surface: nil; Width:  16; Height: 16;
738                 imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority:
739                 tpMedium; getDimensions: false; getImageDimensions: true),
740             // sprNapalmBomb
741             (FileName:  'BulletHit'; Path: ptGraphics; AltPath: ptNone;
742                 Texture: nil; Surface: nil; Width:  32; Height: 32;
743                 imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority:
744                 tpMedium; getDimensions: false; getImageDimensions: true),
745             // sprBulletHit
746             (FileName:  'Snowball'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
747             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSnowball
748             (FileName:  'amSnowball'; Path: ptCurrTheme; AltPath: ptHedgehog; Texture: nil; Surface: nil;
749             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandSnowball
750             (FileName:  'Snow'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
751             Width:  4; Height: 4; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSnow
752             (FileName:    'SDFlake'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
753             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDFlake
754             (FileName:    'SDWater'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
755             Width:   0; Height:  -2; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: true; getImageDimensions: true),// sprSDWater
756             (FileName:   'SDClouds'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
757             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprSDCloud
758             (FileName:   'SDSplash'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
759             Width:  80; Height: 50; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSDSplash
760             (FileName:  'SDDroplet'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
761             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDDroplet
762             (FileName:  'Timebox'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
763             Width:  50; Height: 81; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
764             (FileName:  'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
765             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider
766             (FileName:  'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
767             Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBotlevels
768             (FileName:  'amCleaver'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
769             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandKnife
770             (FileName:  'cleaver'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
771             Width: 64; Height: 64; imageWidth: 64; imageHeight: 128; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprKnife
772             (FileName:  'star'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
773             Width: 12; Height: 12; imageWidth: 12; imageHeight: 12; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprStar
774             (FileName:  'icetexture'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
775             Width: 128; Height: 128; imageWidth: 128; imageHeight: 128; saveSurf: true; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: true), // sprIceTexture
776             (FileName:  'amIceGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
777             Width: 32; Height: 32; imageWidth: 32; imageHeight: 32; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprIceGun
778             (FileName:  'amFrozenHog'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
779             Width: 64; Height: 64; imageWidth: 64; imageHeight: 64; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprFrozenHog
780             (FileName:   'amRubber'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
781             Width: 160; Height:160; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprAmRubber
782             (FileName:  'boing'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
783             Width: 101; Height: 97; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBoing
784             (FileName:       'custom1'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
785             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom1
786             (FileName:       'custom2'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
787             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom2
788             (FileName:       'custom3'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
789             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom3
790             (FileName:       'custom4'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
791             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom4
792             (FileName:       'custom5'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
793             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom5
794             (FileName:       'custom6'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
795             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom6
796             (FileName:       'custom7'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
797             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom7
798             (FileName:       'custom8'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
799             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom8
800             (FileName:      'FrozenAirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
801             Width:  32; Height: 32; imageWidth: 32; imageHeight: 32; saveSurf: true; critical: true; checkSum: true; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprFrozenAirMine
802             (FileName:      'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
803             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine
804             (FileName:  'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
805             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandAirMine
806             (FileName:      'FlakeL'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
807             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlakeL
808             (FileName:    'SDFlakeL'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
809             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDFlakeL
810             (FileName:     'CloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
811             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCloudL
812             (FileName:     'SDCloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
813             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprSDCloudL
814             // TODO: Rename creeper image
815             (FileName:     'Duck'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
816             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCreeper
817             // TODO: Rename creeper hand image
818             (FileName:    'amDuck'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
819             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandCreeper
820             (FileName: 'amMinigun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
821             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprMinigun
822             (FileName:  'sliderInverted'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
823             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSliderInverted
824             (FileName:     'FingerBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
825             Width:  32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprFingerBack
826             (FileName:     'FingerBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
827             Width:  32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFingerBackInv
828             (FileName:    'TargetpBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
829             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBack
830             (FileName:    'TargetpBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
831             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBackInv
832             (FileName:    'HealthHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
833             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHealthHud
834             (FileName:    'HealthPoisonHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
835             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHealthPoisonHud
836             (FileName:    'VampHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
837             Width:  24; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprVampHUD
838             (FileName:    'KarmaHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
839             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprKarmaHUD
840             (FileName:    'MedicHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
841             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicHud
842             (FileName:    'MedicPoisonHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
843             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicPoisonHud
844             (FileName:    'HaloHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
845             Width:  22; Height: 11; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHaloHUD
846             (FileName:    'InvulnHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
847             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprInvulnHUD
848             (FileName: 'amPiano'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
849             Width:  42; Height: 42; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmPiano
850             (FileName:  'amLandGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
851             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandLandGun
852             (FileName: 'amShoryuken'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
853             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFirePunch
854             (FileName: 'throughWrap'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
855             Width:  16; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprTroughWrap
856             );
857 
858 
859 const
860     Wavez: array [TWave] of record
861             Sprite: TSprite;
862             FramesCount: Longword;
863             Interval: Longword;
864             cmd: string[31];
865             Voice: TSound;
866             VoiceDelay: LongWord;
867             end = (
868             (Sprite:   sprKowtow; FramesCount: 12; Interval: 125; cmd: '/rollup'; Voice: sndNone; VoiceDelay: 0),
869             (Sprite:      sprSad; FramesCount: 14; Interval: 125; cmd: '/sad'; Voice: sndNone; VoiceDelay: 0),
870             (Sprite:     sprWave; FramesCount: 16; Interval: 125; cmd: '/wave'; Voice: sndHello; VoiceDelay: 5),
871             (Sprite:   sprHurrah; FramesCount: 14; Interval: 125; cmd: '/hurrah'; Voice: sndNone; VoiceDelay: 0),
872             (Sprite: sprLemonade; FramesCount: 24; Interval: 125; cmd: '/ilovelotsoflemonade'; Voice: sndNone; VoiceDelay: 0),
873             (Sprite:    sprShrug; FramesCount: 24; Interval: 125; cmd: '/shrug'; Voice: sndNone; VoiceDelay: 0),
874             (Sprite:   sprJuggle; FramesCount: 49; Interval:  38; cmd: '/juggle'; Voice: sndNone; VoiceDelay: 0)
875             );
876 
877 type
878     TAmmozRec = record
879             NameId: TAmmoStrId;
880             NameTex: PTexture;
881             Probability, NumberInCase: Longword;
882             Ammo: TAmmo;
883             Slot: 0..cMaxSlotIndex;
884             TimeAfterTurn: Longword;
885             minAngle, maxAngle: Longword;
886             isDamaging: boolean;
887             SkipTurns: LongWord;
888             PosCount: Longword;
889             PosSprite: TSprite;
890             ejectX, ejectY: Longint;
891             end;
892     TAmmoCounts = array[TAmmoType] of Longword;
893 
894 var
895     Ammoz: array [TAmmoType] of TAmmozRec;
896     InitialAmmoCounts: TAmmoCounts;
897 
898 const
899     AmmozInit: array [TAmmoType] of TAmmozRec = (
900             (NameId: sidNothing;
901             NameTex: nil;
902             Probability: 0;
903             NumberInCase: 0;
904             Ammo: (Propz: ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_Effect;
905                 Count: AMMO_INFINITE;
906                 NumPerTurn: 0;
907                 Timer: 0;
908                 Pos: 0;
909                 AmmoType: amNothing;
910                 AttackVoice: sndNone;
911                 Bounciness: defaultBounciness);
912             Slot: cHiddenSlotIndex;
913             TimeAfterTurn: 0;
914             minAngle: 0;
915             maxAngle: 0;
916             isDamaging: false;
917             SkipTurns: 0;
918             PosCount: 0;
919             PosSprite: sprWater;
920             ejectX: 0;
921             ejectY: 0),
922 
923 // Grenade
924             (NameId: sidGrenade;
925             NameTex: nil;
926             Probability: 0;
927             NumberInCase: 1;
928             Ammo: (Propz: ammoprop_Timerable or
929                           ammoprop_Power or
930                           ammoprop_AltUse or
931                           ammoprop_SetBounce or
932                           ammoprop_NeedUpDown;
933                 Count: AMMO_INFINITE;
934                 NumPerTurn: 0;
935                 Timer: 3000;
936                 Pos: 0;
937                 AmmoType: amGrenade;
938                 AttackVoice: sndCover;
939                 Bounciness: defaultBounciness);
940             Slot: 1;
941             TimeAfterTurn: 3000;
942             minAngle: 0;
943             maxAngle: 0;
944             isDamaging: true;
945             SkipTurns: 0;
946             PosCount: 0;
947             PosSprite: sprWater;
948             ejectX: 0;
949             ejectY: 0),
950 
951 // ClusterBomb
952             (NameId: sidClusterBomb;
953             NameTex: nil;
954             Probability: 100;
955             NumberInCase: 3;
956             Ammo: (Propz: ammoprop_Timerable or
957                           ammoprop_Power or
958                           ammoprop_AltUse or
959                           ammoprop_SetBounce or
960                           ammoprop_NeedUpDown;
961                 Count: 5;
962                 NumPerTurn: 0;
963                 Timer: 3000;
964                 Pos: 0;
965                 AmmoType: amClusterBomb;
966                 AttackVoice: sndCover;
967                 Bounciness: defaultBounciness);
968             Slot: 1;
969             TimeAfterTurn: 3000;
970             minAngle: 0;
971             maxAngle: 0;
972             isDamaging: true;
973             SkipTurns: 0;
974             PosCount: 0;
975             PosSprite: sprWater;
976             ejectX: 0;
977             ejectY: 0),
978 
979 // Bazooka
980             (NameId: sidBazooka;
981             NameTex: nil;
982             Probability: 0;
983             NumberInCase: 1;
984             Ammo: (Propz: ammoprop_Power or
985                           ammoprop_AltUse or
986                           ammoprop_NeedUpDown;
987                 Count: AMMO_INFINITE;
988                 NumPerTurn: 0;
989                 Timer: 0;
990                 Pos: 0;
991                 AmmoType: amBazooka;
992                 AttackVoice: sndFire;
993                 Bounciness: defaultBounciness);
994             Slot: 0;
995             TimeAfterTurn: 3000;
996             minAngle: 0;
997             maxAngle: 0;
998             isDamaging: true;
999             SkipTurns: 0;
1000             PosCount: 0;
1001             PosSprite: sprWater;
1002             ejectX: 0; //20;
1003             ejectY: -6),
1004 
1005 // Bee
1006             (NameId: sidBee;
1007             NameTex: nil;
1008             Probability: 100;
1009             NumberInCase: 1;
1010             Ammo: (Propz: ammoprop_Power or
1011                           ammoprop_NeedTarget or
1012                           ammoprop_NoTargetAfter or
1013                           ammoprop_NoWrapTarget or
1014                           ammoprop_DontHold or
1015                           ammoprop_AltUse or
1016                           ammoprop_NeedUpDown;
1017                 Count: 2;
1018                 NumPerTurn: 0;
1019                 Timer: 0;
1020                 Pos: 0;
1021                 AmmoType: amBee;
1022                 AttackVoice: sndFire;
1023                 Bounciness: defaultBounciness);
1024             Slot: 0;
1025             TimeAfterTurn: 3000;
1026             minAngle: 0;
1027             maxAngle: 0;
1028             isDamaging: true;
1029             SkipTurns: 0;
1030             PosCount: 2;
1031             PosSprite: sprTargetBee;
1032             ejectX: 0; //16;
1033             ejectY: 0),
1034 
1035 // Shotgun
1036             (NameId: sidShotgun;
1037             NameTex: nil;
1038             Probability: 0;
1039             NumberInCase: 1;
1040             Ammo: (Propz: ammoprop_ForwMsgs or
1041                           ammoprop_NeedUpDown or
1042                           ammoprop_DoesntStopTimerInMultiShoot;
1043                 Count: AMMO_INFINITE;
1044                 NumPerTurn: 1;
1045                 Timer: 0;
1046                 Pos: 0;
1047                 AmmoType: amShotgun;
1048                 AttackVoice: sndNone;
1049                 Bounciness: defaultBounciness);
1050             Slot: 2;
1051             TimeAfterTurn: 3000;
1052             minAngle: 0;
1053             maxAngle: 0;
1054             isDamaging: true;
1055             SkipTurns: 0;
1056             PosCount: 0;
1057             PosSprite: sprWater;
1058             ejectX: 0; //26;
1059             ejectY: -6),
1060 
1061 // PickHammer
1062             (NameId: sidPickHammer;
1063             NameTex: nil;
1064             Probability: 0;
1065             NumberInCase: 1;
1066             Ammo: (Propz: ammoprop_ForwMsgs or
1067                           ammoprop_AttackInMove or
1068                           ammoprop_NoCrosshair or
1069                           ammoprop_DontHold or
1070                           ammoprop_DoesntStopTimerWhileAttackingInInfAttackMode;
1071                 Count: 2;
1072                 NumPerTurn: 0;
1073                 Timer: 0;
1074                 Pos: 0;
1075                 AmmoType: amPickHammer;
1076                 AttackVoice: sndNone;
1077                 Bounciness: defaultBounciness);
1078             Slot: 6;
1079             TimeAfterTurn: 0;
1080             minAngle: 0;
1081             maxAngle: 0;
1082             isDamaging: false;
1083             SkipTurns: 0;
1084             PosCount: 0;
1085             PosSprite: sprWater;
1086             ejectX: 0;
1087             ejectY: 0),
1088 
1089 // Skip
1090             (NameId: sidSkip;
1091             NameTex: nil;
1092             Probability: 0;
1093             NumberInCase: 1;
1094             Ammo: (Propz: ammoprop_NoCrosshair or
1095                           ammoprop_AttackInMove or
1096                           ammoprop_DontHold or
1097                           ammoprop_ForceTurnEnd;
1098                 Count: AMMO_INFINITE;
1099                 NumPerTurn: 0;
1100                 Timer: 0;
1101                 Pos: 0;
1102                 AmmoType: amSkip;
1103                 AttackVoice: sndNone;
1104                 Bounciness: defaultBounciness);
1105             Slot: 9;
1106             TimeAfterTurn: 0;
1107             minAngle: 0;
1108             maxAngle: 0;
1109             isDamaging: false;
1110             SkipTurns: 0;
1111             PosCount: 0;
1112             PosSprite: sprWater;
1113             ejectX: 0;
1114             ejectY: 0),
1115 
1116 // Rope
1117             (NameId: sidRope;
1118             NameTex: nil;
1119             Probability: 100;
1120             NumberInCase: 3;
1121             Ammo: (Propz: ammoprop_NoRoundEnd or
1122                           ammoprop_ForwMsgs or
1123                           ammoprop_AttackInMove or
1124                           ammoprop_Utility or
1125                           ammoprop_AltAttack or
1126                           ammoprop_NeedUpDown or
1127                           ammoprop_DoesntStopTimerWhileAttacking;
1128                     Count: 5;
1129                     NumPerTurn: 0;
1130                     Timer: 0;
1131                     Pos: 0;
1132                     AmmoType: amRope;
1133                     AttackVoice: sndNone;
1134                 Bounciness: defaultBounciness);
1135             Slot: 7;
1136             TimeAfterTurn: 0;
1137             minAngle: 0;
1138             maxAngle: cMaxAngle div 2;
1139             isDamaging: false;
1140             SkipTurns: 0;
1141             PosCount: 0;
1142             PosSprite: sprWater;
1143             ejectX: 0;
1144             ejectY: 0),
1145 
1146 // Mine
1147             (NameId: sidMine;
1148             NameTex: nil;
1149             Probability: 100;
1150             NumberInCase: 1;
1151             Ammo: (Propz: ammoprop_NoCrosshair or
1152                           ammoprop_AttackInMove or
1153                           ammoprop_DontHold or
1154                           ammoprop_AltUse or
1155                           ammoprop_SetBounce;
1156                 Count: 2;
1157                 NumPerTurn: 0;
1158                 Timer: 0;
1159                 Pos: 0;
1160                 AmmoType: amMine;
1161                 AttackVoice: sndLaugh;
1162                 Bounciness: defaultBounciness);
1163             Slot: 4;
1164             TimeAfterTurn: 5000;
1165             minAngle: 0;
1166             maxAngle: 0;
1167             isDamaging: true;
1168             SkipTurns: 0;
1169             PosCount: 0;
1170             PosSprite: sprWater;
1171             ejectX: 0;
1172             ejectY: 0),
1173 
1174 // DEagle
1175             (NameId: sidDEagle;
1176             NameTex: nil;
1177             Probability: 20;
1178             NumberInCase: 2;
1179             Ammo: (Propz: ammoprop_NeedUpDown or ammoprop_DoesntStopTimerInMultiShoot;
1180                 Count: 3;
1181                 NumPerTurn: 3;
1182                 Timer: 0;
1183                 Pos: 0;
1184                 AmmoType: amDEagle;
1185                 AttackVoice: sndNone;
1186                 Bounciness: defaultBounciness);
1187             Slot: 2;
1188             TimeAfterTurn: 3000;
1189             minAngle: 0;
1190             maxAngle: 0;
1191             isDamaging: true;
1192             SkipTurns: 0;
1193             PosCount: 0;
1194             PosSprite: sprWater;
1195             ejectX: 0; //23;
1196             ejectY: -6),
1197 
1198 // Dynamite
1199             (NameId: sidDynamite;
1200             NameTex: nil;
1201             Probability: 100;
1202             NumberInCase: 1;
1203             Ammo: (Propz: ammoprop_NoCrosshair or
1204                           ammoprop_AttackInMove or
1205                           ammoprop_DontHold or
1206                           ammoprop_AltUse;
1207                 Count: 1;
1208                 NumPerTurn: 0;
1209                 Timer: 0;
1210                 Pos: 0;
1211                 AmmoType: amDynamite;
1212                 AttackVoice: sndLaugh;
1213                 Bounciness: defaultBounciness);
1214             Slot: 4;
1215             TimeAfterTurn: 5000;
1216             minAngle: 0;
1217             maxAngle: 0;
1218             isDamaging: true;
1219             SkipTurns: 0;
1220             PosCount: 0;
1221             PosSprite: sprWater;
1222             ejectX: 0;
1223             ejectY: 0),
1224 
1225 // FirePunch
1226             (NameId: sidFirePunch;
1227             NameTex: nil;
1228             Probability: 0;
1229             NumberInCase: 1;
1230             Ammo: (Propz: ammoprop_NoCrosshair or
1231                           ammoprop_ForwMsgs or
1232                           ammoprop_AttackInMove;
1233                 Count: AMMO_INFINITE;
1234                 NumPerTurn: 0;
1235                 Timer: 0;
1236                 Pos: 0;
1237                 AmmoType: amFirePunch;
1238                 AttackVoice: sndNone;
1239                 Bounciness: defaultBounciness);
1240             Slot: 3;
1241             TimeAfterTurn: 3000;
1242             minAngle: 0;
1243             maxAngle: 0;
1244             isDamaging: true;
1245             SkipTurns: 0;
1246             PosCount: 0;
1247             PosSprite: sprWater;
1248             ejectX: 0;
1249             ejectY: 0),
1250 
1251 // Whip
1252             (NameId: sidWhip;
1253             NameTex: nil;
1254             Probability: 0;
1255             NumberInCase: 1;
1256             Ammo: (Propz: ammoprop_NoCrosshair;
1257                 Count: AMMO_INFINITE;
1258                 NumPerTurn: 0;
1259                 Timer: 0;
1260                 Pos: 0;
1261                 AmmoType: amWhip;
1262                 AttackVoice: sndNone;
1263                 Bounciness: defaultBounciness);
1264             Slot: 3;
1265             TimeAfterTurn: 3000;
1266             minAngle: 0;
1267             maxAngle: 0;
1268             isDamaging: true;
1269             SkipTurns: 0;
1270             PosCount: 0;
1271             PosSprite: sprWater;
1272             ejectX: 0;
1273             ejectY: 0),
1274 
1275 // BaseballBat
1276             (NameId: sidBaseballBat;
1277             NameTex: nil;
1278             Probability: 100;
1279             NumberInCase: 1;
1280             Ammo: (Propz: ammoprop_DontHold or
1281                           ammoprop_NeedUpDown;
1282                 Count: 1;
1283                 NumPerTurn: 0;
1284                 Timer: 0;
1285                 Pos: 0;
1286                 AmmoType: amBaseballBat;
1287                 AttackVoice: sndNone;
1288                 Bounciness: defaultBounciness);
1289             Slot: 3;
1290             TimeAfterTurn: 5000;
1291             minAngle: 0;
1292             maxAngle: cMaxAngle div 2;
1293             isDamaging: true;
1294             SkipTurns: 2;
1295             PosCount: 0;
1296             PosSprite: sprWater;
1297             ejectX: 0;
1298             ejectY: 0),
1299 
1300 // Parachute
1301             (NameId: sidParachute;
1302             NameTex: nil;
1303             Probability: 100;
1304             NumberInCase: 1;
1305             Ammo: (Propz: ammoprop_NoRoundEnd or
1306                           ammoprop_ForwMsgs or
1307                           ammoprop_AttackInMove or
1308                           ammoprop_NoCrosshair or
1309                           ammoprop_DontHold or
1310                           ammoprop_Utility or
1311                           ammoprop_AltAttack or
1312                           ammoprop_ShowSelIcon or
1313                           ammoprop_NeedUpDown;
1314                 Count: 2;
1315                 NumPerTurn: 0;
1316                 Timer: 0;
1317                 Pos: 0;
1318                 AmmoType: amParachute;
1319                 AttackVoice: sndNone;
1320                 Bounciness: defaultBounciness);
1321             Slot: 7;
1322             TimeAfterTurn: 0;
1323             minAngle: 0;
1324             maxAngle: 0;
1325             isDamaging: false;
1326             SkipTurns: 0;
1327             PosCount: 0;
1328             PosSprite: sprWater;
1329             ejectX: 0;
1330             ejectY: 0),
1331 
1332 // AirAttack
1333             (NameId: sidAirAttack;
1334             NameTex: nil;
1335             Probability: 100;
1336             NumberInCase: 1;
1337             Ammo: (Propz: ammoprop_NoCrosshair or
1338                           ammoprop_NeedTarget or
1339                           ammoprop_AttackingPut or
1340                           ammoprop_DontHold or
1341                           ammoprop_NotBorder;
1342                 Count: 1;
1343                 NumPerTurn: 0;
1344                 Timer: 0;
1345                 Pos: 0;
1346                 AmmoType: amAirAttack;
1347                 AttackVoice: sndNone; // handled in doStepAirAttack
1348                 Bounciness: defaultBounciness);
1349             Slot: 5;
1350             TimeAfterTurn: 0;
1351             minAngle: 0;
1352             maxAngle: 0;
1353             isDamaging: true;
1354             SkipTurns: 5;
1355             PosCount: 2;
1356             PosSprite: sprAmAirplane;
1357             ejectX: 0;
1358             ejectY: 0),
1359 
1360 // MineStrike
1361             (NameId: sidMineStrike;
1362             NameTex: nil;
1363             Probability: 200;
1364             NumberInCase: 1;
1365             Ammo: (Propz: ammoprop_NoCrosshair or
1366                           ammoprop_NeedTarget or
1367                           ammoprop_AttackingPut or
1368                           ammoprop_DontHold or
1369                           ammoprop_NotBorder;
1370                 Count: 1;
1371                 NumPerTurn: 0;
1372                 Timer: 0;
1373                 Pos: 0;
1374                 AmmoType: amMineStrike;
1375                 AttackVoice: sndNone; // handled in doStepAirAttack
1376                 Bounciness: defaultBounciness);
1377             Slot: 5;
1378             TimeAfterTurn: 0;
1379             minAngle: 0;
1380             maxAngle: 0;
1381             isDamaging: true;
1382             SkipTurns: 5;
1383             PosCount: 2;
1384             PosSprite: sprAmAirplane;
1385             ejectX: 0;
1386             ejectY: 0),
1387 
1388 // BlowTorch
1389             (NameId: sidBlowTorch;
1390             NameTex: nil;
1391             Probability: 100;
1392             NumberInCase: 2;
1393             Ammo: (Propz: ammoprop_ForwMsgs or
1394                           ammoprop_NeedUpDown or
1395                           ammoprop_DoesntStopTimerWhileAttackingInInfAttackMode;
1396                 Count: 1;
1397                 NumPerTurn: 0;
1398                 Timer: 0;
1399                 Pos: 0;
1400                 AmmoType: amBlowTorch;
1401                 AttackVoice: sndNone;
1402                 Bounciness: defaultBounciness);
1403             Slot: 6;
1404             TimeAfterTurn: 3000;
1405             minAngle: 804;
1406             maxAngle: 1327;
1407             isDamaging: false;
1408             SkipTurns: 0;
1409             PosCount: 0;
1410             PosSprite: sprWater;
1411             ejectX: 0;
1412             ejectY: 0),
1413 
1414 // Girder
1415             (NameId: sidGirder;
1416             NameTex: nil;
1417             Probability: 150;
1418             NumberInCase: 3;
1419             Ammo: (Propz: ammoprop_NoRoundEnd or
1420                           ammoprop_NoCrosshair or
1421                           ammoprop_NeedTarget or
1422                           ammoprop_Utility or
1423                           ammoprop_AttackingPut;
1424                     Count: 1;
1425                     NumPerTurn: 0;
1426                     Timer: 0;
1427                     Pos: 0;
1428                     AmmoType: amGirder;
1429                     AttackVoice: sndNone;
1430                 Bounciness: defaultBounciness);
1431             Slot: 6;
1432             TimeAfterTurn: 3000;
1433             minAngle: 0;
1434             maxAngle: 0;
1435             isDamaging: false;
1436             SkipTurns: 0;
1437             PosCount: 8;
1438             PosSprite: sprAmGirder;
1439             ejectX: 0;
1440             ejectY: 0),
1441 
1442 // Teleport
1443             (NameId: sidTeleport;
1444             NameTex: nil;
1445             Probability: 200;
1446             NumberInCase: 1;
1447             Ammo: (Propz: ammoprop_ForwMsgs or
1448                           ammoprop_NoCrosshair or
1449                           ammoprop_NeedTarget or
1450                           ammoprop_AttackingPut or
1451                           ammoprop_AttackInMove or
1452                           ammoprop_Utility or
1453                           ammoprop_DontHold;
1454                 Count: 2;
1455                 NumPerTurn: 0;
1456                 Timer: 0;
1457                 Pos: 0;
1458                 AmmoType: amTeleport;
1459                 AttackVoice: sndNone;
1460                 Bounciness: defaultBounciness);
1461             Slot: 7;
1462             TimeAfterTurn: 0;
1463             minAngle: 0;
1464             maxAngle: 0;
1465             isDamaging: false;
1466             SkipTurns: 0;
1467             PosCount: 2;
1468             PosSprite: sprAmTeleport;
1469             ejectX: 0;
1470             ejectY: 0),
1471 
1472 // Switch
1473             (NameId: sidSwitch;
1474             NameTex: nil;
1475             Probability: 100;
1476             NumberInCase: 1;
1477             Ammo: (Propz: ammoprop_NoRoundEnd or
1478                           ammoprop_ForwMsgs or
1479                           ammoprop_NoCrosshair or
1480                           ammoprop_Utility or
1481                           ammoprop_ShowSelIcon or
1482                           ammoprop_DontHold;
1483                     Count: 3;
1484                     NumPerTurn: 0;
1485                     Timer: 0;
1486                     Pos: 0;
1487                     AmmoType: amSwitch;
1488                     AttackVoice: sndNone;
1489                 Bounciness: defaultBounciness);
1490             Slot: 9;
1491             TimeAfterTurn: 0;
1492             minAngle: 0;
1493             maxAngle: 0;
1494             isDamaging: false;
1495             SkipTurns: 0;
1496             PosCount: 0;
1497             PosSprite: sprWater;
1498             ejectX: 0;
1499             ejectY: 0),
1500 
1501 // Mortar
1502             (NameId: sidMortar;
1503             NameTex: nil;
1504             Probability: 100;
1505             NumberInCase: 4;
1506             Ammo: (Propz: ammoprop_NeedUpDown;
1507                 Count: 4;
1508                 NumPerTurn: 0;
1509                 Timer: 0;
1510                 Pos: 0;
1511                 AmmoType: amMortar;
1512                 AttackVoice: sndNone;
1513                 Bounciness: defaultBounciness);
1514             Slot: 0;
1515             TimeAfterTurn: 3000;
1516             minAngle: 0;
1517             maxAngle: 0;
1518             isDamaging: true;
1519             SkipTurns: 0;
1520             PosCount: 0;
1521             PosSprite: sprWater;
1522             ejectX: 0; //20;
1523             ejectY: -6),
1524 
1525 // Kamikaze
1526             (NameId: sidKamikaze;
1527             NameTex: nil;
1528             Probability: 100;
1529             NumberInCase: 1;
1530             Ammo: (Propz: ammoprop_ForwMsgs or
1531                           ammoprop_DontHold or
1532                           ammoprop_NeedUpDown or
1533                           ammoprop_AttackInMove or
1534                           ammoprop_ForceTurnEnd;
1535                 Count: 1;
1536                 NumPerTurn: 0;
1537                 Timer: 0;
1538                 Pos: 0;
1539                 AmmoType: amKamikaze;
1540                 AttackVoice: sndNone;
1541                 Bounciness: defaultBounciness);
1542             Slot: 3;
1543             TimeAfterTurn: 0;
1544             minAngle: 0;
1545             maxAngle: 0;
1546             isDamaging: true;
1547             SkipTurns: 0;
1548             PosCount: 0;
1549             PosSprite: sprWater;
1550             ejectX: 0;
1551             ejectY: 0),
1552 
1553 // Cake
1554             (NameId: sidCake;
1555             NameTex: nil;
1556             Probability: 100;
1557             NumberInCase: 1;
1558             Ammo: (Propz: ammoprop_ForwMsgs or
1559                           ammoprop_NoCrosshair or
1560                           ammoprop_DontHold or
1561                           ammoprop_Track;
1562                 Count: 1;
1563                 NumPerTurn: 0;
1564                 Timer: 0;
1565                 Pos: 0;
1566                 AmmoType: amCake;
1567                 AttackVoice: sndLaugh;
1568                 Bounciness: defaultBounciness);
1569             Slot: 4;
1570             TimeAfterTurn: 0;
1571             minAngle: 0;
1572             maxAngle: 0;
1573             isDamaging: true;
1574             SkipTurns: 4;
1575             PosCount: 0;
1576             PosSprite: sprWater;
1577             ejectX: 0;
1578             ejectY: 0),
1579 
1580 // Seduction
1581             (NameId: sidSeduction;
1582             NameTex: nil;
1583             Probability: 100;
1584             NumberInCase: 1;
1585             Ammo: (Propz: ammoprop_ForwMsgs or
1586                           ammoprop_DontHold or
1587                           ammoprop_NoCrosshair;
1588                 Count: 1;
1589                 NumPerTurn: 0;
1590                 Timer: 0;
1591                 Pos: 0;
1592                 AmmoType: amSeduction;
1593                 AttackVoice: sndNone;
1594                 Bounciness: defaultBounciness);
1595             Slot: 3;
1596             TimeAfterTurn: 0;
1597             minAngle: 0;
1598             maxAngle: 0;
1599             isDamaging: false;
1600             SkipTurns: 0;
1601             PosCount: 0;
1602             PosSprite: sprWater;
1603             ejectX: 0;
1604             ejectY: 0),
1605 
1606 // Watermelon
1607             (NameId: sidWatermelon;
1608             NameTex: nil;
1609             Probability: 400;
1610             NumberInCase: 1;
1611             Ammo: (Propz: ammoprop_Timerable or
1612                           ammoprop_Power or
1613                           ammoprop_NeedUpDown or
1614                           ammoprop_AltUse;
1615                 Count: 0;
1616                 NumPerTurn: 0;
1617                 Timer: 3000;
1618                 Pos: 0;
1619                 AmmoType: amWatermelon;
1620                 AttackVoice: sndMelon;
1621                 Bounciness: defaultBounciness);
1622             Slot: 1;
1623             TimeAfterTurn: 3000;
1624             minAngle: 0;
1625             maxAngle: 0;
1626             isDamaging: true;
1627             SkipTurns: 0;
1628             PosCount: 0;
1629             PosSprite: sprWater;
1630             ejectX: 0;
1631             ejectY: 0),
1632 
1633 // HellishBomb ("Hellish Hand-Grenade")
1634             (NameId: sidHellishBomb;
1635             NameTex: nil;
1636             Probability: 400;
1637             NumberInCase: 1;
1638             Ammo: (Propz: ammoprop_Power or
1639                           ammoprop_NeedUpDown or
1640                           ammoprop_AltUse;
1641                 Count: 0;
1642                 NumPerTurn: 0;
1643                 Timer: 5000;
1644                 Pos: 0;
1645                 AmmoType: amHellishBomb;
1646                 AttackVoice: sndWatchThis;
1647                 Bounciness: defaultBounciness);
1648             Slot: 1;
1649             TimeAfterTurn: 3000;
1650             minAngle: 0;
1651             maxAngle: 0;
1652             isDamaging: true;
1653             SkipTurns: 0;
1654             PosCount: 0;
1655             PosSprite: sprWater;
1656             ejectX: 0;
1657             ejectY: 0),
1658 
1659 // Napalm
1660             (NameId: sidNapalm;
1661             NameTex: nil;
1662             Probability: 100;
1663             NumberInCase: 1;
1664             Ammo: (Propz: ammoprop_NoCrosshair or
1665                           ammoprop_NeedTarget or
1666                           ammoprop_AttackingPut or
1667                           ammoprop_DontHold or
1668                           ammoprop_NotBorder;
1669                 Count: 1;
1670                 NumPerTurn: 0;
1671                 Timer: 0;
1672                 Pos: 0;
1673                 AmmoType: amNapalm;
1674                 AttackVoice: sndNone; // handled in doStepAirAttack
1675                 Bounciness: defaultBounciness);
1676             Slot: 5;
1677             TimeAfterTurn: 0;
1678             minAngle: 0;
1679             maxAngle: 0;
1680             isDamaging: true;
1681             SkipTurns: 7;
1682             PosCount: 2;
1683             PosSprite: sprAmAirplane;
1684             ejectX: 0;
1685             ejectY: 0),
1686 
1687 // Drill ("Drill Rocket")
1688             (NameId: sidDrill;
1689             NameTex: nil;
1690             Probability: 300;
1691             NumberInCase: 1;
1692             Ammo: (Propz: ammoprop_Power or
1693                           ammoprop_NeedUpDown or
1694                           ammoprop_AltUse;
1695                 Count: AMMO_INFINITE;
1696                 NumPerTurn: 0;
1697                 Timer: 0;
1698                 Pos: 0;
1699                 AmmoType: amDrill;
1700                 AttackVoice: sndFire;
1701                 Bounciness: defaultBounciness);
1702             Slot: 0;
1703             TimeAfterTurn: 3000;
1704             minAngle: 0;
1705             maxAngle: 0;
1706             isDamaging: true;
1707             SkipTurns: 0;
1708             PosCount: 0;
1709             PosSprite: sprDrill;
1710             ejectX: 0; //20;
1711             ejectY: -6),
1712 
1713 // Ballgun
1714             (NameId: sidBallgun;
1715             NameTex: nil;
1716             Probability: 400;
1717             NumberInCase: 1;
1718             Ammo: (Propz: ammoprop_ForwMsgs or
1719                           ammoprop_NeedUpDown or
1720                           ammoprop_DontHold;
1721                 Count: AMMO_INFINITE;
1722                 NumPerTurn: 0;
1723                 Timer: 5001;
1724                 Pos: 0;
1725                 AmmoType: amBallgun;
1726                 AttackVoice: sndNone;
1727                 Bounciness: defaultBounciness);
1728             Slot: 4;
1729             TimeAfterTurn: 0;
1730             minAngle: 0;
1731             maxAngle: 0;
1732             isDamaging: true;
1733             SkipTurns: 0;
1734             PosCount: 0;
1735             PosSprite: sprWater;
1736             ejectX: 0; //20;
1737             ejectY: -3),
1738 
1739 // RC-Plane
1740             (NameId: sidRCPlane;
1741             NameTex: nil;
1742             Probability: 200;
1743             NumberInCase: 1;
1744             Ammo: (Propz: ammoprop_ForwMsgs or
1745                           ammoprop_NeedUpDown{ or
1746                           ammoprop_DontHold or
1747                           ammoprop_AltAttack};
1748                 Count: 1;
1749                 NumPerTurn: 0;
1750                 Timer: 0;
1751                 Pos: 0;
1752                 AmmoType: amRCPlane;
1753                 AttackVoice: sndNone;
1754                 Bounciness: defaultBounciness);
1755             Slot: 4;
1756             TimeAfterTurn: 0;
1757             minAngle: 0;
1758             maxAngle: 0;
1759             isDamaging: true;
1760             SkipTurns: 4;
1761             PosCount: 0;
1762             PosSprite: sprWater;
1763             ejectX: 0;
1764             ejectY: 0),
1765 
1766 // LowGravity
1767             (NameId: sidLowGravity;
1768             NameTex: nil;
1769             Probability: 20;
1770             NumberInCase: 1;
1771             Ammo: (Propz: ammoprop_NoRoundEnd or
1772                           ammoprop_NoCrosshair or
1773                           ammoprop_DontHold or
1774                           ammoprop_AltUse or
1775                           ammoprop_ShowSelIcon or
1776                           ammoprop_Utility or
1777                           ammoprop_Effect;
1778                     Count: 1;
1779                     NumPerTurn: 0;
1780                     Timer: 0;
1781                     Pos: 0;
1782                     AmmoType: amLowGravity;
1783                     AttackVoice: sndNone;
1784                 Bounciness: defaultBounciness);
1785             Slot: 9;
1786             TimeAfterTurn: 0;
1787             minAngle: 0;
1788             maxAngle: 0;
1789             isDamaging: false;
1790             SkipTurns: 0;
1791             PosCount: 0;
1792             PosSprite: sprWater;
1793             ejectX: 0;
1794             ejectY: 0),
1795 
1796 // ExtraDamage
1797             (NameId: sidExtraDamage;
1798             NameTex: nil;
1799             Probability: 15;
1800             NumberInCase: 1;
1801             Ammo: (Propz: ammoprop_NoRoundEnd or
1802                           ammoprop_NoCrosshair or
1803                           ammoprop_DontHold or
1804                           ammoprop_AltUse or
1805                           ammoprop_ShowSelIcon or
1806                           ammoprop_Utility or
1807                           ammoprop_Effect;
1808                     Count: 1;
1809                     NumPerTurn: 0;
1810                     Timer: 0;
1811                     Pos: 0;
1812                     AmmoType: amExtraDamage;
1813                     AttackVoice: sndNone;
1814                 Bounciness: defaultBounciness);
1815             Slot: 9;
1816             TimeAfterTurn: 0;
1817             minAngle: 0;
1818             maxAngle: 0;
1819             isDamaging: false;
1820             SkipTurns: 0;
1821             PosCount: 0;
1822             PosSprite: sprWater;
1823             ejectX: 0;
1824             ejectY: 0),
1825 
1826 // Invulnerable
1827             (NameId: sidInvulnerable;
1828             NameTex: nil;
1829             Probability: 20;
1830             NumberInCase: 1;
1831             Ammo: (Propz: ammoprop_NoRoundEnd or
1832                           ammoprop_NoCrosshair or
1833                           ammoprop_DontHold or
1834                           ammoprop_AltUse or
1835                           ammoprop_ShowSelIcon or
1836                           ammoprop_Utility or
1837                           ammoprop_Effect;
1838                     Count: 1;
1839                     NumPerTurn: 0;
1840                     Timer: 0;
1841                     Pos: 0;
1842                     AmmoType: amInvulnerable;
1843                     AttackVoice: sndNone;
1844                 Bounciness: defaultBounciness);
1845             Slot: 8;
1846             TimeAfterTurn: 0;
1847             minAngle: 0;
1848             maxAngle: 0;
1849             isDamaging: false;
1850             SkipTurns: 0;
1851             PosCount: 0;
1852             PosSprite: sprWater;
1853             ejectX: 0;
1854             ejectY: 0),
1855 
1856 // ExtraTime
1857             (NameId: sidExtraTime;
1858             NameTex: nil;
1859             Probability: 30;
1860             NumberInCase: 1;
1861             Ammo: (Propz: ammoprop_NoRoundEnd or
1862                           ammoprop_NoCrosshair or
1863                           ammoprop_DontHold or
1864                           ammoprop_AltUse or
1865                           ammoprop_ShowSelIcon or
1866                           ammoprop_Utility or
1867                           ammoprop_Effect;
1868                     Count: 1;
1869                     NumPerTurn: 0;
1870                     Timer: 0;
1871                     Pos: 0;
1872                     AmmoType: amExtraTime;
1873                     AttackVoice: sndNone;
1874                 Bounciness: defaultBounciness);
1875             Slot: 9;
1876             TimeAfterTurn: 0;
1877             minAngle: 0;
1878             maxAngle: 0;
1879             isDamaging: false;
1880             SkipTurns: 0;
1881             PosCount: 0;
1882             PosSprite: sprWater;
1883             ejectX: 0;
1884             ejectY: 0),
1885 
1886 // LaserSight
1887             (NameId: sidLaserSight;
1888             NameTex: nil;
1889             Probability: 15;
1890             NumberInCase: 1;
1891             Ammo: (Propz: ammoprop_NoRoundEnd or
1892                           ammoprop_NoCrosshair or
1893                           ammoprop_DontHold or
1894                           ammoprop_AltUse or
1895                           ammoprop_ShowSelIcon or
1896                           ammoprop_Utility or
1897                           ammoprop_NeedUpDown or
1898                           ammoprop_Effect;
1899                     Count: 1;
1900                     NumPerTurn: 0;
1901                     Timer: 0;
1902                     Pos: 0;
1903                     AmmoType: amLaserSight;
1904                     AttackVoice: sndNone;
1905                 Bounciness: defaultBounciness);
1906             Slot: 8;
1907             TimeAfterTurn: 0;
1908             minAngle: 0;
1909             maxAngle: 0;
1910             isDamaging: false;
1911             SkipTurns: 0;
1912             PosCount: 0;
1913             PosSprite: sprWater;
1914             ejectX: 0;
1915             ejectY: 0),
1916 
1917 // Vampiric
1918             (NameId: sidVampiric;
1919             NameTex: nil;
1920             Probability: 15;
1921             NumberInCase: 1;
1922             Ammo: (Propz: ammoprop_NoRoundEnd or
1923                           ammoprop_NoCrosshair or
1924                           ammoprop_DontHold or
1925                           ammoprop_AltUse or
1926                           ammoprop_Utility or
1927                           ammoprop_Effect;
1928                     Count: 1;
1929                     NumPerTurn: 0;
1930                     Timer: 0;
1931                     Pos: 0;
1932                     AmmoType: amVampiric;
1933                     AttackVoice: sndNone;
1934                 Bounciness: defaultBounciness);
1935             Slot: 8;
1936             TimeAfterTurn: 0;
1937             minAngle: 0;
1938             maxAngle: 0;
1939             isDamaging: false;
1940             SkipTurns: 0;
1941             PosCount: 0;
1942             PosSprite: sprWater;
1943             ejectX: 0;
1944             ejectY: 0),
1945 
1946 // SniperRifle
1947             (NameId: sidSniperRifle;
1948             NameTex: nil;
1949             Probability: 20;
1950             NumberInCase: 2;
1951             Ammo: (Propz: ammoprop_NeedUpDown or
1952                     ammoprop_OscAim or
1953                     ammoprop_NoMoveAfter or
1954                     ammoprop_DoesntStopTimerInMultiShoot;
1955                 Count: 2;
1956                 NumPerTurn: 1;
1957                 Timer: 0;
1958                 Pos: 0;
1959                 AmmoType: amSniperRifle;
1960                 AttackVoice: sndNone;
1961                 Bounciness: defaultBounciness);
1962             Slot: 2;
1963             TimeAfterTurn: 3000;
1964             minAngle: 0;
1965             maxAngle: 0;
1966             isDamaging: true;
1967             SkipTurns: 0;
1968             PosCount: 0;
1969             PosSprite: sprWater;
1970             ejectX: 0; //40;
1971             ejectY: -5),
1972 
1973 // Jetpack ("Flying Saucer")
1974             (NameId: sidJetpack;
1975             NameTex: nil;
1976             Probability: 20;
1977             NumberInCase: 1;
1978             Ammo: (Propz: ammoprop_NoRoundEnd or
1979                           ammoprop_ForwMsgs or
1980                           ammoprop_AttackInMove or
1981                           ammoprop_DontHold or
1982                           ammoprop_Utility or
1983                           ammoprop_NeedUpDown or
1984                           ammoprop_ShowSelIcon or
1985                           ammoprop_AltAttack;
1986                 Count: 1;
1987                 NumPerTurn: 0;
1988                 Timer: 0;
1989                 Pos: 0;
1990                 AmmoType: amJetpack;
1991                 AttackVoice: sndNone;
1992                 Bounciness: defaultBounciness);
1993             Slot: 7;
1994             TimeAfterTurn: 3000;
1995             minAngle: 0;
1996             maxAngle: 0;
1997             isDamaging: false;
1998             SkipTurns: 0;
1999             PosCount: 0;
2000             PosSprite: sprWater;
2001             ejectX: 0;
2002             ejectY: 0),
2003 
2004 // Molotov
2005             (NameId: sidMolotov;
2006             NameTex: nil;
2007             Probability: 0;
2008             NumberInCase: 1;
2009             Ammo: (Propz: ammoprop_Power or
2010                           ammoprop_NeedUpDown or
2011                           ammoprop_AltUse;
2012                 Count: AMMO_INFINITE;
2013                 NumPerTurn: 0;
2014                 Timer: 3000;
2015                 Pos: 0;
2016                 AmmoType: amMolotov;
2017                 AttackVoice: sndWatchThis;
2018                 Bounciness: defaultBounciness);
2019             Slot: 1;
2020             TimeAfterTurn: 3000;
2021             minAngle: 0;
2022             maxAngle: 0;
2023             isDamaging: true;
2024             SkipTurns: 0;
2025             PosCount: 0;
2026             PosSprite: sprWater;
2027             ejectX: 0;
2028             ejectY: 0),
2029 
2030 // Birdy
2031             (NameId: sidBirdy;
2032             NameTex: nil;
2033             Probability: 20;
2034             NumberInCase: 1;
2035             Ammo: (Propz: ammoprop_ForwMsgs or
2036                           ammoprop_NoCrosshair or
2037                           ammoprop_NeedUpDown or
2038                           ammoprop_ShowSelIcon or
2039                           ammoprop_DontHold;
2040                 Count: 1;
2041                 NumPerTurn: 0;
2042                 Timer: 0;
2043                 Pos: 0;
2044                 AmmoType: amBirdy;
2045                 AttackVoice: sndNone;
2046                 Bounciness: defaultBounciness);
2047             Slot: 7;
2048             TimeAfterTurn: 3000;
2049             minAngle: 0;
2050             maxAngle: 0;
2051             isDamaging: true;
2052             SkipTurns: 0;
2053             PosCount: 0;
2054             PosSprite: sprWater;
2055             ejectX: 0;
2056             ejectY: 0),
2057 
2058 // PortalGun
2059             (NameId: sidPortalGun;
2060             NameTex: nil;
2061             Probability: 20;
2062             NumberInCase: 1;
2063             Ammo: (Propz: ammoprop_NoRoundEnd or
2064                           ammoprop_AttackInMove or
2065                           ammoprop_DontHold or
2066                           ammoprop_NeedUpDown or
2067                           ammoprop_Utility;
2068                 Count: 1;
2069                 NumPerTurn: 3;
2070                 Timer: 0;
2071                 Pos: 0;
2072                 AmmoType: amPortalGun;
2073                 AttackVoice: sndNone;
2074                 Bounciness: defaultBounciness);
2075             Slot: 7;
2076             TimeAfterTurn: 0;
2077             minAngle: 0;
2078             maxAngle: 0;
2079             isDamaging: false;
2080             SkipTurns: 0;
2081             PosCount: 0;
2082             PosSprite: sprWater;
2083             ejectX: -5; //29;
2084             ejectY: -7),
2085 
2086 // Piano
2087             (NameId: sidPiano;
2088             NameTex: nil;
2089             Probability: 100;
2090             NumberInCase: 1;
2091             Ammo: (Propz: ammoprop_NoCrosshair or
2092                             ammoprop_NeedTarget or
2093                             // NoTargetAfter is handled manually in doStepPiano
2094                             ammoprop_AttackingPut or
2095                             ammoprop_DontHold or
2096                             ammoprop_NotBorder or
2097                             ammoprop_ForceTurnEnd;
2098                 Count: 1;
2099                 NumPerTurn: 0;
2100                 Timer: 0;
2101                 Pos: 0;
2102                 AmmoType: amPiano;
2103                 AttackVoice: sndNone; // handled in doStepPiano
2104                 Bounciness: defaultBounciness);
2105             Slot: 5;
2106             TimeAfterTurn: 0;
2107             minAngle: 0;
2108             maxAngle: 0;
2109             isDamaging: true;
2110             SkipTurns: 7;
2111             PosCount: 1;
2112             PosSprite: sprAmPiano;
2113             ejectX: 0;
2114             ejectY: 0),
2115 
2116 // GasBomb
2117             (NameId: sidGasBomb;
2118             NameTex: nil;
2119             Probability: 0;
2120             NumberInCase: 1;
2121             Ammo: (Propz: ammoprop_Timerable or
2122                           ammoprop_Power or
2123                           ammoprop_AltUse or
2124                           ammoprop_NeedUpDown or
2125                           ammoprop_SetBounce;
2126                 Count: AMMO_INFINITE;
2127                 NumPerTurn: 0;
2128                 Timer: 3000;
2129                 Pos: 0;
2130                 AmmoType: amGasBomb;
2131                 AttackVoice: sndCover;
2132                 Bounciness: defaultBounciness);
2133             Slot: 1;
2134             TimeAfterTurn: 3000;
2135             minAngle: 0;
2136             maxAngle: 0;
2137             isDamaging: true;
2138             SkipTurns: 0;
2139             PosCount: 0;
2140             PosSprite: sprWater;
2141             ejectX: 0;
2142             ejectY: 0),
2143 
2144 // SineGun
2145             (NameId: sidSineGun;
2146             NameTex: nil;
2147             Probability: 20;
2148             NumberInCase: 2;
2149             Ammo: (Propz: ammoprop_AttackInMove or
2150                           ammoprop_NeedUpDown;
2151                 Count: 1;
2152                 NumPerTurn: 0;
2153                 Timer: 0;
2154                 Pos: 0;
2155                 AmmoType: amSineGun;
2156                 AttackVoice: sndNone;
2157                 Bounciness: defaultBounciness);
2158             Slot: 2;
2159             TimeAfterTurn: 0;
2160             minAngle: 0;
2161             maxAngle: 0;
2162             isDamaging: true;
2163             SkipTurns: 0;
2164             PosCount: 0;
2165             PosSprite: sprWater;
2166             ejectX: 0;
2167             ejectY: 0),
2168 
2169 // Flamethrower
2170             (NameId: sidFlamethrower;
2171             NameTex: nil;
2172             Probability: 20;
2173             NumberInCase: 1;
2174             Ammo: (Propz: ammoprop_ForwMsgs or
2175                           ammoprop_NeedUpDown or
2176                           ammoprop_DontHold;
2177                 Count: 1;
2178                 NumPerTurn: 0;
2179                 Timer: 5001;
2180                 Pos: 0;
2181                 AmmoType: amFlamethrower;
2182                 AttackVoice: sndNone;
2183                 Bounciness: defaultBounciness);
2184             Slot: 6;
2185             TimeAfterTurn: 0;
2186             minAngle: 0;
2187             maxAngle: 0;
2188             isDamaging: true;
2189             SkipTurns: 0;
2190             PosCount: 0;
2191             PosSprite: sprWater;
2192             ejectX: 0; //20;
2193             ejectY: -3),
2194 
2195 // Sticky Mine
2196             (NameId: sidSMine;
2197             NameTex: nil;
2198             Probability: 100;
2199             NumberInCase: 1;
2200             Ammo: (Propz: ammoprop_Power or
2201                           ammoprop_AltUse or
2202                           ammoprop_NeedUpDown;
2203                 Count: 1;
2204                 NumPerTurn: 1;
2205                 Timer: 0;
2206                 Pos: 0;
2207                 AmmoType: amSMine;
2208                 AttackVoice: sndLaugh;
2209                 Bounciness: defaultBounciness);
2210             Slot: 4;
2211             TimeAfterTurn: 5000;
2212             minAngle: 0;
2213             maxAngle: 0;
2214             isDamaging: true;
2215             SkipTurns: 0;
2216             PosCount: 0;
2217             PosSprite: sprWater;
2218             ejectX: 0;
2219             ejectY: 0),
2220 
2221 // Hammer
2222             (NameId: sidHammer;
2223             NameTex: nil;
2224             Probability: 0;
2225             NumberInCase: 1;
2226             Ammo: (Propz: ammoprop_NoCrosshair;
2227                 Count: 1;
2228                 NumPerTurn: 0;
2229                 Timer: 0;
2230                 Pos: 0;
2231                 AmmoType: amHammer;
2232                 AttackVoice: sndNone;
2233                 Bounciness: defaultBounciness);
2234             Slot: 3;
2235             TimeAfterTurn: 3000;
2236             minAngle: 0;
2237             maxAngle: 0;
2238             isDamaging: true;
2239             SkipTurns: 0;
2240             PosCount: 0;
2241             PosSprite: sprWater;
2242             ejectX: 0;
2243             ejectY: 0),
2244 
2245 // Resurrector
2246         (NameId: sidResurrector;
2247             NameTex: nil;
2248             Probability: 0;
2249             NumberInCase: 1;
2250             Ammo: (Propz: ammoprop_NoCrosshair or
2251                           ammoprop_Utility or
2252                           ammoprop_NoRoundEnd or
2253                           ammoprop_DoesntStopTimerWhileAttacking;
2254                 Count: 1;
2255                 NumPerTurn: 0;
2256                 Timer: 0;
2257                 Pos: 0;
2258                 AmmoType: amResurrector;
2259                 AttackVoice: sndNone;
2260                 Bounciness: defaultBounciness);
2261             Slot: 8;
2262             TimeAfterTurn: 3000;
2263             minAngle: 0;
2264             maxAngle: 0;
2265             isDamaging: true;
2266             SkipTurns: 0;
2267             PosCount: 0;
2268             PosSprite: sprWater;
2269             ejectX: 0;
2270             ejectY: 0),
2271 
2272 // DrillStrike
2273             (NameId: sidDrillStrike;
2274             NameTex: nil;
2275             Probability: 200;
2276             NumberInCase: 1;
2277             Ammo: (Propz: ammoprop_NoCrosshair or
2278                             ammoprop_NeedTarget or
2279                             ammoprop_AttackingPut or
2280                             ammoprop_DontHold or
2281                             ammoprop_Timerable or
2282                             ammoprop_NotBorder;
2283                 Count: 1;
2284                 NumPerTurn: 0;
2285                 Timer: 5000;
2286                 Pos: 0;
2287                 AmmoType: amDrillStrike;
2288                 AttackVoice: sndNone; // handled in doStepAirAttack
2289                 Bounciness: defaultBounciness);
2290             Slot: 5;
2291             TimeAfterTurn: 0;
2292             minAngle: 0;
2293             maxAngle: 0;
2294             isDamaging: true;
2295             SkipTurns: 6;
2296             PosCount: 2;
2297             PosSprite: sprAmAirplane;
2298             ejectX: 0;
2299             ejectY: 0),
2300 
2301 // Snowball/Mudball
2302             (NameId: sidSnowball;
2303             NameTex: nil;
2304             Probability: 0;
2305             NumberInCase: 1;
2306             Ammo: (Propz: ammoprop_Power or
2307                           ammoprop_AltUse or
2308                           ammoprop_NeedUpDown or
2309                           ammoprop_NoRoundEnd;
2310                 Count: 2;
2311                 NumPerTurn: 0;
2312                 Timer: 0;
2313                 Pos: 0;
2314                 AmmoType: amSnowball;
2315                 AttackVoice: sndNone;
2316                 Bounciness: defaultBounciness);
2317             Slot: 0;
2318             TimeAfterTurn: 3000;
2319             minAngle: 0;
2320             maxAngle: 0;
2321             isDamaging: false;
2322             SkipTurns: 0;
2323             PosCount: 0;
2324             PosSprite: sprWater;
2325             ejectX: 0;
2326             ejectY: 0),
2327 
2328 // Tardis
2329             (NameId: sidTardis;
2330             NameTex: nil;
2331             Probability: 200;
2332             NumberInCase: 1;
2333             Ammo: (Propz: ammoprop_ForwMsgs or
2334                           ammoprop_NoCrosshair or
2335                           ammoprop_Utility or
2336                           ammoprop_ShowSelIcon or
2337                           ammoprop_DontHold or
2338                           ammoprop_ForceTurnEnd;
2339                 Count: 2;
2340                 NumPerTurn: 0;
2341                 Timer: 0;
2342                 Pos: 0;
2343                 AmmoType: amTardis;
2344                 AttackVoice: sndNone;
2345                 Bounciness: defaultBounciness);
2346             Slot: 8;
2347             TimeAfterTurn: 0;
2348             minAngle: 0;
2349             maxAngle: 0;
2350             isDamaging: false;
2351             SkipTurns: 0;
2352             PosCount: 2;
2353             PosSprite: sprAmTeleport;
2354             ejectX: 0;
2355             ejectY: 0),
2356 
2357 // Land Gun
2358             (NameId: sidLandGun;
2359             NameTex: nil;
2360             Probability: 20;
2361             NumberInCase: 1;
2362             Ammo: (Propz: ammoprop_NoRoundEnd or
2363                           ammoprop_NeedUpDown or
2364                           ammoprop_Utility;
2365                 Count: 1;
2366                 NumPerTurn: 0;
2367                 Timer: 5001;
2368                 Pos: 0;
2369                 AmmoType: amLandGun;
2370                 AttackVoice: sndNone;
2371                 Bounciness: defaultBounciness);
2372             Slot: 6;
2373             TimeAfterTurn: 0;
2374             minAngle: 0;
2375             maxAngle: 0;
2376             isDamaging: true;
2377             SkipTurns: 0;
2378             PosCount: 0;
2379             PosSprite: sprWater;
2380             ejectX: 0; //20;
2381             ejectY: -3),
2382 // Freezer
2383             (NameId: sidIceGun;
2384             NameTex: nil;
2385             Probability: 20;
2386             NumberInCase: 1;
2387             Ammo: (Propz: ammoprop_ForwMsgs or
2388                           ammoprop_NeedUpDown or
2389                           ammoprop_DontHold;
2390                 Count: 1;
2391                 NumPerTurn: 0;
2392                 Timer: 5001;
2393                 Pos: 0;
2394                 AmmoType: amIceGun;
2395                 AttackVoice: sndNone;
2396                 Bounciness: defaultBounciness);
2397             Slot: 2;
2398             TimeAfterTurn: 0;
2399             minAngle: 0;
2400             maxAngle: 0;
2401             isDamaging: false;
2402             SkipTurns: 0;
2403             PosCount: 0;
2404             PosSprite: sprWater;
2405             ejectX: 0; //20;
2406             ejectY: -3),
2407 // Knife
2408             (NameId: sidKnife;
2409             NameTex: nil;
2410             Probability: 100;
2411             NumberInCase: 1;
2412             Ammo: (Propz: ammoprop_Power or
2413                           ammoprop_AltUse or
2414                           ammoprop_NeedUpDown;
2415                 Count: 1;
2416                 NumPerTurn: 1;
2417                 Timer: 0;
2418                 Pos: 0;
2419                 AmmoType: amKnife;
2420                 AttackVoice: sndWatchThis;
2421                 Bounciness: defaultBounciness);
2422             Slot: 0;
2423             TimeAfterTurn: 3000;
2424             minAngle: 0;
2425             maxAngle: 0;
2426             isDamaging: true;
2427             SkipTurns: 0;
2428             PosCount: 0;
2429             PosSprite: sprWater;
2430             ejectX: 0;
2431             ejectY: 0),
2432 // Rubber
2433             (NameId: sidRubber;
2434             NameTex: nil;
2435             Probability: 150;
2436             NumberInCase: 1;
2437             Ammo: (Propz: ammoprop_NoRoundEnd or
2438                           ammoprop_NoCrosshair or
2439                           ammoprop_NeedTarget or
2440                           ammoprop_Utility or
2441                           ammoprop_AttackingPut;
2442                     Count: 1;
2443                     NumPerTurn: 0;
2444                     Timer: 0;
2445                     Pos: 0;
2446                     AmmoType: amRubber;
2447                     AttackVoice: sndNone;
2448                 Bounciness: defaultBounciness);
2449             Slot: 6;
2450             TimeAfterTurn: 3000;
2451             minAngle: 0;
2452             maxAngle: 0;
2453             isDamaging: false;
2454             SkipTurns: 0;
2455             PosCount: 4;
2456             PosSprite: sprAmRubber;
2457             ejectX: 0;
2458             ejectY: 0),
2459 // Air Mine
2460             (NameId: sidAirMine;
2461             NameTex: nil;
2462             Probability: 100;
2463             NumberInCase: 1;
2464             Ammo: (Propz: ammoprop_Power or
2465                           ammoprop_AltUse or
2466                           ammoprop_NeedUpDown;
2467                 Count: 2;
2468                 NumPerTurn: 0;
2469                 Timer: 0;
2470                 Pos: 0;
2471                 AmmoType: amAirMine;
2472                 AttackVoice: sndLaugh;
2473                 Bounciness: defaultBounciness);
2474             Slot: 5;
2475             TimeAfterTurn: 5000;
2476             minAngle: 0;
2477             maxAngle: 0;
2478             isDamaging: true;
2479             SkipTurns: 0;
2480             PosCount: 0;
2481             PosSprite: sprWater;
2482             ejectX: 0;
2483             ejectY: 0),
2484 // Creeper
2485             (NameId: sidCreeper;
2486             NameTex: nil;
2487             Probability: 100;
2488             NumberInCase: 1;
2489             Ammo: (Propz: ammoprop_NoCrosshair or
2490                           ammoprop_AttackInMove or
2491                           ammoprop_DontHold or
2492                           ammoprop_AltUse;
2493                 Count: 2;
2494                 NumPerTurn: 0;
2495                 Timer: 15000;
2496                 Pos: 0;
2497                 AmmoType: amCreeper;
2498                 AttackVoice: sndNone;
2499                 Bounciness: defaultBounciness);
2500             // Slot chosen to prevent ammo column overflow
2501             // TODO: Change slot when creeper is finished
2502             Slot: 8;
2503             TimeAfterTurn: 3000;
2504             minAngle: 0;
2505             maxAngle: 0;
2506             isDamaging: true;
2507             SkipTurns: 0;
2508             PosCount: 0;
2509             PosSprite: sprWater;
2510             ejectX: 15;
2511             ejectY: -7),
2512 // Minigun
2513             (NameId: sidMinigun;
2514             NameTex: nil;
2515             Probability: 100;
2516             NumberInCase: 1;
2517             Ammo: (Propz: ammoprop_NeedUpDown;
2518                 Count: 1;
2519                 NumPerTurn: 0;
2520                 Timer: 0;
2521                 Pos: 0;
2522                 AmmoType: amMinigun;
2523                 AttackVoice: sndNone;
2524                 Bounciness: defaultBounciness);
2525             Slot: 2;
2526             TimeAfterTurn: 3000;
2527             minAngle: cMaxAngle div 6;
2528             maxAngle: 5 * cMaxAngle div 6;
2529             isDamaging: true;
2530             SkipTurns: 0;
2531             PosCount: 0;
2532             PosSprite: sprWater;
2533             ejectX: 0; //23;
2534             ejectY: 0) //-6;
2535         );
2536 
2537 var
2538     Land: TCollisionArray;
2539     LandPixels: TLandArray;
2540     LandDirty: TDirtyTag;
2541     hasBorder: boolean;
2542     hasGirders: boolean;
2543     playHeight, playWidth, leftX, rightX, topY: LongInt;  // idea is that a template can specify height/width.  Or, a map, a height/width by the dimensions of the image.  If the map has pixels near top of image, it triggers border.
2544 	MaxHedgehogs: LongWord;
2545     LandBackSurface: PSDL_Surface;
2546     CurAmmoGear: PGear;
2547     lastGearByUID: PGear;
2548     GearsList: PGear;
2549     AllInactive: boolean;
2550     PrvInactive: boolean;
2551     KilledHHs: Longword;
2552     SuddenDeath: Boolean; // If the Sudden Death check has been made
2553     SuddenDeathActive: Boolean; // Is in Sudden Death with any gameplay effect
2554     SuddenDeathDmg: Boolean; // Is in Sudden Death with damage
2555     SpeechType: Longword;
2556     SpeechText: shortstring;
2557     PlacingHogs: boolean; // a convenience flag to indicate placement of hogs is still in progress
2558     PlacingKings: boolean; // a convenience flag to indicate placement of kings in King Mode is still in progress
2559     StepSoundTimer: LongInt;
2560     StepSoundChannel: LongInt;
2561 
2562     CurrentTeam: PTeam;
2563     PreviousTeam: PTeam;
2564     MissionTeam: PTeam;
2565     CurrentHedgehog: PHedgehog;
2566     TeamsArray: array[0..Pred(cMaxTeams)] of PTeam;
2567     TeamsCount: Longword; // number of teams on game start
2568     VisibleTeamsCount: Longword; // number of teams visible in team bar
2569     ClansArray, SpawnClansArray: TClansArray;
2570     ClansCount: Longword;
2571     LocalTeam: LongInt;  // last non-bot, non-extdriven clan first team
2572     LocalAmmo: LongInt;  // last non-bot, non-extdriven clan's first team's ammo index, updated to next upcoming hog for per-hog-ammo
2573     CurMinAngle, CurMaxAngle: Longword;
2574 
2575     FollowGear: PGear;
2576     WindBarWidth: LongInt;
2577     bShowAmmoMenu: boolean;
2578     bSelected: boolean;
2579     bShowFinger: boolean;
2580     bShowSwitcher: boolean;
2581     Frames: Longword;
2582     WaterColor, DeepWaterColor: TSDL_Color;
2583     SDTint, SkyColor, RQSkyColor, SDSkyColor: TSDL_Color;
2584     SkyOffset: LongInt;
2585 {$IFDEF COUNTTICKS}
2586     cntTicks: LongWord;
2587 {$ENDIF}
2588 
2589 
2590     PauseTexture,
2591     AFKTexture,
2592     SyncTexture,
2593     ConfirmTexture: PTexture;
2594     cScaleFactor: GLfloat;
2595     cStereoDepth: GLfloat;
2596     SupportNPOTT: Boolean;
2597     Step: LongInt;
2598     MissionIcons: PSDL_Surface;
2599     ropeIconTex: PTexture;
2600 
2601     // stereoscopic framebuffer and textures
2602     framel, framer, depthl, depthr: GLuint;
2603     texl, texr: GLuint;
2604 
2605     // video recorder framebuffer and texture
2606     defaultFrame, depthv: GLuint;
2607     texv: GLuint;
2608 
2609     lastVisualGearByUID: PVisualGear;
2610     vobFrameTicks, vobFramesCount, vobCount: Longword;
2611     vobVelocity, vobFallSpeed: LongInt;
2612     vobSDFrameTicks, vobSDFramesCount, vobSDCount: Longword;
2613     vobSDVelocity, vobSDFallSpeed: LongInt;
2614     watFrames, watFrameTicks: Longword;
2615     watMove: LongInt;
2616     watSDFrames, watSDFrameTicks: Longword;
2617     watSDMove: LongInt;
2618 
2619     DefaultBinds : TBinds;
2620 
2621     lastTurnChecksum : Longword;
2622 
2623     mModelview: TMatrix4x4f;
2624     mProjection: TMatrix4x4f;
2625     vBuffer: GLuint; // vertex buffer
2626     tBuffer: GLuint; // texture coords buffer
2627     cBuffer: GLuint; // color buffer
2628 
2629     uCurrentMVPLocation: GLint;
2630 
2631     uMainMVPLocation: GLint;
2632     uMainTintLocation: GLint;
2633 
2634     uWaterMVPLocation: GLint;
2635 
2636     aVertex: GLint;
2637     aTexCoord: GLint;
2638     aColor: GLint;
2639 
2640     lDecimalSeparator: Char;
2641 
2642 var trammo:  array[TAmmoStrId] of ansistring;   // name of the weapon
2643     trammoc: array[TAmmoStrId] of ansistring;   // caption of the weapon
2644     trammod: array[TAmmoStrId] of ansistring;   // description of the weapon
2645     trluaammo: array[TAmmoStrId] of ansistring; // name of the weapon (Lua overwrite)
2646     trluaammoc: array[TAmmoStrId] of ansistring; // caption of the weapon (Lua overwrite)
2647     trluaammod: array[TAmmoStrId] of ansistring;  // description of the weapon (Lua overwrite)
2648     trluaammoa: array[TAmmoStrId] of ansistring; // description appendix of the weapon (Lua only)
2649     trluaammoe: array[TAmmoStrId] of boolean;   // whether to render extra text (Lua overwrite)
2650     trmsg:   array[TMsgStrId]  of ansistring;   // message of the event
2651     trgoal:  array[TGoalStrId] of ansistring;   // message of the goal
2652     trcmd:   array[TCmdHelpStrId] of ansistring; // chat command help
2653     cTestLua : Boolean;
2654 
2655 procedure preInitModule;
2656 procedure initModule;
2657 procedure freeModule;
2658 
2659 implementation
2660 
2661 procedure preInitModule;
2662 begin
2663     // initialisation flags - they are going to be overwritten by program args
2664 
2665     cFullscreenWidth  := 0;
2666     cFullscreenHeight := 0;
2667     cWindowedWidth    := 1024;
2668     cWindowedHeight   := 768;
2669     cWindowedMaximized:= false;
2670     cScreenWidth      := cWindowedWidth;
2671     cScreenHeight     := cWindowedHeight;
2672 
2673     cShowFPS        := false;
2674     cAltDamage      := false;
2675     cHolidaySilliness := true;
2676     cTimerInterval  := 8;
2677     cReducedQuality := rqNone;
2678     cLanguageFName  := 'en.txt';
2679     cFullScreen     := false;
2680 
2681     UserPathPrefix  := '';
2682     ipcPort         := 0;
2683     recordFileName  := '';
2684     UserNick        := '';
2685     cStereoMode     := smNone;
2686     GrayScale       := false;
2687     PathPrefix      := './';
2688     GameType        := gmtLocal;
2689     cOnlyStats      := False;
2690     cScriptName     := '';
2691     cScriptParam    := '';
2692     cTestLua        := False;
2693 
2694     UserZoom        := cDefaultZoomLevel;
2695     zoom            := cDefaultZoomLevel;
2696     ZoomValue       := cDefaultZoomLevel;
2697 
2698 {$IFDEF MOBILE}
2699     cMaxZoomLevel   := 0.5;
2700     cMinZoomLevel   := 3.5;
2701     cZoomDelta      := 0.20;
2702     cZoomDeltaSmall := 0.10;
2703 {$ELSE}
2704     cMaxZoomLevel   := 1.0;
2705     cMinZoomLevel   := 3.0;
2706     cZoomDelta      := 0.25;
2707     cZoomDeltaSmall := 0.125;
2708 {$ENDIF}
2709 
2710 {$IFDEF USE_VIDEO_RECORDING}
2711     RecPrefix          := '';
2712     cAVFormat          := '';
2713     cVideoCodec        := '';
2714     cVideoFramerateNum := 0;
2715     cVideoFramerateDen := 0;
2716     cVideoQuality      := 0;
2717     cAudioCodec        := '';
2718 {$ENDIF}
2719 
2720     cTagsMask:= htTeamName or htName or htHealth;
2721     cPrevTagsMask:= cTagsMask;
2722 end;
2723 
2724 procedure initScreenSpaceVars();
2725 begin
2726     // those values still are not perfect
2727     cLeftScreenBorder:= round(-cMinZoomLevel * cScreenWidth);
2728     cRightScreenBorder:= round(cMinZoomLevel * cScreenWidth + LAND_WIDTH);
2729     cScreenSpace:= cRightScreenBorder - cLeftScreenBorder;
2730 end;
2731 
2732 procedure initModule;
2733 var s: shortstring;
2734     i: integer;
2735     t: TSound;
2736     a: TAmmoStrId;
2737 begin
2738     // init LastVoice
2739     LastVoice.snd:= sndNone;
2740     LastVoice.voicepack:= nil;
2741 
2742     // init arrays
2743     Move(cPathzInit, cPathz, sizeof(cPathz));
2744     Move(FontzInit, Fontz, sizeof(Fontz));
2745     Move(SpritesDataInit, SpritesData, sizeof(SpritesData));
2746     Move(AmmozInit, Ammoz, sizeof(Ammoz));
2747 
2748 
2749     cLanguage:= cLanguageFName;
2750     SplitByChar(cLanguage, s, '.');
2751 
2752     cFlattenFlakes      := false;
2753     cFlattenClouds      := false;
2754     cIce                := false;
2755     cSnow               := false;
2756     lastVisualGearByUID := nil;
2757     lastGearByUID       := nil;
2758     cReadyDelay         := 5000;
2759     isInChatMode        := false;
2760 
2761         {*  REFERENCE
2762       4096 -> $FFFFF000
2763       2048 -> $FFFFF800
2764       1024 -> $FFFFFC00
2765        512 -> $FFFFFE00  *}
2766     if (cReducedQuality and rqLowRes) <> 0 then
2767         begin
2768         LAND_WIDTH:= 2048;
2769         LAND_HEIGHT:= 1024;
2770         LAND_WIDTH_MASK:= $FFFFF800;
2771         LAND_HEIGHT_MASK:= $FFFFFC00;
2772         end
2773     else
2774         begin
2775         LAND_WIDTH:= 4096;
2776         LAND_HEIGHT:= 2048;
2777         LAND_WIDTH_MASK:= $FFFFF000;
2778         LAND_HEIGHT_MASK:= $FFFFF800
2779         end;
2780 
2781     // default water
2782     WaterColorArray[0].r := 52;
2783     WaterColorArray[0].g := 60;
2784     WaterColorArray[0].b := 125;
2785     WaterColorArray[0].a := 255;
2786     WaterColorArray[2]:= WaterColorArray[0];
2787     WaterColorArray[4]:= WaterColorArray[0];
2788     WaterColorArray[6]:= WaterColorArray[0];
2789     // water surface
2790     WaterColorArray[1].r := 84;
2791     WaterColorArray[1].g := 92;
2792     WaterColorArray[1].b := 157;
2793     WaterColorArray[1].a := 255;
2794     WaterColorArray[3]:= WaterColorArray[1];
2795     WaterColorArray[5]:= WaterColorArray[1];
2796     WaterColorArray[7]:= WaterColorArray[1];
2797 
2798     WaterOpacity:= $80;
2799 
2800     // default clan colors
2801     // always keep in sync with QTfrontend/hwconsts.h
2802 
2803     ClanColorArray[0] := $ffff0204;
2804     ClanColorArray[1] := $ff4980c1;
2805     ClanColorArray[2] := $ff1de6ba;
2806     ClanColorArray[3] := $ffb541ef;
2807     ClanColorArray[4] := $ffe55bb0;
2808     ClanColorArray[5] := $ff20bf00;
2809     ClanColorArray[6] := $fffe8b0e;
2810     ClanColorArray[7] := $ff8f5902;
2811     ClanColorArray[8] := $ffffff01;
2812 
2813     // default sudden death water
2814 
2815     // deep water
2816     SDWaterColorArray[0].r := 150;
2817     SDWaterColorArray[0].g := 112;
2818     SDWaterColorArray[0].b := 169;
2819     SDWaterColorArray[0].a := 255;
2820     SDWaterColorArray[2]:= SDWaterColorArray[0];
2821     SDWaterColorArray[4]:= SDWaterColorArray[0];
2822     SDWaterColorArray[6]:= SDWaterColorArray[0];
2823     // water surface
2824     SDWaterColorArray[1].r := 182;
2825     SDWaterColorArray[1].g := 144;
2826     SDWaterColorArray[1].b := 201;
2827     SDWaterColorArray[1].a := 255;
2828     SDWaterColorArray[3]:= SDWaterColorArray[1];
2829     SDWaterColorArray[5]:= SDWaterColorArray[1];
2830     SDWaterColorArray[7]:= SDWaterColorArray[1];
2831 
2832     SDWaterOpacity:= $80;
2833 
2834     SDTint.r := $80;
2835     SDTint.g := $80;
2836     SDTint.b := $80;
2837     SDTint.a := $FF;
2838 
2839     ExplosionBorderColorR:= 80;
2840     ExplosionBorderColorG:= 80;
2841     ExplosionBorderColorB:= 80;
2842     ExplosionBorderColor:= $FF808080;
2843     ExplosionBorderColorNoA:= ExplosionBorderColor and (not AMask);
2844     IceColor:= ($44 shl RShift) or ($97 shl GShift) or ($A9 shl BShift) or ($A0 shl AShift);
2845     IceEdgeColor:= ($8A shl RShift) or ($AF shl GShift) or ($B2 shl BShift) or ($FF shl AShift);
2846 
2847     WaterOpacity:= $80;
2848 
2849     cWaveHeight             := 32;
2850     cDrownSpeed.QWordValue  := 257698038;   // 0.06
2851     cDrownSpeedf            := 0.06;
2852     cMaxWindSpeed.QWordValue:= 1073742;     // 0.00025
2853     cWindSpeed.QWordValue   := 0;           // 0.0
2854     cWindSpeedf             := 0.0;
2855     cElastic                := _0_9;
2856     cGravity                := cMaxWindSpeed * 2;
2857     cGravityf               := 0.00025 * 2;
2858     cLowGravity             := false;
2859     cBuildMaxDist           := cDefaultBuildMaxDist;
2860     cDamageModifier         := _1;
2861     TargetPoint             := cTargetPointRef;
2862 
2863     aVertex:= 0;
2864     aTexCoord:= 1;
2865     aColor:= 2;
2866 
2867     lDecimalSeparator       := '.';
2868 
2869 
2870     cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel;
2871 
2872     cDemoClockFPSOffsetY := 0;
2873 
2874     // int, longint longword and byte
2875     CursorMovementX     := 0;
2876     CursorMovementY     := 0;
2877     GameTicks           := 0;
2878     OuchTauntTimer      := 0;
2879     CheckSum            := 0;
2880     cWaterLine          := LAND_HEIGHT;
2881     cGearScrEdgesDist   := 240;
2882 
2883     InputMask           := $FFFFFFFF;
2884     GameFlags           := 0;
2885     WorldEdge           := weNone;
2886     LeftImpactTimer     := 0;
2887     RightImpactTimer    := 0;
2888     TurnTimeLeft        := 0;
2889     IsGetAwayTime       := false;
2890     GameOver            := false;
2891     TurnClockActive     := true;
2892     TagTurnTimeLeft     := 0;
2893     cSuddenDTurns       := 15;
2894     LastSuddenDWarn     := -2;
2895     cInitHealth         := 100;
2896     cDamagePercent      := 100;
2897     cRopePercent        := 100;
2898     cRopeNodeStep       := 4;
2899     cRopeLayers         := 1;
2900     cGetAwayTime        := 100;
2901     cMineDudPercent     := 0;
2902     cTemplateFilter     := 0;
2903     cFeatureSize        := 12;
2904     cMapGen             := mgRandom;
2905     cHedgehogTurnTime   := 45000;
2906     cMinesTime          := 3000;
2907     cMaxAIThinkTime     := 9000;
2908     cCloudsNumber       := 9;
2909     cSDCloudsNumber     := 9;
2910     cHealthCaseProb     := 35;
2911     cHealthCaseAmount   := 25;
2912     cWaterRise          := 47;
2913     cHealthDecrease     := 5;
2914     cAdvancedMapGenMode := false;
2915 
2916     InitStepsFlags  := 0;
2917     RealTicks       := 0;
2918     AttackBar       := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon
2919     cCaseFactor     := 5;  {0..9}
2920     cMaxCaseDrops   := 5;
2921     cLandMines      := 4;
2922     cAirMines       := 0;
2923     cExplosives     := 2;
2924 
2925     GameState       := Low(TGameState);
2926     WeaponTooltipTex:= nil;
2927     cLaserSighting  := false;
2928     cLaserSightingSniper := false;
2929     cVampiric       := false;
2930     flagMakeCapture := false;
2931     flagDumpLand    := false;
2932     bBetweenTurns   := false;
2933     bWaterRising    := false;
2934     bDuringWaterRise:= false;
2935     isCursorVisible := false;
2936     isInLag         := false;
2937     isPaused        := false;
2938     isInMultiShoot  := false;
2939     isSpeed         := false;
2940     isAFK           := false;
2941     isShowMission   := false;
2942     isShowGearInfo  := false;
2943     isForceMission  := false;
2944     SpeedStart      := 0;
2945     fastUntilLag    := false;
2946     fastScrolling   := false;
2947     autoCameraOn    := true;
2948     cSeed           := '';
2949     cIsSoundEnabled := false;
2950     cVolumeDelta    := 0;
2951     cVolumeUpKey    := false;
2952     cVolumeDownKey  := false;
2953     cMuteToggle     := false;
2954     cHasFocus       := true;
2955     cInactDelay     := 100;
2956     ReadyTimeLeft   := 0;
2957 
2958     disableLandBack := false;
2959     ScreenFade      := sfNone;
2960     InCinematicMode := false;
2961     CinematicSteps  := 0;
2962     CinematicBarH   := 0;
2963     CinematicScript := false;
2964 
2965     initScreenSpaceVars();
2966 
2967     dirtyLandTexCount:= 0;
2968 
2969     vobFrameTicks:= 0;
2970     vobFramesCount:= 4;
2971     vobCount:= 0;
2972     vobVelocity:= 10;
2973     vobFallSpeed:= 100;
2974     watFrames:= 1;
2975     watFrameTicks:= 0;
2976     watMove:= 100;
2977 
2978     vobSDFrameTicks:= 0;
2979     vobSDFramesCount:= 4;
2980     vobSDCount:= 30 * cScreenSpace div LAND_WIDTH;
2981     vobSDVelocity:= 15;
2982     vobSDFallSpeed:= 250;
2983     watSDFrames:= 1;
2984     watSDFrameTicks:= 0;
2985     watSDMove:= 100;
2986 
2987 {$IFDEF MOBILE}
2988     cMinScreenWidth  := min(cScreenWidth, 480);
2989     cMinScreenHeight := min(cScreenHeight, 320);
2990 {$ELSE}
2991     cMinScreenWidth  := min(cScreenWidth, 640);
2992     cMinScreenHeight := min(cScreenHeight, 480);
2993 {$ENDIF}
2994 
2995     cNewScreenWidth    := cScreenWidth;
2996     cNewScreenHeight   := cScreenHeight;
2997     cScreenResizeDelay := 0;
2998 
2999     // make sure fullscreen resolution is always initialised somehow
3000     if cFullscreenWidth = 0 then
3001         cFullscreenWidth:= min(cWindowedWidth, 640);
3002     if cFullscreenHeight = 0 then
3003         cFullscreenHeight:= min(cWindowedHeight, 480);
3004 
3005     SpeechHogNumber:= -1;
3006 
3007     LuaGoals:= '';
3008     cMapName:= '';
3009     syncedPixelDigest:= 1;
3010 
3011     LuaTemplateNumber:= 0;
3012 
3013     LuaEndTurnRequested:= false;
3014     LuaNoEndTurnTaunts:= false;
3015 
3016     LuaCmdUsed:= false;
3017 
3018     for t:= Low(TSound) to High(TSound) do
3019         MaskedSounds[t]:= false;
3020 
3021     for a:= Low(TAmmoStrId) to High(TAmmoStrId) do
3022         trluaammoe[a]:= true;
3023 
3024     UIDisplay:= uiAll;
3025     LocalMessage:= 0;
3026 
3027     cStereoDepth:= 0;
3028     cViewLimitsDebug:= false;
3029     AprilOne := false;
3030 
3031     // initialize pointers to nil
3032     // (don't rely on implicit init of fpc, because that one only happens ONCE when used as lib)
3033     CurAmmoGear:= nil;
3034     lastGearByUID:= nil;
3035     GearsList:= nil;
3036     CurrentTeam:= nil;
3037     PreviousTeam:= nil;
3038     MissionTeam:= nil;
3039     CurrentHedgehog:= nil;
3040     FollowGear:= nil;
3041     lastVisualGearByUID:= nil;
3042 
3043     ChefHatTexture:= nil;
3044     CrosshairTexture:= nil;
3045     GenericHealthTexture:= nil;
3046     WeaponTooltipTex:= nil;
3047     HHTexture:= nil;
3048     LandBackSurface:= nil;
3049     ConfirmTexture:= nil;
3050     MissionIcons:= nil;
3051     ropeIconTex:= nil;
3052 
3053     SDLWindow:= nil;
3054     SDLGLContext:= nil;
3055 
3056     for i:= Low(ClansArray) to High(ClansArray) do
3057         begin
3058         ClansArray[i]:= nil;
3059         end;
3060 
3061     SpawnClansArray:= ClansArray;
3062 
3063     for i:= Low(TeamsArray) to High(TeamsArray) do
3064         begin
3065         TeamsArray[i]:= nil;
3066         end;
3067 
3068     for i:= Low(CountTexz) to High(CountTexz) do
3069         begin
3070         CountTexz[i]:= nil;
3071         end;
3072 
3073 end;
3074 
3075 procedure freeModule;
3076 begin
3077 end;
3078 
3079 end.
3080