--- a/hedgewars/uVariables.pas Tue Nov 10 18:16:35 2015 +0100
+++ b/hedgewars/uVariables.pas Tue Nov 10 20:43:13 2015 +0100
@@ -1,6 +1,6 @@
(*
* Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*)
{$INCLUDE "options.inc"}
@@ -21,7 +21,7 @@
unit uVariables;
interface
-uses SDLh, uTypes, uFloat, GLunit, uConsts, Math;
+uses SDLh, uTypes, uFloat, GLunit, uConsts, Math, uUtils{$IFDEF GL2}, uMatrix{$ENDIF};
var
/////// init flags ///////
@@ -37,12 +37,13 @@
cNewScreenHeight : LongInt;
cScreenResizeDelay : LongWord;
ipcPort : Word;
+ AprilOne : boolean;
cFullScreen : boolean;
cLocaleFName : shortstring;
cLocale : shortstring;
cTimerInterval : LongInt;
- PathPrefix : shortstring;
- UserPathPrefix : shortstring;
+ PathPrefix : ansistring;
+ UserPathPrefix : ansistring;
cShowFPS : boolean;
cFlattenFlakes : boolean;
cFlattenClouds : boolean;
@@ -97,10 +98,13 @@
cDamagePercent : LongInt;
cMineDudPercent : LongWord;
cTemplateFilter : LongInt;
- cMapGen : LongInt;
+ cFeatureSize : LongInt;
+ cMapGen : TMapGen;
cRopePercent : LongWord;
cGetAwayTime : LongWord;
+ cAdvancedMapGenMode: boolean;
+
cHedgehogTurnTime: Longword;
cMinesTime : LongInt;
cMaxAIThinkTime : Longword;
@@ -122,7 +126,11 @@
isAudioMuted : boolean;
// originally typed consts
- ExplosionBorderColor: LongWord;
+ ExplosionBorderColorR,
+ ExplosionBorderColorG,
+ ExplosionBorderColorB,
+ ExplosionBorderColorNoA,
+ ExplosionBorderColor: LongWord;
IceColor : LongWord;
IceEdgeColor : LongWord;
WaterOpacity: byte;
@@ -135,6 +143,7 @@
LAND_WIDTH_MASK : LongWord;
LAND_HEIGHT_MASK : LongWord;
+ ChefHatTexture : PTexture;
CrosshairTexture : PTexture;
GenericHealthTexture : PTexture;
@@ -144,9 +153,11 @@
cCaseFactor : Longword;
cLandMines : Longword;
+ cAirMines : Longword;
cExplosives : Longword;
cScriptName : shortstring;
+ cScriptParam : shortstring;
cSeed : shortstring;
cVolumeDelta : LongInt;
cHasFocus : boolean;
@@ -159,6 +170,7 @@
CrosshairY : LongInt;
CursorMovementX : LongInt;
CursorMovementY : LongInt;
+ cWaveHeight : LongInt;
cDrownSpeed : hwFloat;
cDrownSpeedf : real;
cMaxWindSpeed : hwFloat;
@@ -167,13 +179,14 @@
cElastic : hwFloat;
cGravity : hwFloat;
cGravityf : real;
+ cBuildMaxDist : LongInt;
cDamageModifier : hwFloat;
cLaserSighting : boolean;
cVampiric : boolean;
cArtillery : boolean;
WeaponTooltipTex: PTexture;
AmmoMenuInvalidated: boolean;
- AmmoRect : TSDL_Rect;
+ AmmoRect : TSDL_Rect;
HHTexture : PTexture;
cMaxZoomLevel : real;
cMinZoomLevel : real;
@@ -182,13 +195,14 @@
flagMakeCapture : boolean;
+ flagDumpLand : boolean;
InitStepsFlags : Longword;
RealTicks : Longword;
AttackBar : LongInt;
- WaterColorArray : array[0..3] of HwColor4f;
- SDWaterColorArray : array[0..3] of HwColor4f;
+ WaterColorArray : array[0..7] of HwColor4f;
+ SDWaterColorArray : array[0..7] of HwColor4f;
SDTint : LongInt;
TargetCursorPoint : TPoint;
@@ -208,16 +222,30 @@
WorldDx: LongInt;
WorldDy: LongInt;
+ SpeechHogNumber: LongInt;
+
+ // for tracking the limits of the visible grid based on cScaleFactor
+ ViewLeftX, ViewRightX, ViewBottomY, ViewTopY, ViewWidth, ViewHeight: LongInt;
+
+ // for debugging the view limits visually
+ cViewLimitsDebug: boolean;
+
+ dirtyLandTexCount: LongInt;
+
hiTicks: Word;
LuaGoals : shortstring;
LuaTemplateNumber : LongWord;
- LastVoice : TVoice = ( snd: sndNone; voicepack: nil );
+ LastVoice : TVoice;
mobileRecord: TMobileRecord;
+ MaxTextureSize: LongInt;
+
+ ChatPasteBuffer: shortstring;
+
/////////////////////////////////////
//Buttons
{$IFDEF USE_TOUCH_INTERFACE}
@@ -231,9 +259,12 @@
var
// these consts are here because they would cause circular dependencies in uConsts/uTypes
- cPathz: array[TPathType] of shortstring = (
+ cPathz: array[TPathType] of shortstring;
+
+const
+ cPathzInit: array[TPathType] of shortstring = (
'', // ptNone
- '/', // ptData
+ '//', // ptData
'/Graphics', // ptGraphics
'/Themes', // ptThemes
'/Themes/Bamboo', // ptCurrTheme
@@ -253,10 +284,15 @@
'/Graphics/Flags', // ptFlags
'/Missions/Maps', // ptMissionMaps
'/Graphics/SuddenDeath', // ptSuddenDeath
- '/Graphics/Buttons' // ptButton
+ '/Graphics/Buttons', // ptButton
+ '/Shaders' // ptShaders
);
- Fontz: array[THWFont] of THHFont = (
+var
+ Fontz: array[THWFont] of THHFont;
+
+const
+ FontzInit: array[THWFont] of THHFont = (
(Handle: nil;
Height: 12;
style: TTF_STYLE_NORMAL;
@@ -286,16 +322,10 @@
);
var
- SpritesData: array[TSprite] of record
- FileName: string[15];
- Path, AltPath: TPathType;
- Texture: PTexture;
- Surface: PSDL_Surface;
- Width, Height, imageWidth, imageHeight: LongInt;
- saveSurf: boolean;
- priority: GLfloat;
- getDimensions, getImageDimensions: boolean;
- end = (
+ SpritesData: array[TSprite] of TSpriteData;
+
+const
+ SpritesDataInit: array[TSprite] of TSpriteData = (
(FileName: 'BlueWater'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: true; getImageDimensions: true),// sprWater
(FileName: 'Clouds'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
@@ -345,15 +375,15 @@
(FileName: 'horizont'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizont
(FileName: 'horizontL'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizont
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizontL
(FileName: 'horizontR'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizont
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprHorizontR
(FileName: 'Sky'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSky
(FileName: 'SkyL'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSky
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSkyL
(FileName: 'SkyR'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSky
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: true; getImageDimensions: true),// sprSkyR
(FileName: 'Slot'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprAMSlot
(FileName: 'Ammos'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
@@ -397,13 +427,13 @@
{$IFDEF USE_TOUCH_INTERFACE}
(FileName: 'firebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprFireButton
- (FileName: 'arrowUp'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ (FileName: 'arrowup'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowUp
- (FileName: 'arrowDown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ (FileName: 'arrowdown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowDown
- (FileName: 'arrowLeft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ (FileName: 'arrowleft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowLeft
- (FileName: 'arrowRight'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ (FileName: 'arrowright'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowRight
(FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprAMWidget
@@ -411,10 +441,12 @@
Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprJumpWidget
(FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 120; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprPauseButton
- (FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;//TODO correct image
- Width: 120; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
- (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;//TODO correct image
- Width: 120; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton
+ (FileName: 'timerbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTimerButton
+ (FileName: 'targetbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: 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; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton
{$ENDIF}
(FileName: 'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
@@ -665,8 +697,8 @@
Width: 80; Height: 50; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprSDSplash
(FileName: 'SDDroplet'; Path: ptCurrTheme; AltPath: ptSuddenDeath; Texture: nil; Surface: nil;
Width: 16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDDroplet
- (FileName: 'TARDIS'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 48; Height: 79; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
+ (FileName: 'Timebox'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 50; Height: 81; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
(FileName: 'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSlider
(FileName: 'botlevels'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
@@ -686,7 +718,15 @@
(FileName: 'amRubber'; Path: ptCurrTheme; AltPath: ptGraphics; Texture: nil; Surface: nil;
Width: 160; Height:160; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprAmRubber
(FileName: 'boing'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
- Width: 101; Height: 97; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false) // sprBoing
+ Width: 101; Height: 97; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprBoing
+ (FileName: 'custom1'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom1
+ (FileName: 'custom2'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
+ Width: 0; Height: 0; imageWidth: 0; imageHeight: 0; saveSurf: true; priority: tpLow; getDimensions: true; getImageDimensions: true), // sprCustom2
+ (FileName: 'AirMine'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true), // sprAirMine
+ (FileName: 'amAirMine'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
+ Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprHandAirMine
);
const
@@ -707,8 +747,8 @@
(Sprite: sprJuggle; FramesCount: 49; Interval: 38; cmd: '/juggle'; Voice: sndNone; VoiceDelay: 0)
);
-var
- Ammoz: array [TAmmoType] of record
+type
+ TAmmozRec = record
NameId: TAmmoStrId;
NameTex: PTexture;
Probability, NumberInCase: Longword;
@@ -717,11 +757,17 @@
TimeAfterTurn: Longword;
minAngle, maxAngle: Longword;
isDamaging: boolean;
- SkipTurns: Longword;
+ SkipTurns: LongWord;
PosCount: Longword;
PosSprite: TSprite;
ejectX, ejectY: Longint;
- end = (
+ end;
+
+var
+ Ammoz: array [TAmmoType] of TAmmozRec;
+
+const
+ AmmozInit: array [TAmmoType] of TAmmozRec = (
(NameId: sidNothing;
NameTex: nil;
Probability: 0;
@@ -750,9 +796,9 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Timerable or
- ammoprop_Power or
- ammoprop_AltUse or
+ Ammo: (Propz: ammoprop_Timerable or
+ ammoprop_Power or
+ ammoprop_AltUse or
ammoprop_SetBounce or
ammoprop_NeedUpDown;
Count: AMMO_INFINITE;
@@ -778,9 +824,9 @@
NameTex: nil;
Probability: 100;
NumberInCase: 3;
- Ammo: (Propz: ammoprop_Timerable or
- ammoprop_Power or
- ammoprop_AltUse or
+ Ammo: (Propz: ammoprop_Timerable or
+ ammoprop_Power or
+ ammoprop_AltUse or
ammoprop_SetBounce or
ammoprop_NeedUpDown;
Count: 5;
@@ -806,7 +852,7 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
+ Ammo: (Propz: ammoprop_Power or
ammoprop_AltUse or
ammoprop_NeedUpDown;
Count: AMMO_INFINITE;
@@ -832,8 +878,8 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
- ammoprop_NeedTarget or
+ Ammo: (Propz: ammoprop_Power or
+ ammoprop_NeedTarget or
ammoprop_DontHold or
ammoprop_NeedUpDown;
Count: 2;
@@ -885,9 +931,9 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
- ammoprop_AttackInMove or
- ammoprop_NoCrosshair or
+ Ammo: (Propz: ammoprop_ForwMsgs or
+ ammoprop_AttackInMove or
+ ammoprop_NoCrosshair or
ammoprop_DontHold;
Count: 2;
NumPerTurn: 0;
@@ -912,7 +958,8 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_NoCrosshair or
+ Ammo: (Propz: ammoprop_NoCrosshair or
+ ammoprop_AttackInMove or
ammoprop_DontHold;
Count: AMMO_INFINITE;
NumPerTurn: 0;
@@ -967,10 +1014,10 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_NoCrosshair or
- ammoprop_AttackInMove or
- ammoprop_DontHold or
- ammoprop_AltUse or
+ Ammo: (Propz: ammoprop_NoCrosshair or
+ ammoprop_AttackInMove or
+ ammoprop_DontHold or
+ ammoprop_AltUse or
ammoprop_SetBounce;
Count: 2;
NumPerTurn: 0;
@@ -1019,9 +1066,9 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_NoCrosshair or
- ammoprop_AttackInMove or
- ammoprop_DontHold or
+ Ammo: (Propz: ammoprop_NoCrosshair or
+ ammoprop_AttackInMove or
+ ammoprop_DontHold or
ammoprop_AltUse;
Count: 1;
NumPerTurn: 0;
@@ -1046,8 +1093,8 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_NoCrosshair or
- ammoprop_ForwMsgs or
+ Ammo: (Propz: ammoprop_NoCrosshair or
+ ammoprop_ForwMsgs or
ammoprop_AttackInMove;
Count: AMMO_INFINITE;
NumPerTurn: 0;
@@ -1318,7 +1365,7 @@
NameTex: nil;
Probability: 100;
NumberInCase: 4;
- Ammo: (Propz: 0;
+ Ammo: (Propz: ammoprop_NeedUpDown;
Count: 4;
NumPerTurn: 0;
Timer: 0;
@@ -1342,8 +1389,8 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
- ammoprop_DontHold or
+ Ammo: (Propz: ammoprop_ForwMsgs or
+ ammoprop_DontHold or
ammoprop_NeedUpDown or
ammoprop_AttackInMove;
Count: 1;
@@ -1369,8 +1416,8 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
- ammoprop_NoCrosshair or
+ Ammo: (Propz: ammoprop_ForwMsgs or
+ ammoprop_NoCrosshair or
ammoprop_DontHold or
ammoprop_Track;
Count: 1;
@@ -1396,7 +1443,7 @@
NameTex: nil;
Probability: 100;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
+ Ammo: (Propz: ammoprop_ForwMsgs or
ammoprop_DontHold or
ammoprop_NoCrosshair;
Count: 1;
@@ -1422,8 +1469,8 @@
NameTex: nil;
Probability: 400;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Timerable or
- ammoprop_Power or
+ Ammo: (Propz: ammoprop_Timerable or
+ ammoprop_Power or
ammoprop_NeedUpDown or
ammoprop_AltUse;
Count: 0;
@@ -1449,7 +1496,7 @@
NameTex: nil;
Probability: 400;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
+ Ammo: (Propz: ammoprop_Power or
ammoprop_NeedUpDown or
ammoprop_AltUse;
Count: 0;
@@ -1503,7 +1550,7 @@
NameTex: nil;
Probability: 300;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
+ Ammo: (Propz: ammoprop_Power or
ammoprop_NeedUpDown or
ammoprop_AltUse;
Count: AMMO_INFINITE;
@@ -1529,7 +1576,7 @@
NameTex: nil;
Probability: 400;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
+ Ammo: (Propz: ammoprop_ForwMsgs or
ammoprop_NeedUpDown or
ammoprop_DontHold;
Count: AMMO_INFINITE;
@@ -1814,7 +1861,7 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
+ Ammo: (Propz: ammoprop_Power or
ammoprop_NeedUpDown or
ammoprop_AltUse;
Count: AMMO_INFINITE;
@@ -1923,9 +1970,9 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Timerable or
- ammoprop_Power or
- ammoprop_AltUse or
+ Ammo: (Propz: ammoprop_Timerable or
+ ammoprop_Power or
+ ammoprop_AltUse or
ammoprop_NeedUpDown or
ammoprop_SetBounce;
Count: AMMO_INFINITE;
@@ -1976,7 +2023,7 @@
NameTex: nil;
Probability: 20;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
+ Ammo: (Propz: ammoprop_ForwMsgs or
ammoprop_NeedUpDown or
ammoprop_DontHold;
Count: 1;
@@ -2107,8 +2154,9 @@
NameTex: nil;
Probability: 0;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_Power or
+ Ammo: (Propz: ammoprop_Power or
ammoprop_AltUse or
+ ammoprop_NeedUpDown or
ammoprop_NoRoundEnd;
Count: 2;
NumPerTurn: 0;
@@ -2125,7 +2173,7 @@
SkipTurns: 0;
PosCount: 1;
PosSprite: sprWater;
- ejectX: 0;
+ ejectX: 0;
ejectY: 0),
// Tardis
@@ -2155,7 +2203,7 @@
ejectX: 0;
ejectY: 0),
-// Structure
+// Structure
{
(NameId: sidStructure;
NameTex: nil;
@@ -2183,13 +2231,14 @@
ejectX: 0;
ejectY: 0),
}
-
+
// Land Gun
(NameId: sidLandGun;
NameTex: nil;
Probability: 20;
NumberInCase: 1;
Ammo: (Propz: ammoprop_NoRoundEnd or
+ ammoprop_NeedUpDown or
ammoprop_Utility;
Count: 1;
NumPerTurn: 0;
@@ -2213,7 +2262,7 @@
NameTex: nil;
Probability: 20;
NumberInCase: 1;
- Ammo: (Propz: ammoprop_ForwMsgs or
+ Ammo: (Propz: ammoprop_ForwMsgs or
ammoprop_NeedUpDown or
ammoprop_DontHold;
Count: 1;
@@ -2284,6 +2333,31 @@
PosCount: 4;
PosSprite: sprAmRubber;
ejectX: 0;
+ ejectY: 0),
+// Air Mine
+ (NameId: sidAirMine;
+ NameTex: nil;
+ Probability: 100;
+ NumberInCase: 1;
+ Ammo: (Propz: ammoprop_Power or
+ ammoprop_AltUse or
+ ammoprop_NeedUpDown;
+ Count: 2;
+ NumPerTurn: 0;
+ Timer: 0;
+ Pos: 0;
+ AmmoType: amAirMine;
+ AttackVoice: sndLaugh;
+ Bounciness: 1000);
+ Slot: 5;
+ TimeAfterTurn: 5000;
+ minAngle: 0;
+ maxAngle: 0;
+ isDamaging: true;
+ SkipTurns: 0;
+ PosCount: 1;
+ PosSprite: sprWater;
+ ejectX: 0;
ejectY: 0)
);
@@ -2340,6 +2414,7 @@
SyncTexture,
ConfirmTexture: PTexture;
cScaleFactor: GLfloat;
+ cStereoDepth: GLfloat;
SupportNPOTT: Boolean;
Step: LongInt;
MissionIcons: PSDL_Surface;
@@ -2363,18 +2438,35 @@
lastTurnChecksum : Longword;
+ mModelview: TMatrix4x4f;
+ mProjection: TMatrix4x4f;
+ vBuffer: GLuint; // vertex buffer
+ tBuffer: GLuint; // texture coords buffer
+ cBuffer: GLuint; // color buffer
+
+ uCurrentMVPLocation: GLint;
+
+ uMainMVPLocation: GLint;
+ uMainTintLocation: GLint;
+
+ uWaterMVPLocation: GLint;
+
+ aVertex: GLint;
+ aTexCoord: GLint;
+ aColor: GLint;
+
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
trmsg: array[TMsgStrId] of ansistring; // message of the event
trgoal: array[TGoalStrId] of ansistring; // message of the goal
+ cTestLua : Boolean;
procedure preInitModule;
procedure initModule;
procedure freeModule;
implementation
-uses strutils;
procedure preInitModule;
begin
@@ -2403,6 +2495,9 @@
PathPrefix := './';
GameType := gmtLocal;
cOnlyStats := False;
+ cScriptName := '';
+ cScriptParam := '';
+ cTestLua := False;
{$IFDEF USE_VIDEO_RECORDING}
RecPrefix := '';
@@ -2413,12 +2508,27 @@
cVideoQuality := 0;
cAudioCodec := '';
{$ENDIF}
+
+ cTagsMask:= htTeamName or htName or htHealth;
end;
procedure initModule;
+var s: shortstring;
+ i: integer;
begin
- // TODO: we could just have one cLocale variables and drop strutils
- cLocale:= ExtractDelimited(1, cLocaleFName, StdWordDelims);
+ // init LastVoice
+ LastVoice.snd:= sndNone;
+ LastVoice.voicepack:= nil;
+
+ // init arrays
+ Move(cPathzInit, cPathz, sizeof(cPathz));
+ Move(FontzInit, Fontz, sizeof(Fontz));
+ Move(SpritesDataInit, SpritesData, sizeof(SpritesData));
+ Move(AmmozInit, Ammoz, sizeof(Ammoz));
+
+
+ cLocale:= cLocaleFName;
+ SplitByChar(cLocale, s, '.');
cFlattenFlakes := false;
cFlattenClouds := false;
@@ -2448,24 +2558,39 @@
LAND_HEIGHT_MASK:= $FFFFF800
end;
- SDWaterColorArray[0].r := 182;
- SDWaterColorArray[0].g := 144;
- SDWaterColorArray[0].b := 201;
+ // default sudden death water
+
+ // deep water
+ SDWaterColorArray[0].r := 150;
+ SDWaterColorArray[0].g := 112;
+ SDWaterColorArray[0].b := 169;
SDWaterColorArray[0].a := 255;
- SDWaterColorArray[2].r := 150;
- SDWaterColorArray[2].g := 112;
- SDWaterColorArray[2].b := 169;
- SDWaterColorArray[2].a := 255;
- SDWaterColorArray[1]:= SDWaterColorArray[0];
- SDWaterColorArray[3]:= SDWaterColorArray[2];
+ SDWaterColorArray[2]:= SDWaterColorArray[0];
+ SDWaterColorArray[4]:= SDWaterColorArray[0];
+ SDWaterColorArray[6]:= SDWaterColorArray[0];
+ // water surface
+ SDWaterColorArray[1].r := 182;
+ SDWaterColorArray[1].g := 144;
+ SDWaterColorArray[1].b := 201;
+ SDWaterColorArray[1].a := 255;
+ SDWaterColorArray[3]:= SDWaterColorArray[1];
+ SDWaterColorArray[5]:= SDWaterColorArray[1];
+ SDWaterColorArray[7]:= SDWaterColorArray[1];
+
SDWaterOpacity:= $80;
+
SDTint:= $80;
+ ExplosionBorderColorR:= 80;
+ ExplosionBorderColorG:= 80;
+ ExplosionBorderColorB:= 80;
ExplosionBorderColor:= $FF808080;
+ ExplosionBorderColorNoA:= ExplosionBorderColor and (not AMask);
IceColor:= ($44 shl RShift) or ($97 shl GShift) or ($A9 shl BShift) or ($A0 shl AShift);
IceEdgeColor:= ($8A shl RShift) or ($AF shl GShift) or ($B2 shl BShift) or ($FF shl AShift);
WaterOpacity:= $80;
+ cWaveHeight := 32;
cDrownSpeed.QWordValue := 257698038; // 0.06
cDrownSpeedf := 0.06;
cMaxWindSpeed.QWordValue:= 1073742; // 0.00025
@@ -2474,6 +2599,7 @@
cElastic := _0_9;
cGravity := cMaxWindSpeed * 2;
cGravityf := 0.00025 * 2;
+ cBuildMaxDist := cDefaultBuildMaxDist;
cDamageModifier := _1;
TargetPoint := cTargetPointRef;
@@ -2511,7 +2637,8 @@
cGetAwayTime := 100;
cMineDudPercent := 0;
cTemplateFilter := 0;
- cMapGen := 0; // MAPGEN_REGULAR
+ cFeatureSize := 50;
+ cMapGen := mgRandom;
cHedgehogTurnTime := 45000;
cMinesTime := 3000;
cMaxAIThinkTime := 9000;
@@ -2521,12 +2648,14 @@
cHealthCaseAmount := 25;
cWaterRise := 47;
cHealthDecrease := 5;
+ cAdvancedMapGenMode := false;
InitStepsFlags := 0;
RealTicks := 0;
AttackBar := 0; // 0 - none, 1 - just bar at the right-down corner, 2 - from weapon
cCaseFactor := 5; {0..9}
cLandMines := 4;
+ cAirMines := 0;
cExplosives := 2;
GameState := Low(TGameState);
@@ -2537,6 +2666,7 @@
cVampiric := false;
cArtillery := false;
flagMakeCapture := false;
+ flagDumpLand := false;
bBetweenTurns := false;
bWaterRising := false;
isCursorVisible := false;
@@ -2549,13 +2679,12 @@
fastUntilLag := false;
fastScrolling := false;
autoCameraOn := true;
- cScriptName := '';
cSeed := '';
cVolumeDelta := 0;
cHasFocus := true;
cInactDelay := 100;
ReadyTimeLeft := 0;
-
+
disableLandBack := false;
ScreenFade := sfNone;
@@ -2564,20 +2693,27 @@
cRightScreenBorder:= round(cMinZoomLevel * cScreenWidth + LAND_WIDTH);
cScreenSpace:= cRightScreenBorder - cLeftScreenBorder;
- vobFrameTicks:= 99999;
+ dirtyLandTexCount:= 0;
+
+ vobFrameTicks:= 0;
vobFramesCount:= 4;
vobCount:= 0;
vobVelocity:= 10;
vobFallSpeed:= 100;
- vobSDFrameTicks:= 99999;
+ vobSDFrameTicks:= 0;
vobSDFramesCount:= 4;
vobSDCount:= 30 * cScreenSpace div LAND_WIDTH;
vobSDVelocity:= 15;
vobSDFallSpeed:= 250;
+{$IFDEF MOBILE}
+ cMinScreenWidth := min(cScreenWidth, 480);
+ cMinScreenHeight := min(cScreenHeight, 320);
+{$ELSE}
cMinScreenWidth := min(cScreenWidth, 640);
cMinScreenHeight := min(cScreenHeight, 480);
+{$ENDIF}
cNewScreenWidth := cScreenWidth;
cNewScreenHeight := cScreenHeight;
@@ -2589,6 +2725,7 @@
if cFullscreenHeight = 0 then
cFullscreenHeight:= min(cWindowedHeight, 480);
+ SpeechHogNumber:= -1;
LuaGoals:= '';
cMapName:= '';
@@ -2597,6 +2734,49 @@
UIDisplay:= uiAll;
LocalMessage:= 0;
+
+ cStereoDepth:= 0;
+ cViewLimitsDebug:= false;
+ AprilOne := false;
+
+ ChatPasteBuffer:= '';
+
+ // initialize pointers to nil
+ // (don't rely on implicit init of fpc, because that one only happens ONCE when used as lib)
+ CurAmmoGear:= nil;
+ lastGearByUID:= nil;
+ GearsList:= nil;
+ CurrentTeam:= nil;
+ PreviousTeam:= nil;
+ CurrentHedgehog:= nil;
+ FollowGear:= nil;
+ lastVisualGearByUID:= nil;
+
+ ChefHatTexture:= nil;
+ CrosshairTexture:= nil;
+ GenericHealthTexture:= nil;
+ WeaponTooltipTex:= nil;
+ HHTexture:= nil;
+ LandBackSurface:= nil;
+ ConfirmTexture:= nil;
+ MissionIcons:= nil;
+ ropeIconTex:= nil;
+
+ for i:= Low(ClansArray) to High(ClansArray) do
+ begin
+ ClansArray[i]:= nil;
+ end;
+
+ for i:= Low(TeamsArray) to High(TeamsArray) do
+ begin
+ TeamsArray[i]:= nil;
+ end;
+
+ for i:= Low(CountTexz) to High(CountTexz) do
+ begin
+ CountTexz[i]:= nil;
+ end;
+
end;
procedure freeModule;