diff -r 0135e64c6c66 -r c4fd2813b127 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Wed May 16 18:22:28 2018 +0200 +++ b/hedgewars/uVariables.pas Wed Jul 31 23:14:27 2019 +0200 @@ -41,8 +41,8 @@ ipcPort : Word; AprilOne : boolean; cFullScreen : boolean; - cLocaleFName : shortstring; - cLocale : shortstring; + cLanguageFName : shortstring; + cLanguage : shortstring; cTimerInterval : LongInt; PathPrefix : ansistring; UserPathPrefix : ansistring; @@ -55,6 +55,7 @@ cAltDamage : boolean; cReducedQuality : LongWord; + cHolidaySilliness : boolean; UserNick : shortstring; recordFileName : shortstring; cReadyDelay : Longword; @@ -78,6 +79,9 @@ isInMultiShoot : boolean; isSpeed : boolean; isAFK : boolean; + isShowMission : boolean; + isShowGearInfo : boolean; + isForceMission : boolean; SpeedStart : LongWord; fastUntilLag : boolean; @@ -86,7 +90,9 @@ CheckSum : LongWord; CampaignVariable: shortstring; + MissionVariable : shortstring; GameTicks : LongWord; + OuchTauntTimer : LongWord; // Timer which blocks sndOuch from being played too often and fast GameState : TGameState; GameType : TGameType; InputMask : LongWord; @@ -101,12 +107,17 @@ IsGetAwayTime : boolean; GameOver : boolean; cSuddenDTurns : LongInt; + LastSuddenDWarn : LongInt; // last round in which the last SD warning appeared. -2 = no warning so far + cInitHealth : LongInt; // initial hedgehog health (from game scheme. note the real hog health is sent directly + // from frontend, this is only used to inform Lua scripts) cDamagePercent : LongInt; cMineDudPercent : LongWord; cTemplateFilter : LongInt; cFeatureSize : LongInt; cMapGen : TMapGen; cRopePercent : LongWord; + cRopeNodeStep : LongWord; + cRopeLayers : LongInt; cGetAwayTime : LongWord; cAdvancedMapGenMode: boolean; @@ -125,8 +136,9 @@ cTagsMask : byte; cPrevTagsMask : byte; - zoom : GLfloat; - ZoomValue : GLfloat; + zoom : GLfloat; // current zoom + ZoomValue : GLfloat; // aimed zoom + UserZoom : GLfloat; // user-chosen initial and default zoom ChatScaleValue : real; cDefaultChatScale: real; UIScaleValue : real; @@ -162,6 +174,8 @@ cScreenSpace : Longword; cCaseFactor : Longword; + cMaxCaseDrops : Longword; // Max. number of crates which can be in the game when dropping + cLandMines : Longword; cAirMines : Longword; cExplosives : Longword; @@ -169,16 +183,21 @@ cScriptName : shortstring; cScriptParam : shortstring; cSeed : shortstring; + cIsSoundEnabled : boolean; // If the sound system is enabled cVolumeDelta : LongInt; + cVolumeUpKey : boolean; + cVolumeDownKey : boolean; cMuteToggle : boolean; // Mute toggle requested cHasFocus : boolean; cInactDelay : Longword; bBetweenTurns : boolean; bWaterRising : boolean; + bDuringWaterRise: boolean; CrosshairX : LongInt; CrosshairY : LongInt; + CrosshairGear : PGear; CursorMovementX : LongInt; CursorMovementY : LongInt; cWaveHeight : LongInt; @@ -203,7 +222,9 @@ cMaxZoomLevel : real; cMinZoomLevel : real; cZoomDelta : real; + cZoomDeltaSmall : real; cMinMaxZoomLevelDelta : real; + cDemoClockFPSOffsetY : LongInt; flagMakeCapture : boolean; @@ -215,9 +236,11 @@ WaterColorArray : array[0..7] of HwColor4f; SDWaterColorArray : array[0..7] of HwColor4f; + ClanColorArray : array[0..Pred(cClanColors)] of Longword; TargetCursorPoint : TPoint; CursorPoint : TPoint; + CursorPointDelta : TPoint; TargetPoint : TPoint; ScreenFade : TScreenFade; @@ -259,6 +282,12 @@ LuaEndTurnRequested: boolean; LuaNoEndTurnTaunts: boolean; + // whether Lua requested to pause the clock + LuaClockPaused: boolean; + + // whether /lua command was used + LuaCmdUsed: boolean; + MaskedSounds : array[TSound] of boolean; LastVoice : TVoice; @@ -274,10 +303,12 @@ //Buttons {$IFDEF USE_TOUCH_INTERFACE} buttonScale: GLFloat; + bounceButtonPressed: boolean; arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget; firebutton, jumpWidget, AMWidget : TOnScreenWidget; pauseButton, utilityWidget : TOnScreenWidget; + utilityWidget2 : TOnScreenWidget; {$ENDIF} @@ -291,7 +322,7 @@ '//', // ptData '/Graphics', // ptGraphics '/Themes', // ptThemes - '/Themes/Bamboo', // ptCurrTheme + '/Themes/Nature', // ptCurrTheme '/Config', // ptConfig '/Config/Teams', // ptTeams '/Maps', // ptMaps @@ -310,7 +341,9 @@ '/Missions/Maps', // ptMissionMaps '/Graphics/SuddenDeath', // ptSuddenDeath '/Graphics/Buttons', // ptButton - '/Shaders' // ptShaders + '/Shaders', // ptShaders + '/Sounds/voices/Default', // ptDefaultVoice + '/misc' // ptMisc ); var @@ -451,8 +484,8 @@ Width: 48; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprParachute (FileName: 'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTarget - (FileName: 'RopeNode'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 6; Height: 6; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprRopeNode + (FileName: 'RopeNode'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil; + Width: 16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprRopeNode (FileName: 'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpLowest; getDimensions: false; getImageDimensions: true),// sprQuestion (FileName: 'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; @@ -486,6 +519,8 @@ Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton + (FileName: 'bouncebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBounceButton {$ENDIF} (FileName: 'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil; Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake @@ -743,7 +778,7 @@ (FileName: 'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 22; Height: 15; imageWidth: 22; imageHeight: 15; saveSurf: true; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBotlevels (FileName: 'amCleaver'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 64; Height: 64; imageWidth: 64; imageHeight: 64; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: false),// sprHandKnife + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHandKnife (FileName: 'cleaver'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 64; Height: 64; imageWidth: 64; imageHeight: 128; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprKnife (FileName: 'star'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; @@ -774,6 +809,8 @@ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom7 (FileName: 'custom8'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil; Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: true; critical: true; checkSum: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom8 + (FileName: 'FrozenAirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 32; imageHeight: 32; saveSurf: true; critical: true; checkSum: true; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprFrozenAirMine (FileName: 'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine (FileName: 'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; @@ -786,14 +823,51 @@ Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprCloudL (FileName: 'SDCloudsL'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil; Width: 256; Height:128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: false; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true),// sprSDCloudL + // TODO: Rename creeper image (FileName: 'Duck'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprDuck + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprCreeper + // TODO: Rename creeper hand image (FileName: 'amDuck'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandDuck + Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandCreeper (FileName: 'amMinigun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprMinigun + Width: 64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprMinigun + (FileName: 'sliderInverted'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSliderInverted + (FileName: 'FingerBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprFingerBack + (FileName: 'FingerBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFingerBackInv + (FileName: 'TargetpBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBack + (FileName: 'TargetpBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBackInv + (FileName: 'HealthHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHealthHud + (FileName: 'HealthPoisonHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHealthPoisonHud + (FileName: 'VampHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 24; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprVampHUD + (FileName: 'KarmaHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprKarmaHUD + (FileName: 'MedicHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicHud + (FileName: 'MedicPoisonHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprMedicPoisonHud + (FileName: 'HaloHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 22; Height: 11; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprHaloHUD + (FileName: 'InvulnHUD'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 18; Height: 18; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprInvulnHUD + (FileName: 'amPiano'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 42; Height: 42; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAmPiano + (FileName: 'amLandGun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandLandGun + (FileName: 'amShoryuken'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFirePunch + (FileName: 'throughWrap'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 16; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprTroughWrap ); + const Wavez: array [TWave] of record Sprite: TSprite; @@ -827,9 +901,11 @@ PosSprite: TSprite; ejectX, ejectY: Longint; end; + TAmmoCounts = array[TAmmoType] of Longword; var Ammoz: array [TAmmoType] of TAmmozRec; + InitialAmmoCounts: TAmmoCounts; const AmmozInit: array [TAmmoType] of TAmmozRec = ( @@ -844,14 +920,14 @@ Pos: 0; AmmoType: amNothing; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: cHiddenSlotIndex; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; - SkipTurns: 9999; - PosCount: 1; + SkipTurns: 0; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -872,14 +948,14 @@ Pos: 0; AmmoType: amGrenade; AttackVoice: sndCover; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -900,14 +976,14 @@ Pos: 0; AmmoType: amClusterBomb; AttackVoice: sndCover; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -925,15 +1001,15 @@ Timer: 0; Pos: 0; AmmoType: amBazooka; - AttackVoice: sndNone; - Bounciness: 1000); + AttackVoice: sndFire; + Bounciness: defaultBounciness); Slot: 0; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -6), @@ -946,15 +1022,17 @@ Ammo: (Propz: ammoprop_Power or ammoprop_NeedTarget or ammoprop_NoTargetAfter or + ammoprop_NoWrapTarget or ammoprop_DontHold or + ammoprop_AltUse or ammoprop_NeedUpDown; Count: 2; NumPerTurn: 0; Timer: 0; Pos: 0; AmmoType: amBee; - AttackVoice: sndNone; - Bounciness: 1000); + AttackVoice: sndFire; + Bounciness: defaultBounciness); Slot: 0; TimeAfterTurn: 3000; minAngle: 0; @@ -980,14 +1058,14 @@ Pos: 0; AmmoType: amShotgun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //26; ejectY: -6), @@ -1008,14 +1086,14 @@ Pos: 0; AmmoType: amPickHammer; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 6; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1035,14 +1113,14 @@ Pos: 0; AmmoType: amSkip; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 9; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1065,14 +1143,14 @@ Pos: 0; AmmoType: amRope; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 0; minAngle: 0; maxAngle: cMaxAngle div 2; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1093,14 +1171,14 @@ Pos: 0; AmmoType: amMine; AttackVoice: sndLaugh; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 5000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1117,14 +1195,14 @@ Pos: 0; AmmoType: amDEagle; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //23; ejectY: -6), @@ -1144,14 +1222,14 @@ Pos: 0; AmmoType: amDynamite; AttackVoice: sndLaugh; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 5000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1170,14 +1248,14 @@ Pos: 0; AmmoType: amFirePunch; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1194,14 +1272,14 @@ Pos: 0; AmmoType: amWhip; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1219,14 +1297,14 @@ Pos: 0; AmmoType: amBaseballBat; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 5000; minAngle: 0; maxAngle: cMaxAngle div 2; isDamaging: true; SkipTurns: 2; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1243,6 +1321,7 @@ ammoprop_DontHold or ammoprop_Utility or ammoprop_AltAttack or + ammoprop_ShowSelIcon or ammoprop_NeedUpDown; Count: 2; NumPerTurn: 0; @@ -1250,14 +1329,14 @@ Pos: 0; AmmoType: amParachute; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1277,8 +1356,8 @@ Timer: 0; Pos: 0; AmmoType: amAirAttack; - AttackVoice: sndIncoming; - Bounciness: 1000); + AttackVoice: sndNone; // handled in doStepAirAttack + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 0; minAngle: 0; @@ -1305,8 +1384,8 @@ Timer: 0; Pos: 0; AmmoType: amMineStrike; - AttackVoice: sndIncoming; - Bounciness: 1000); + AttackVoice: sndNone; // handled in doStepAirAttack + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 0; minAngle: 0; @@ -1332,14 +1411,14 @@ Pos: 0; AmmoType: amBlowTorch; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 6; TimeAfterTurn: 3000; minAngle: 804; maxAngle: 1327; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1360,7 +1439,7 @@ Pos: 0; AmmoType: amGirder; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 6; TimeAfterTurn: 3000; minAngle: 0; @@ -1381,6 +1460,7 @@ ammoprop_NoCrosshair or ammoprop_NeedTarget or ammoprop_AttackingPut or + ammoprop_AttackInMove or ammoprop_Utility or ammoprop_DontHold; Count: 2; @@ -1389,7 +1469,7 @@ Pos: 0; AmmoType: amTeleport; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 0; minAngle: 0; @@ -1410,6 +1490,7 @@ ammoprop_ForwMsgs or ammoprop_NoCrosshair or ammoprop_Utility or + ammoprop_ShowSelIcon or ammoprop_DontHold; Count: 3; NumPerTurn: 0; @@ -1417,14 +1498,14 @@ Pos: 0; AmmoType: amSwitch; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 9; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1441,14 +1522,14 @@ Pos: 0; AmmoType: amMortar; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 0; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -6), @@ -1469,14 +1550,14 @@ Pos: 0; AmmoType: amKamikaze; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1496,14 +1577,14 @@ Pos: 0; AmmoType: amCake; AttackVoice: sndLaugh; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 4; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1522,14 +1603,14 @@ Pos: 0; AmmoType: amSeduction; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1549,14 +1630,14 @@ Pos: 0; AmmoType: amWatermelon; AttackVoice: sndMelon; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1574,15 +1655,15 @@ Timer: 5000; Pos: 0; AmmoType: amHellishBomb; - AttackVoice: sndNone; - Bounciness: 1000); + AttackVoice: sndWatchThis; + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1602,8 +1683,8 @@ Timer: 0; Pos: 0; AmmoType: amNapalm; - AttackVoice: sndIncoming; - Bounciness: 1000); + AttackVoice: sndNone; // handled in doStepAirAttack + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 0; minAngle: 0; @@ -1628,15 +1709,15 @@ Timer: 0; Pos: 0; AmmoType: amDrill; - AttackVoice: sndNone; - Bounciness: 1000); + AttackVoice: sndFire; + Bounciness: defaultBounciness); Slot: 0; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprDrill; ejectX: 0; //20; ejectY: -6), @@ -1655,14 +1736,14 @@ Pos: 0; AmmoType: amBallgun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -3), @@ -1682,14 +1763,14 @@ Pos: 0; AmmoType: amRCPlane; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 4; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1703,6 +1784,7 @@ ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_AltUse or + ammoprop_ShowSelIcon or ammoprop_Utility or ammoprop_Effect; Count: 1; @@ -1711,14 +1793,14 @@ Pos: 0; AmmoType: amLowGravity; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 9; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1732,6 +1814,7 @@ ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_AltUse or + ammoprop_ShowSelIcon or ammoprop_Utility or ammoprop_Effect; Count: 1; @@ -1740,14 +1823,14 @@ Pos: 0; AmmoType: amExtraDamage; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 9; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1761,6 +1844,7 @@ ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_AltUse or + ammoprop_ShowSelIcon or ammoprop_Utility or ammoprop_Effect; Count: 1; @@ -1769,14 +1853,14 @@ Pos: 0; AmmoType: amInvulnerable; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 8; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1790,6 +1874,7 @@ ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_AltUse or + ammoprop_ShowSelIcon or ammoprop_Utility or ammoprop_Effect; Count: 1; @@ -1798,14 +1883,14 @@ Pos: 0; AmmoType: amExtraTime; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 9; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1819,6 +1904,7 @@ ammoprop_NoCrosshair or ammoprop_DontHold or ammoprop_AltUse or + ammoprop_ShowSelIcon or ammoprop_Utility or ammoprop_NeedUpDown or ammoprop_Effect; @@ -1828,14 +1914,14 @@ Pos: 0; AmmoType: amLaserSight; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 8; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1857,14 +1943,14 @@ Pos: 0; AmmoType: amVampiric; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 8; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1884,14 +1970,14 @@ Pos: 0; AmmoType: amSniperRifle; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //40; ejectY: -5), @@ -1907,6 +1993,7 @@ ammoprop_DontHold or ammoprop_Utility or ammoprop_NeedUpDown or + ammoprop_ShowSelIcon or ammoprop_AltAttack; Count: 1; NumPerTurn: 0; @@ -1914,14 +2001,14 @@ Pos: 0; AmmoType: amJetpack; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1939,15 +2026,15 @@ Timer: 3000; Pos: 0; AmmoType: amMolotov; - AttackVoice: sndNone; - Bounciness: 1000); + AttackVoice: sndWatchThis; + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1960,6 +2047,7 @@ Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_NoCrosshair or ammoprop_NeedUpDown or + ammoprop_ShowSelIcon or ammoprop_DontHold; Count: 1; NumPerTurn: 0; @@ -1967,14 +2055,14 @@ Pos: 0; AmmoType: amBirdy; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -1995,14 +2083,14 @@ Pos: 0; AmmoType: amPortalGun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 7; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: -5; //29; ejectY: -7), @@ -2014,7 +2102,7 @@ NumberInCase: 1; Ammo: (Propz: ammoprop_NoCrosshair or ammoprop_NeedTarget or - ammoprop_NoTargetAfter or + // NoTargetAfter is handled manually in doStepPiano ammoprop_AttackingPut or ammoprop_DontHold or ammoprop_NotBorder or @@ -2024,8 +2112,8 @@ Timer: 0; Pos: 0; AmmoType: amPiano; - AttackVoice: sndIncoming; - Bounciness: 1000); + AttackVoice: sndNone; // handled in doStepPiano + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 0; minAngle: 0; @@ -2033,7 +2121,7 @@ isDamaging: true; SkipTurns: 7; PosCount: 1; - PosSprite: sprWater; + PosSprite: sprAmPiano; ejectX: 0; ejectY: 0), @@ -2053,14 +2141,14 @@ Pos: 0; AmmoType: amGasBomb; AttackVoice: sndCover; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 1; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2078,14 +2166,14 @@ Pos: 0; AmmoType: amSineGun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2104,14 +2192,14 @@ Pos: 0; AmmoType: amFlamethrower; AttackVoice: sndNone; - Bounciness: 1000); - Slot: 2; + Bounciness: defaultBounciness); + Slot: 6; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -3), @@ -2130,14 +2218,14 @@ Pos: 0; AmmoType: amSMine; AttackVoice: sndLaugh; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 4; TimeAfterTurn: 5000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2154,14 +2242,14 @@ Pos: 0; AmmoType: amHammer; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 3; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2173,21 +2261,22 @@ NumberInCase: 1; Ammo: (Propz: ammoprop_NoCrosshair or ammoprop_Utility or - ammoprop_NoRoundEnd; + ammoprop_NoRoundEnd or + ammoprop_DoesntStopTimerWhileAttacking; Count: 1; NumPerTurn: 0; Timer: 0; Pos: 0; AmmoType: amResurrector; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 8; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2208,8 +2297,8 @@ Timer: 5000; Pos: 0; AmmoType: amDrillStrike; - AttackVoice: sndIncoming; - Bounciness: 1000); + AttackVoice: sndNone; // handled in doStepAirAttack + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 0; minAngle: 0; @@ -2236,14 +2325,14 @@ Pos: 0; AmmoType: amSnowball; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 0; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2256,6 +2345,7 @@ Ammo: (Propz: ammoprop_ForwMsgs or ammoprop_NoCrosshair or ammoprop_Utility or + ammoprop_ShowSelIcon or ammoprop_DontHold or ammoprop_ForceTurnEnd; Count: 2; @@ -2264,7 +2354,7 @@ Pos: 0; AmmoType: amTardis; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 8; TimeAfterTurn: 0; minAngle: 0; @@ -2276,35 +2366,6 @@ ejectX: 0; ejectY: 0), -// Structure -{ - (NameId: sidStructure; - NameTex: nil; - Probability: 0; - NumberInCase: 1; - Ammo: (Propz: ammoprop_ForwMsgs or - ammoprop_NoCrosshair or - ammoprop_Utility or - ammoprop_DontHold; - Count: 1; - NumPerTurn: 0; - Timer: 0; - Pos: 0; - AmmoType: amStructure; - AttackVoice: sndNone; - Bounciness: 1000); - Slot: 6; - TimeAfterTurn: 0; - minAngle: 0; - maxAngle: 0; - isDamaging: false; - SkipTurns: 0; - PosCount: 1; - PosSprite: sprWater; - ejectX: 0; - ejectY: 0), -} - // Land Gun (NameId: sidLandGun; NameTex: nil; @@ -2319,14 +2380,14 @@ Pos: 0; AmmoType: amLandGun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 6; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -3), @@ -2344,14 +2405,14 @@ Pos: 0; AmmoType: amIceGun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 0; minAngle: 0; maxAngle: 0; isDamaging: false; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //20; ejectY: -3), @@ -2368,15 +2429,15 @@ Timer: 0; Pos: 0; AmmoType: amKnife; - AttackVoice: sndNone; - Bounciness: 1000); - Slot: 6; + AttackVoice: sndWatchThis; + Bounciness: defaultBounciness); + Slot: 0; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), @@ -2396,7 +2457,7 @@ Pos: 0; AmmoType: amRubber; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 6; TimeAfterTurn: 3000; minAngle: 0; @@ -2421,19 +2482,19 @@ Pos: 0; AmmoType: amAirMine; AttackVoice: sndLaugh; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 5; TimeAfterTurn: 5000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; ejectY: 0), -// Rubber duck - (NameId: sidDuck; +// Creeper + (NameId: sidCreeper; NameTex: nil; Probability: 100; NumberInCase: 1; @@ -2445,16 +2506,18 @@ NumPerTurn: 0; Timer: 15000; Pos: 0; - AmmoType: amDuck; + AmmoType: amCreeper; AttackVoice: sndNone; - Bounciness: 1000); - Slot: 0; + Bounciness: defaultBounciness); + // Slot chosen to prevent ammo column overflow + // TODO: Change slot when creeper is finished + Slot: 8; TimeAfterTurn: 3000; minAngle: 0; maxAngle: 0; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 15; ejectY: -7), @@ -2470,14 +2533,14 @@ Pos: 0; AmmoType: amMinigun; AttackVoice: sndNone; - Bounciness: 1000); + Bounciness: defaultBounciness); Slot: 2; TimeAfterTurn: 3000; minAngle: cMaxAngle div 6; maxAngle: 5 * cMaxAngle div 6; isDamaging: true; SkipTurns: 0; - PosCount: 1; + PosCount: 0; PosSprite: sprWater; ejectX: 0; //23; ejectY: 0) //-6; @@ -2489,7 +2552,8 @@ LandDirty: TDirtyTag; hasBorder: boolean; hasGirders: boolean; - 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. + 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. + MaxHedgehogs: LongWord; LandBackSurface: PSDL_Surface; CurAmmoGear: PGear; lastGearByUID: PGear; @@ -2503,18 +2567,19 @@ SpeechType: Longword; SpeechText: shortstring; PlacingHogs: boolean; // a convenience flag to indicate placement of hogs is still in progress + PlacingKings: boolean; // a convenience flag to indicate placement of kings in King Mode is still in progress StepSoundTimer: LongInt; StepSoundChannel: LongInt; CurrentTeam: PTeam; PreviousTeam: PTeam; + MissionTeam: PTeam; CurrentHedgehog: PHedgehog; TeamsArray: array[0..Pred(cMaxTeams)] of PTeam; TeamsCount: Longword; // number of teams on game start VisibleTeamsCount: Longword; // number of teams visible in team bar ClansArray, SpawnClansArray: TClansArray; ClansCount: Longword; - LocalClan: LongInt; // last non-bot, non-extdriven clan LocalTeam: LongInt; // last non-bot, non-extdriven clan first team LocalAmmo: LongInt; // last non-bot, non-extdriven clan's first team's ammo index, updated to next upcoming hog for per-hog-ammo CurMinAngle, CurMaxAngle: Longword; @@ -2584,6 +2649,8 @@ aTexCoord: GLint; aColor: GLint; + lDecimalSeparator: Char; + var trammo: array[TAmmoStrId] of ansistring; // name of the weapon trammoc: array[TAmmoStrId] of ansistring; // caption of the weapon trammod: array[TAmmoStrId] of ansistring; // description of the weapon @@ -2591,8 +2658,10 @@ trluaammoc: array[TAmmoStrId] of ansistring; // caption of the weapon (Lua overwrite) trluaammod: array[TAmmoStrId] of ansistring; // description of the weapon (Lua overwrite) trluaammoa: array[TAmmoStrId] of ansistring; // description appendix of the weapon (Lua only) + trluaammoe: array[TAmmoStrId] of boolean; // whether to render extra text (Lua overwrite) trmsg: array[TMsgStrId] of ansistring; // message of the event trgoal: array[TGoalStrId] of ansistring; // message of the goal + trcmd: array[TCmdHelpStrId] of ansistring; // chat command help cTestLua : Boolean; procedure preInitModule; @@ -2614,9 +2683,10 @@ cShowFPS := false; cAltDamage := false; + cHolidaySilliness := true; cTimerInterval := 8; cReducedQuality := rqNone; - cLocaleFName := 'en.txt'; + cLanguageFName := 'en.txt'; cFullScreen := false; UserPathPrefix := ''; @@ -2632,6 +2702,22 @@ cScriptParam := ''; cTestLua := False; + UserZoom := cDefaultZoomLevel; + zoom := cDefaultZoomLevel; + ZoomValue := cDefaultZoomLevel; + +{$IFDEF MOBILE} + cMaxZoomLevel := 0.5; + cMinZoomLevel := 3.5; + cZoomDelta := 0.20; + cZoomDeltaSmall := 0.10; +{$ELSE} + cMaxZoomLevel := 1.0; + cMinZoomLevel := 3.0; + cZoomDelta := 0.25; + cZoomDeltaSmall := 0.125; +{$ENDIF} + {$IFDEF USE_VIDEO_RECORDING} RecPrefix := ''; cAVFormat := ''; @@ -2660,6 +2746,7 @@ var s: shortstring; i: integer; t: TSound; + a: TAmmoStrId; begin // init LastVoice LastVoice.snd:= sndNone; @@ -2672,8 +2759,8 @@ Move(AmmozInit, Ammoz, sizeof(Ammoz)); - cLocale:= cLocaleFName; - SplitByChar(cLocale, s, '.'); + cLanguage:= cLanguageFName; + SplitByChar(cLanguage, s, '.'); cFlattenFlakes := false; cFlattenClouds := false; @@ -2723,6 +2810,19 @@ WaterOpacity:= $80; + // default clan colors + // always keep in sync with QTfrontend/hwconsts.h + + ClanColorArray[0] := $ffff0204; + ClanColorArray[1] := $ff4980c1; + ClanColorArray[2] := $ff1de6ba; + ClanColorArray[3] := $ffb541ef; + ClanColorArray[4] := $ffe55bb0; + ClanColorArray[5] := $ff20bf00; + ClanColorArray[6] := $fffe8b0e; + ClanColorArray[7] := $ff8f5902; + ClanColorArray[8] := $ffffff01; + // default sudden death water // deep water @@ -2773,27 +2873,22 @@ cDamageModifier := _1; TargetPoint := cTargetPointRef; -{$IFDEF MOBILE} - cMaxZoomLevel:= 0.5; - cMinZoomLevel:= 3.5; - cZoomDelta:= 0.20; -{$ELSE} - cMaxZoomLevel:= 1.0; - cMinZoomLevel:= 3.0; - cZoomDelta:= 0.25; - {$ENDIF} - aVertex:= 0; aTexCoord:= 1; aColor:= 2; + lDecimalSeparator := '.'; + cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel; + cDemoClockFPSOffsetY := 0; + // int, longint longword and byte CursorMovementX := 0; CursorMovementY := 0; GameTicks := 0; + OuchTauntTimer := 0; CheckSum := 0; cWaterLine := LAND_HEIGHT; cGearScrEdgesDist := 240; @@ -2809,12 +2904,16 @@ TurnClockActive := true; TagTurnTimeLeft := 0; cSuddenDTurns := 15; + LastSuddenDWarn := -2; + cInitHealth := 100; cDamagePercent := 100; cRopePercent := 100; + cRopeNodeStep := 4; + cRopeLayers := 1; cGetAwayTime := 100; cMineDudPercent := 0; cTemplateFilter := 0; - cFeatureSize := 50; + cFeatureSize := 12; cMapGen := mgRandom; cHedgehogTurnTime := 45000; cMinesTime := 3000; @@ -2831,6 +2930,7 @@ RealTicks := 0; AttackBar := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon cCaseFactor := 5; {0..9} + cMaxCaseDrops := 5; cLandMines := 4; cAirMines := 0; cExplosives := 2; @@ -2854,18 +2954,25 @@ flagDumpLand := false; bBetweenTurns := false; bWaterRising := false; + bDuringWaterRise:= false; isCursorVisible := false; isInLag := false; isPaused := false; isInMultiShoot := false; isSpeed := false; isAFK := false; + isShowMission := false; + isShowGearInfo := false; + isForceMission := false; SpeedStart := 0; fastUntilLag := false; fastScrolling := false; autoCameraOn := true; cSeed := ''; + cIsSoundEnabled := false; cVolumeDelta := 0; + cVolumeUpKey := false; + cVolumeDownKey := false; cMuteToggle := false; cHasFocus := true; cInactDelay := 100; @@ -2929,9 +3036,14 @@ LuaEndTurnRequested:= false; LuaNoEndTurnTaunts:= false; + LuaCmdUsed:= false; + for t:= Low(TSound) to High(TSound) do MaskedSounds[t]:= false; + for a:= Low(TAmmoStrId) to High(TAmmoStrId) do + trluaammoe[a]:= true; + UIDisplay:= uiAll; LocalMessage:= 0; @@ -2946,6 +3058,7 @@ GearsList:= nil; CurrentTeam:= nil; PreviousTeam:= nil; + MissionTeam:= nil; CurrentHedgehog:= nil; FollowGear:= nil; lastVisualGearByUID:= nil;