hedgewars/uVariables.pas
branchui-scaling
changeset 15283 c4fd2813b127
parent 13389 24b531dcebe7
parent 15267 22f2fd8a3d2c
child 15663 d92eeb468dad
equal deleted inserted replaced
13390:0135e64c6c66 15283:c4fd2813b127
    39     cNewScreenHeight   : LongInt;
    39     cNewScreenHeight   : LongInt;
    40     cScreenResizeDelay : LongWord;
    40     cScreenResizeDelay : LongWord;
    41     ipcPort            : Word;
    41     ipcPort            : Word;
    42     AprilOne           : boolean;
    42     AprilOne           : boolean;
    43     cFullScreen        : boolean;
    43     cFullScreen        : boolean;
    44     cLocaleFName       : shortstring;
    44     cLanguageFName     : shortstring;
    45     cLocale            : shortstring;
    45     cLanguage          : shortstring;
    46     cTimerInterval     : LongInt;
    46     cTimerInterval     : LongInt;
    47     PathPrefix         : ansistring;
    47     PathPrefix         : ansistring;
    48     UserPathPrefix     : ansistring;
    48     UserPathPrefix     : ansistring;
    49     cShowFPS           : boolean;
    49     cShowFPS           : boolean;
    50     cFlattenFlakes     : boolean;
    50     cFlattenFlakes     : boolean;
    53     cSnow              : boolean;
    53     cSnow              : boolean;
    54     isInChatMode       : boolean;
    54     isInChatMode       : boolean;
    55 
    55 
    56     cAltDamage         : boolean;
    56     cAltDamage         : boolean;
    57     cReducedQuality    : LongWord;
    57     cReducedQuality    : LongWord;
       
    58     cHolidaySilliness  : boolean;
    58     UserNick           : shortstring;
    59     UserNick           : shortstring;
    59     recordFileName     : shortstring;
    60     recordFileName     : shortstring;
    60     cReadyDelay        : Longword;
    61     cReadyDelay        : Longword;
    61     cStereoMode        : TStereoMode;
    62     cStereoMode        : TStereoMode;
    62     cOnlyStats         : boolean;
    63     cOnlyStats         : boolean;
    76     isInLag         : boolean;
    77     isInLag         : boolean;
    77     isPaused        : boolean;
    78     isPaused        : boolean;
    78     isInMultiShoot  : boolean;
    79     isInMultiShoot  : boolean;
    79     isSpeed         : boolean;
    80     isSpeed         : boolean;
    80     isAFK           : boolean;
    81     isAFK           : boolean;
       
    82     isShowMission   : boolean;
       
    83     isShowGearInfo  : boolean;
       
    84     isForceMission  : boolean;
    81     SpeedStart      : LongWord;
    85     SpeedStart      : LongWord;
    82 
    86 
    83     fastUntilLag    : boolean;
    87     fastUntilLag    : boolean;
    84     fastScrolling   : boolean;
    88     fastScrolling   : boolean;
    85     autoCameraOn    : boolean;
    89     autoCameraOn    : boolean;
    86 
    90 
    87     CheckSum        : LongWord;
    91     CheckSum        : LongWord;
    88     CampaignVariable: shortstring;
    92     CampaignVariable: shortstring;
       
    93     MissionVariable : shortstring;
    89     GameTicks       : LongWord;
    94     GameTicks       : LongWord;
       
    95     OuchTauntTimer  : LongWord; // Timer which blocks sndOuch from being played too often and fast
    90     GameState       : TGameState;
    96     GameState       : TGameState;
    91     GameType        : TGameType;
    97     GameType        : TGameType;
    92     InputMask       : LongWord;
    98     InputMask       : LongWord;
    93     GameFlags       : Longword;
    99     GameFlags       : Longword;
    94     WorldEdge       : TWorldEdge;
   100     WorldEdge       : TWorldEdge;
    99     TagTurnTimeLeft : Longword;
   105     TagTurnTimeLeft : Longword;
   100     ReadyTimeLeft   : Longword;
   106     ReadyTimeLeft   : Longword;
   101     IsGetAwayTime   : boolean;
   107     IsGetAwayTime   : boolean;
   102     GameOver        : boolean;
   108     GameOver        : boolean;
   103     cSuddenDTurns   : LongInt;
   109     cSuddenDTurns   : LongInt;
       
   110     LastSuddenDWarn : LongInt; // last round in which the last SD warning appeared. -2 = no warning so far
       
   111     cInitHealth     : LongInt; // initial hedgehog health (from game scheme. note the real hog health is sent directly
       
   112                                // from frontend, this is only used to inform Lua scripts)
   104     cDamagePercent  : LongInt;
   113     cDamagePercent  : LongInt;
   105     cMineDudPercent : LongWord;
   114     cMineDudPercent : LongWord;
   106     cTemplateFilter : LongInt;
   115     cTemplateFilter : LongInt;
   107     cFeatureSize    : LongInt;
   116     cFeatureSize    : LongInt;
   108     cMapGen         : TMapGen;
   117     cMapGen         : TMapGen;
   109     cRopePercent    : LongWord;
   118     cRopePercent    : LongWord;
       
   119     cRopeNodeStep   : LongWord;
       
   120     cRopeLayers     : LongInt;
   110     cGetAwayTime    : LongWord;
   121     cGetAwayTime    : LongWord;
   111 
   122 
   112     cAdvancedMapGenMode: boolean;
   123     cAdvancedMapGenMode: boolean;
   113 
   124 
   114     cHedgehogTurnTime: Longword;
   125     cHedgehogTurnTime: Longword;
   123     cCloudsNumber    : LongWord;
   134     cCloudsNumber    : LongWord;
   124     cSDCloudsNumber  : LongWord;
   135     cSDCloudsNumber  : LongWord;
   125 
   136 
   126     cTagsMask        : byte;
   137     cTagsMask        : byte;
   127     cPrevTagsMask    : byte;
   138     cPrevTagsMask    : byte;
   128     zoom             : GLfloat;
   139     zoom             : GLfloat; // current zoom
   129     ZoomValue        : GLfloat;
   140     ZoomValue        : GLfloat; // aimed zoom
       
   141     UserZoom         : GLfloat; // user-chosen initial and default zoom
   130     ChatScaleValue   : real;
   142     ChatScaleValue   : real;
   131     cDefaultChatScale: real;
   143     cDefaultChatScale: real;
   132     UIScaleValue     : real;
   144     UIScaleValue     : real;
   133 
   145 
   134     cWaterLine       : LongInt;
   146     cWaterLine       : LongInt;
   160     cLeftScreenBorder     : LongInt;
   172     cLeftScreenBorder     : LongInt;
   161     cRightScreenBorder    : LongInt;
   173     cRightScreenBorder    : LongInt;
   162     cScreenSpace          : Longword;
   174     cScreenSpace          : Longword;
   163 
   175 
   164     cCaseFactor     : Longword;
   176     cCaseFactor     : Longword;
       
   177     cMaxCaseDrops   : Longword; // Max. number of crates which can be in the game when dropping
       
   178 
   165     cLandMines      : Longword;
   179     cLandMines      : Longword;
   166     cAirMines       : Longword;
   180     cAirMines       : Longword;
   167     cExplosives     : Longword;
   181     cExplosives     : Longword;
   168 
   182 
   169     cScriptName     : shortstring;
   183     cScriptName     : shortstring;
   170     cScriptParam    : shortstring;
   184     cScriptParam    : shortstring;
   171     cSeed           : shortstring;
   185     cSeed           : shortstring;
       
   186     cIsSoundEnabled : boolean; // If the sound system is enabled
   172     cVolumeDelta    : LongInt;
   187     cVolumeDelta    : LongInt;
       
   188     cVolumeUpKey    : boolean;
       
   189     cVolumeDownKey  : boolean;
   173     cMuteToggle     : boolean; // Mute toggle requested
   190     cMuteToggle     : boolean; // Mute toggle requested
   174     cHasFocus       : boolean;
   191     cHasFocus       : boolean;
   175     cInactDelay     : Longword;
   192     cInactDelay     : Longword;
   176 
   193 
   177     bBetweenTurns   : boolean;
   194     bBetweenTurns   : boolean;
   178     bWaterRising    : boolean;
   195     bWaterRising    : boolean;
       
   196     bDuringWaterRise: boolean;
   179 
   197 
   180     CrosshairX      : LongInt;
   198     CrosshairX      : LongInt;
   181     CrosshairY      : LongInt;
   199     CrosshairY      : LongInt;
       
   200     CrosshairGear   : PGear;
   182     CursorMovementX : LongInt;
   201     CursorMovementX : LongInt;
   183     CursorMovementY : LongInt;
   202     CursorMovementY : LongInt;
   184     cWaveHeight     : LongInt;
   203     cWaveHeight     : LongInt;
   185     cDrownSpeed     : hwFloat;
   204     cDrownSpeed     : hwFloat;
   186     cDrownSpeedf    : real;
   205     cDrownSpeedf    : real;
   201     AmmoRect        : TSDL_Rect;
   220     AmmoRect        : TSDL_Rect;
   202     HHTexture       : PTexture;
   221     HHTexture       : PTexture;
   203     cMaxZoomLevel   : real;
   222     cMaxZoomLevel   : real;
   204     cMinZoomLevel   : real;
   223     cMinZoomLevel   : real;
   205     cZoomDelta      : real;
   224     cZoomDelta      : real;
       
   225     cZoomDeltaSmall : real;
   206     cMinMaxZoomLevelDelta : real;
   226     cMinMaxZoomLevelDelta : real;
       
   227     cDemoClockFPSOffsetY : LongInt;
   207 
   228 
   208 
   229 
   209     flagMakeCapture : boolean;
   230     flagMakeCapture : boolean;
   210     flagDumpLand    : boolean;
   231     flagDumpLand    : boolean;
   211 
   232 
   213     RealTicks       : Longword;
   234     RealTicks       : Longword;
   214     AttackBar       : LongInt;
   235     AttackBar       : LongInt;
   215 
   236 
   216     WaterColorArray : array[0..7] of HwColor4f;
   237     WaterColorArray : array[0..7] of HwColor4f;
   217     SDWaterColorArray : array[0..7] of HwColor4f;
   238     SDWaterColorArray : array[0..7] of HwColor4f;
       
   239     ClanColorArray : array[0..Pred(cClanColors)] of Longword;
   218 
   240 
   219     TargetCursorPoint     : TPoint;
   241     TargetCursorPoint     : TPoint;
   220     CursorPoint           : TPoint;
   242     CursorPoint           : TPoint;
       
   243     CursorPointDelta      : TPoint;
   221     TargetPoint           : TPoint;
   244     TargetPoint           : TPoint;
   222 
   245 
   223     ScreenFade      : TScreenFade;
   246     ScreenFade      : TScreenFade;
   224     ScreenFadeValue : LongInt;
   247     ScreenFadeValue : LongInt;
   225     ScreenFadeSpeed : LongInt;
   248     ScreenFadeSpeed : LongInt;
   257 
   280 
   258     // for EndTurn Lua call
   281     // for EndTurn Lua call
   259     LuaEndTurnRequested: boolean;
   282     LuaEndTurnRequested: boolean;
   260     LuaNoEndTurnTaunts: boolean;
   283     LuaNoEndTurnTaunts: boolean;
   261 
   284 
       
   285     // whether Lua requested to pause the clock
       
   286     LuaClockPaused: boolean;
       
   287 
       
   288     // whether /lua command was used
       
   289     LuaCmdUsed: boolean;
       
   290 
   262     MaskedSounds : array[TSound] of boolean;
   291     MaskedSounds : array[TSound] of boolean;
   263 
   292 
   264     LastVoice : TVoice;
   293     LastVoice : TVoice;
   265 
   294 
   266     mobileRecord: TMobileRecord;
   295     mobileRecord: TMobileRecord;
   272   
   301   
   273 /////////////////////////////////////
   302 /////////////////////////////////////
   274 //Buttons
   303 //Buttons
   275 {$IFDEF USE_TOUCH_INTERFACE}
   304 {$IFDEF USE_TOUCH_INTERFACE}
   276     buttonScale: GLFloat;
   305     buttonScale: GLFloat;
       
   306     bounceButtonPressed: boolean;
   277 
   307 
   278     arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget;
   308     arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget;
   279     firebutton, jumpWidget, AMWidget          : TOnScreenWidget;
   309     firebutton, jumpWidget, AMWidget          : TOnScreenWidget;
   280     pauseButton, utilityWidget                : TOnScreenWidget;
   310     pauseButton, utilityWidget                : TOnScreenWidget;
       
   311     utilityWidget2                            : TOnScreenWidget;
   281 {$ENDIF}
   312 {$ENDIF}
   282 
   313 
   283 
   314 
   284 var
   315 var
   285     // these consts are here because they would cause circular dependencies in uConsts/uTypes
   316     // these consts are here because they would cause circular dependencies in uConsts/uTypes
   289     cPathzInit: array[TPathType] of shortstring = (
   320     cPathzInit: array[TPathType] of shortstring = (
   290         '',                              // ptNone
   321         '',                              // ptNone
   291         '//',                            // ptData
   322         '//',                            // ptData
   292         '/Graphics',                     // ptGraphics
   323         '/Graphics',                     // ptGraphics
   293         '/Themes',                       // ptThemes
   324         '/Themes',                       // ptThemes
   294         '/Themes/Bamboo',                // ptCurrTheme
   325         '/Themes/Nature',                // ptCurrTheme
   295         '/Config',                       // ptConfig
   326         '/Config',                       // ptConfig
   296         '/Config/Teams',                 // ptTeams
   327         '/Config/Teams',                 // ptTeams
   297         '/Maps',                         // ptMaps
   328         '/Maps',                         // ptMaps
   298         '',                              // ptMapCurrent
   329         '',                              // ptMapCurrent
   299         '/Demos',                        // ptDemos
   330         '/Demos',                        // ptDemos
   308         '/Graphics/Hats',                // ptHats
   339         '/Graphics/Hats',                // ptHats
   309         '/Graphics/Flags',               // ptFlags
   340         '/Graphics/Flags',               // ptFlags
   310         '/Missions/Maps',                // ptMissionMaps
   341         '/Missions/Maps',                // ptMissionMaps
   311         '/Graphics/SuddenDeath',         // ptSuddenDeath
   342         '/Graphics/SuddenDeath',         // ptSuddenDeath
   312         '/Graphics/Buttons',             // ptButton
   343         '/Graphics/Buttons',             // ptButton
   313         '/Shaders'                       // ptShaders
   344         '/Shaders',                      // ptShaders
       
   345         '/Sounds/voices/Default',        // ptDefaultVoice
       
   346         '/misc'                          // ptMisc
   314     );
   347     );
   315 
   348 
   316 var
   349 var
   317     Fontz: array[THWFont] of THHFont;
   350     Fontz: array[THWFont] of THHFont;
   318 
   351 
   449             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSwitch
   482             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSwitch
   450             (FileName:  'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   483             (FileName:  'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   451             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprParachute
   484             Width:  48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprParachute
   452             (FileName:     'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   485             (FileName:     'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   453             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTarget
   486             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTarget
   454             (FileName:   'RopeNode'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   487             (FileName:   'RopeNode'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
   455             Width:   6; Height:  6; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprRopeNode
   488             Width:   16; Height:  16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprRopeNode
   456             (FileName:   'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   489             (FileName:   'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   457             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprQuestion
   490             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprQuestion
   458             (FileName:   'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   491             (FileName:   'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   459             Width: 256; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPowerBar
   492             Width: 256; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprPowerBar
   460             (FileName:    'WindBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   493             (FileName:    'WindBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   484             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
   517             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
   485             (FileName: 'targetbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
   518             (FileName: 'targetbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
   486             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
   519             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
   487             (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
   520             (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
   488             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
   521             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
       
   522             (FileName: 'bouncebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
       
   523             Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBounceButton
   489 {$ENDIF}
   524 {$ENDIF}
   490             (FileName:      'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
   525             (FileName:      'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
   491             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
   526             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
   492             (FileName:     'amRope'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   527             (FileName:     'amRope'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   493             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandRope
   528             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandRope
   741             (FileName:  'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   776             (FileName:  'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   742             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider
   777             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider
   743             (FileName:  'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   778             (FileName:  'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   744             Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBotlevels
   779             Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBotlevels
   745             (FileName:  'amCleaver'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   780             (FileName:  'amCleaver'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   746             Width:  64; Height: 64; imageWidth: 64; imageHeight: 64; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: false),// sprHandKnife
   781             Width:  128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandKnife
   747             (FileName:  'cleaver'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   782             (FileName:  'cleaver'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   748             Width: 64; Height: 64; imageWidth: 64; imageHeight: 128; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprKnife
   783             Width: 64; Height: 64; imageWidth: 64; imageHeight: 128; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprKnife
   749             (FileName:  'star'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   784             (FileName:  'star'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   750             Width: 12; Height: 12; imageWidth: 12; imageHeight: 12; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprStar
   785             Width: 12; Height: 12; imageWidth: 12; imageHeight: 12; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprStar
   751             (FileName:  'icetexture'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   786             (FileName:  'icetexture'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   772             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom6
   807             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom6
   773             (FileName:       'custom7'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   808             (FileName:       'custom7'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   774             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom7
   809             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom7
   775             (FileName:       'custom8'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   810             (FileName:       'custom8'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   776             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom8
   811             Width:   0; Height:  0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom8
       
   812             (FileName:      'FrozenAirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   813             Width:  32; Height: 32; imageWidth: 32; imageHeight: 32; saveSurf: true; critical: true; checkSum: true; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprFrozenAirMine
   777             (FileName:      'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   814             (FileName:      'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   778             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine
   815             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine
   779             (FileName:  'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   816             (FileName:  'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   780             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandAirMine
   817             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandAirMine
   781             (FileName:      'FlakeL'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
   818             (FileName:      'FlakeL'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
   784             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDFlakeL
   821             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDFlakeL
   785             (FileName:     'CloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   822             (FileName:     'CloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   786             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCloudL
   823             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCloudL
   787             (FileName:     'SDCloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   824             (FileName:     'SDCloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
   788             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprSDCloudL
   825             Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprSDCloudL
       
   826             // TODO: Rename creeper image
   789             (FileName:     'Duck'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   827             (FileName:     'Duck'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
   790             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprDuck
   828             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCreeper
       
   829             // TODO: Rename creeper hand image
   791             (FileName:    'amDuck'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   830             (FileName:    'amDuck'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   792             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandDuck
   831             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandCreeper
   793             (FileName: 'amMinigun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   832             (FileName: 'amMinigun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
   794             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprMinigun
   833             Width:  64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprMinigun
       
   834             (FileName:  'sliderInverted'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   835             Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSliderInverted
       
   836             (FileName:     'FingerBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   837             Width:  32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprFingerBack
       
   838             (FileName:     'FingerBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   839             Width:  32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFingerBackInv
       
   840             (FileName:    'TargetpBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   841             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBack
       
   842             (FileName:    'TargetpBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   843             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBackInv
       
   844             (FileName:    'HealthHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   845             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHealthHud
       
   846             (FileName:    'HealthPoisonHUD'; 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),// sprHealthPoisonHud
       
   848             (FileName:    'VampHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   849             Width:  24; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprVampHUD
       
   850             (FileName:    'KarmaHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   851             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprKarmaHUD
       
   852             (FileName:    'MedicHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   853             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicHud
       
   854             (FileName:    'MedicPoisonHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   855             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicPoisonHud
       
   856             (FileName:    'HaloHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   857             Width:  22; Height: 11; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHaloHUD
       
   858             (FileName:    'InvulnHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   859             Width:  18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprInvulnHUD
       
   860             (FileName: 'amPiano'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   861             Width:  42; Height: 42; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmPiano
       
   862             (FileName:  'amLandGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
       
   863             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandLandGun
       
   864             (FileName: 'amShoryuken'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
       
   865             Width:  32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFirePunch
       
   866             (FileName: 'throughWrap'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
       
   867             Width:  16; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprTroughWrap
   795             );
   868             );
       
   869 
   796 
   870 
   797 const
   871 const
   798     Wavez: array [TWave] of record
   872     Wavez: array [TWave] of record
   799             Sprite: TSprite;
   873             Sprite: TSprite;
   800             FramesCount: Longword;
   874             FramesCount: Longword;
   825             SkipTurns: LongWord;
   899             SkipTurns: LongWord;
   826             PosCount: Longword;
   900             PosCount: Longword;
   827             PosSprite: TSprite;
   901             PosSprite: TSprite;
   828             ejectX, ejectY: Longint;
   902             ejectX, ejectY: Longint;
   829             end;
   903             end;
       
   904     TAmmoCounts = array[TAmmoType] of Longword;
   830 
   905 
   831 var
   906 var
   832     Ammoz: array [TAmmoType] of TAmmozRec;
   907     Ammoz: array [TAmmoType] of TAmmozRec;
       
   908     InitialAmmoCounts: TAmmoCounts;
   833 
   909 
   834 const
   910 const
   835     AmmozInit: array [TAmmoType] of TAmmozRec = (
   911     AmmozInit: array [TAmmoType] of TAmmozRec = (
   836             (NameId: sidNothing;
   912             (NameId: sidNothing;
   837             NameTex: nil;
   913             NameTex: nil;
   842                 NumPerTurn: 0;
   918                 NumPerTurn: 0;
   843                 Timer: 0;
   919                 Timer: 0;
   844                 Pos: 0;
   920                 Pos: 0;
   845                 AmmoType: amNothing;
   921                 AmmoType: amNothing;
   846                 AttackVoice: sndNone;
   922                 AttackVoice: sndNone;
   847                 Bounciness: 1000);
   923                 Bounciness: defaultBounciness);
   848             Slot: cHiddenSlotIndex;
   924             Slot: cHiddenSlotIndex;
   849             TimeAfterTurn: 0;
   925             TimeAfterTurn: 0;
   850             minAngle: 0;
   926             minAngle: 0;
   851             maxAngle: 0;
   927             maxAngle: 0;
   852             isDamaging: false;
   928             isDamaging: false;
   853             SkipTurns: 9999;
   929             SkipTurns: 0;
   854             PosCount: 1;
   930             PosCount: 0;
   855             PosSprite: sprWater;
   931             PosSprite: sprWater;
   856             ejectX: 0;
   932             ejectX: 0;
   857             ejectY: 0),
   933             ejectY: 0),
   858 
   934 
   859 // Grenade
   935 // Grenade
   870                 NumPerTurn: 0;
   946                 NumPerTurn: 0;
   871                 Timer: 3000;
   947                 Timer: 3000;
   872                 Pos: 0;
   948                 Pos: 0;
   873                 AmmoType: amGrenade;
   949                 AmmoType: amGrenade;
   874                 AttackVoice: sndCover;
   950                 AttackVoice: sndCover;
   875                 Bounciness: 1000);
   951                 Bounciness: defaultBounciness);
   876             Slot: 1;
   952             Slot: 1;
   877             TimeAfterTurn: 3000;
   953             TimeAfterTurn: 3000;
   878             minAngle: 0;
   954             minAngle: 0;
   879             maxAngle: 0;
   955             maxAngle: 0;
   880             isDamaging: true;
   956             isDamaging: true;
   881             SkipTurns: 0;
   957             SkipTurns: 0;
   882             PosCount: 1;
   958             PosCount: 0;
   883             PosSprite: sprWater;
   959             PosSprite: sprWater;
   884             ejectX: 0;
   960             ejectX: 0;
   885             ejectY: 0),
   961             ejectY: 0),
   886 
   962 
   887 // ClusterBomb
   963 // ClusterBomb
   898                 NumPerTurn: 0;
   974                 NumPerTurn: 0;
   899                 Timer: 3000;
   975                 Timer: 3000;
   900                 Pos: 0;
   976                 Pos: 0;
   901                 AmmoType: amClusterBomb;
   977                 AmmoType: amClusterBomb;
   902                 AttackVoice: sndCover;
   978                 AttackVoice: sndCover;
   903                 Bounciness: 1000);
   979                 Bounciness: defaultBounciness);
   904             Slot: 1;
   980             Slot: 1;
   905             TimeAfterTurn: 3000;
   981             TimeAfterTurn: 3000;
   906             minAngle: 0;
   982             minAngle: 0;
   907             maxAngle: 0;
   983             maxAngle: 0;
   908             isDamaging: true;
   984             isDamaging: true;
   909             SkipTurns: 0;
   985             SkipTurns: 0;
   910             PosCount: 1;
   986             PosCount: 0;
   911             PosSprite: sprWater;
   987             PosSprite: sprWater;
   912             ejectX: 0;
   988             ejectX: 0;
   913             ejectY: 0),
   989             ejectY: 0),
   914 
   990 
   915 // Bazooka
   991 // Bazooka
   923                 Count: AMMO_INFINITE;
   999                 Count: AMMO_INFINITE;
   924                 NumPerTurn: 0;
  1000                 NumPerTurn: 0;
   925                 Timer: 0;
  1001                 Timer: 0;
   926                 Pos: 0;
  1002                 Pos: 0;
   927                 AmmoType: amBazooka;
  1003                 AmmoType: amBazooka;
   928                 AttackVoice: sndNone;
  1004                 AttackVoice: sndFire;
   929                 Bounciness: 1000);
  1005                 Bounciness: defaultBounciness);
   930             Slot: 0;
  1006             Slot: 0;
   931             TimeAfterTurn: 3000;
  1007             TimeAfterTurn: 3000;
   932             minAngle: 0;
  1008             minAngle: 0;
   933             maxAngle: 0;
  1009             maxAngle: 0;
   934             isDamaging: true;
  1010             isDamaging: true;
   935             SkipTurns: 0;
  1011             SkipTurns: 0;
   936             PosCount: 1;
  1012             PosCount: 0;
   937             PosSprite: sprWater;
  1013             PosSprite: sprWater;
   938             ejectX: 0; //20;
  1014             ejectX: 0; //20;
   939             ejectY: -6),
  1015             ejectY: -6),
   940 
  1016 
   941 // Bee
  1017 // Bee
   944             Probability: 100;
  1020             Probability: 100;
   945             NumberInCase: 1;
  1021             NumberInCase: 1;
   946             Ammo: (Propz: ammoprop_Power or
  1022             Ammo: (Propz: ammoprop_Power or
   947                           ammoprop_NeedTarget or
  1023                           ammoprop_NeedTarget or
   948                           ammoprop_NoTargetAfter or
  1024                           ammoprop_NoTargetAfter or
       
  1025                           ammoprop_NoWrapTarget or
   949                           ammoprop_DontHold or
  1026                           ammoprop_DontHold or
       
  1027                           ammoprop_AltUse or
   950                           ammoprop_NeedUpDown;
  1028                           ammoprop_NeedUpDown;
   951                 Count: 2;
  1029                 Count: 2;
   952                 NumPerTurn: 0;
  1030                 NumPerTurn: 0;
   953                 Timer: 0;
  1031                 Timer: 0;
   954                 Pos: 0;
  1032                 Pos: 0;
   955                 AmmoType: amBee;
  1033                 AmmoType: amBee;
   956                 AttackVoice: sndNone;
  1034                 AttackVoice: sndFire;
   957                 Bounciness: 1000);
  1035                 Bounciness: defaultBounciness);
   958             Slot: 0;
  1036             Slot: 0;
   959             TimeAfterTurn: 3000;
  1037             TimeAfterTurn: 3000;
   960             minAngle: 0;
  1038             minAngle: 0;
   961             maxAngle: 0;
  1039             maxAngle: 0;
   962             isDamaging: true;
  1040             isDamaging: true;
   978                 NumPerTurn: 1;
  1056                 NumPerTurn: 1;
   979                 Timer: 0;
  1057                 Timer: 0;
   980                 Pos: 0;
  1058                 Pos: 0;
   981                 AmmoType: amShotgun;
  1059                 AmmoType: amShotgun;
   982                 AttackVoice: sndNone;
  1060                 AttackVoice: sndNone;
   983                 Bounciness: 1000);
  1061                 Bounciness: defaultBounciness);
   984             Slot: 2;
  1062             Slot: 2;
   985             TimeAfterTurn: 3000;
  1063             TimeAfterTurn: 3000;
   986             minAngle: 0;
  1064             minAngle: 0;
   987             maxAngle: 0;
  1065             maxAngle: 0;
   988             isDamaging: true;
  1066             isDamaging: true;
   989             SkipTurns: 0;
  1067             SkipTurns: 0;
   990             PosCount: 1;
  1068             PosCount: 0;
   991             PosSprite: sprWater;
  1069             PosSprite: sprWater;
   992             ejectX: 0; //26;
  1070             ejectX: 0; //26;
   993             ejectY: -6),
  1071             ejectY: -6),
   994 
  1072 
   995 // PickHammer
  1073 // PickHammer
  1006                 NumPerTurn: 0;
  1084                 NumPerTurn: 0;
  1007                 Timer: 0;
  1085                 Timer: 0;
  1008                 Pos: 0;
  1086                 Pos: 0;
  1009                 AmmoType: amPickHammer;
  1087                 AmmoType: amPickHammer;
  1010                 AttackVoice: sndNone;
  1088                 AttackVoice: sndNone;
  1011                 Bounciness: 1000);
  1089                 Bounciness: defaultBounciness);
  1012             Slot: 6;
  1090             Slot: 6;
  1013             TimeAfterTurn: 0;
  1091             TimeAfterTurn: 0;
  1014             minAngle: 0;
  1092             minAngle: 0;
  1015             maxAngle: 0;
  1093             maxAngle: 0;
  1016             isDamaging: false;
  1094             isDamaging: false;
  1017             SkipTurns: 0;
  1095             SkipTurns: 0;
  1018             PosCount: 1;
  1096             PosCount: 0;
  1019             PosSprite: sprWater;
  1097             PosSprite: sprWater;
  1020             ejectX: 0;
  1098             ejectX: 0;
  1021             ejectY: 0),
  1099             ejectY: 0),
  1022 
  1100 
  1023 // Skip
  1101 // Skip
  1033                 NumPerTurn: 0;
  1111                 NumPerTurn: 0;
  1034                 Timer: 0;
  1112                 Timer: 0;
  1035                 Pos: 0;
  1113                 Pos: 0;
  1036                 AmmoType: amSkip;
  1114                 AmmoType: amSkip;
  1037                 AttackVoice: sndNone;
  1115                 AttackVoice: sndNone;
  1038                 Bounciness: 1000);
  1116                 Bounciness: defaultBounciness);
  1039             Slot: 9;
  1117             Slot: 9;
  1040             TimeAfterTurn: 0;
  1118             TimeAfterTurn: 0;
  1041             minAngle: 0;
  1119             minAngle: 0;
  1042             maxAngle: 0;
  1120             maxAngle: 0;
  1043             isDamaging: false;
  1121             isDamaging: false;
  1044             SkipTurns: 0;
  1122             SkipTurns: 0;
  1045             PosCount: 1;
  1123             PosCount: 0;
  1046             PosSprite: sprWater;
  1124             PosSprite: sprWater;
  1047             ejectX: 0;
  1125             ejectX: 0;
  1048             ejectY: 0),
  1126             ejectY: 0),
  1049 
  1127 
  1050 // Rope
  1128 // Rope
  1063                     NumPerTurn: 0;
  1141                     NumPerTurn: 0;
  1064                     Timer: 0;
  1142                     Timer: 0;
  1065                     Pos: 0;
  1143                     Pos: 0;
  1066                     AmmoType: amRope;
  1144                     AmmoType: amRope;
  1067                     AttackVoice: sndNone;
  1145                     AttackVoice: sndNone;
  1068                 Bounciness: 1000);
  1146                 Bounciness: defaultBounciness);
  1069             Slot: 7;
  1147             Slot: 7;
  1070             TimeAfterTurn: 0;
  1148             TimeAfterTurn: 0;
  1071             minAngle: 0;
  1149             minAngle: 0;
  1072             maxAngle: cMaxAngle div 2;
  1150             maxAngle: cMaxAngle div 2;
  1073             isDamaging: false;
  1151             isDamaging: false;
  1074             SkipTurns: 0;
  1152             SkipTurns: 0;
  1075             PosCount: 1;
  1153             PosCount: 0;
  1076             PosSprite: sprWater;
  1154             PosSprite: sprWater;
  1077             ejectX: 0;
  1155             ejectX: 0;
  1078             ejectY: 0),
  1156             ejectY: 0),
  1079 
  1157 
  1080 // Mine
  1158 // Mine
  1091                 NumPerTurn: 0;
  1169                 NumPerTurn: 0;
  1092                 Timer: 0;
  1170                 Timer: 0;
  1093                 Pos: 0;
  1171                 Pos: 0;
  1094                 AmmoType: amMine;
  1172                 AmmoType: amMine;
  1095                 AttackVoice: sndLaugh;
  1173                 AttackVoice: sndLaugh;
  1096                 Bounciness: 1000);
  1174                 Bounciness: defaultBounciness);
  1097             Slot: 4;
  1175             Slot: 4;
  1098             TimeAfterTurn: 5000;
  1176             TimeAfterTurn: 5000;
  1099             minAngle: 0;
  1177             minAngle: 0;
  1100             maxAngle: 0;
  1178             maxAngle: 0;
  1101             isDamaging: true;
  1179             isDamaging: true;
  1102             SkipTurns: 0;
  1180             SkipTurns: 0;
  1103             PosCount: 1;
  1181             PosCount: 0;
  1104             PosSprite: sprWater;
  1182             PosSprite: sprWater;
  1105             ejectX: 0;
  1183             ejectX: 0;
  1106             ejectY: 0),
  1184             ejectY: 0),
  1107 
  1185 
  1108 // DEagle
  1186 // DEagle
  1115                 NumPerTurn: 3;
  1193                 NumPerTurn: 3;
  1116                 Timer: 0;
  1194                 Timer: 0;
  1117                 Pos: 0;
  1195                 Pos: 0;
  1118                 AmmoType: amDEagle;
  1196                 AmmoType: amDEagle;
  1119                 AttackVoice: sndNone;
  1197                 AttackVoice: sndNone;
  1120                 Bounciness: 1000);
  1198                 Bounciness: defaultBounciness);
  1121             Slot: 2;
  1199             Slot: 2;
  1122             TimeAfterTurn: 3000;
  1200             TimeAfterTurn: 3000;
  1123             minAngle: 0;
  1201             minAngle: 0;
  1124             maxAngle: 0;
  1202             maxAngle: 0;
  1125             isDamaging: true;
  1203             isDamaging: true;
  1126             SkipTurns: 0;
  1204             SkipTurns: 0;
  1127             PosCount: 1;
  1205             PosCount: 0;
  1128             PosSprite: sprWater;
  1206             PosSprite: sprWater;
  1129             ejectX: 0; //23;
  1207             ejectX: 0; //23;
  1130             ejectY: -6),
  1208             ejectY: -6),
  1131 
  1209 
  1132 // Dynamite
  1210 // Dynamite
  1142                 NumPerTurn: 0;
  1220                 NumPerTurn: 0;
  1143                 Timer: 0;
  1221                 Timer: 0;
  1144                 Pos: 0;
  1222                 Pos: 0;
  1145                 AmmoType: amDynamite;
  1223                 AmmoType: amDynamite;
  1146                 AttackVoice: sndLaugh;
  1224                 AttackVoice: sndLaugh;
  1147                 Bounciness: 1000);
  1225                 Bounciness: defaultBounciness);
  1148             Slot: 4;
  1226             Slot: 4;
  1149             TimeAfterTurn: 5000;
  1227             TimeAfterTurn: 5000;
  1150             minAngle: 0;
  1228             minAngle: 0;
  1151             maxAngle: 0;
  1229             maxAngle: 0;
  1152             isDamaging: true;
  1230             isDamaging: true;
  1153             SkipTurns: 0;
  1231             SkipTurns: 0;
  1154             PosCount: 1;
  1232             PosCount: 0;
  1155             PosSprite: sprWater;
  1233             PosSprite: sprWater;
  1156             ejectX: 0;
  1234             ejectX: 0;
  1157             ejectY: 0),
  1235             ejectY: 0),
  1158 
  1236 
  1159 // FirePunch
  1237 // FirePunch
  1168                 NumPerTurn: 0;
  1246                 NumPerTurn: 0;
  1169                 Timer: 0;
  1247                 Timer: 0;
  1170                 Pos: 0;
  1248                 Pos: 0;
  1171                 AmmoType: amFirePunch;
  1249                 AmmoType: amFirePunch;
  1172                 AttackVoice: sndNone;
  1250                 AttackVoice: sndNone;
  1173                 Bounciness: 1000);
  1251                 Bounciness: defaultBounciness);
  1174             Slot: 3;
  1252             Slot: 3;
  1175             TimeAfterTurn: 3000;
  1253             TimeAfterTurn: 3000;
  1176             minAngle: 0;
  1254             minAngle: 0;
  1177             maxAngle: 0;
  1255             maxAngle: 0;
  1178             isDamaging: true;
  1256             isDamaging: true;
  1179             SkipTurns: 0;
  1257             SkipTurns: 0;
  1180             PosCount: 1;
  1258             PosCount: 0;
  1181             PosSprite: sprWater;
  1259             PosSprite: sprWater;
  1182             ejectX: 0;
  1260             ejectX: 0;
  1183             ejectY: 0),
  1261             ejectY: 0),
  1184 
  1262 
  1185 // Whip
  1263 // Whip
  1192                 NumPerTurn: 0;
  1270                 NumPerTurn: 0;
  1193                 Timer: 0;
  1271                 Timer: 0;
  1194                 Pos: 0;
  1272                 Pos: 0;
  1195                 AmmoType: amWhip;
  1273                 AmmoType: amWhip;
  1196                 AttackVoice: sndNone;
  1274                 AttackVoice: sndNone;
  1197                 Bounciness: 1000);
  1275                 Bounciness: defaultBounciness);
  1198             Slot: 3;
  1276             Slot: 3;
  1199             TimeAfterTurn: 3000;
  1277             TimeAfterTurn: 3000;
  1200             minAngle: 0;
  1278             minAngle: 0;
  1201             maxAngle: 0;
  1279             maxAngle: 0;
  1202             isDamaging: true;
  1280             isDamaging: true;
  1203             SkipTurns: 0;
  1281             SkipTurns: 0;
  1204             PosCount: 1;
  1282             PosCount: 0;
  1205             PosSprite: sprWater;
  1283             PosSprite: sprWater;
  1206             ejectX: 0;
  1284             ejectX: 0;
  1207             ejectY: 0),
  1285             ejectY: 0),
  1208 
  1286 
  1209 // BaseballBat
  1287 // BaseballBat
  1217                 NumPerTurn: 0;
  1295                 NumPerTurn: 0;
  1218                 Timer: 0;
  1296                 Timer: 0;
  1219                 Pos: 0;
  1297                 Pos: 0;
  1220                 AmmoType: amBaseballBat;
  1298                 AmmoType: amBaseballBat;
  1221                 AttackVoice: sndNone;
  1299                 AttackVoice: sndNone;
  1222                 Bounciness: 1000);
  1300                 Bounciness: defaultBounciness);
  1223             Slot: 3;
  1301             Slot: 3;
  1224             TimeAfterTurn: 5000;
  1302             TimeAfterTurn: 5000;
  1225             minAngle: 0;
  1303             minAngle: 0;
  1226             maxAngle: cMaxAngle div 2;
  1304             maxAngle: cMaxAngle div 2;
  1227             isDamaging: true;
  1305             isDamaging: true;
  1228             SkipTurns: 2;
  1306             SkipTurns: 2;
  1229             PosCount: 1;
  1307             PosCount: 0;
  1230             PosSprite: sprWater;
  1308             PosSprite: sprWater;
  1231             ejectX: 0;
  1309             ejectX: 0;
  1232             ejectY: 0),
  1310             ejectY: 0),
  1233 
  1311 
  1234 // Parachute
  1312 // Parachute
  1241                           ammoprop_AttackInMove or
  1319                           ammoprop_AttackInMove or
  1242                           ammoprop_NoCrosshair or
  1320                           ammoprop_NoCrosshair or
  1243                           ammoprop_DontHold or
  1321                           ammoprop_DontHold or
  1244                           ammoprop_Utility or
  1322                           ammoprop_Utility or
  1245                           ammoprop_AltAttack or
  1323                           ammoprop_AltAttack or
       
  1324                           ammoprop_ShowSelIcon or
  1246                           ammoprop_NeedUpDown;
  1325                           ammoprop_NeedUpDown;
  1247                 Count: 2;
  1326                 Count: 2;
  1248                 NumPerTurn: 0;
  1327                 NumPerTurn: 0;
  1249                 Timer: 0;
  1328                 Timer: 0;
  1250                 Pos: 0;
  1329                 Pos: 0;
  1251                 AmmoType: amParachute;
  1330                 AmmoType: amParachute;
  1252                 AttackVoice: sndNone;
  1331                 AttackVoice: sndNone;
  1253                 Bounciness: 1000);
  1332                 Bounciness: defaultBounciness);
  1254             Slot: 7;
  1333             Slot: 7;
  1255             TimeAfterTurn: 0;
  1334             TimeAfterTurn: 0;
  1256             minAngle: 0;
  1335             minAngle: 0;
  1257             maxAngle: 0;
  1336             maxAngle: 0;
  1258             isDamaging: false;
  1337             isDamaging: false;
  1259             SkipTurns: 0;
  1338             SkipTurns: 0;
  1260             PosCount: 1;
  1339             PosCount: 0;
  1261             PosSprite: sprWater;
  1340             PosSprite: sprWater;
  1262             ejectX: 0;
  1341             ejectX: 0;
  1263             ejectY: 0),
  1342             ejectY: 0),
  1264 
  1343 
  1265 // AirAttack
  1344 // AirAttack
  1275                 Count: 1;
  1354                 Count: 1;
  1276                 NumPerTurn: 0;
  1355                 NumPerTurn: 0;
  1277                 Timer: 0;
  1356                 Timer: 0;
  1278                 Pos: 0;
  1357                 Pos: 0;
  1279                 AmmoType: amAirAttack;
  1358                 AmmoType: amAirAttack;
  1280                 AttackVoice: sndIncoming;
  1359                 AttackVoice: sndNone; // handled in doStepAirAttack
  1281                 Bounciness: 1000);
  1360                 Bounciness: defaultBounciness);
  1282             Slot: 5;
  1361             Slot: 5;
  1283             TimeAfterTurn: 0;
  1362             TimeAfterTurn: 0;
  1284             minAngle: 0;
  1363             minAngle: 0;
  1285             maxAngle: 0;
  1364             maxAngle: 0;
  1286             isDamaging: true;
  1365             isDamaging: true;
  1303                 Count: 1;
  1382                 Count: 1;
  1304                 NumPerTurn: 0;
  1383                 NumPerTurn: 0;
  1305                 Timer: 0;
  1384                 Timer: 0;
  1306                 Pos: 0;
  1385                 Pos: 0;
  1307                 AmmoType: amMineStrike;
  1386                 AmmoType: amMineStrike;
  1308                 AttackVoice: sndIncoming;
  1387                 AttackVoice: sndNone; // handled in doStepAirAttack
  1309                 Bounciness: 1000);
  1388                 Bounciness: defaultBounciness);
  1310             Slot: 5;
  1389             Slot: 5;
  1311             TimeAfterTurn: 0;
  1390             TimeAfterTurn: 0;
  1312             minAngle: 0;
  1391             minAngle: 0;
  1313             maxAngle: 0;
  1392             maxAngle: 0;
  1314             isDamaging: true;
  1393             isDamaging: true;
  1330                 NumPerTurn: 0;
  1409                 NumPerTurn: 0;
  1331                 Timer: 0;
  1410                 Timer: 0;
  1332                 Pos: 0;
  1411                 Pos: 0;
  1333                 AmmoType: amBlowTorch;
  1412                 AmmoType: amBlowTorch;
  1334                 AttackVoice: sndNone;
  1413                 AttackVoice: sndNone;
  1335                 Bounciness: 1000);
  1414                 Bounciness: defaultBounciness);
  1336             Slot: 6;
  1415             Slot: 6;
  1337             TimeAfterTurn: 3000;
  1416             TimeAfterTurn: 3000;
  1338             minAngle: 804;
  1417             minAngle: 804;
  1339             maxAngle: 1327;
  1418             maxAngle: 1327;
  1340             isDamaging: false;
  1419             isDamaging: false;
  1341             SkipTurns: 0;
  1420             SkipTurns: 0;
  1342             PosCount: 1;
  1421             PosCount: 0;
  1343             PosSprite: sprWater;
  1422             PosSprite: sprWater;
  1344             ejectX: 0;
  1423             ejectX: 0;
  1345             ejectY: 0),
  1424             ejectY: 0),
  1346 
  1425 
  1347 // Girder
  1426 // Girder
  1358                     NumPerTurn: 0;
  1437                     NumPerTurn: 0;
  1359                     Timer: 0;
  1438                     Timer: 0;
  1360                     Pos: 0;
  1439                     Pos: 0;
  1361                     AmmoType: amGirder;
  1440                     AmmoType: amGirder;
  1362                     AttackVoice: sndNone;
  1441                     AttackVoice: sndNone;
  1363                 Bounciness: 1000);
  1442                 Bounciness: defaultBounciness);
  1364             Slot: 6;
  1443             Slot: 6;
  1365             TimeAfterTurn: 3000;
  1444             TimeAfterTurn: 3000;
  1366             minAngle: 0;
  1445             minAngle: 0;
  1367             maxAngle: 0;
  1446             maxAngle: 0;
  1368             isDamaging: false;
  1447             isDamaging: false;
  1379             NumberInCase: 1;
  1458             NumberInCase: 1;
  1380             Ammo: (Propz: ammoprop_ForwMsgs or
  1459             Ammo: (Propz: ammoprop_ForwMsgs or
  1381                           ammoprop_NoCrosshair or
  1460                           ammoprop_NoCrosshair or
  1382                           ammoprop_NeedTarget or
  1461                           ammoprop_NeedTarget or
  1383                           ammoprop_AttackingPut or
  1462                           ammoprop_AttackingPut or
       
  1463                           ammoprop_AttackInMove or
  1384                           ammoprop_Utility or
  1464                           ammoprop_Utility or
  1385                           ammoprop_DontHold;
  1465                           ammoprop_DontHold;
  1386                 Count: 2;
  1466                 Count: 2;
  1387                 NumPerTurn: 0;
  1467                 NumPerTurn: 0;
  1388                 Timer: 0;
  1468                 Timer: 0;
  1389                 Pos: 0;
  1469                 Pos: 0;
  1390                 AmmoType: amTeleport;
  1470                 AmmoType: amTeleport;
  1391                 AttackVoice: sndNone;
  1471                 AttackVoice: sndNone;
  1392                 Bounciness: 1000);
  1472                 Bounciness: defaultBounciness);
  1393             Slot: 7;
  1473             Slot: 7;
  1394             TimeAfterTurn: 0;
  1474             TimeAfterTurn: 0;
  1395             minAngle: 0;
  1475             minAngle: 0;
  1396             maxAngle: 0;
  1476             maxAngle: 0;
  1397             isDamaging: false;
  1477             isDamaging: false;
  1408             NumberInCase: 1;
  1488             NumberInCase: 1;
  1409             Ammo: (Propz: ammoprop_NoRoundEnd or
  1489             Ammo: (Propz: ammoprop_NoRoundEnd or
  1410                           ammoprop_ForwMsgs or
  1490                           ammoprop_ForwMsgs or
  1411                           ammoprop_NoCrosshair or
  1491                           ammoprop_NoCrosshair or
  1412                           ammoprop_Utility or
  1492                           ammoprop_Utility or
       
  1493                           ammoprop_ShowSelIcon or
  1413                           ammoprop_DontHold;
  1494                           ammoprop_DontHold;
  1414                     Count: 3;
  1495                     Count: 3;
  1415                     NumPerTurn: 0;
  1496                     NumPerTurn: 0;
  1416                     Timer: 0;
  1497                     Timer: 0;
  1417                     Pos: 0;
  1498                     Pos: 0;
  1418                     AmmoType: amSwitch;
  1499                     AmmoType: amSwitch;
  1419                     AttackVoice: sndNone;
  1500                     AttackVoice: sndNone;
  1420                 Bounciness: 1000);
  1501                 Bounciness: defaultBounciness);
  1421             Slot: 9;
  1502             Slot: 9;
  1422             TimeAfterTurn: 0;
  1503             TimeAfterTurn: 0;
  1423             minAngle: 0;
  1504             minAngle: 0;
  1424             maxAngle: 0;
  1505             maxAngle: 0;
  1425             isDamaging: false;
  1506             isDamaging: false;
  1426             SkipTurns: 0;
  1507             SkipTurns: 0;
  1427             PosCount: 1;
  1508             PosCount: 0;
  1428             PosSprite: sprWater;
  1509             PosSprite: sprWater;
  1429             ejectX: 0;
  1510             ejectX: 0;
  1430             ejectY: 0),
  1511             ejectY: 0),
  1431 
  1512 
  1432 // Mortar
  1513 // Mortar
  1439                 NumPerTurn: 0;
  1520                 NumPerTurn: 0;
  1440                 Timer: 0;
  1521                 Timer: 0;
  1441                 Pos: 0;
  1522                 Pos: 0;
  1442                 AmmoType: amMortar;
  1523                 AmmoType: amMortar;
  1443                 AttackVoice: sndNone;
  1524                 AttackVoice: sndNone;
  1444                 Bounciness: 1000);
  1525                 Bounciness: defaultBounciness);
  1445             Slot: 0;
  1526             Slot: 0;
  1446             TimeAfterTurn: 3000;
  1527             TimeAfterTurn: 3000;
  1447             minAngle: 0;
  1528             minAngle: 0;
  1448             maxAngle: 0;
  1529             maxAngle: 0;
  1449             isDamaging: true;
  1530             isDamaging: true;
  1450             SkipTurns: 0;
  1531             SkipTurns: 0;
  1451             PosCount: 1;
  1532             PosCount: 0;
  1452             PosSprite: sprWater;
  1533             PosSprite: sprWater;
  1453             ejectX: 0; //20;
  1534             ejectX: 0; //20;
  1454             ejectY: -6),
  1535             ejectY: -6),
  1455 
  1536 
  1456 // Kamikaze
  1537 // Kamikaze
  1467                 NumPerTurn: 0;
  1548                 NumPerTurn: 0;
  1468                 Timer: 0;
  1549                 Timer: 0;
  1469                 Pos: 0;
  1550                 Pos: 0;
  1470                 AmmoType: amKamikaze;
  1551                 AmmoType: amKamikaze;
  1471                 AttackVoice: sndNone;
  1552                 AttackVoice: sndNone;
  1472                 Bounciness: 1000);
  1553                 Bounciness: defaultBounciness);
  1473             Slot: 3;
  1554             Slot: 3;
  1474             TimeAfterTurn: 0;
  1555             TimeAfterTurn: 0;
  1475             minAngle: 0;
  1556             minAngle: 0;
  1476             maxAngle: 0;
  1557             maxAngle: 0;
  1477             isDamaging: true;
  1558             isDamaging: true;
  1478             SkipTurns: 0;
  1559             SkipTurns: 0;
  1479             PosCount: 1;
  1560             PosCount: 0;
  1480             PosSprite: sprWater;
  1561             PosSprite: sprWater;
  1481             ejectX: 0;
  1562             ejectX: 0;
  1482             ejectY: 0),
  1563             ejectY: 0),
  1483 
  1564 
  1484 // Cake
  1565 // Cake
  1494                 NumPerTurn: 0;
  1575                 NumPerTurn: 0;
  1495                 Timer: 0;
  1576                 Timer: 0;
  1496                 Pos: 0;
  1577                 Pos: 0;
  1497                 AmmoType: amCake;
  1578                 AmmoType: amCake;
  1498                 AttackVoice: sndLaugh;
  1579                 AttackVoice: sndLaugh;
  1499                 Bounciness: 1000);
  1580                 Bounciness: defaultBounciness);
  1500             Slot: 4;
  1581             Slot: 4;
  1501             TimeAfterTurn: 0;
  1582             TimeAfterTurn: 0;
  1502             minAngle: 0;
  1583             minAngle: 0;
  1503             maxAngle: 0;
  1584             maxAngle: 0;
  1504             isDamaging: true;
  1585             isDamaging: true;
  1505             SkipTurns: 4;
  1586             SkipTurns: 4;
  1506             PosCount: 1;
  1587             PosCount: 0;
  1507             PosSprite: sprWater;
  1588             PosSprite: sprWater;
  1508             ejectX: 0;
  1589             ejectX: 0;
  1509             ejectY: 0),
  1590             ejectY: 0),
  1510 
  1591 
  1511 // Seduction
  1592 // Seduction
  1520                 NumPerTurn: 0;
  1601                 NumPerTurn: 0;
  1521                 Timer: 0;
  1602                 Timer: 0;
  1522                 Pos: 0;
  1603                 Pos: 0;
  1523                 AmmoType: amSeduction;
  1604                 AmmoType: amSeduction;
  1524                 AttackVoice: sndNone;
  1605                 AttackVoice: sndNone;
  1525                 Bounciness: 1000);
  1606                 Bounciness: defaultBounciness);
  1526             Slot: 3;
  1607             Slot: 3;
  1527             TimeAfterTurn: 0;
  1608             TimeAfterTurn: 0;
  1528             minAngle: 0;
  1609             minAngle: 0;
  1529             maxAngle: 0;
  1610             maxAngle: 0;
  1530             isDamaging: false;
  1611             isDamaging: false;
  1531             SkipTurns: 0;
  1612             SkipTurns: 0;
  1532             PosCount: 1;
  1613             PosCount: 0;
  1533             PosSprite: sprWater;
  1614             PosSprite: sprWater;
  1534             ejectX: 0;
  1615             ejectX: 0;
  1535             ejectY: 0),
  1616             ejectY: 0),
  1536 
  1617 
  1537 // Watermelon
  1618 // Watermelon
  1547                 NumPerTurn: 0;
  1628                 NumPerTurn: 0;
  1548                 Timer: 3000;
  1629                 Timer: 3000;
  1549                 Pos: 0;
  1630                 Pos: 0;
  1550                 AmmoType: amWatermelon;
  1631                 AmmoType: amWatermelon;
  1551                 AttackVoice: sndMelon;
  1632                 AttackVoice: sndMelon;
  1552                 Bounciness: 1000);
  1633                 Bounciness: defaultBounciness);
  1553             Slot: 1;
  1634             Slot: 1;
  1554             TimeAfterTurn: 3000;
  1635             TimeAfterTurn: 3000;
  1555             minAngle: 0;
  1636             minAngle: 0;
  1556             maxAngle: 0;
  1637             maxAngle: 0;
  1557             isDamaging: true;
  1638             isDamaging: true;
  1558             SkipTurns: 0;
  1639             SkipTurns: 0;
  1559             PosCount: 1;
  1640             PosCount: 0;
  1560             PosSprite: sprWater;
  1641             PosSprite: sprWater;
  1561             ejectX: 0;
  1642             ejectX: 0;
  1562             ejectY: 0),
  1643             ejectY: 0),
  1563 
  1644 
  1564 // HellishBomb ("Hellish Hand-Grenade")
  1645 // HellishBomb ("Hellish Hand-Grenade")
  1572                 Count: 0;
  1653                 Count: 0;
  1573                 NumPerTurn: 0;
  1654                 NumPerTurn: 0;
  1574                 Timer: 5000;
  1655                 Timer: 5000;
  1575                 Pos: 0;
  1656                 Pos: 0;
  1576                 AmmoType: amHellishBomb;
  1657                 AmmoType: amHellishBomb;
  1577                 AttackVoice: sndNone;
  1658                 AttackVoice: sndWatchThis;
  1578                 Bounciness: 1000);
  1659                 Bounciness: defaultBounciness);
  1579             Slot: 1;
  1660             Slot: 1;
  1580             TimeAfterTurn: 3000;
  1661             TimeAfterTurn: 3000;
  1581             minAngle: 0;
  1662             minAngle: 0;
  1582             maxAngle: 0;
  1663             maxAngle: 0;
  1583             isDamaging: true;
  1664             isDamaging: true;
  1584             SkipTurns: 0;
  1665             SkipTurns: 0;
  1585             PosCount: 1;
  1666             PosCount: 0;
  1586             PosSprite: sprWater;
  1667             PosSprite: sprWater;
  1587             ejectX: 0;
  1668             ejectX: 0;
  1588             ejectY: 0),
  1669             ejectY: 0),
  1589 
  1670 
  1590 // Napalm
  1671 // Napalm
  1600                 Count: 1;
  1681                 Count: 1;
  1601                 NumPerTurn: 0;
  1682                 NumPerTurn: 0;
  1602                 Timer: 0;
  1683                 Timer: 0;
  1603                 Pos: 0;
  1684                 Pos: 0;
  1604                 AmmoType: amNapalm;
  1685                 AmmoType: amNapalm;
  1605                 AttackVoice: sndIncoming;
  1686                 AttackVoice: sndNone; // handled in doStepAirAttack
  1606                 Bounciness: 1000);
  1687                 Bounciness: defaultBounciness);
  1607             Slot: 5;
  1688             Slot: 5;
  1608             TimeAfterTurn: 0;
  1689             TimeAfterTurn: 0;
  1609             minAngle: 0;
  1690             minAngle: 0;
  1610             maxAngle: 0;
  1691             maxAngle: 0;
  1611             isDamaging: true;
  1692             isDamaging: true;
  1626                 Count: AMMO_INFINITE;
  1707                 Count: AMMO_INFINITE;
  1627                 NumPerTurn: 0;
  1708                 NumPerTurn: 0;
  1628                 Timer: 0;
  1709                 Timer: 0;
  1629                 Pos: 0;
  1710                 Pos: 0;
  1630                 AmmoType: amDrill;
  1711                 AmmoType: amDrill;
  1631                 AttackVoice: sndNone;
  1712                 AttackVoice: sndFire;
  1632                 Bounciness: 1000);
  1713                 Bounciness: defaultBounciness);
  1633             Slot: 0;
  1714             Slot: 0;
  1634             TimeAfterTurn: 3000;
  1715             TimeAfterTurn: 3000;
  1635             minAngle: 0;
  1716             minAngle: 0;
  1636             maxAngle: 0;
  1717             maxAngle: 0;
  1637             isDamaging: true;
  1718             isDamaging: true;
  1638             SkipTurns: 0;
  1719             SkipTurns: 0;
  1639             PosCount: 1;
  1720             PosCount: 0;
  1640             PosSprite: sprDrill;
  1721             PosSprite: sprDrill;
  1641             ejectX: 0; //20;
  1722             ejectX: 0; //20;
  1642             ejectY: -6),
  1723             ejectY: -6),
  1643 
  1724 
  1644 // Ballgun
  1725 // Ballgun
  1653                 NumPerTurn: 0;
  1734                 NumPerTurn: 0;
  1654                 Timer: 5001;
  1735                 Timer: 5001;
  1655                 Pos: 0;
  1736                 Pos: 0;
  1656                 AmmoType: amBallgun;
  1737                 AmmoType: amBallgun;
  1657                 AttackVoice: sndNone;
  1738                 AttackVoice: sndNone;
  1658                 Bounciness: 1000);
  1739                 Bounciness: defaultBounciness);
  1659             Slot: 4;
  1740             Slot: 4;
  1660             TimeAfterTurn: 0;
  1741             TimeAfterTurn: 0;
  1661             minAngle: 0;
  1742             minAngle: 0;
  1662             maxAngle: 0;
  1743             maxAngle: 0;
  1663             isDamaging: true;
  1744             isDamaging: true;
  1664             SkipTurns: 0;
  1745             SkipTurns: 0;
  1665             PosCount: 1;
  1746             PosCount: 0;
  1666             PosSprite: sprWater;
  1747             PosSprite: sprWater;
  1667             ejectX: 0; //20;
  1748             ejectX: 0; //20;
  1668             ejectY: -3),
  1749             ejectY: -3),
  1669 
  1750 
  1670 // RC-Plane
  1751 // RC-Plane
  1680                 NumPerTurn: 0;
  1761                 NumPerTurn: 0;
  1681                 Timer: 0;
  1762                 Timer: 0;
  1682                 Pos: 0;
  1763                 Pos: 0;
  1683                 AmmoType: amRCPlane;
  1764                 AmmoType: amRCPlane;
  1684                 AttackVoice: sndNone;
  1765                 AttackVoice: sndNone;
  1685                 Bounciness: 1000);
  1766                 Bounciness: defaultBounciness);
  1686             Slot: 4;
  1767             Slot: 4;
  1687             TimeAfterTurn: 0;
  1768             TimeAfterTurn: 0;
  1688             minAngle: 0;
  1769             minAngle: 0;
  1689             maxAngle: 0;
  1770             maxAngle: 0;
  1690             isDamaging: true;
  1771             isDamaging: true;
  1691             SkipTurns: 4;
  1772             SkipTurns: 4;
  1692             PosCount: 1;
  1773             PosCount: 0;
  1693             PosSprite: sprWater;
  1774             PosSprite: sprWater;
  1694             ejectX: 0;
  1775             ejectX: 0;
  1695             ejectY: 0),
  1776             ejectY: 0),
  1696 
  1777 
  1697 // LowGravity
  1778 // LowGravity
  1701             NumberInCase: 1;
  1782             NumberInCase: 1;
  1702             Ammo: (Propz: ammoprop_NoRoundEnd or
  1783             Ammo: (Propz: ammoprop_NoRoundEnd or
  1703                           ammoprop_NoCrosshair or
  1784                           ammoprop_NoCrosshair or
  1704                           ammoprop_DontHold or
  1785                           ammoprop_DontHold or
  1705                           ammoprop_AltUse or
  1786                           ammoprop_AltUse or
       
  1787                           ammoprop_ShowSelIcon or
  1706                           ammoprop_Utility or
  1788                           ammoprop_Utility or
  1707                           ammoprop_Effect;
  1789                           ammoprop_Effect;
  1708                     Count: 1;
  1790                     Count: 1;
  1709                     NumPerTurn: 0;
  1791                     NumPerTurn: 0;
  1710                     Timer: 0;
  1792                     Timer: 0;
  1711                     Pos: 0;
  1793                     Pos: 0;
  1712                     AmmoType: amLowGravity;
  1794                     AmmoType: amLowGravity;
  1713                     AttackVoice: sndNone;
  1795                     AttackVoice: sndNone;
  1714                 Bounciness: 1000);
  1796                 Bounciness: defaultBounciness);
  1715             Slot: 9;
  1797             Slot: 9;
  1716             TimeAfterTurn: 0;
  1798             TimeAfterTurn: 0;
  1717             minAngle: 0;
  1799             minAngle: 0;
  1718             maxAngle: 0;
  1800             maxAngle: 0;
  1719             isDamaging: false;
  1801             isDamaging: false;
  1720             SkipTurns: 0;
  1802             SkipTurns: 0;
  1721             PosCount: 1;
  1803             PosCount: 0;
  1722             PosSprite: sprWater;
  1804             PosSprite: sprWater;
  1723             ejectX: 0;
  1805             ejectX: 0;
  1724             ejectY: 0),
  1806             ejectY: 0),
  1725 
  1807 
  1726 // ExtraDamage
  1808 // ExtraDamage
  1730             NumberInCase: 1;
  1812             NumberInCase: 1;
  1731             Ammo: (Propz: ammoprop_NoRoundEnd or
  1813             Ammo: (Propz: ammoprop_NoRoundEnd or
  1732                           ammoprop_NoCrosshair or
  1814                           ammoprop_NoCrosshair or
  1733                           ammoprop_DontHold or
  1815                           ammoprop_DontHold or
  1734                           ammoprop_AltUse or
  1816                           ammoprop_AltUse or
       
  1817                           ammoprop_ShowSelIcon or
  1735                           ammoprop_Utility or
  1818                           ammoprop_Utility or
  1736                           ammoprop_Effect;
  1819                           ammoprop_Effect;
  1737                     Count: 1;
  1820                     Count: 1;
  1738                     NumPerTurn: 0;
  1821                     NumPerTurn: 0;
  1739                     Timer: 0;
  1822                     Timer: 0;
  1740                     Pos: 0;
  1823                     Pos: 0;
  1741                     AmmoType: amExtraDamage;
  1824                     AmmoType: amExtraDamage;
  1742                     AttackVoice: sndNone;
  1825                     AttackVoice: sndNone;
  1743                 Bounciness: 1000);
  1826                 Bounciness: defaultBounciness);
  1744             Slot: 9;
  1827             Slot: 9;
  1745             TimeAfterTurn: 0;
  1828             TimeAfterTurn: 0;
  1746             minAngle: 0;
  1829             minAngle: 0;
  1747             maxAngle: 0;
  1830             maxAngle: 0;
  1748             isDamaging: false;
  1831             isDamaging: false;
  1749             SkipTurns: 0;
  1832             SkipTurns: 0;
  1750             PosCount: 1;
  1833             PosCount: 0;
  1751             PosSprite: sprWater;
  1834             PosSprite: sprWater;
  1752             ejectX: 0;
  1835             ejectX: 0;
  1753             ejectY: 0),
  1836             ejectY: 0),
  1754 
  1837 
  1755 // Invulnerable
  1838 // Invulnerable
  1759             NumberInCase: 1;
  1842             NumberInCase: 1;
  1760             Ammo: (Propz: ammoprop_NoRoundEnd or
  1843             Ammo: (Propz: ammoprop_NoRoundEnd or
  1761                           ammoprop_NoCrosshair or
  1844                           ammoprop_NoCrosshair or
  1762                           ammoprop_DontHold or
  1845                           ammoprop_DontHold or
  1763                           ammoprop_AltUse or
  1846                           ammoprop_AltUse or
       
  1847                           ammoprop_ShowSelIcon or
  1764                           ammoprop_Utility or
  1848                           ammoprop_Utility or
  1765                           ammoprop_Effect;
  1849                           ammoprop_Effect;
  1766                     Count: 1;
  1850                     Count: 1;
  1767                     NumPerTurn: 0;
  1851                     NumPerTurn: 0;
  1768                     Timer: 0;
  1852                     Timer: 0;
  1769                     Pos: 0;
  1853                     Pos: 0;
  1770                     AmmoType: amInvulnerable;
  1854                     AmmoType: amInvulnerable;
  1771                     AttackVoice: sndNone;
  1855                     AttackVoice: sndNone;
  1772                 Bounciness: 1000);
  1856                 Bounciness: defaultBounciness);
  1773             Slot: 8;
  1857             Slot: 8;
  1774             TimeAfterTurn: 0;
  1858             TimeAfterTurn: 0;
  1775             minAngle: 0;
  1859             minAngle: 0;
  1776             maxAngle: 0;
  1860             maxAngle: 0;
  1777             isDamaging: false;
  1861             isDamaging: false;
  1778             SkipTurns: 0;
  1862             SkipTurns: 0;
  1779             PosCount: 1;
  1863             PosCount: 0;
  1780             PosSprite: sprWater;
  1864             PosSprite: sprWater;
  1781             ejectX: 0;
  1865             ejectX: 0;
  1782             ejectY: 0),
  1866             ejectY: 0),
  1783 
  1867 
  1784 // ExtraTime
  1868 // ExtraTime
  1788             NumberInCase: 1;
  1872             NumberInCase: 1;
  1789             Ammo: (Propz: ammoprop_NoRoundEnd or
  1873             Ammo: (Propz: ammoprop_NoRoundEnd or
  1790                           ammoprop_NoCrosshair or
  1874                           ammoprop_NoCrosshair or
  1791                           ammoprop_DontHold or
  1875                           ammoprop_DontHold or
  1792                           ammoprop_AltUse or
  1876                           ammoprop_AltUse or
       
  1877                           ammoprop_ShowSelIcon or
  1793                           ammoprop_Utility or
  1878                           ammoprop_Utility or
  1794                           ammoprop_Effect;
  1879                           ammoprop_Effect;
  1795                     Count: 1;
  1880                     Count: 1;
  1796                     NumPerTurn: 0;
  1881                     NumPerTurn: 0;
  1797                     Timer: 0;
  1882                     Timer: 0;
  1798                     Pos: 0;
  1883                     Pos: 0;
  1799                     AmmoType: amExtraTime;
  1884                     AmmoType: amExtraTime;
  1800                     AttackVoice: sndNone;
  1885                     AttackVoice: sndNone;
  1801                 Bounciness: 1000);
  1886                 Bounciness: defaultBounciness);
  1802             Slot: 9;
  1887             Slot: 9;
  1803             TimeAfterTurn: 0;
  1888             TimeAfterTurn: 0;
  1804             minAngle: 0;
  1889             minAngle: 0;
  1805             maxAngle: 0;
  1890             maxAngle: 0;
  1806             isDamaging: false;
  1891             isDamaging: false;
  1807             SkipTurns: 0;
  1892             SkipTurns: 0;
  1808             PosCount: 1;
  1893             PosCount: 0;
  1809             PosSprite: sprWater;
  1894             PosSprite: sprWater;
  1810             ejectX: 0;
  1895             ejectX: 0;
  1811             ejectY: 0),
  1896             ejectY: 0),
  1812 
  1897 
  1813 // LaserSight
  1898 // LaserSight
  1817             NumberInCase: 1;
  1902             NumberInCase: 1;
  1818             Ammo: (Propz: ammoprop_NoRoundEnd or
  1903             Ammo: (Propz: ammoprop_NoRoundEnd or
  1819                           ammoprop_NoCrosshair or
  1904                           ammoprop_NoCrosshair or
  1820                           ammoprop_DontHold or
  1905                           ammoprop_DontHold or
  1821                           ammoprop_AltUse or
  1906                           ammoprop_AltUse or
       
  1907                           ammoprop_ShowSelIcon or
  1822                           ammoprop_Utility or
  1908                           ammoprop_Utility or
  1823                           ammoprop_NeedUpDown or
  1909                           ammoprop_NeedUpDown or
  1824                           ammoprop_Effect;
  1910                           ammoprop_Effect;
  1825                     Count: 1;
  1911                     Count: 1;
  1826                     NumPerTurn: 0;
  1912                     NumPerTurn: 0;
  1827                     Timer: 0;
  1913                     Timer: 0;
  1828                     Pos: 0;
  1914                     Pos: 0;
  1829                     AmmoType: amLaserSight;
  1915                     AmmoType: amLaserSight;
  1830                     AttackVoice: sndNone;
  1916                     AttackVoice: sndNone;
  1831                 Bounciness: 1000);
  1917                 Bounciness: defaultBounciness);
  1832             Slot: 8;
  1918             Slot: 8;
  1833             TimeAfterTurn: 0;
  1919             TimeAfterTurn: 0;
  1834             minAngle: 0;
  1920             minAngle: 0;
  1835             maxAngle: 0;
  1921             maxAngle: 0;
  1836             isDamaging: false;
  1922             isDamaging: false;
  1837             SkipTurns: 0;
  1923             SkipTurns: 0;
  1838             PosCount: 1;
  1924             PosCount: 0;
  1839             PosSprite: sprWater;
  1925             PosSprite: sprWater;
  1840             ejectX: 0;
  1926             ejectX: 0;
  1841             ejectY: 0),
  1927             ejectY: 0),
  1842 
  1928 
  1843 // Vampiric
  1929 // Vampiric
  1855                     NumPerTurn: 0;
  1941                     NumPerTurn: 0;
  1856                     Timer: 0;
  1942                     Timer: 0;
  1857                     Pos: 0;
  1943                     Pos: 0;
  1858                     AmmoType: amVampiric;
  1944                     AmmoType: amVampiric;
  1859                     AttackVoice: sndNone;
  1945                     AttackVoice: sndNone;
  1860                 Bounciness: 1000);
  1946                 Bounciness: defaultBounciness);
  1861             Slot: 8;
  1947             Slot: 8;
  1862             TimeAfterTurn: 0;
  1948             TimeAfterTurn: 0;
  1863             minAngle: 0;
  1949             minAngle: 0;
  1864             maxAngle: 0;
  1950             maxAngle: 0;
  1865             isDamaging: false;
  1951             isDamaging: false;
  1866             SkipTurns: 0;
  1952             SkipTurns: 0;
  1867             PosCount: 1;
  1953             PosCount: 0;
  1868             PosSprite: sprWater;
  1954             PosSprite: sprWater;
  1869             ejectX: 0;
  1955             ejectX: 0;
  1870             ejectY: 0),
  1956             ejectY: 0),
  1871 
  1957 
  1872 // SniperRifle
  1958 // SniperRifle
  1882                 NumPerTurn: 1;
  1968                 NumPerTurn: 1;
  1883                 Timer: 0;
  1969                 Timer: 0;
  1884                 Pos: 0;
  1970                 Pos: 0;
  1885                 AmmoType: amSniperRifle;
  1971                 AmmoType: amSniperRifle;
  1886                 AttackVoice: sndNone;
  1972                 AttackVoice: sndNone;
  1887                 Bounciness: 1000);
  1973                 Bounciness: defaultBounciness);
  1888             Slot: 2;
  1974             Slot: 2;
  1889             TimeAfterTurn: 3000;
  1975             TimeAfterTurn: 3000;
  1890             minAngle: 0;
  1976             minAngle: 0;
  1891             maxAngle: 0;
  1977             maxAngle: 0;
  1892             isDamaging: true;
  1978             isDamaging: true;
  1893             SkipTurns: 0;
  1979             SkipTurns: 0;
  1894             PosCount: 1;
  1980             PosCount: 0;
  1895             PosSprite: sprWater;
  1981             PosSprite: sprWater;
  1896             ejectX: 0; //40;
  1982             ejectX: 0; //40;
  1897             ejectY: -5),
  1983             ejectY: -5),
  1898 
  1984 
  1899 // Jetpack ("Flying Saucer")
  1985 // Jetpack ("Flying Saucer")
  1905                           ammoprop_ForwMsgs or
  1991                           ammoprop_ForwMsgs or
  1906                           ammoprop_AttackInMove or
  1992                           ammoprop_AttackInMove or
  1907                           ammoprop_DontHold or
  1993                           ammoprop_DontHold or
  1908                           ammoprop_Utility or
  1994                           ammoprop_Utility or
  1909                           ammoprop_NeedUpDown or
  1995                           ammoprop_NeedUpDown or
       
  1996                           ammoprop_ShowSelIcon or
  1910                           ammoprop_AltAttack;
  1997                           ammoprop_AltAttack;
  1911                 Count: 1;
  1998                 Count: 1;
  1912                 NumPerTurn: 0;
  1999                 NumPerTurn: 0;
  1913                 Timer: 0;
  2000                 Timer: 0;
  1914                 Pos: 0;
  2001                 Pos: 0;
  1915                 AmmoType: amJetpack;
  2002                 AmmoType: amJetpack;
  1916                 AttackVoice: sndNone;
  2003                 AttackVoice: sndNone;
  1917                 Bounciness: 1000);
  2004                 Bounciness: defaultBounciness);
  1918             Slot: 7;
  2005             Slot: 7;
  1919             TimeAfterTurn: 3000;
  2006             TimeAfterTurn: 3000;
  1920             minAngle: 0;
  2007             minAngle: 0;
  1921             maxAngle: 0;
  2008             maxAngle: 0;
  1922             isDamaging: false;
  2009             isDamaging: false;
  1923             SkipTurns: 0;
  2010             SkipTurns: 0;
  1924             PosCount: 1;
  2011             PosCount: 0;
  1925             PosSprite: sprWater;
  2012             PosSprite: sprWater;
  1926             ejectX: 0;
  2013             ejectX: 0;
  1927             ejectY: 0),
  2014             ejectY: 0),
  1928 
  2015 
  1929 // Molotov
  2016 // Molotov
  1937                 Count: AMMO_INFINITE;
  2024                 Count: AMMO_INFINITE;
  1938                 NumPerTurn: 0;
  2025                 NumPerTurn: 0;
  1939                 Timer: 3000;
  2026                 Timer: 3000;
  1940                 Pos: 0;
  2027                 Pos: 0;
  1941                 AmmoType: amMolotov;
  2028                 AmmoType: amMolotov;
  1942                 AttackVoice: sndNone;
  2029                 AttackVoice: sndWatchThis;
  1943                 Bounciness: 1000);
  2030                 Bounciness: defaultBounciness);
  1944             Slot: 1;
  2031             Slot: 1;
  1945             TimeAfterTurn: 3000;
  2032             TimeAfterTurn: 3000;
  1946             minAngle: 0;
  2033             minAngle: 0;
  1947             maxAngle: 0;
  2034             maxAngle: 0;
  1948             isDamaging: true;
  2035             isDamaging: true;
  1949             SkipTurns: 0;
  2036             SkipTurns: 0;
  1950             PosCount: 1;
  2037             PosCount: 0;
  1951             PosSprite: sprWater;
  2038             PosSprite: sprWater;
  1952             ejectX: 0;
  2039             ejectX: 0;
  1953             ejectY: 0),
  2040             ejectY: 0),
  1954 
  2041 
  1955 // Birdy
  2042 // Birdy
  1958             Probability: 20;
  2045             Probability: 20;
  1959             NumberInCase: 1;
  2046             NumberInCase: 1;
  1960             Ammo: (Propz: ammoprop_ForwMsgs or
  2047             Ammo: (Propz: ammoprop_ForwMsgs or
  1961                           ammoprop_NoCrosshair or
  2048                           ammoprop_NoCrosshair or
  1962                           ammoprop_NeedUpDown or
  2049                           ammoprop_NeedUpDown or
       
  2050                           ammoprop_ShowSelIcon or
  1963                           ammoprop_DontHold;
  2051                           ammoprop_DontHold;
  1964                 Count: 1;
  2052                 Count: 1;
  1965                 NumPerTurn: 0;
  2053                 NumPerTurn: 0;
  1966                 Timer: 0;
  2054                 Timer: 0;
  1967                 Pos: 0;
  2055                 Pos: 0;
  1968                 AmmoType: amBirdy;
  2056                 AmmoType: amBirdy;
  1969                 AttackVoice: sndNone;
  2057                 AttackVoice: sndNone;
  1970                 Bounciness: 1000);
  2058                 Bounciness: defaultBounciness);
  1971             Slot: 7;
  2059             Slot: 7;
  1972             TimeAfterTurn: 3000;
  2060             TimeAfterTurn: 3000;
  1973             minAngle: 0;
  2061             minAngle: 0;
  1974             maxAngle: 0;
  2062             maxAngle: 0;
  1975             isDamaging: true;
  2063             isDamaging: true;
  1976             SkipTurns: 0;
  2064             SkipTurns: 0;
  1977             PosCount: 1;
  2065             PosCount: 0;
  1978             PosSprite: sprWater;
  2066             PosSprite: sprWater;
  1979             ejectX: 0;
  2067             ejectX: 0;
  1980             ejectY: 0),
  2068             ejectY: 0),
  1981 
  2069 
  1982 // PortalGun
  2070 // PortalGun
  1993                 NumPerTurn: 3;
  2081                 NumPerTurn: 3;
  1994                 Timer: 0;
  2082                 Timer: 0;
  1995                 Pos: 0;
  2083                 Pos: 0;
  1996                 AmmoType: amPortalGun;
  2084                 AmmoType: amPortalGun;
  1997                 AttackVoice: sndNone;
  2085                 AttackVoice: sndNone;
  1998                 Bounciness: 1000);
  2086                 Bounciness: defaultBounciness);
  1999             Slot: 7;
  2087             Slot: 7;
  2000             TimeAfterTurn: 0;
  2088             TimeAfterTurn: 0;
  2001             minAngle: 0;
  2089             minAngle: 0;
  2002             maxAngle: 0;
  2090             maxAngle: 0;
  2003             isDamaging: false;
  2091             isDamaging: false;
  2004             SkipTurns: 0;
  2092             SkipTurns: 0;
  2005             PosCount: 1;
  2093             PosCount: 0;
  2006             PosSprite: sprWater;
  2094             PosSprite: sprWater;
  2007             ejectX: -5; //29;
  2095             ejectX: -5; //29;
  2008             ejectY: -7),
  2096             ejectY: -7),
  2009 
  2097 
  2010 // Piano
  2098 // Piano
  2012             NameTex: nil;
  2100             NameTex: nil;
  2013             Probability: 100;
  2101             Probability: 100;
  2014             NumberInCase: 1;
  2102             NumberInCase: 1;
  2015             Ammo: (Propz: ammoprop_NoCrosshair or
  2103             Ammo: (Propz: ammoprop_NoCrosshair or
  2016                             ammoprop_NeedTarget or
  2104                             ammoprop_NeedTarget or
  2017                             ammoprop_NoTargetAfter or
  2105                             // NoTargetAfter is handled manually in doStepPiano
  2018                             ammoprop_AttackingPut or
  2106                             ammoprop_AttackingPut or
  2019                             ammoprop_DontHold or
  2107                             ammoprop_DontHold or
  2020                             ammoprop_NotBorder or
  2108                             ammoprop_NotBorder or
  2021                             ammoprop_ForceTurnEnd;
  2109                             ammoprop_ForceTurnEnd;
  2022                 Count: 1;
  2110                 Count: 1;
  2023                 NumPerTurn: 0;
  2111                 NumPerTurn: 0;
  2024                 Timer: 0;
  2112                 Timer: 0;
  2025                 Pos: 0;
  2113                 Pos: 0;
  2026                 AmmoType: amPiano;
  2114                 AmmoType: amPiano;
  2027                 AttackVoice: sndIncoming;
  2115                 AttackVoice: sndNone; // handled in doStepPiano
  2028                 Bounciness: 1000);
  2116                 Bounciness: defaultBounciness);
  2029             Slot: 5;
  2117             Slot: 5;
  2030             TimeAfterTurn: 0;
  2118             TimeAfterTurn: 0;
  2031             minAngle: 0;
  2119             minAngle: 0;
  2032             maxAngle: 0;
  2120             maxAngle: 0;
  2033             isDamaging: true;
  2121             isDamaging: true;
  2034             SkipTurns: 7;
  2122             SkipTurns: 7;
  2035             PosCount: 1;
  2123             PosCount: 1;
  2036             PosSprite: sprWater;
  2124             PosSprite: sprAmPiano;
  2037             ejectX: 0;
  2125             ejectX: 0;
  2038             ejectY: 0),
  2126             ejectY: 0),
  2039 
  2127 
  2040 // GasBomb
  2128 // GasBomb
  2041             (NameId: sidGasBomb;
  2129             (NameId: sidGasBomb;
  2051                 NumPerTurn: 0;
  2139                 NumPerTurn: 0;
  2052                 Timer: 3000;
  2140                 Timer: 3000;
  2053                 Pos: 0;
  2141                 Pos: 0;
  2054                 AmmoType: amGasBomb;
  2142                 AmmoType: amGasBomb;
  2055                 AttackVoice: sndCover;
  2143                 AttackVoice: sndCover;
  2056                 Bounciness: 1000);
  2144                 Bounciness: defaultBounciness);
  2057             Slot: 1;
  2145             Slot: 1;
  2058             TimeAfterTurn: 3000;
  2146             TimeAfterTurn: 3000;
  2059             minAngle: 0;
  2147             minAngle: 0;
  2060             maxAngle: 0;
  2148             maxAngle: 0;
  2061             isDamaging: true;
  2149             isDamaging: true;
  2062             SkipTurns: 0;
  2150             SkipTurns: 0;
  2063             PosCount: 1;
  2151             PosCount: 0;
  2064             PosSprite: sprWater;
  2152             PosSprite: sprWater;
  2065             ejectX: 0;
  2153             ejectX: 0;
  2066             ejectY: 0),
  2154             ejectY: 0),
  2067 
  2155 
  2068 // SineGun
  2156 // SineGun
  2076                 NumPerTurn: 0;
  2164                 NumPerTurn: 0;
  2077                 Timer: 0;
  2165                 Timer: 0;
  2078                 Pos: 0;
  2166                 Pos: 0;
  2079                 AmmoType: amSineGun;
  2167                 AmmoType: amSineGun;
  2080                 AttackVoice: sndNone;
  2168                 AttackVoice: sndNone;
  2081                 Bounciness: 1000);
  2169                 Bounciness: defaultBounciness);
  2082             Slot: 2;
  2170             Slot: 2;
  2083             TimeAfterTurn: 0;
  2171             TimeAfterTurn: 0;
  2084             minAngle: 0;
  2172             minAngle: 0;
  2085             maxAngle: 0;
  2173             maxAngle: 0;
  2086             isDamaging: true;
  2174             isDamaging: true;
  2087             SkipTurns: 0;
  2175             SkipTurns: 0;
  2088             PosCount: 1;
  2176             PosCount: 0;
  2089             PosSprite: sprWater;
  2177             PosSprite: sprWater;
  2090             ejectX: 0;
  2178             ejectX: 0;
  2091             ejectY: 0),
  2179             ejectY: 0),
  2092 
  2180 
  2093 // Flamethrower
  2181 // Flamethrower
  2102                 NumPerTurn: 0;
  2190                 NumPerTurn: 0;
  2103                 Timer: 5001;
  2191                 Timer: 5001;
  2104                 Pos: 0;
  2192                 Pos: 0;
  2105                 AmmoType: amFlamethrower;
  2193                 AmmoType: amFlamethrower;
  2106                 AttackVoice: sndNone;
  2194                 AttackVoice: sndNone;
  2107                 Bounciness: 1000);
  2195                 Bounciness: defaultBounciness);
  2108             Slot: 2;
  2196             Slot: 6;
  2109             TimeAfterTurn: 0;
  2197             TimeAfterTurn: 0;
  2110             minAngle: 0;
  2198             minAngle: 0;
  2111             maxAngle: 0;
  2199             maxAngle: 0;
  2112             isDamaging: true;
  2200             isDamaging: true;
  2113             SkipTurns: 0;
  2201             SkipTurns: 0;
  2114             PosCount: 1;
  2202             PosCount: 0;
  2115             PosSprite: sprWater;
  2203             PosSprite: sprWater;
  2116             ejectX: 0; //20;
  2204             ejectX: 0; //20;
  2117             ejectY: -3),
  2205             ejectY: -3),
  2118 
  2206 
  2119 // Sticky Mine
  2207 // Sticky Mine
  2128                 NumPerTurn: 1;
  2216                 NumPerTurn: 1;
  2129                 Timer: 0;
  2217                 Timer: 0;
  2130                 Pos: 0;
  2218                 Pos: 0;
  2131                 AmmoType: amSMine;
  2219                 AmmoType: amSMine;
  2132                 AttackVoice: sndLaugh;
  2220                 AttackVoice: sndLaugh;
  2133                 Bounciness: 1000);
  2221                 Bounciness: defaultBounciness);
  2134             Slot: 4;
  2222             Slot: 4;
  2135             TimeAfterTurn: 5000;
  2223             TimeAfterTurn: 5000;
  2136             minAngle: 0;
  2224             minAngle: 0;
  2137             maxAngle: 0;
  2225             maxAngle: 0;
  2138             isDamaging: true;
  2226             isDamaging: true;
  2139             SkipTurns: 0;
  2227             SkipTurns: 0;
  2140             PosCount: 1;
  2228             PosCount: 0;
  2141             PosSprite: sprWater;
  2229             PosSprite: sprWater;
  2142             ejectX: 0;
  2230             ejectX: 0;
  2143             ejectY: 0),
  2231             ejectY: 0),
  2144 
  2232 
  2145 // Hammer
  2233 // Hammer
  2152                 NumPerTurn: 0;
  2240                 NumPerTurn: 0;
  2153                 Timer: 0;
  2241                 Timer: 0;
  2154                 Pos: 0;
  2242                 Pos: 0;
  2155                 AmmoType: amHammer;
  2243                 AmmoType: amHammer;
  2156                 AttackVoice: sndNone;
  2244                 AttackVoice: sndNone;
  2157                 Bounciness: 1000);
  2245                 Bounciness: defaultBounciness);
  2158             Slot: 3;
  2246             Slot: 3;
  2159             TimeAfterTurn: 3000;
  2247             TimeAfterTurn: 3000;
  2160             minAngle: 0;
  2248             minAngle: 0;
  2161             maxAngle: 0;
  2249             maxAngle: 0;
  2162             isDamaging: true;
  2250             isDamaging: true;
  2163             SkipTurns: 0;
  2251             SkipTurns: 0;
  2164             PosCount: 1;
  2252             PosCount: 0;
  2165             PosSprite: sprWater;
  2253             PosSprite: sprWater;
  2166             ejectX: 0;
  2254             ejectX: 0;
  2167             ejectY: 0),
  2255             ejectY: 0),
  2168 
  2256 
  2169 // Resurrector
  2257 // Resurrector
  2171             NameTex: nil;
  2259             NameTex: nil;
  2172             Probability: 0;
  2260             Probability: 0;
  2173             NumberInCase: 1;
  2261             NumberInCase: 1;
  2174             Ammo: (Propz: ammoprop_NoCrosshair or
  2262             Ammo: (Propz: ammoprop_NoCrosshair or
  2175                           ammoprop_Utility or
  2263                           ammoprop_Utility or
  2176                           ammoprop_NoRoundEnd;
  2264                           ammoprop_NoRoundEnd or
       
  2265                           ammoprop_DoesntStopTimerWhileAttacking;
  2177                 Count: 1;
  2266                 Count: 1;
  2178                 NumPerTurn: 0;
  2267                 NumPerTurn: 0;
  2179                 Timer: 0;
  2268                 Timer: 0;
  2180                 Pos: 0;
  2269                 Pos: 0;
  2181                 AmmoType: amResurrector;
  2270                 AmmoType: amResurrector;
  2182                 AttackVoice: sndNone;
  2271                 AttackVoice: sndNone;
  2183                 Bounciness: 1000);
  2272                 Bounciness: defaultBounciness);
  2184             Slot: 8;
  2273             Slot: 8;
  2185             TimeAfterTurn: 3000;
  2274             TimeAfterTurn: 3000;
  2186             minAngle: 0;
  2275             minAngle: 0;
  2187             maxAngle: 0;
  2276             maxAngle: 0;
  2188             isDamaging: true;
  2277             isDamaging: true;
  2189             SkipTurns: 0;
  2278             SkipTurns: 0;
  2190             PosCount: 1;
  2279             PosCount: 0;
  2191             PosSprite: sprWater;
  2280             PosSprite: sprWater;
  2192             ejectX: 0;
  2281             ejectX: 0;
  2193             ejectY: 0),
  2282             ejectY: 0),
  2194 
  2283 
  2195 // DrillStrike
  2284 // DrillStrike
  2206                 Count: 1;
  2295                 Count: 1;
  2207                 NumPerTurn: 0;
  2296                 NumPerTurn: 0;
  2208                 Timer: 5000;
  2297                 Timer: 5000;
  2209                 Pos: 0;
  2298                 Pos: 0;
  2210                 AmmoType: amDrillStrike;
  2299                 AmmoType: amDrillStrike;
  2211                 AttackVoice: sndIncoming;
  2300                 AttackVoice: sndNone; // handled in doStepAirAttack
  2212                 Bounciness: 1000);
  2301                 Bounciness: defaultBounciness);
  2213             Slot: 5;
  2302             Slot: 5;
  2214             TimeAfterTurn: 0;
  2303             TimeAfterTurn: 0;
  2215             minAngle: 0;
  2304             minAngle: 0;
  2216             maxAngle: 0;
  2305             maxAngle: 0;
  2217             isDamaging: true;
  2306             isDamaging: true;
  2234                 NumPerTurn: 0;
  2323                 NumPerTurn: 0;
  2235                 Timer: 0;
  2324                 Timer: 0;
  2236                 Pos: 0;
  2325                 Pos: 0;
  2237                 AmmoType: amSnowball;
  2326                 AmmoType: amSnowball;
  2238                 AttackVoice: sndNone;
  2327                 AttackVoice: sndNone;
  2239                 Bounciness: 1000);
  2328                 Bounciness: defaultBounciness);
  2240             Slot: 0;
  2329             Slot: 0;
  2241             TimeAfterTurn: 3000;
  2330             TimeAfterTurn: 3000;
  2242             minAngle: 0;
  2331             minAngle: 0;
  2243             maxAngle: 0;
  2332             maxAngle: 0;
  2244             isDamaging: false;
  2333             isDamaging: false;
  2245             SkipTurns: 0;
  2334             SkipTurns: 0;
  2246             PosCount: 1;
  2335             PosCount: 0;
  2247             PosSprite: sprWater;
  2336             PosSprite: sprWater;
  2248             ejectX: 0;
  2337             ejectX: 0;
  2249             ejectY: 0),
  2338             ejectY: 0),
  2250 
  2339 
  2251 // Tardis
  2340 // Tardis
  2254             Probability: 200;
  2343             Probability: 200;
  2255             NumberInCase: 1;
  2344             NumberInCase: 1;
  2256             Ammo: (Propz: ammoprop_ForwMsgs or
  2345             Ammo: (Propz: ammoprop_ForwMsgs or
  2257                           ammoprop_NoCrosshair or
  2346                           ammoprop_NoCrosshair or
  2258                           ammoprop_Utility or
  2347                           ammoprop_Utility or
       
  2348                           ammoprop_ShowSelIcon or
  2259                           ammoprop_DontHold or
  2349                           ammoprop_DontHold or
  2260                           ammoprop_ForceTurnEnd;
  2350                           ammoprop_ForceTurnEnd;
  2261                 Count: 2;
  2351                 Count: 2;
  2262                 NumPerTurn: 0;
  2352                 NumPerTurn: 0;
  2263                 Timer: 0;
  2353                 Timer: 0;
  2264                 Pos: 0;
  2354                 Pos: 0;
  2265                 AmmoType: amTardis;
  2355                 AmmoType: amTardis;
  2266                 AttackVoice: sndNone;
  2356                 AttackVoice: sndNone;
  2267                 Bounciness: 1000);
  2357                 Bounciness: defaultBounciness);
  2268             Slot: 8;
  2358             Slot: 8;
  2269             TimeAfterTurn: 0;
  2359             TimeAfterTurn: 0;
  2270             minAngle: 0;
  2360             minAngle: 0;
  2271             maxAngle: 0;
  2361             maxAngle: 0;
  2272             isDamaging: false;
  2362             isDamaging: false;
  2273             SkipTurns: 0;
  2363             SkipTurns: 0;
  2274             PosCount: 2;
  2364             PosCount: 2;
  2275             PosSprite: sprAmTeleport;
  2365             PosSprite: sprAmTeleport;
  2276             ejectX: 0;
  2366             ejectX: 0;
  2277             ejectY: 0),
  2367             ejectY: 0),
  2278 
       
  2279 // Structure
       
  2280 {
       
  2281             (NameId: sidStructure;
       
  2282             NameTex: nil;
       
  2283             Probability: 0;
       
  2284             NumberInCase: 1;
       
  2285             Ammo: (Propz: ammoprop_ForwMsgs or
       
  2286                           ammoprop_NoCrosshair or
       
  2287                           ammoprop_Utility or
       
  2288                           ammoprop_DontHold;
       
  2289                 Count: 1;
       
  2290                 NumPerTurn: 0;
       
  2291                 Timer: 0;
       
  2292                 Pos: 0;
       
  2293                 AmmoType: amStructure;
       
  2294                 AttackVoice: sndNone;
       
  2295                 Bounciness: 1000);
       
  2296             Slot: 6;
       
  2297             TimeAfterTurn: 0;
       
  2298             minAngle: 0;
       
  2299             maxAngle: 0;
       
  2300             isDamaging: false;
       
  2301             SkipTurns: 0;
       
  2302             PosCount: 1;
       
  2303             PosSprite: sprWater;
       
  2304             ejectX: 0;
       
  2305             ejectY: 0),
       
  2306 }
       
  2307 
  2368 
  2308 // Land Gun
  2369 // Land Gun
  2309             (NameId: sidLandGun;
  2370             (NameId: sidLandGun;
  2310             NameTex: nil;
  2371             NameTex: nil;
  2311             Probability: 20;
  2372             Probability: 20;
  2317                 NumPerTurn: 0;
  2378                 NumPerTurn: 0;
  2318                 Timer: 5001;
  2379                 Timer: 5001;
  2319                 Pos: 0;
  2380                 Pos: 0;
  2320                 AmmoType: amLandGun;
  2381                 AmmoType: amLandGun;
  2321                 AttackVoice: sndNone;
  2382                 AttackVoice: sndNone;
  2322                 Bounciness: 1000);
  2383                 Bounciness: defaultBounciness);
  2323             Slot: 6;
  2384             Slot: 6;
  2324             TimeAfterTurn: 0;
  2385             TimeAfterTurn: 0;
  2325             minAngle: 0;
  2386             minAngle: 0;
  2326             maxAngle: 0;
  2387             maxAngle: 0;
  2327             isDamaging: true;
  2388             isDamaging: true;
  2328             SkipTurns: 0;
  2389             SkipTurns: 0;
  2329             PosCount: 1;
  2390             PosCount: 0;
  2330             PosSprite: sprWater;
  2391             PosSprite: sprWater;
  2331             ejectX: 0; //20;
  2392             ejectX: 0; //20;
  2332             ejectY: -3),
  2393             ejectY: -3),
  2333 // Freezer
  2394 // Freezer
  2334             (NameId: sidIceGun;
  2395             (NameId: sidIceGun;
  2342                 NumPerTurn: 0;
  2403                 NumPerTurn: 0;
  2343                 Timer: 5001;
  2404                 Timer: 5001;
  2344                 Pos: 0;
  2405                 Pos: 0;
  2345                 AmmoType: amIceGun;
  2406                 AmmoType: amIceGun;
  2346                 AttackVoice: sndNone;
  2407                 AttackVoice: sndNone;
  2347                 Bounciness: 1000);
  2408                 Bounciness: defaultBounciness);
  2348             Slot: 2;
  2409             Slot: 2;
  2349             TimeAfterTurn: 0;
  2410             TimeAfterTurn: 0;
  2350             minAngle: 0;
  2411             minAngle: 0;
  2351             maxAngle: 0;
  2412             maxAngle: 0;
  2352             isDamaging: false;
  2413             isDamaging: false;
  2353             SkipTurns: 0;
  2414             SkipTurns: 0;
  2354             PosCount: 1;
  2415             PosCount: 0;
  2355             PosSprite: sprWater;
  2416             PosSprite: sprWater;
  2356             ejectX: 0; //20;
  2417             ejectX: 0; //20;
  2357             ejectY: -3),
  2418             ejectY: -3),
  2358 // Knife
  2419 // Knife
  2359             (NameId: sidKnife;
  2420             (NameId: sidKnife;
  2366                 Count: 1;
  2427                 Count: 1;
  2367                 NumPerTurn: 1;
  2428                 NumPerTurn: 1;
  2368                 Timer: 0;
  2429                 Timer: 0;
  2369                 Pos: 0;
  2430                 Pos: 0;
  2370                 AmmoType: amKnife;
  2431                 AmmoType: amKnife;
  2371                 AttackVoice: sndNone;
  2432                 AttackVoice: sndWatchThis;
  2372                 Bounciness: 1000);
  2433                 Bounciness: defaultBounciness);
  2373             Slot: 6;
  2434             Slot: 0;
  2374             TimeAfterTurn: 3000;
  2435             TimeAfterTurn: 3000;
  2375             minAngle: 0;
  2436             minAngle: 0;
  2376             maxAngle: 0;
  2437             maxAngle: 0;
  2377             isDamaging: true;
  2438             isDamaging: true;
  2378             SkipTurns: 0;
  2439             SkipTurns: 0;
  2379             PosCount: 1;
  2440             PosCount: 0;
  2380             PosSprite: sprWater;
  2441             PosSprite: sprWater;
  2381             ejectX: 0;
  2442             ejectX: 0;
  2382             ejectY: 0),
  2443             ejectY: 0),
  2383 // Rubber
  2444 // Rubber
  2384             (NameId: sidRubber;
  2445             (NameId: sidRubber;
  2394                     NumPerTurn: 0;
  2455                     NumPerTurn: 0;
  2395                     Timer: 0;
  2456                     Timer: 0;
  2396                     Pos: 0;
  2457                     Pos: 0;
  2397                     AmmoType: amRubber;
  2458                     AmmoType: amRubber;
  2398                     AttackVoice: sndNone;
  2459                     AttackVoice: sndNone;
  2399                 Bounciness: 1000);
  2460                 Bounciness: defaultBounciness);
  2400             Slot: 6;
  2461             Slot: 6;
  2401             TimeAfterTurn: 3000;
  2462             TimeAfterTurn: 3000;
  2402             minAngle: 0;
  2463             minAngle: 0;
  2403             maxAngle: 0;
  2464             maxAngle: 0;
  2404             isDamaging: false;
  2465             isDamaging: false;
  2419                 NumPerTurn: 0;
  2480                 NumPerTurn: 0;
  2420                 Timer: 0;
  2481                 Timer: 0;
  2421                 Pos: 0;
  2482                 Pos: 0;
  2422                 AmmoType: amAirMine;
  2483                 AmmoType: amAirMine;
  2423                 AttackVoice: sndLaugh;
  2484                 AttackVoice: sndLaugh;
  2424                 Bounciness: 1000);
  2485                 Bounciness: defaultBounciness);
  2425             Slot: 5;
  2486             Slot: 5;
  2426             TimeAfterTurn: 5000;
  2487             TimeAfterTurn: 5000;
  2427             minAngle: 0;
  2488             minAngle: 0;
  2428             maxAngle: 0;
  2489             maxAngle: 0;
  2429             isDamaging: true;
  2490             isDamaging: true;
  2430             SkipTurns: 0;
  2491             SkipTurns: 0;
  2431             PosCount: 1;
  2492             PosCount: 0;
  2432             PosSprite: sprWater;
  2493             PosSprite: sprWater;
  2433             ejectX: 0;
  2494             ejectX: 0;
  2434             ejectY: 0),
  2495             ejectY: 0),
  2435 // Rubber duck
  2496 // Creeper
  2436             (NameId: sidDuck;
  2497             (NameId: sidCreeper;
  2437             NameTex: nil;
  2498             NameTex: nil;
  2438             Probability: 100;
  2499             Probability: 100;
  2439             NumberInCase: 1;
  2500             NumberInCase: 1;
  2440             Ammo: (Propz: ammoprop_NoCrosshair or
  2501             Ammo: (Propz: ammoprop_NoCrosshair or
  2441                           ammoprop_AttackInMove or
  2502                           ammoprop_AttackInMove or
  2443                           ammoprop_AltUse;
  2504                           ammoprop_AltUse;
  2444                 Count: 2;
  2505                 Count: 2;
  2445                 NumPerTurn: 0;
  2506                 NumPerTurn: 0;
  2446                 Timer: 15000;
  2507                 Timer: 15000;
  2447                 Pos: 0;
  2508                 Pos: 0;
  2448                 AmmoType: amDuck;
  2509                 AmmoType: amCreeper;
  2449                 AttackVoice: sndNone;
  2510                 AttackVoice: sndNone;
  2450                 Bounciness: 1000);
  2511                 Bounciness: defaultBounciness);
  2451             Slot: 0;
  2512             // Slot chosen to prevent ammo column overflow
       
  2513             // TODO: Change slot when creeper is finished
       
  2514             Slot: 8;
  2452             TimeAfterTurn: 3000;
  2515             TimeAfterTurn: 3000;
  2453             minAngle: 0;
  2516             minAngle: 0;
  2454             maxAngle: 0;
  2517             maxAngle: 0;
  2455             isDamaging: true;
  2518             isDamaging: true;
  2456             SkipTurns: 0;
  2519             SkipTurns: 0;
  2457             PosCount: 1;
  2520             PosCount: 0;
  2458             PosSprite: sprWater;
  2521             PosSprite: sprWater;
  2459             ejectX: 15;
  2522             ejectX: 15;
  2460             ejectY: -7),
  2523             ejectY: -7),
  2461 // Minigun
  2524 // Minigun
  2462             (NameId: sidMinigun;
  2525             (NameId: sidMinigun;
  2468                 NumPerTurn: 0;
  2531                 NumPerTurn: 0;
  2469                 Timer: 0;
  2532                 Timer: 0;
  2470                 Pos: 0;
  2533                 Pos: 0;
  2471                 AmmoType: amMinigun;
  2534                 AmmoType: amMinigun;
  2472                 AttackVoice: sndNone;
  2535                 AttackVoice: sndNone;
  2473                 Bounciness: 1000);
  2536                 Bounciness: defaultBounciness);
  2474             Slot: 2;
  2537             Slot: 2;
  2475             TimeAfterTurn: 3000;
  2538             TimeAfterTurn: 3000;
  2476             minAngle: cMaxAngle div 6;
  2539             minAngle: cMaxAngle div 6;
  2477             maxAngle: 5 * cMaxAngle div 6;
  2540             maxAngle: 5 * cMaxAngle div 6;
  2478             isDamaging: true;
  2541             isDamaging: true;
  2479             SkipTurns: 0;
  2542             SkipTurns: 0;
  2480             PosCount: 1;
  2543             PosCount: 0;
  2481             PosSprite: sprWater;
  2544             PosSprite: sprWater;
  2482             ejectX: 0; //23;
  2545             ejectX: 0; //23;
  2483             ejectY: 0) //-6;
  2546             ejectY: 0) //-6;
  2484         );
  2547         );
  2485 
  2548 
  2487     Land: TCollisionArray;
  2550     Land: TCollisionArray;
  2488     LandPixels: TLandArray;
  2551     LandPixels: TLandArray;
  2489     LandDirty: TDirtyTag;
  2552     LandDirty: TDirtyTag;
  2490     hasBorder: boolean;
  2553     hasBorder: boolean;
  2491     hasGirders: boolean;
  2554     hasGirders: boolean;
  2492     playHeight, playWidth, leftX, rightX, topY, MaxHedgehogs: Longword;  // 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.
  2555     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.
       
  2556 	MaxHedgehogs: LongWord;
  2493     LandBackSurface: PSDL_Surface;
  2557     LandBackSurface: PSDL_Surface;
  2494     CurAmmoGear: PGear;
  2558     CurAmmoGear: PGear;
  2495     lastGearByUID: PGear;
  2559     lastGearByUID: PGear;
  2496     GearsList: PGear;
  2560     GearsList: PGear;
  2497     AllInactive: boolean;
  2561     AllInactive: boolean;
  2501     SuddenDeathActive: Boolean; // Is in Sudden Death with any gameplay effect
  2565     SuddenDeathActive: Boolean; // Is in Sudden Death with any gameplay effect
  2502     SuddenDeathDmg: Boolean; // Is in Sudden Death with damage
  2566     SuddenDeathDmg: Boolean; // Is in Sudden Death with damage
  2503     SpeechType: Longword;
  2567     SpeechType: Longword;
  2504     SpeechText: shortstring;
  2568     SpeechText: shortstring;
  2505     PlacingHogs: boolean; // a convenience flag to indicate placement of hogs is still in progress
  2569     PlacingHogs: boolean; // a convenience flag to indicate placement of hogs is still in progress
       
  2570     PlacingKings: boolean; // a convenience flag to indicate placement of kings in King Mode is still in progress
  2506     StepSoundTimer: LongInt;
  2571     StepSoundTimer: LongInt;
  2507     StepSoundChannel: LongInt;
  2572     StepSoundChannel: LongInt;
  2508 
  2573 
  2509     CurrentTeam: PTeam;
  2574     CurrentTeam: PTeam;
  2510     PreviousTeam: PTeam;
  2575     PreviousTeam: PTeam;
       
  2576     MissionTeam: PTeam;
  2511     CurrentHedgehog: PHedgehog;
  2577     CurrentHedgehog: PHedgehog;
  2512     TeamsArray: array[0..Pred(cMaxTeams)] of PTeam;
  2578     TeamsArray: array[0..Pred(cMaxTeams)] of PTeam;
  2513     TeamsCount: Longword; // number of teams on game start
  2579     TeamsCount: Longword; // number of teams on game start
  2514     VisibleTeamsCount: Longword; // number of teams visible in team bar
  2580     VisibleTeamsCount: Longword; // number of teams visible in team bar
  2515     ClansArray, SpawnClansArray: TClansArray;
  2581     ClansArray, SpawnClansArray: TClansArray;
  2516     ClansCount: Longword;
  2582     ClansCount: Longword;
  2517     LocalClan: LongInt;  // last non-bot, non-extdriven clan
       
  2518     LocalTeam: LongInt;  // last non-bot, non-extdriven clan first team
  2583     LocalTeam: LongInt;  // last non-bot, non-extdriven clan first team
  2519     LocalAmmo: LongInt;  // last non-bot, non-extdriven clan's first team's ammo index, updated to next upcoming hog for per-hog-ammo
  2584     LocalAmmo: LongInt;  // last non-bot, non-extdriven clan's first team's ammo index, updated to next upcoming hog for per-hog-ammo
  2520     CurMinAngle, CurMaxAngle: Longword;
  2585     CurMinAngle, CurMaxAngle: Longword;
  2521 
  2586 
  2522     FollowGear: PGear;
  2587     FollowGear: PGear;
  2582 
  2647 
  2583     aVertex: GLint;
  2648     aVertex: GLint;
  2584     aTexCoord: GLint;
  2649     aTexCoord: GLint;
  2585     aColor: GLint;
  2650     aColor: GLint;
  2586 
  2651 
       
  2652     lDecimalSeparator: Char;
       
  2653 
  2587 var trammo:  array[TAmmoStrId] of ansistring;   // name of the weapon
  2654 var trammo:  array[TAmmoStrId] of ansistring;   // name of the weapon
  2588     trammoc: array[TAmmoStrId] of ansistring;   // caption of the weapon
  2655     trammoc: array[TAmmoStrId] of ansistring;   // caption of the weapon
  2589     trammod: array[TAmmoStrId] of ansistring;   // description of the weapon
  2656     trammod: array[TAmmoStrId] of ansistring;   // description of the weapon
  2590     trluaammo: array[TAmmoStrId] of ansistring; // name of the weapon (Lua overwrite)
  2657     trluaammo: array[TAmmoStrId] of ansistring; // name of the weapon (Lua overwrite)
  2591     trluaammoc: array[TAmmoStrId] of ansistring; // caption of the weapon (Lua overwrite)
  2658     trluaammoc: array[TAmmoStrId] of ansistring; // caption of the weapon (Lua overwrite)
  2592     trluaammod: array[TAmmoStrId] of ansistring;  // description of the weapon (Lua overwrite)
  2659     trluaammod: array[TAmmoStrId] of ansistring;  // description of the weapon (Lua overwrite)
  2593     trluaammoa: array[TAmmoStrId] of ansistring; // description appendix of the weapon (Lua only)
  2660     trluaammoa: array[TAmmoStrId] of ansistring; // description appendix of the weapon (Lua only)
       
  2661     trluaammoe: array[TAmmoStrId] of boolean;   // whether to render extra text (Lua overwrite)
  2594     trmsg:   array[TMsgStrId]  of ansistring;   // message of the event
  2662     trmsg:   array[TMsgStrId]  of ansistring;   // message of the event
  2595     trgoal:  array[TGoalStrId] of ansistring;   // message of the goal
  2663     trgoal:  array[TGoalStrId] of ansistring;   // message of the goal
       
  2664     trcmd:   array[TCmdHelpStrId] of ansistring; // chat command help
  2596     cTestLua : Boolean;
  2665     cTestLua : Boolean;
  2597 
  2666 
  2598 procedure preInitModule;
  2667 procedure preInitModule;
  2599 procedure initModule;
  2668 procedure initModule;
  2600 procedure freeModule;
  2669 procedure freeModule;
  2612     cScreenWidth      := cWindowedWidth;
  2681     cScreenWidth      := cWindowedWidth;
  2613     cScreenHeight     := cWindowedHeight;
  2682     cScreenHeight     := cWindowedHeight;
  2614 
  2683 
  2615     cShowFPS        := false;
  2684     cShowFPS        := false;
  2616     cAltDamage      := false;
  2685     cAltDamage      := false;
       
  2686     cHolidaySilliness := true;
  2617     cTimerInterval  := 8;
  2687     cTimerInterval  := 8;
  2618     cReducedQuality := rqNone;
  2688     cReducedQuality := rqNone;
  2619     cLocaleFName    := 'en.txt';
  2689     cLanguageFName  := 'en.txt';
  2620     cFullScreen     := false;
  2690     cFullScreen     := false;
  2621 
  2691 
  2622     UserPathPrefix  := '';
  2692     UserPathPrefix  := '';
  2623     ipcPort         := 0;
  2693     ipcPort         := 0;
  2624     recordFileName  := '';
  2694     recordFileName  := '';
  2630     cOnlyStats      := False;
  2700     cOnlyStats      := False;
  2631     cScriptName     := '';
  2701     cScriptName     := '';
  2632     cScriptParam    := '';
  2702     cScriptParam    := '';
  2633     cTestLua        := False;
  2703     cTestLua        := False;
  2634 
  2704 
       
  2705     UserZoom        := cDefaultZoomLevel;
       
  2706     zoom            := cDefaultZoomLevel;
       
  2707     ZoomValue       := cDefaultZoomLevel;
       
  2708 
       
  2709 {$IFDEF MOBILE}
       
  2710     cMaxZoomLevel   := 0.5;
       
  2711     cMinZoomLevel   := 3.5;
       
  2712     cZoomDelta      := 0.20;
       
  2713     cZoomDeltaSmall := 0.10;
       
  2714 {$ELSE}
       
  2715     cMaxZoomLevel   := 1.0;
       
  2716     cMinZoomLevel   := 3.0;
       
  2717     cZoomDelta      := 0.25;
       
  2718     cZoomDeltaSmall := 0.125;
       
  2719 {$ENDIF}
       
  2720 
  2635 {$IFDEF USE_VIDEO_RECORDING}
  2721 {$IFDEF USE_VIDEO_RECORDING}
  2636     RecPrefix          := '';
  2722     RecPrefix          := '';
  2637     cAVFormat          := '';
  2723     cAVFormat          := '';
  2638     cVideoCodec        := '';
  2724     cVideoCodec        := '';
  2639     cVideoFramerateNum := 0;
  2725     cVideoFramerateNum := 0;
  2658 
  2744 
  2659 procedure initModule;
  2745 procedure initModule;
  2660 var s: shortstring;
  2746 var s: shortstring;
  2661     i: integer;
  2747     i: integer;
  2662     t: TSound;
  2748     t: TSound;
       
  2749     a: TAmmoStrId;
  2663 begin
  2750 begin
  2664     // init LastVoice
  2751     // init LastVoice
  2665     LastVoice.snd:= sndNone;
  2752     LastVoice.snd:= sndNone;
  2666     LastVoice.voicepack:= nil;
  2753     LastVoice.voicepack:= nil;
  2667 
  2754 
  2670     Move(FontzInit, Fontz, sizeof(Fontz));
  2757     Move(FontzInit, Fontz, sizeof(Fontz));
  2671     Move(SpritesDataInit, SpritesData, sizeof(SpritesData));
  2758     Move(SpritesDataInit, SpritesData, sizeof(SpritesData));
  2672     Move(AmmozInit, Ammoz, sizeof(Ammoz));
  2759     Move(AmmozInit, Ammoz, sizeof(Ammoz));
  2673 
  2760 
  2674 
  2761 
  2675     cLocale:= cLocaleFName;
  2762     cLanguage:= cLanguageFName;
  2676     SplitByChar(cLocale, s, '.');
  2763     SplitByChar(cLanguage, s, '.');
  2677 
  2764 
  2678     cFlattenFlakes      := false;
  2765     cFlattenFlakes      := false;
  2679     cFlattenClouds      := false;
  2766     cFlattenClouds      := false;
  2680     cIce                := false;
  2767     cIce                := false;
  2681     cSnow               := false;
  2768     cSnow               := false;
  2721     WaterColorArray[5]:= WaterColorArray[1];
  2808     WaterColorArray[5]:= WaterColorArray[1];
  2722     WaterColorArray[7]:= WaterColorArray[1];
  2809     WaterColorArray[7]:= WaterColorArray[1];
  2723 
  2810 
  2724     WaterOpacity:= $80;
  2811     WaterOpacity:= $80;
  2725 
  2812 
       
  2813     // default clan colors
       
  2814     // always keep in sync with QTfrontend/hwconsts.h
       
  2815 
       
  2816     ClanColorArray[0] := $ffff0204;
       
  2817     ClanColorArray[1] := $ff4980c1;
       
  2818     ClanColorArray[2] := $ff1de6ba;
       
  2819     ClanColorArray[3] := $ffb541ef;
       
  2820     ClanColorArray[4] := $ffe55bb0;
       
  2821     ClanColorArray[5] := $ff20bf00;
       
  2822     ClanColorArray[6] := $fffe8b0e;
       
  2823     ClanColorArray[7] := $ff8f5902;
       
  2824     ClanColorArray[8] := $ffffff01;
       
  2825 
  2726     // default sudden death water
  2826     // default sudden death water
  2727 
  2827 
  2728     // deep water
  2828     // deep water
  2729     SDWaterColorArray[0].r := 150;
  2829     SDWaterColorArray[0].r := 150;
  2730     SDWaterColorArray[0].g := 112;
  2830     SDWaterColorArray[0].g := 112;
  2771     cLowGravity             := false;
  2871     cLowGravity             := false;
  2772     cBuildMaxDist           := cDefaultBuildMaxDist;
  2872     cBuildMaxDist           := cDefaultBuildMaxDist;
  2773     cDamageModifier         := _1;
  2873     cDamageModifier         := _1;
  2774     TargetPoint             := cTargetPointRef;
  2874     TargetPoint             := cTargetPointRef;
  2775 
  2875 
  2776 {$IFDEF MOBILE}
       
  2777     cMaxZoomLevel:= 0.5;
       
  2778     cMinZoomLevel:= 3.5;
       
  2779     cZoomDelta:= 0.20;
       
  2780 {$ELSE}
       
  2781     cMaxZoomLevel:= 1.0;
       
  2782     cMinZoomLevel:= 3.0;
       
  2783     cZoomDelta:= 0.25;
       
  2784     {$ENDIF}
       
  2785 
       
  2786     aVertex:= 0;
  2876     aVertex:= 0;
  2787     aTexCoord:= 1;
  2877     aTexCoord:= 1;
  2788     aColor:= 2;
  2878     aColor:= 2;
  2789 
  2879 
       
  2880     lDecimalSeparator       := '.';
       
  2881 
  2790 
  2882 
  2791     cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel;
  2883     cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel;
       
  2884 
       
  2885     cDemoClockFPSOffsetY := 0;
  2792 
  2886 
  2793     // int, longint longword and byte
  2887     // int, longint longword and byte
  2794     CursorMovementX     := 0;
  2888     CursorMovementX     := 0;
  2795     CursorMovementY     := 0;
  2889     CursorMovementY     := 0;
  2796     GameTicks           := 0;
  2890     GameTicks           := 0;
       
  2891     OuchTauntTimer      := 0;
  2797     CheckSum            := 0;
  2892     CheckSum            := 0;
  2798     cWaterLine          := LAND_HEIGHT;
  2893     cWaterLine          := LAND_HEIGHT;
  2799     cGearScrEdgesDist   := 240;
  2894     cGearScrEdgesDist   := 240;
  2800 
  2895 
  2801     InputMask           := $FFFFFFFF;
  2896     InputMask           := $FFFFFFFF;
  2807     IsGetAwayTime       := false;
  2902     IsGetAwayTime       := false;
  2808     GameOver            := false;
  2903     GameOver            := false;
  2809     TurnClockActive     := true;
  2904     TurnClockActive     := true;
  2810     TagTurnTimeLeft     := 0;
  2905     TagTurnTimeLeft     := 0;
  2811     cSuddenDTurns       := 15;
  2906     cSuddenDTurns       := 15;
       
  2907     LastSuddenDWarn     := -2;
       
  2908     cInitHealth         := 100;
  2812     cDamagePercent      := 100;
  2909     cDamagePercent      := 100;
  2813     cRopePercent        := 100;
  2910     cRopePercent        := 100;
       
  2911     cRopeNodeStep       := 4;
       
  2912     cRopeLayers         := 1;
  2814     cGetAwayTime        := 100;
  2913     cGetAwayTime        := 100;
  2815     cMineDudPercent     := 0;
  2914     cMineDudPercent     := 0;
  2816     cTemplateFilter     := 0;
  2915     cTemplateFilter     := 0;
  2817     cFeatureSize        := 50;
  2916     cFeatureSize        := 12;
  2818     cMapGen             := mgRandom;
  2917     cMapGen             := mgRandom;
  2819     cHedgehogTurnTime   := 45000;
  2918     cHedgehogTurnTime   := 45000;
  2820     cMinesTime          := 3000;
  2919     cMinesTime          := 3000;
  2821     cMaxAIThinkTime     := 9000;
  2920     cMaxAIThinkTime     := 9000;
  2822     cCloudsNumber       := 9;
  2921     cCloudsNumber       := 9;
  2829 
  2928 
  2830     InitStepsFlags  := 0;
  2929     InitStepsFlags  := 0;
  2831     RealTicks       := 0;
  2930     RealTicks       := 0;
  2832     AttackBar       := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon
  2931     AttackBar       := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon
  2833     cCaseFactor     := 5;  {0..9}
  2932     cCaseFactor     := 5;  {0..9}
       
  2933     cMaxCaseDrops   := 5;
  2834     cLandMines      := 4;
  2934     cLandMines      := 4;
  2835     cAirMines       := 0;
  2935     cAirMines       := 0;
  2836     cExplosives     := 2;
  2936     cExplosives     := 2;
  2837 
  2937 
  2838     GameState       := Low(TGameState);
  2938     GameState       := Low(TGameState);
  2852     cVampiric       := false;
  2952     cVampiric       := false;
  2853     flagMakeCapture := false;
  2953     flagMakeCapture := false;
  2854     flagDumpLand    := false;
  2954     flagDumpLand    := false;
  2855     bBetweenTurns   := false;
  2955     bBetweenTurns   := false;
  2856     bWaterRising    := false;
  2956     bWaterRising    := false;
       
  2957     bDuringWaterRise:= false;
  2857     isCursorVisible := false;
  2958     isCursorVisible := false;
  2858     isInLag         := false;
  2959     isInLag         := false;
  2859     isPaused        := false;
  2960     isPaused        := false;
  2860     isInMultiShoot  := false;
  2961     isInMultiShoot  := false;
  2861     isSpeed         := false;
  2962     isSpeed         := false;
  2862     isAFK           := false;
  2963     isAFK           := false;
       
  2964     isShowMission   := false;
       
  2965     isShowGearInfo  := false;
       
  2966     isForceMission  := false;
  2863     SpeedStart      := 0;
  2967     SpeedStart      := 0;
  2864     fastUntilLag    := false;
  2968     fastUntilLag    := false;
  2865     fastScrolling   := false;
  2969     fastScrolling   := false;
  2866     autoCameraOn    := true;
  2970     autoCameraOn    := true;
  2867     cSeed           := '';
  2971     cSeed           := '';
       
  2972     cIsSoundEnabled := false;
  2868     cVolumeDelta    := 0;
  2973     cVolumeDelta    := 0;
       
  2974     cVolumeUpKey    := false;
       
  2975     cVolumeDownKey  := false;
  2869     cMuteToggle     := false;
  2976     cMuteToggle     := false;
  2870     cHasFocus       := true;
  2977     cHasFocus       := true;
  2871     cInactDelay     := 100;
  2978     cInactDelay     := 100;
  2872     ReadyTimeLeft   := 0;
  2979     ReadyTimeLeft   := 0;
  2873 
  2980 
  2927     LuaTemplateNumber:= 0;
  3034     LuaTemplateNumber:= 0;
  2928 
  3035 
  2929     LuaEndTurnRequested:= false;
  3036     LuaEndTurnRequested:= false;
  2930     LuaNoEndTurnTaunts:= false;
  3037     LuaNoEndTurnTaunts:= false;
  2931 
  3038 
       
  3039     LuaCmdUsed:= false;
       
  3040 
  2932     for t:= Low(TSound) to High(TSound) do
  3041     for t:= Low(TSound) to High(TSound) do
  2933         MaskedSounds[t]:= false;
  3042         MaskedSounds[t]:= false;
       
  3043 
       
  3044     for a:= Low(TAmmoStrId) to High(TAmmoStrId) do
       
  3045         trluaammoe[a]:= true;
  2934 
  3046 
  2935     UIDisplay:= uiAll;
  3047     UIDisplay:= uiAll;
  2936     LocalMessage:= 0;
  3048     LocalMessage:= 0;
  2937 
  3049 
  2938     cStereoDepth:= 0;
  3050     cStereoDepth:= 0;
  2944     CurAmmoGear:= nil;
  3056     CurAmmoGear:= nil;
  2945     lastGearByUID:= nil;
  3057     lastGearByUID:= nil;
  2946     GearsList:= nil;
  3058     GearsList:= nil;
  2947     CurrentTeam:= nil;
  3059     CurrentTeam:= nil;
  2948     PreviousTeam:= nil;
  3060     PreviousTeam:= nil;
       
  3061     MissionTeam:= nil;
  2949     CurrentHedgehog:= nil;
  3062     CurrentHedgehog:= nil;
  2950     FollowGear:= nil;
  3063     FollowGear:= nil;
  2951     lastVisualGearByUID:= nil;
  3064     lastVisualGearByUID:= nil;
  2952 
  3065 
  2953     ChefHatTexture:= nil;
  3066     ChefHatTexture:= nil;