author  Xeli 
Fri, 16 Sep 2011 20:38:23 +0200  
branch  hedgeroid 
changeset 5936  849f01d63538 
parent 5932  5164d17b6374 
child 5941  db4751cb4f53 
permissions  rwrr 
4  1 
(* 
1066  2 
* Hedgewars, a free turn based strategy game 
4976  3 
* Copyright (c) 20042011 Andrey Korotaev <unC0Rr@gmail.com> 
4  4 
* 
183  5 
* This program is free software; you can redistribute it and/or modify 
6 
* it under the terms of the GNU General Public License as published by 

7 
* the Free Software Foundation; version 2 of the License 

4  8 
* 
183  9 
* This program is distributed in the hope that it will be useful, 
10 
* but WITHOUT ANY WARRANTY; without even the implied warranty of 

11 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

12 
* GNU General Public License for more details. 

4  13 
* 
183  14 
* You should have received a copy of the GNU General Public License 
15 
* along with this program; if not, write to the Free Software 

16 
* Foundation, Inc., 59 Temple Place  Suite 330, Boston, MA 021111307, USA 

4  17 
*) 
18 

2630  19 
{$INCLUDE "options.inc"} 
4850  20 
{$IF GLunit = GL}{$DEFINE GLunit:=GL,GLext}{$ENDIF} 
2630  21 

4  22 
unit uWorld; 
23 
interface 

4357
a1fcfc341a52
Introduce unit uTypes in order to remove some cyclic unit dependencies
unC0Rr
parents:
4248
diff
changeset

24 
uses SDLh, uGears, uConsts, uFloat, uRandom, uTypes; 
3697  25 

3038  26 
procedure initModule; 
27 
procedure freeModule; 

2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

28 

b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

29 
procedure InitWorld; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

30 
procedure DrawWorld(Lag: LongInt); 
3692  31 
procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); 
2905  32 
procedure ShowMission(caption, subcaption, text: ansistring; icon, time : LongInt); 
2786  33 
procedure HideMission; 
3032  34 
procedure ShakeCamera(amount: LongWord); 
5682
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

35 
procedure InitCameraBorders; 
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3629
diff
changeset

36 
procedure MoveCamera; 
5521  37 
procedure onFocusStateChanged; 
4  38 

39 
implementation 

4359  40 
uses 
41 
uStore, 

42 
uMisc, 

43 
uIO, 

44 
uLocale, 

45 
uSound, 

46 
uAmmos, 

47 
uVisualGears, 

48 
uChat, 

49 
uLandTexture, 

50 
GLunit, 

4374  51 
uVariables, 
4375  52 
uUtils, 
4378  53 
uTextures, 
4380  54 
uRender, 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

55 
uCaptions, 
5521  56 
uCursor, 
57 
uCommands 

4359  58 
; 
4  59 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

60 
var cWaveWidth, cWaveHeight: LongInt; 
3434  61 
AMSlotSize, AMxOffset, AMyOffset, AMWidth, AMxShift, SlotsNum: LongInt; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

62 
tmpSurface: PSDL_Surface; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

63 
fpsTexture: PTexture; 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

64 
timeTexture: PTexture; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

65 
FPS: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

66 
CountTicks: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

67 
SoundTimerTicks: Longword; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

68 
prevPoint: TPoint; 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

69 
amSel: TAmmoType = amNothing; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

70 
missionTex: PTexture; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

71 
missionTimer: LongInt; 
4850  72 
stereoDepth: GLfloat; 
3692  73 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

74 
const cStereo_Sky = 0.0500; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

75 
cStereo_Horizon = 0.0250; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

76 
cStereo_Water_distant = 0.0125; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

77 
cStereo_Land = 0.0075; 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

78 
cStereo_Water_near = 0.0025; 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

79 
cStereo_Outside = 0.0400; 
4  80 

81 
procedure InitWorld; 

2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

82 
var i, t: LongInt; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

83 
cp: PClan; 
2863  84 
g: ansistring; 
85 

2904  86 
// helper functions to create the goal/game mode string 
2908  87 
function AddGoal(s: ansistring; gf: longword; si: TGoalStrId; i: LongInt): ansistring; 
2905  88 
var t: ansistring; 
2904  89 
begin 
90 
if (GameFlags and gf) <> 0 then 

91 
begin 

92 
t:= inttostr(i); 

93 
s:= s + format(trgoal[si], t) + '' 

94 
end; 

95 
AddGoal:= s; 

96 
end; 

97 

2908  98 
function AddGoal(s: ansistring; gf: longword; si: TGoalStrId): ansistring; 
2863  99 
begin 
2904  100 
if (GameFlags and gf) <> 0 then 
101 
s:= s + trgoal[si] + ''; 

2863  102 
AddGoal:= s; 
103 
end; 

4  104 
begin 
3764  105 
missionTimer:= 0; 
2786  106 

2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

107 
if (GameFlags and gfRandomOrder) <> 0 then // shuffle them up a bit 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

108 
begin 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

109 
for i:= 0 to ClansCount * 4 do 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

110 
begin 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

111 
t:= GetRandom(ClansCount); 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

112 
if t <> 0 then 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

113 
begin 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

114 
cp:= ClansArray[0]; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

115 
ClansArray[0]:= ClansArray[t]; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

116 
ClansArray[t]:= cp; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

117 
ClansArray[t]^.ClanIndex:= t; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

118 
ClansArray[0]^.ClanIndex:= 0; 
2856
cc70797a0b75
Adjust LocalClan when shuffling, set to 1 in case all local clans are bots.
nemo
parents:
2855
diff
changeset

119 
if (LocalClan = t) then LocalClan:= 0 
cc70797a0b75
Adjust LocalClan when shuffling, set to 1 in case all local clans are bots.
nemo
parents:
2855
diff
changeset

120 
else if (LocalClan = 0) then LocalClan:= t 
2704
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

121 
end; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

122 
end; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

123 
CurrentTeam:= ClansArray[0]^.Teams[0]; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

124 
end; 
51cda17b7c3b
Rolling random numbers before land is generated is bad, m'kay? InitWorld probably not the best place for it.
nemo
parents:
2699
diff
changeset

125 

2908  126 
// if special game flags/settings are changed, add them to the game mode notice window and then show it 
2863  127 
g:= ''; // no text/things to note yet 
2908  128 

4883
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4850
diff
changeset

129 
// add custom goals from lua script if there are any 
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4850
diff
changeset

130 
if LuaGoals <> '' then g:= LuaGoals + ''; 
7cddc9201a1d
added dummy for tardis and ugly icons for tardis and structure
Henek
parents:
4850
diff
changeset

131 

2958  132 
// check different game flags (goals/game modes first for now) 
133 
g:= AddGoal(g, gfKing, gidKing); // king? 

5022
d2a2f6c9b236
some final work and buggfix for Tag Team, it is now playable
Henek
parents:
4976
diff
changeset

134 
g:= AddGoal(g, gfTagTeam, gidTagTeam); // tag team mode? 
2958  135 

136 
// other important flags 

137 
g:= AddGoal(g, gfForts, gidForts); // forts? 

138 
g:= AddGoal(g, gfLowGravity, gidLowGravity); // low gravity? 

139 
g:= AddGoal(g, gfInvulnerable, gidInvulnerable); // invulnerability? 

140 
g:= AddGoal(g, gfVampiric, gidVampiric); // vampirism? 

141 
g:= AddGoal(g, gfKarma, gidKarma); // karma? 

142 
g:= AddGoal(g, gfPlaceHog, gidPlaceHog); // placement? 

143 
g:= AddGoal(g, gfArtillery, gidArtillery); // artillery? 

144 
g:= AddGoal(g, gfSolidLand, gidSolidLand); // solid land? 

145 
g:= AddGoal(g, gfSharedAmmo, gidSharedAmmo); // shared ammo? 

4132  146 
g:= AddGoal(g, gfResetHealth, gidResetHealth); 
147 
g:= AddGoal(g, gfAISurvival, gidAISurvival); 

148 
g:= AddGoal(g, gfInfAttack, gidInfAttack); 

149 
g:= AddGoal(g, gfResetWeps, gidResetWeps); 

150 
g:= AddGoal(g, gfPerHogAmmo, gidPerHogAmmo); 

2958  151 

2908  152 
// modified damage modificator? 
153 
if cDamagePercent <> 100 then 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

154 
g:= AddGoal(g, gfAny, gidDamageModifier, cDamagePercent); 
2908  155 

3107  156 
// fade in 
157 
ScreenFade:= sfFromBlack; 

158 
ScreenFadeValue:= sfMax; 

159 
ScreenFadeSpeed:= 1; 

160 

2908  161 
// modified mine timers? 
4482  162 
if cMinesTime <> 3000 then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

163 
begin 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

164 
if cMinesTime = 0 then 
4003
ca0600ab38bf
disable gfMines and update variable names (landadds > minesnum, cLandAdditions > cLandMines)
koda
parents:
3976
diff
changeset

165 
g:= AddGoal(g, gfAny, gidNoMineTimer) 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

166 
else if cMinesTime < 0 then 
4003
ca0600ab38bf
disable gfMines and update variable names (landadds > minesnum, cLandAdditions > cLandMines)
koda
parents:
3976
diff
changeset

167 
g:= AddGoal(g, gfAny, gidRandomMineTimer) 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

168 
else 
4482  169 
g:= AddGoal(g, gfAny, gidMineTimer, cMinesTime div 1000); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

170 
end; 
2908  171 

2863  172 
// if the string has been set, show it for (default timeframe) seconds 
173 
if g <> '' then ShowMission(trgoal[gidCaption], trgoal[gidSubCaption], g, 1, 0); 

174 

1825  175 
cWaveWidth:= SpritesData[sprWater].Width; 
2268
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile  of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset

176 
//cWaveHeight:= SpritesData[sprWater].Height; 
053eb81e60ee
little experiment to see if this improve appearance of laser/ufo/cake/laser guided missile  of course, can't actually see it until unc0rr restores waves
nemo
parents:
2226
diff
changeset

177 
cWaveHeight:= 32; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

178 

5682
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

179 
InitCameraBorders(); 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

180 
uCursor.init(); 
2197  181 
prevPoint.X:= 0; 
74  182 
prevPoint.Y:= cScreenHeight div 2; 
1760  183 
WorldDx:=  (LAND_WIDTH div 2) + cScreenWidth div 2; 
2139
5a083e71a71d
Properly decrement sniper rifle if timed out. Try to get camera position straight for once.
nemo
parents:
2119
diff
changeset

184 
WorldDy:=  (LAND_HEIGHT  (playHeight div 2)) + (cScreenHeight div 2); 
3434  185 
AMSlotSize:= 33; 
5326  186 
{$IFDEF MOBILE} 
3434  187 
AMxOffset:= 10; 
3464  188 
AMyOffset:= 10 + 123; // moved downwards 
3434  189 
AMWidth:= (cMaxSlotAmmoIndex + 1) * AMSlotSize + AMxOffset; 
190 
{$ELSE} 

191 
AMxOffset:= 10; 

192 
AMyOffset:= 60; 

193 
AMWidth:= (cMaxSlotAmmoIndex + 2) * AMSlotSize + AMxOffset; 

194 
{$ENDIF} 

195 
AMxShift:= AMWidth; 

3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

196 
SkyOffset:= 0; 
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

197 
HorizontOffset:= 0; 
161  198 
end; 
199 

5682
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

200 
procedure InitCameraBorders; 
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

201 
begin 
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

202 
cGearScrEdgesDist:= min(2 * cScreenHeight div 5, 2 * cScreenWidth div 5); 
06d5f561f772
some camera adjustments (should also fix cam flickering on lowerst res)
sheepluva
parents:
5675
diff
changeset

203 
end; 
3405  204 

956  205 
procedure ShowAmmoMenu; 
161  206 
const MENUSPEED = 15; 
3434  207 
const BORDERSIZE = 2; 
208 
var x, y, i, t, g: LongInt; 

209 
Slot, Pos, STurns: LongInt; 

2855
7e6adeb57427
Show the ammo menu of the last local nonbot team when not local turn. needs testing
nemo
parents:
2851
diff
changeset

210 
Ammo: PHHAmmo; 
161  211 
begin 
3952
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3890
diff
changeset

212 
if (TurnTimeLeft = 0) or (not CurrentTeam^.ExtDriven and (((CurAmmoGear = nil) or ((Ammoz[CurAmmoGear^.AmmoType].Ammo.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu)) then 
d6412423da45
moved some utilities to a separate column with round buttons
koda
parents:
3890
diff
changeset

213 
bShowAmmoMenu:= false; 
3434  214 
if bShowAmmoMenu then 
215 
begin 

216 
FollowGear:= nil; 

217 
if AMxShift = AMWidth then prevPoint.X:= 0; 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

218 
if (cReducedQuality and rqSlowMenu) <> 0 then 
3434  219 
AMxShift:= 0 
220 
else 

221 
if AMxShift > MENUSPEED then 

5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

222 
dec(AMxShift, MENUSPEED) 
3434  223 
else 
224 
AMxShift:= 0; 

225 
end else 

226 
begin 

227 
if AMxShift = 0 then 

228 
begin 

229 
CursorPoint.X:= cScreenWidth shr 1; 

230 
CursorPoint.Y:= cScreenHeight shr 1; 

231 
prevPoint:= CursorPoint; 

232 
end; 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

233 
if (cReducedQuality and rqSlowMenu) <> 0 then 
3434  234 
AMxShift:= AMWidth 
235 
else 

236 
if AMxShift < (AMWidth  MENUSPEED) then 

237 
inc(AMxShift, MENUSPEED) 

238 
else 

239 
AMxShift:= AMWidth; 

240 
end; 

241 
Ammo:= nil; 

242 
if (CurrentTeam <> nil) and (CurrentHedgehog <> nil) and (not CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel = 0) then 

243 
Ammo:= CurrentHedgehog^.Ammo 

244 
else if (LocalAmmo <> 1) then 

245 
Ammo:= GetAmmoByNum(LocalAmmo); 

246 
Pos:= 1; 

247 
if Ammo = nil then 

2971  248 
begin 
3434  249 
bShowAmmoMenu:= false; 
250 
exit 

2971  251 
end; 
3434  252 
SlotsNum:= 0; 
253 
x:= (cScreenWidth shr 1)  AMWidth + AMxShift; 

3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

254 

5326  255 
{$IFDEF MOBILE} 
3434  256 
Slot:= cMaxSlotIndex; 
3463  257 
x:= x  cOffsetY; 
3464  258 
y:= AMyOffset; 
3434  259 
dec(y, BORDERSIZE); 
260 
DrawSprite(sprAMCorners, x  BORDERSIZE, y, 0); 

261 
for i:= 0 to cMaxSlotAmmoIndex do 

5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

262 
DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0); 
3434  263 
DrawSprite(sprAMCorners, x + AMWidth  AMxOffset, y, 1); 
264 
inc(y, BORDERSIZE); 

265 

266 
for i:= 0 to cMaxSlotIndex do 

267 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 

268 
begin 

3961
cf0ca1ff6c1a
Constrain to <= to avoid a bug on bottom edge reported by Henek
nemo
parents:
3890
diff
changeset

269 
if (cScreenHeight  CursorPoint.Y >= y) and (cScreenHeight  CursorPoint.Y <= y + AMSlotSize) then Slot:= i; 
3434  270 
inc(SlotsNum); 
271 
DrawSprite(sprAMBorderVertical, x  BORDERSIZE, y, 0); 

272 
t:= 0; 

273 
g:= 0; 

274 
while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do 

275 
begin 

276 
DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1); 

277 
if (Ammo^[i, t].AmmoType <> amNothing) then 

278 
begin 

279 
STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 

280 

281 
if STurns >= 0 then 

282 
begin 

283 
DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

284 
if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize  16, y + AMSlotSize  16, STurns); 

285 
end else 

286 
DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

287 
if (Slot = i) 

288 
and (CursorPoint.X >= x + g * AMSlotSize) 

3967  289 
and (CursorPoint.X <= x + (g + 1) * AMSlotSize) then 
3434  290 
begin 
291 
if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0); 

292 
Pos:= t; 

293 
end; 

294 
inc(g) 

295 
end; 

296 
inc(t) 

297 
end; 

298 
for g:= g to cMaxSlotAmmoIndex do 

299 
DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1); 

300 
DrawSprite(sprAMBorderVertical, x + AMWidth  AMxOffset, y, 1); 

301 
inc(y, AMSlotSize); 

302 
end; 

3697  303 

3434  304 
DrawSprite(sprAMCorners, x  BORDERSIZE, y, 2); 
305 
for i:= 0 to cMaxSlotAmmoIndex do 

306 
DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1); 

307 
DrawSprite(sprAMCorners, x + AMWidth  AMxOffset, y, 3); 

3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

308 
{$ELSE} 
3434  309 
Slot:= 0; 
310 
y:= cScreenHeight  AMyOffset; 

311 
DrawSprite(sprAMCorners, x  BORDERSIZE, y, 2); 

312 
for i:= 0 to cMaxSlotAmmoIndex + 1 do 

5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

313 
DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 1); 
3434  314 
DrawSprite(sprAMCorners, x + AMWidth  AMxOffset, y, 3); 
315 
dec(y, AMSlotSize); 

316 
DrawSprite(sprAMBorderVertical, x  BORDERSIZE, y, 0); 

317 
for i:= 0 to cMaxSlotAmmoIndex do 

5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

318 
DrawSprite(sprAMSlot, x + i * AMSlotSize, y, 2); 
3434  319 
DrawSprite(sprAMSlot, x + (cMaxSlotAmmoIndex + 1) * AMSlotSize, y, 1); 
320 
DrawSprite(sprAMBorderVertical, x + AMWidth  AMxOffset, y, 1); 

321 

322 
for i:= cMaxSlotIndex downto 0 do 

323 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 

324 
begin 

3961
cf0ca1ff6c1a
Constrain to <= to avoid a bug on bottom edge reported by Henek
nemo
parents:
3890
diff
changeset

325 
if (cScreenHeight  CursorPoint.Y >= y  AMSlotSize) and (cScreenHeight  CursorPoint.Y <= y) then Slot:= i; 
3434  326 
dec(y, AMSlotSize); 
327 
inc(SlotsNum); 

328 
DrawSprite(sprAMBorderVertical, x  BORDERSIZE, y, 0); 

329 
DrawSprite(sprAMSlot, x, y, 1); 

330 
DrawSprite(sprAMSlotKeys, x, y + 1, i); 

331 
t:= 0; 

332 
g:= 1; 

333 
while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do 

334 
begin 

335 
DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1); 

336 
if (Ammo^[i, t].AmmoType <> amNothing) then 

337 
begin 

338 
STurns:= Ammoz[Ammo^[i, t].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber; 

339 

340 
if STurns >= 0 then 

341 
begin 

342 
DrawSprite(sprAMAmmosBW, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

343 
if STurns < 100 then DrawSprite(sprTurnsLeft, x + (g + 1) * AMSlotSize  16, y + AMSlotSize  16, STurns); 

344 
end else 

345 
DrawSprite(sprAMAmmos, x + g * AMSlotSize, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

346 
if (Slot = i) 

347 
and (CursorPoint.X >= x + g * AMSlotSize) 

3967  348 
and (CursorPoint.X <= x + (g + 1) * AMSlotSize) then 
3434  349 
begin 
350 
if (STurns < 0) then DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 0); 

351 
Pos:= t; 

352 
end; 

353 
inc(g) 

354 
end; 

355 
inc(t) 

356 
end; 

357 
for g:= g to cMaxSlotAmmoIndex + 1 do 

358 
DrawSprite(sprAMSlot, x + g * AMSlotSize, y, 1); 

359 
DrawSprite(sprAMBorderVertical, x + AMWidth  AMxOffset, y, 1); 

360 
end; 

3697  361 

3434  362 
dec(y, BORDERSIZE); 
363 
DrawSprite(sprAMCorners, x  BORDERSIZE, y, 0); 

364 
for i:= 0 to cMaxSlotAmmoIndex + 1 do 

5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

365 
DrawSprite(sprAMBorderHorizontal, x + i * AMSlotSize, y, 0); 
3434  366 
DrawSprite(sprAMCorners, x + AMWidth  AMxOffset, y, 1); 
3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

367 
{$ENDIF} 
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

368 

3434  369 
if (Pos >= 0) then 
370 
begin 

371 
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then 

3967  372 
begin 
3434  373 
if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

374 
begin 
3434  375 
amSel:= Ammo^[Slot, Pos].AmmoType; 
376 
RenderWeaponTooltip(amSel) 

377 
end; 

3697  378 

5326  379 
{$IFDEF MOBILE} 
3629
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

380 
DrawTexture(cScreenWidth div 2  (AMWidth  10) + AMxShift, AMyOffset  25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

381 

86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

382 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

383 
DrawTexture(cScreenWidth div 2 + AMxOffset  45, AMyOffset  25, CountTexz[Ammo^[Slot, Pos].Count]); 
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

384 
{$ELSE} 
3434  385 
DrawTexture(cScreenWidth div 2  (AMWidth  10) + AMxShift, cScreenHeight  AMyOffset  25, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
386 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 

387 
DrawTexture(cScreenWidth div 2 + AMxOffset  45, cScreenHeight  AMyOffset  25, CountTexz[Ammo^[Slot, Pos].Count]); 

3629
86212d2b116a
redo spinning wheel, redo fix for detail selection, redo ammo quantity and name in ammomenu
koda
parents:
3611
diff
changeset

388 
{$ENDIF} 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

389 

3434  390 
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber < 0) then 
391 
begin 

392 
bShowAmmoMenu:= false; 

393 
SetWeapon(Ammo^[Slot, Pos].AmmoType); 

394 
bSelected:= false; 

395 
FreeWeaponTooltip; 

396 
exit 

3405  397 
end; 
3967  398 
end 
3434  399 
end 
400 
else 

401 
FreeWeaponTooltip; 

3663
8c28abf427f5
reduce the number of keywords used and switch to BMP format for screenshots
koda
parents:
3641
diff
changeset

402 
if (WeaponTooltipTex <> nil) and (AMxShift = 0) then 
5326  403 
{$IFDEF MOBILE} 
3434  404 
ShowWeaponTooltip(x  WeaponTooltipTex^.w  3, AMyOffset  1); 
3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

405 
{$ELSE} 
4374  406 
ShowWeaponTooltip(x  WeaponTooltipTex^.w  3, Min(y + 1, cScreenHeight  WeaponTooltipTex^.h  40)); 
3395
095273ad0e08
adding a somewhat working autoration for ipad (uStore.pas and uWorld.pas got mixed in the last two commits)
koda
parents:
3390
diff
changeset

407 
{$ENDIF} 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

408 

3434  409 
bSelected:= false; 
410 
if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8) 

4  411 
end; 
412 

3104  413 
procedure DrawWater(Alpha: byte; OffsetY: LongInt); 
1915  414 
var VertexBuffer: array [0..3] of TVertex2f; 
415 
r: TSDL_Rect; 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

416 
lw, lh: GLfloat; 
1915  417 
begin 
4748  418 
if SuddenDeathDmg then 
419 
begin 

420 
SDWaterColorArray[0].a := Alpha; 

421 
SDWaterColorArray[1].a := Alpha; 

422 
SDWaterColorArray[2].a := Alpha; 

423 
SDWaterColorArray[3].a := Alpha 

424 
end 

425 
else 

426 
begin 

427 
WaterColorArray[0].a := Alpha; 

428 
WaterColorArray[1].a := Alpha; 

429 
WaterColorArray[2].a := Alpha; 

430 
WaterColorArray[3].a := Alpha 

431 
end; 

2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

432 

3463  433 
lw:= cScreenWidth / cScaleFactor; 
434 
lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; 

3697  435 

3405  436 
// Water 
437 
r.y:= OffsetY + WorldDy + cWaterLine; 

3463  438 
if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

439 
begin 
3405  440 
if r.y < 0 then 
441 
r.y:= 0; 

1915  442 

3405  443 
glDisable(GL_TEXTURE_2D); 
444 
VertexBuffer[0].X:= lw; 

445 
VertexBuffer[0].Y:= r.y; 

446 
VertexBuffer[1].X:= lw; 

447 
VertexBuffer[1].Y:= r.y; 

448 
VertexBuffer[2].X:= lw; 

449 
VertexBuffer[2].Y:= lh; 

450 
VertexBuffer[3].X:= lw; 

451 
VertexBuffer[3].Y:= lh; 

1915  452 

3641  453 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
454 
glEnableClientState(GL_COLOR_ARRAY); 

4748  455 
if SuddenDeathDmg then 
456 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @SDWaterColorArray[0]) 

457 
else 

458 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 

1915  459 

3405  460 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 
2171
8208946331ba
Smaxx refactor of LoadImage to use flags, iphone changes by koda (mostly use of rgba instead of rgb)
nemo
parents:
2162
diff
changeset

461 

3405  462 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
1915  463 

3405  464 
glDisableClientState(GL_COLOR_ARRAY); 
3641  465 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
3407  466 
glColor4ub($FF, $FF, $FF, $FF); // must not be Tint() as color array seems to stay active and color reset is required 
3405  467 
glEnable(GL_TEXTURE_2D); 
468 
end; 

1915  469 
end; 
470 

3376  471 
procedure DrawWaves(Dir, dX, dY: LongInt; tnt: Byte); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

472 
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

473 
lw, waves, shift: GLfloat; 
4748  474 
sprite: TSprite; 
2288  475 
begin 
4748  476 
if SuddenDeathDmg then 
477 
sprite:= sprSDWater 

478 
else 

479 
sprite:= sprWater; 

480 

481 
cWaveWidth:= SpritesData[sprite].Width; 

482 

3463  483 
lw:= cScreenWidth / cScaleFactor; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

484 
waves:= lw * 2 / cWaveWidth; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

485 

4748  486 
if SuddenDeathDmg then 
487 
Tint(LongInt(tnt) * SDWaterColorArray[2].r div 255 + 255  tnt, 

488 
LongInt(tnt) * SDWaterColorArray[2].g div 255 + 255  tnt, 

489 
LongInt(tnt) * SDWaterColorArray[2].b div 255 + 255  tnt, 

490 
255 

491 
) 

492 
else 

493 
Tint(LongInt(tnt) * WaterColorArray[2].r div 255 + 255  tnt, 

494 
LongInt(tnt) * WaterColorArray[2].g div 255 + 255  tnt, 

495 
LongInt(tnt) * WaterColorArray[2].b div 255 + 255  tnt, 

496 
255 

497 
); 

3089  498 

4748  499 
glBindTexture(GL_TEXTURE_2D, SpritesData[sprite].Texture^.id); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

500 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

501 
VertexBuffer[0].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

502 
VertexBuffer[0].Y:= cWaterLine + WorldDy + dY; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

503 
VertexBuffer[1].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

504 
VertexBuffer[1].Y:= VertexBuffer[0].Y; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

505 
VertexBuffer[2].X:= lw; 
4748  506 
VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprite].Height; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

507 
VertexBuffer[3].X:= lw; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

508 
VertexBuffer[3].Y:= VertexBuffer[2].Y; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

509 

2374  510 
shift:=  lw / cWaveWidth; 
2495  511 
TextureBuffer[0].X:= shift + ((  WorldDx + LongInt(RealTicks shr 6) * Dir + dX) mod cWaveWidth) / (cWaveWidth  1); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

512 
TextureBuffer[0].Y:= 0; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

513 
TextureBuffer[1].X:= TextureBuffer[0].X + waves; 
2447
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

514 
TextureBuffer[1].Y:= TextureBuffer[0].Y; 
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

515 
TextureBuffer[2].X:= TextureBuffer[1].X; 
4748  516 
TextureBuffer[2].Y:= SpritesData[sprite].Texture^.ry; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

517 
TextureBuffer[3].X:= TextureBuffer[0].X; 
2447
08d623a494e6
Smaxx's updated german translation + texture gap fixes + updated room list
koda
parents:
2434
diff
changeset

518 
TextureBuffer[3].Y:= TextureBuffer[2].Y; 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

519 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

520 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

521 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

522 
glTexCoordPointer(2, GL_FLOAT, 0, @TextureBuffer[0]); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

523 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

524 

3390  525 
Tint($FF, $FF, $FF, $FF); 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

526 

87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

527 
{for i:= 1 to cWaterSprCount do 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

528 
DrawSprite(sprWater, 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

529 
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth)  (cScreenWidth div 2), 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

530 
cWaterLine + WorldDy + dY, 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

531 
0)} 
2288  532 
end; 
533 

3089  534 
procedure DrawRepeated(spr, sprL, sprR: TSprite; Shift, OffsetY: LongInt); 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

535 
var i, w, h, lw, lh, rw, rh, sw: LongInt; 
2426  536 
begin 
3405  537 
sw:= round(cScreenWidth / cScaleFactor); 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

538 
if ((SpritesData[sprL].Texture = nil) or (SpritesData[sprR].Texture = nil)) and (SpritesData[spr].Texture <> nil) then 
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

539 
begin 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

540 
w:= SpritesData[spr].Width * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

541 
h:= SpritesData[spr].Height * SpritesData[spr].Texture^.Scale; 
3405  542 
i:= Shift mod w; 
543 
if i > 0 then dec(i, w); 

544 
dec(i, w * (sw div w + 1)); 

545 
repeat 

3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

546 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  h, SpritesData[spr].Texture, SpritesData[spr].Texture^.Scale); 
3405  547 
inc(i, w) 
548 
until i > sw 

5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

549 
end 
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

550 
else if SpritesData[spr].Texture <> nil then 
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

551 
begin 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

552 
w:= SpritesData[spr].Width * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

553 
h:= SpritesData[spr].Height * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

554 
lw:= SpritesData[sprL].Width * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

555 
lh:= SpritesData[sprL].Height * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

556 
rw:= SpritesData[sprR].Width * SpritesData[spr].Texture^.Scale; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

557 
rh:= SpritesData[sprR].Height * SpritesData[spr].Texture^.Scale; 
3405  558 
dec(Shift, w div 2); 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

559 
DrawTexture(Shift, WorldDy + LAND_HEIGHT + OffsetY  h, SpritesData[spr].Texture, SpritesData[spr].Texture^.Scale); 
3697  560 

3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

561 
i:= Shift  lw; 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

562 
while i >= sw  lw do 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

563 
begin 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

564 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  lh, SpritesData[sprL].Texture, SpritesData[sprL].Texture^.Scale); 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

565 
dec(i, lw); 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

566 
end; 
3697  567 

3405  568 
i:= Shift + w; 
569 
while i <= sw do 

5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

570 
begin 
3537
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

571 
DrawTexture(i, WorldDy + LAND_HEIGHT + OffsetY  rh, SpritesData[sprR].Texture, SpritesData[sprR].Texture^.Scale); 
8f5b3108f29c
New approach to the lowres problem. Basically, we already have a 1024 minimum, and the tallest maps are restricting themselves to 2048 maximum. All backgrounds are scaled down 50%, then scaled up on draw. Saves memory, and backgrounds are already deliberately fuzzed for depth of field anyway.
nemo
parents:
3523
diff
changeset

572 
inc(i, rw) 
5285
af4dc03dd60d
Make sky, horizon, flakes and clouds optional, replace repeated strips of skyL/skyR with 2x2 transparent PNGs instead of larger images of variable dimensions, remove a number of empty unused images
nemo
parents:
5191
diff
changeset

573 
end 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

574 
end 
2426  575 
end; 
576 

577 

956  578 
procedure DrawWorld(Lag: LongInt); 
4  579 
begin 
3523  580 
if not isPaused then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

581 
begin 
3523  582 
if ZoomValue < zoom then 
3444  583 
begin 
3523  584 
zoom:= zoom  0.002 * Lag; 
3697  585 
if ZoomValue > zoom then 
3523  586 
zoom:= ZoomValue 
3697  587 
end 
3774  588 
else 
3523  589 
if ZoomValue > zoom then 
3444  590 
begin 
3523  591 
zoom:= zoom + 0.002 * Lag; 
592 
if ZoomValue < zoom then 

593 
zoom:= ZoomValue 

3611  594 
end 
3444  595 
end 
3611  596 
else 
597 
ZoomValue:= zoom; 

2376  598 

3611  599 
// Sky 
600 
glClear(GL_COLOR_BUFFER_BIT); 

601 
//glPushMatrix; 

602 
//glScalef(1.0, 1.0, 1.0); 

756  603 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

604 
if not isPaused then 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

605 
MoveCamera; 
162  606 

3696  607 
if cStereoMode = smNone then 
608 
begin 

3692  609 
glClear(GL_COLOR_BUFFER_BIT); 
610 
DrawWorldStereo(Lag, rmDefault) 

3696  611 
end 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

612 
{$IFNDEF S3D_DISABLED} 
3696  613 
else if (cStereoMode = smAFR) then 
614 
begin 

615 
AFRToggle:= not AFRToggle; 

616 
glClear(GL_COLOR_BUFFER_BIT); 

617 
if AFRToggle then 

618 
DrawWorldStereo(Lag, rmLeftEye) 

619 
else 

620 
DrawWorldStereo(Lag, rmRightEye) 

621 
end 

622 
else if (cStereoMode = smHorizontal) or (cStereoMode = smVertical) then 

623 
begin 

3692  624 
// create left fb 
625 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framel); 

626 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

627 
DrawWorldStereo(Lag, rmLeftEye); 

628 

629 
// create right fb 

630 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framer); 

631 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

632 
DrawWorldStereo(0, rmRightEye); 

633 

634 
// detatch drawing from fbs 

635 
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 

636 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

637 
SetScale(cDefaultZoomLevel); 

638 

639 
// draw left frame 

640 
glBindTexture(GL_TEXTURE_2D, texl); 

641 
glBegin(GL_QUADS); 

3696  642 
if cStereoMode = smHorizontal then 
643 
begin 

644 
glTexCoord2f(0.0, 0.0); 

645 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

646 
glTexCoord2f(1.0, 0.0); 

647 
glVertex2d(0, cScreenHeight); 

648 
glTexCoord2f(1.0, 1.0); 

649 
glVertex2d(0, 0); 

650 
glTexCoord2f(0.0, 1.0); 

651 
glVertex2d(cScreenWidth / 2, 0); 

652 
end 

653 
else 

654 
begin 

655 
glTexCoord2f(0.0, 0.0); 

656 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

657 
glTexCoord2f(1.0, 0.0); 

658 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

659 
glTexCoord2f(1.0, 1.0); 

660 
glVertex2d(cScreenWidth / 2, 0); 

661 
glTexCoord2f(0.0, 1.0); 

662 
glVertex2d(cScreenWidth / 2, 0); 

663 
end; 

3692  664 
glEnd(); 
665 

666 
// draw right frame 

667 
glBindTexture(GL_TEXTURE_2D, texr); 

668 
glBegin(GL_QUADS); 

3696  669 
if cStereoMode = smHorizontal then 
670 
begin 

671 
glTexCoord2f(0.0, 0.0); 

672 
glVertex2d(0, cScreenHeight); 

673 
glTexCoord2f(1.0, 0.0); 

674 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

675 
glTexCoord2f(1.0, 1.0); 

676 
glVertex2d(cScreenWidth / 2, 0); 

677 
glTexCoord2f(0.0, 1.0); 

678 
glVertex2d(0, 0); 

679 
end 

680 
else 

681 
begin 

682 
glTexCoord2f(0.0, 0.0); 

683 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

684 
glTexCoord2f(1.0, 0.0); 

685 
glVertex2d(cScreenWidth / 2, cScreenHeight); 

686 
glTexCoord2f(1.0, 1.0); 

687 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

688 
glTexCoord2f(0.0, 1.0); 

689 
glVertex2d(cScreenWidth / 2, cScreenHeight / 2); 

690 
end; 

3692  691 
glEnd(); 
692 
SetScale(zoom); 

3696  693 
end 
694 
else 

695 
begin 

696 
// clear scene 

697 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 

698 
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); 

699 
// draw left eye in red channel only 

700 
if cStereoMode = smGreenRed then 

701 
glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE) 

702 
else if cStereoMode = smBlueRed then 

703 
glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE) 

704 
else if cStereoMode = smCyanRed then 

705 
glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE) 

706 
else 

707 
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); 

708 
DrawWorldStereo(Lag, rmLeftEye); 

709 
// draw right eye in selected channel(s) only 

710 
if cStereoMode = smRedGreen then 

711 
glColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE) 

712 
else if cStereoMode = smRedBlue then 

713 
glColorMask(GL_FALSE, GL_FALSE, GL_TRUE, GL_TRUE) 

714 
else if cStereoMode = smRedCyan then 

715 
glColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_TRUE) 

716 
else 

717 
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_TRUE); 

718 
DrawWorldStereo(Lag, rmRightEye); 

719 
end 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

720 
{$ENDIF} 
3692  721 
end; 
722 

723 
procedure ChangeDepth(rm: TRenderMode; d: GLfloat); 

724 
begin 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

725 
{$IFDEF S3D_DISABLED} 
4850  726 
rm:= rm; d:= d; // avoid hint 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

727 
exit; 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

728 
{$ELSE} 
3696  729 
d:= d / 5; 
3692  730 
if rm = rmDefault then exit 
3696  731 
else if rm = rmLeftEye then d:= d; 
3692  732 
stereoDepth:= stereoDepth + d; 
733 
glMatrixMode(GL_PROJECTION); 

734 
glTranslatef(d, 0, 0); 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

735 
glMatrixMode(GL_MODELVIEW); 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

736 
{$ENDIF} 
3692  737 
end; 
738 

739 
procedure ResetDepth(rm: TRenderMode); 

740 
begin 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

741 
{$IFDEF S3D_DISABLED} 
4850  742 
rm:= rm; // avoid hint 
4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

743 
exit; 
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

744 
{$ELSE} 
3692  745 
if rm = rmDefault then exit; 
746 
glMatrixMode(GL_PROJECTION); 

747 
glTranslatef(stereoDepth, 0, 0); 

748 
glMatrixMode(GL_MODELVIEW); 

749 
stereoDepth:= 0; 

4347
0ddb100fea61
add a S3D_DISABLED symbol to disable/enable stereo rendering at compilation time
koda
parents:
4345
diff
changeset

750 
{$ENDIF} 
3692  751 
end; 
752 

753 
procedure DrawWorldStereo(Lag: LongInt; RM: TRenderMode); 

754 
var i, t: LongInt; 

755 
r: TSDL_Rect; 

756 
tdx, tdy: Double; 

757 
s: string[15]; 

758 
highlight: Boolean; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

759 
smallScreenOffset, offsetX, offsetY, screenBottom: LongInt; 
3692  760 
VertexBuffer: array [0..3] of TVertex2f; 
761 
begin 

3611  762 
if (cReducedQuality and rqNoBackground) = 0 then 
1812  763 
begin 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

764 
// Offsets relative to camera  spare them to wimpier cpus, no bg or flakes for them anyway 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

765 
ScreenBottom:= (WorldDy  trunc(cScreenHeight/cScaleFactor)  (cScreenHeight div 2) + cWaterLine); 
4374  766 
offsetY:= 10 * Min(0, 145  ScreenBottom); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

767 
SkyOffset:= offsetY div 35 + cWaveHeight; 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

768 
HorizontOffset:= SkyOffset; 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

769 
if ScreenBottom > SkyOffset then 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

770 
HorizontOffset:= HorizontOffset + ((ScreenBottomSkyOffset) div 20); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

771 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

772 
// background 
3688  773 
ChangeDepth(RM, cStereo_Sky); 
4835
a6924450e694
added rqsky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4810
diff
changeset

774 
if SuddenDeathDmg then Tint(SDTint, SDTint, SDTint, $FF); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

775 
DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8, SkyOffset); 
3688  776 
ChangeDepth(RM, cStereo_Horizon); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

777 
DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5, HorizontOffset); 
4835
a6924450e694
added rqsky to themes so it can set sky color for low quality. also added tint of sky on sudden death. underwater theme is an example of this
Henek
parents:
4810
diff
changeset

778 
if SuddenDeathDmg then Tint($FF, $FF, $FF, $FF); 
3611  779 
end; 
4  780 

3611  781 
DrawVisualGears(0); 
3697  782 

3611  783 
if (cReducedQuality and rq2DWater) = 0 then 
784 
begin 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

785 
// Waves 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

786 
DrawWater(255, SkyOffset); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

787 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

788 
DrawWaves( 1, 0  WorldDx div 32,  cWaveHeight + offsetY div 35, 64); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

789 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

790 
DrawWaves( 1, 25 + WorldDx div 25,  cWaveHeight + offsetY div 38, 48); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

791 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

792 
DrawWaves( 1, 75  WorldDx div 19,  cWaveHeight + offsetY div 45, 32); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

793 
ChangeDepth(RM, cStereo_Water_distant); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

794 
DrawWaves(1, 100 + WorldDx div 14,  cWaveHeight + offsetY div 70, 24); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

795 
end 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

796 
else 
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

797 
DrawWaves(1, 100,  (cWaveHeight + (cWaveHeight shr 1)), 0); 
4  798 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

799 
changeDepth(RM, cStereo_Land); 
3611  800 
DrawLand(WorldDx, WorldDy); 
1911  801 

3611  802 
DrawWater(255, 0); 
4  803 

1660  804 
// Attack bar 
5862  805 
if CurrentTeam <> nil then 
3611  806 
case AttackBar of 
1660  807 
(* 1: begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

808 
r:= StuffPoz[sPowerBar]; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

809 
{$WARNINGS OFF} 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

810 
r.w:= (CurrentHedgehog^.Gear^.Power * 256) div cPowerDivisor; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

811 
{$WARNINGS ON} 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

812 
DrawSpriteFromRect(r, cScreenWidth  272, cScreenHeight  48, 16, 0, Surface); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

813 
end;*) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

814 
2: with CurrentHedgehog^ do 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

815 
begin 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

816 
tdx:= hwSign(Gear^.dX) * Sin(Gear^.Angle * Pi / cMaxAngle); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

817 
tdy:=  Cos(Gear^.Angle * Pi / cMaxAngle); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

818 
for i:= (Gear^.Power * 24) div cPowerDivisor downto 0 do 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

819 
DrawSprite(sprPower, 
4159
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
4132
diff
changeset

820 
hwRound(Gear^.X) + GetLaunchX(CurAmmoType, hwSign(Gear^.dX), Gear^.Angle) + LongInt(round(WorldDx + tdx * (24 + i * 2)))  16, 
64e677349124
REmove stupid int64 conversions, provide real fixes to compiler hints
unc0rr
parents:
4132
diff
changeset

821 
hwRound(Gear^.Y) + GetLaunchY(CurAmmoType, Gear^.Angle) + LongInt(round(WorldDy + tdy * (24 + i * 2)))  16, 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

822 
i) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

823 
end 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

824 
end; 
1660  825 

3611  826 
DrawVisualGears(1); 
827 
DrawGears; 

4  828 

4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

829 
if SuddenDeathDmg then 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

830 
DrawWater(cSDWaterOpacity, 0) 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

831 
else 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

832 
DrawWater(cWaterOpacity, 0); 
2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

833 

3611  834 
// Waves 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

835 
ChangeDepth(RM, cStereo_Water_near); 
3611  836 
DrawWaves( 1, 25  WorldDx div 9,  cWaveHeight, 12); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

837 

3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

838 
if (cReducedQuality and rq2DWater) = 0 then 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

839 
begin 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

840 
//DrawWater(cWaterOpacity,  offsetY div 40); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

841 
ChangeDepth(RM, cStereo_Water_near); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

842 
DrawWaves(1, 50 + WorldDx div 6,  cWaveHeight  offsetY div 40, 8); 
4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

843 
if SuddenDeathDmg then 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

844 
DrawWater(cSDWaterOpacity,  offsetY div 20) 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

845 
else 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

846 
DrawWater(cWaterOpacity,  offsetY div 20); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

847 
ChangeDepth(RM, cStereo_Water_near); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

848 
DrawWaves( 1, 75  WorldDx div 4,  cWaveHeight  offsetY div 20, 2); 
4792
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

849 
if SuddenDeathDmg then 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

850 
DrawWater(cSDWaterOpacity,  offsetY div 10) 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

851 
else 
68f9b331014a
sudden death changes: only change visual bit on health decrease and support for water transparancy change and clouds number change
Henek
parents:
4748
diff
changeset

852 
DrawWater(cWaterOpacity,  offsetY div 10); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

853 
ChangeDepth(RM, cStereo_Water_near); 
3594
aeca3d8f1b29
turn cReducedQuality into a LongInt and provide a series of quality flags (and best of all, this is still compatible with current frontend)
koda
parents:
3582
diff
changeset

854 
DrawWaves( 1, 25 + WorldDx div 3,  cWaveHeight  offsetY div 10, 0); 
3265
5fe62296fdea
 Parallax effect for horizont when water is out of sight
palewolf
parents:
3249
diff
changeset

855 
end 
3611  856 
else 
857 
DrawWaves(1, 50,  (cWaveHeight shr 1), 0); 

2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

858 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

859 
// everything after this ChangeDepth will be drawn outside the screen 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

860 
// note: negative parallax gears should last very little for a smooth stereo effect 
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

861 
ChangeDepth(RM, cStereo_Outside); 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

862 
DrawVisualGears(2); 
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

863 

c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

864 
// everything after this ResetDepth will be drawn at screen level (depth = 0) 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

865 
// note: everything that needs to be readable should be on this level 
4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

866 
ResetDepth(RM); 
4818
202eef454354
rename "frame alternate" to "wiggle" as it's more appropriate
koda
parents:
4816
diff
changeset

867 
DrawVisualGears(3); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

868 

2288  869 
{$WARNINGS OFF} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

870 
// Target 
3104  871 
if (TargetPoint.X <> NoPointX) and (CurrentTeam <> nil) and (CurrentHedgehog <> nil) then 
872 
begin 

873 
with PHedgehog(CurrentHedgehog)^ do 

874 
begin 

5372
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

875 
if CurAmmoType = amBee then 
3110  876 
DrawRotatedF(sprTargetBee, TargetPoint.X + WorldDx, TargetPoint.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) 
877 
else 

5372
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

878 
DrawRotatedF(sprTargetP, TargetPoint.X + WorldDx, TargetPoint.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) 
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

879 
end 
3104  880 
end; 
4  881 
{$WARNINGS ON} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

882 

3523  883 
// this scale is used to keep the various widgets at the same dimension at all zoom levels 
884 
SetScale(cDefaultZoomLevel); 

2724  885 

886 
// Turn time 

5326  887 
{$IFDEF MOBILE} 
3025  888 
offsetX:= cScreenHeight  13; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

889 
{$ELSE} 
3025  890 
offsetX:= 48; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

891 
{$ENDIF} 
3463  892 
offsetY:= cOffsetY; 
3890
e4b7b30232fd
Extend time limit to 9999, remove ready timer if time is over 999 and stop drawing time if it is over 999 (draws wrong over 999 anyway)  this has the effect of allowing an "unlimited" time appearance if turns are over a quarter hour or so. This can be used to add an unlimited time scheme or button to ipad
nemo
parents:
3836
diff
changeset

893 
if ((TurnTimeLeft <> 0) and (TurnTimeLeft < 1000000)) or (ReadyTimeLeft <> 0) then 
3774  894 
begin 
895 
if ReadyTimeLeft <> 0 then 

896 
i:= Succ(Pred(ReadyTimeLeft) div 1000) 

897 
else 

898 
i:= Succ(Pred(TurnTimeLeft) div 1000); 

899 

4  900 
if i>99 then t:= 112 
901 
else if i>9 then t:= 96 

902 
else t:= 80; 

3463  903 
DrawSprite(sprFrame, (cScreenWidth shr 1) + t + offsetY, cScreenHeight  offsetX, 1); 
4  904 
while i > 0 do 
905 
begin 

906 
dec(t, 32); 

3463  907 
DrawSprite(sprBigDigit, (cScreenWidth shr 1) + t + offsetY, cScreenHeight  offsetX, i mod 10); 
4  908 
i:= i div 10 
909 
end; 

3463  910 
DrawSprite(sprFrame, (cScreenWidth shr 1) + t  4 + offsetY, cScreenHeight  offsetX, 0); 
4  911 
end; 
79  912 

4  913 
// Captions 
4393  914 
DrawCaptions; 
4  915 

5828
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5824
diff
changeset

916 
// Draw buttons Related to the Touch interface 
667fb58d7f18
Changed firebutton, parameters in uTouch might need to be tweaked some more
Xeli
parents:
5824
diff
changeset

917 
DrawTexture(Round(cScreenWidth*0.5 + cScreenHeight*0.02),Round((cScreenHeight*0.98)(spritesData[sprFireButton].Height*0.4) ),spritesData[sprFireButton].Texture, 0.4); 
5619
2ec22ebeb6f5
added a visual fire button, isOnFireButton check needs to be fixed though it only works on 800x480 screens
Xeli
parents:
5530
diff
changeset

918 

47  919 
// Teams Healths 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

920 
if TeamsCount * 20 > cScreenHeight div 7 then // take up less screen on small displays 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

921 
begin 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

922 
SetScale(1.5); 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

923 
smallScreenOffset:= cScreenHeight div 6; 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

924 
if TeamsCount * 20 > cScreenHeight div 5 then Tint($FF,$FF,$FF,$80); 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

925 
end 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

926 
else smallScreenOffset:= 0; 
547  927 
for t:= 0 to Pred(TeamsCount) do 
928 
with TeamsArray[t]^ do 

47  929 
begin 
2839  930 
highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500); 
3697  931 

2747  932 
if highlight then 
4810  933 
Tint(Clan^.Color shl 8 or $FF); 
2839  934 

935 
// draw name 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

936 
DrawTexture(NameTagTex^.w  16, cScreenHeight + DrawHealthY + smallScreenOffset, NameTagTex); 
3697  937 

2839  938 
// draw flag 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

939 
DrawTexture(14, cScreenHeight + DrawHealthY + smallScreenOffset, FlagTex); 
3697  940 

2839  941 
// draw health bar 
690  942 
r.x:= 0; 
943 
r.y:= 0; 

547  944 
r.w:= 2 + TeamHealthBarWidth; 
764
7513452b1d51
Now game looks almost like it did before switching to OpenGL
unc0rr
parents:
762
diff
changeset

945 
r.h:= HealthTex^.h; 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

946 
DrawFromRect(14, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex); 
690  947 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

948 
// draw health bars right border 
83  949 
inc(r.x, cTeamHealthWidth + 2); 
950 
r.w:= 3; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

951 
DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY + smallScreenOffset, @r, HealthTex); 
3770  952 

953 
// draw ai kill counter for gfAISurvival 

954 
if (GameFlags and gfAISurvival) <> 0 then begin 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

955 
DrawTexture(TeamHealthBarWidth + 22, cScreenHeight + DrawHealthY + smallScreenOffset, 
3773  956 
AIKillsTex); 
3770  957 
end; 
958 

2839  959 
// if highlighted, draw flag and other contents again to keep their colors 
960 
// this approach should be faster than drawing all borders one by one tinted or not 

961 
if highlight then 

962 
begin 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

963 
if TeamsCount * 20 > cScreenHeight div 5 then Tint($FF,$FF,$FF,$80) 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

964 
else Tint($FF, $FF, $FF, $FF); 
690  965 

2839  966 
// draw name 
2747  967 
r.x:= 2; 
968 
r.y:= 2; 

2839  969 
r.w:= NameTagTex^.w  4; 
970 
r.h:= NameTagTex^.h  4; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

971 
DrawFromRect(NameTagTex^.w  14, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, NameTagTex); 
2839  972 
// draw flag 
2747  973 
r.w:= 22; 
974 
r.h:= 15; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

975 
DrawFromRect(12, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, FlagTex); 
2839  976 
// draw health bar 
977 
r.w:= TeamHealthBarWidth + 1; 

978 
r.h:= HealthTex^.h  4; 

5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

979 
DrawFromRect(16, cScreenHeight + DrawHealthY + smallScreenOffset + 2, @r, HealthTex); 
2747  980 
end; 
47  981 
end; 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

982 
if smallScreenOffset <> 0 then 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

983 
begin 
5485  984 
SetScale(cDefaultZoomLevel); 
5380
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

985 
if TeamsCount * 20 > cScreenHeight div 5 then Tint($FF,$FF,$FF,$FF); 
6ba1e40a360c
Based on some user complaints on forum, try to reduce impact of teams on small displays.
nemo
parents:
5372
diff
changeset

986 
end; 
47  987 

5  988 
// Lag alert 
2567  989 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  990 

5  991 
// Wind bar 
5326  992 
{$IFDEF MOBILE} 
3405  993 
offsetX:= cScreenHeight  13; 
994 
offsetY:= (cScreenWidth shr 1) + 74; 

2567  995 
{$ELSE} 
3405  996 
offsetX:= 30; 
997 
offsetY:= 180; 

2567  998 
{$ENDIF} 
3405  999 
DrawSprite(sprWindBar, (cScreenWidth shr 1)  offsetY, cScreenHeight  offsetX, 0); 
1000 
if WindBarWidth > 0 then 

1001 
begin 

1002 
{$WARNINGS OFF} 

1003 
r.x:= 8  (RealTicks shr 6) mod 8; 

1004 
{$WARNINGS ON} 

1005 
r.y:= 0; 

1006 
r.w:= WindBarWidth; 

1007 
r.h:= 13; 

1008 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  offsetY + 77, cScreenHeight  offsetX + 2, 13, 0); 

1009 
end 

1010 
else 

1011 
if WindBarWidth < 0 then 

1012 
begin 

1013 
{$WARNINGS OFF} 

3407  1014 
r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 8; 
3405  1015 
{$WARNINGS ON} 
1016 
r.y:= 0; 

1017 
r.w:=  WindBarWidth; 

1018 
r.h:= 13; 

1019 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  offsetY + 74 + WindBarWidth, cScreenHeight  offsetX + 2, 13, 0); 

1020 
end; 

5  1021 

161  1022 
// AmmoMenu 
3434  1023 
if (AMxShift < AMWidth) or bShowAmmoMenu then ShowAmmoMenu; 
161  1024 

2287  1025 
// Cursor 
1026 
if isCursorVisible and bShowAmmoMenu then 

1027 
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8); 

942  1028 

4816
c2575faeac3d
use a different depth for different layers (land, water, explosions)
koda
parents:
4812
diff
changeset

1029 
// Chat 
2287  1030 
DrawChat; 
4  1031 

4976  1032 
// various captions 
2567  1033 
if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
1034 
if isPaused then DrawCentered(0, (cScreenHeight shr 1), PauseTexture); 

3774  1035 
if not isFirstFrame and (missionTimer <> 0) or isPaused or fastUntilLag or (GameState = gsConfirm) then 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1036 
begin 
3774  1037 
if (ReadyTimeLeft = 0) and (missionTimer > 0) then dec(missionTimer, Lag); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1038 
if missionTimer < 0 then missionTimer:= 0; // avoid subtracting below 0 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1039 
if missionTex <> nil then 
4374  1040 
DrawCentered(0, Min((cScreenHeight shr 1) + 100, cScreenHeight  48  missionTex^.h), missionTex); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1041 
end; 
2786  1042 

2724  1043 
// fps 
5326  1044 
{$IFDEF MOBILE} 
3463  1045 
offsetX:= 8; 
2724  1046 
{$ELSE} 
3463  1047 
offsetX:= 10; 
2724  1048 
{$ENDIF} 
3463  1049 
offsetY:= cOffsetY; 
3696  1050 
if (RM = rmDefault) or (RM = rmRightEye) then 
3692  1051 
begin 
1052 
inc(Frames); 

2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

1053 

3692  1054 
if cShowFPS or (GameType = gmtDemo) then 
1055 
inc(CountTicks, Lag); 

1056 
if (GameType = gmtDemo) and (CountTicks >= 1000) then 

1057 
begin 

1058 
i:=GameTicks div 1000; 

1059 
t:= i mod 60; 

1060 
s:= inttostr(t); 

1061 
if t < 10 then s:= '0' + s; 

1062 
i:= i div 60; 

1063 
t:= i mod 60; 

1064 
s:= inttostr(t) + ':' + s; 

1065 
if t < 10 then s:= '0' + s; 

1066 
s:= inttostr(i div 60) + ':' + s; 

3407  1067 

3692  1068 
if timeTexture <> nil then 
1069 
FreeTexture(timeTexture); 

1070 
timeTexture:= nil; 

3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3483
diff
changeset

1071 

3692  1072 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 
1073 
tmpSurface:= doSurfaceConversion(tmpSurface); 

1074 
timeTexture:= Surface2Tex(tmpSurface, false); 

1075 
SDL_FreeSurface(tmpSurface) 

1076 
end; 

2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

1077 

3692  1078 
if timeTexture <> nil then 
1079 
DrawTexture((cScreenWidth shr 1)  20  timeTexture^.w  offsetY, offsetX + timeTexture^.h+5, timeTexture); 

2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

1080 

3692  1081 
if cShowFPS then 
1082 
begin 

1083 
if CountTicks >= 1000 then 

1084 
begin 

1085 
FPS:= Frames; 

1086 
Frames:= 0; 

1087 
CountTicks:= 0; 

1088 
s:= inttostr(FPS) + ' fps'; 

1089 
if fpsTexture <> nil then 

1090 
FreeTexture(fpsTexture); 

1091 
fpsTexture:= nil; 

1092 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 

1093 
tmpSurface:= doSurfaceConversion(tmpSurface); 

1094 
fpsTexture:= Surface2Tex(tmpSurface, false); 

1095 
SDL_FreeSurface(tmpSurface) 

1096 
end; 

1097 
if fpsTexture <> nil then 

1098 
DrawTexture((cScreenWidth shr 1)  60  offsetY, offsetX, fpsTexture); 

1099 
end; 

174  1100 

3692  1101 
if CountTicks >= 1000 then CountTicks:= 0; 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

1102 

3692  1103 
// lag warning (?) 
1104 
inc(SoundTimerTicks, Lag); 

1105 
end; 

1106 

174  1107 
if SoundTimerTicks >= 50 then 
1108 
begin 

1109 
SoundTimerTicks:= 0; 

1110 
if cVolumeDelta <> 0 then 

1111 
begin 

1112 
str(ChangeVolume(cVolumeDelta), s); 

2619  1113 
AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) 
174  1114 
end 
756  1115 
end; 
1116 

2724  1117 
if GameState = gsConfirm then 
3025  1118 
DrawCentered(0, (cScreenHeight shr 1), ConfirmTexture); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

1119 

3107  1120 
if ScreenFade <> sfNone then 
1121 
begin 

1122 
if not isFirstFrame then 

1123 
case ScreenFade of 

1124 
sfToBlack, sfToWhite: if ScreenFadeValue + Lag * ScreenFadeSpeed < sfMax then 

1125 
inc(ScreenFadeValue, Lag * ScreenFadeSpeed) 

1126 
else 

3123  1127 
ScreenFadeValue:= sfMax; 
3107  1128 
sfFromBlack, sfFromWhite: if ScreenFadeValue  Lag * ScreenFadeSpeed > 0 then 
1129 
dec(ScreenFadeValue, Lag * ScreenFadeSpeed) 

1130 
else 

3123  1131 
ScreenFadeValue:= 0; 
3107  1132 
end; 
1133 
if ScreenFade <> sfNone then 

1134 
begin 

1135 
case ScreenFade of 

3376  1136 
sfToBlack, sfFromBlack: Tint(0, 0, 0, ScreenFadeValue * 255 div 1000); 
1137 
sfToWhite, sfFromWhite: Tint($FF, $FF, $FF, ScreenFadeValue * 255 div 1000); 

3107  1138 
end; 
3697  1139 

3113  1140 
VertexBuffer[0].X:= cScreenWidth; 
1141 
VertexBuffer[0].Y:= cScreenHeight; 

1142 
VertexBuffer[1].X:= cScreenWidth; 

1143 
VertexBuffer[1].Y:= 0; 

1144 
VertexBuffer[2].X:= cScreenWidth; 

1145 
VertexBuffer[2].Y:= 0; 

1146 
VertexBuffer[3].X:= cScreenWidth; 

1147 
VertexBuffer[3].Y:= cScreenHeight; 

3697  1148 

3376  1149 
glDisable(GL_TEXTURE_2D); 
3641  1150 

3113  1151 
glVertexPointer(2, GL_FLOAT, 0, @VertexBuffer[0]); 
1152 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 

3641  1153 

3376  1154 
glEnable(GL_TEXTURE_2D); 
3390  1155 
Tint($FF, $FF, $FF, $FF); 
3123  1156 
if not isFirstFrame and ((ScreenFadeValue = 0) or (ScreenFadeValue = sfMax)) then ScreenFade:= sfNone 
3107  1157 
end 
1158 
end; 

1159 

3123  1160 
SetScale(zoom); 
1161 

1162 
// Cursor 

1163 
if isCursorVisible then 

1164 
begin 

1165 
if not bShowAmmoMenu then 

3204  1166 
begin 
3123  1167 
with CurrentHedgehog^ do 
3582
4debed8656d7
fix segfault on HHgear being 0 (e.g. after drowning) in cursor/target selection mode, thanks "ivze" for the headsup!
sheepluva
parents:
3580
diff
changeset

1168 
if (Gear <> nil) and ((Gear^.State and gstHHChooseTarget) <> 0) then 
3123  1169 
begin 
5675
cd10d6cba644
add for mine strike too. as cheezemonkey points out, mine bounce is height dependent.
nemo
parents:
5523
diff
changeset

1170 
if (CurAmmoType = amNapalm) or (CurAmmoType = amMineStrike) then 
5372
7283bc768228
Change bee pos sprite, make aiming napalm a little easier, adjust napalm flames to be more centred on the target
nemo
parents:
5302
diff
changeset

1171 
DrawLine(3000, topY300, 7000, topY300, 3.0, (Team^.Clan^.Color shr 16), (Team^.Clan^.Color shr 8) and $FF, Team^.Clan^.Color and $FF, $FF); 
3836
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3811
diff
changeset

1172 
i:= GetAmmoEntry(CurrentHedgehog^)^.Pos; 
833c0f32e326
Change all use of curslot/idx to CurAmmoType to try and avoid some bugs with use of last weapon.
nemo
parents:
3811
diff
changeset

1173 
with Ammoz[CurAmmoType] do 
3123  1174 
if PosCount > 1 then 
3204  1175 
DrawSprite(PosSprite, CursorPoint.X  (SpritesData[PosSprite].Width shr 1), cScreenHeight  CursorPoint.Y  (SpritesData[PosSprite].Height shr 1),i); 
3123  1176 
end; 
3204  1177 
DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8) 
1178 
end 

3123  1179 
end; 
3107  1180 
isFirstFrame:= false 
4  1181 
end; 
1182 

79  1183 
procedure MoveCamera; 
5851
e6151aca2d7c
Focus camera on moving current hog (probably more important to player). Should make tumbler, sine gun play, attacking off rope and saucer more playable. Also fix a typo in prior offset, and compensate for zoom.
nemo
parents:
5848
diff
changeset

1184 
var EdgesDist, wdy, shs,z: LongInt; 
3638
33ee433749ba
touch overlay reworked, improvements to zoom and confirmation
koda
parents:
3629
diff
changeset

1185 
PrevSentPointTime: LongWord = 0; 
4  1186 
begin 
5502  1187 
{$IFNDEF MOBILE} 
5522  1188 
if (not (CurrentTeam^.ExtDriven and isCursorVisible and not bShowAmmoMenu)) and cHasFocus and (GameState <> gsConfirm) then 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

1189 
uCursor.updatePosition(); 
3551  1190 
{$ENDIF} 
5852  1191 
z:= round(200/zoom); 
2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2747
diff
changeset

1192 
if (not PlacingHogs) and (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then 
5851
e6151aca2d7c
Focus camera on moving current hog (probably more important to player). Should make tumbler, sine gun play, attacking off rope and saucer more playable. Also fix a typo in prior offset, and compensate for zoom.
nemo
parents:
5848
diff
changeset

1193 
if (not autoCameraOn) or ((abs(CursorPoint.X  prevPoint.X) + abs(CursorPoint.Y  prevpoint.Y)) > 4) then 
3680  1194 
begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1195 
FollowGear:= nil; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1196 
prevPoint:= CursorPoint; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1197 
exit 
3680  1198 
end 
1199 
else 

1200 
begin 

5852  1201 
CursorPoint.X:= (prevPoint.X * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * z + WorldDx) div 8; 
1202 
CursorPoint.Y:= (prevPoint.Y * 7 + cScreenHeight  (hwRound(FollowGear^.Y)+ hwSign(FollowGear^.dY) * z + WorldDy)) div 8; 

3680  1203 
end; 
4  1204 

2375  1205 
wdy:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine  cVisibleWater; 
1206 
if WorldDy < wdy then WorldDy:= wdy; 

1207 

2197  1208 
if ((CursorPoint.X = prevPoint.X) and (CursorPoint.Y = prevpoint.Y)) then exit; 
4  1209 

3434  1210 
if AMxShift < AMWidth then 
3680  1211 
begin 
5502  1212 
{$IFDEF MOBILE} 
3434  1213 
if CursorPoint.X < cScreenWidth div 2 + AMxShift  AMWidth then CursorPoint.X:= cScreenWidth div 2 + AMxShift  AMWidth; 
1214 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  AMxOffset then CursorPoint.X:= cScreenWidth div 2 + AMxShift  AMxOffset; 

1215 
if CursorPoint.Y < cScreenHeight  AMyOffset  SlotsNum * AMSlotSize then CursorPoint.Y:= cScreenHeight  AMyOffset  SlotsNum * AMSlotSize; 

1216 
if CursorPoint.Y > cScreenHeight  AMyOffset then CursorPoint.Y:= cScreenHeight  AMyOffset; 

3463  1217 
{$ELSE} 
3434  1218 
if CursorPoint.X < cScreenWidth div 2 + AMxShift  AMWidth + AMSlotSize then CursorPoint.X:= cScreenWidth div 2 + AMxShift  AMWidth + AMSlotSize; 
1219 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  AMxOffset then CursorPoint.X:= cScreenWidth div 2 + AMxShift  AMxOffset; 

1220 
if CursorPoint.Y > AMyOffset + (SlotsNum + 1) * AMSlotSize then CursorPoint.Y:= AMyOffset + (SlotsNum + 1) * AMSlotSize; 

1221 
if CursorPoint.Y < AMyOffset + AMSlotSize then CursorPoint.Y:= AMyOffset + AMSlotSize; 

3463  1222 
{$ENDIF} 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1223 
prevPoint:= CursorPoint; 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

1224 
//if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1225 
exit 
3680  1226 
end; 
162  1227 

4  1228 
if isCursorVisible then 
3680  1229 
begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1230 
if (not CurrentTeam^.ExtDriven) and (GameTicks >= PrevSentPointTime + cSendCursorPosTime) then 
3680  1231 
begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1232 
SendIPCXY('P', CursorPoint.X  WorldDx, cScreenHeight  CursorPoint.Y  WorldDy); 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1233 
PrevSentPointTime:= GameTicks 
3680  1234 
end; 
1235 
EdgesDist:= cCursorEdgesDist 

1236 
end 

1237 
else 

1238 
EdgesDist:= cGearScrEdgesDist; 

1239 

1240 
// this generates the border around the screen that moves the camera when cursor is near it 

1241 
if isCursorVisible or (FollowGear <> nil) then 

1242 
begin 

1243 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 

1244 
begin 

1245 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 

1246 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

1247 
end 

1248 
else 

1249 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 

1250 
begin 

1251 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 

1252 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1253 
end; 
5149
9aa840fdf922
Try to allow cursor to reach water when zooming out
unc0rr
parents:
5022
diff
changeset

1254 

5302  1255 
shs:= min(cScreenHeight div 2  trunc(cScreenHeight / cScaleFactor) + EdgesDist, cScreenHeight  EdgesDist); 
5149
9aa840fdf922
Try to allow cursor to reach water when zooming out
unc0rr
parents:
5022
diff
changeset

1256 
if CursorPoint.Y < shs then 
3680  1257 
begin 
5149
9aa840fdf922
Try to allow cursor to reach water when zooming out
unc0rr
parents:
5022
diff
changeset

1258 
WorldDy:= WorldDy + CursorPoint.Y  shs; 
9aa840fdf922
Try to allow cursor to reach water when zooming out
unc0rr
parents:
5022
diff
changeset

1259 
CursorPoint.Y:= shs; 
3680  1260 
end 
1261 
else 

5302  1262 
if (CursorPoint.Y > cScreenHeight  EdgesDist) then 
3680  1263 
begin 
1264 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 

1265 
CursorPoint.Y:= cScreenHeight  EdgesDist 

1266 
end; 

1267 
end 

1268 
else 

1269 
if cHasFocus then 

1270 
begin 

1271 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 

1272 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 

1273 
CursorPoint.X:= 0; 

1274 
CursorPoint.Y:= cScreenHeight div 2; 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1275 
end; 
351  1276 

3680  1277 
// this moves the camera according to CursorPoint X and Y 
4  1278 
prevPoint:= CursorPoint; 
5191
c7000a6b397b
 Implement a thin wrapper over real cursor, which eliminates need in SDL_WarpMouse outside game window
unc0rr
parents:
5149
diff
changeset

1279 
//if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight  CursorPoint.Y); 
1760  1280 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2375  1281 
if WorldDy < wdy then WorldDy:= wdy; 
2426  1282 
if WorldDx <  LAND_WIDTH  1024 then WorldDx:=  LAND_WIDTH  1024; 
1283 
if WorldDx > 1024 then WorldDx:= 1024; 

4  1284 
end; 
1285 

2905  1286 
procedure ShowMission(caption, subcaption, text: ansistring; icon, time : LongInt); 
2786  1287 
var r: TSDL_Rect; 
1288 
begin 

1289 
r.w:= 32; 

1290 
r.h:= 32; 

1291 

1292 
if time = 0 then time:= 5000; 

1293 
missionTimer:= time; 

3697  1294 
if missionTex <> nil then 
3513
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3483
diff
changeset

1295 
FreeTexture(missionTex); 
f589230fa21b
now it's possible to select the scheme file in the ifrontendfix a type about loading an image (iphone file system IS case senstive)
koda
parents:
3483
diff
changeset

1296 
missionTex:= nil; 
2786  1297 

1298 
if icon > 1 then 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1299 
begin 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1300 
r.x:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1301 
r.y:= icon * 32; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1302 
missionTex:= RenderHelpWindow(caption, subcaption, text, '', 0, MissionIcons, @r) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1303 
end 
2786  1304 
else 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1305 
begin 
4626
775f43e90383
fixed showmission so it actually displays the right icons
Henek
parents:
4482
diff
changeset

1306 
r.x:= ((icon  1) shr 4) * 32; 
775f43e90383
fixed showmission so it actually displays the right icons
Henek
parents:
4482
diff
changeset

1307 
r.y:= ((icon  1) mod 16) * 32; 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1308 
missionTex:= RenderHelpWindow(caption, subcaption, text, '', 0, SpritesData[sprAMAmmos].Surface, @r) 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1309 
end; 
2786  1310 
end; 
1311 

1312 
procedure HideMission; 

1313 
begin 

3045  1314 
missionTimer:= 0; 
1315 
if missionTex <> nil then FreeTexture(missionTex); 

2786  1316 
end; 
1317 

3032  1318 
procedure ShakeCamera(amount: LongWord); 
1319 
begin 

5800
3a04c30e5ac7
NEEDS TESTING. Try reenabling camera shake based on unc0rr's comment.
nemo
parents:
5684
diff
changeset

1320 
if isCursorVisible then exit; 
5855
74c621e12baa
I do believe the only thing that was *ever* wrong with camera shake was someone decided to use getRandom on something that had always been a visual effect anyway. Pretty sure WorldDx is in fact safe to modify.
nemo
parents:
5852
diff
changeset

1321 
amount:= Max(1, round(amount*zoom/2)); 
74c621e12baa
I do believe the only thing that was *ever* wrong with camera shake was someone decided to use getRandom on something that had always been a visual effect anyway. Pretty sure WorldDx is in fact safe to modify.
nemo
parents:
5852
diff
changeset

1322 
WorldDx:= WorldDx  amount + LongInt(random(1 + amount * 2)); 
74c621e12baa
I do believe the only thing that was *ever* wrong with camera shake was someone decided to use getRandom on something that had always been a visual effect anyway. Pretty sure WorldDx is in fact safe to modify.
nemo
parents:
5852
diff
changeset

1323 
WorldDy:= WorldDy  amount + LongInt(random(1 + amount * 2)); 
74c621e12baa
I do believe the only thing that was *ever* wrong with camera shake was someone decided to use getRandom on something that had always been a visual effect anyway. Pretty sure WorldDx is in fact safe to modify.
nemo
parents:
5852
diff
changeset

1324 
//CursorPoint.X:= CursorPoint.X  amount + LongInt(random(1 + amount * 2)); 
74c621e12baa
I do believe the only thing that was *ever* wrong with camera shake was someone decided to use getRandom on something that had always been a visual effect anyway. Pretty sure WorldDx is in fact safe to modify.
nemo
parents:
5852
diff
changeset

1325 
//CursorPoint.Y:= CursorPoint.Y  amount + LongInt(random(1 + amount * 2)) 
3032  1326 
end; 
1327 

5521  1328 

1329 
procedure onFocusStateChanged; 

1330 
begin 

1331 
if (not cHasFocus) and (GameState <> gsConfirm) then 

5523  1332 
ParseCommand('quit', true); 
5521  1333 
end; 
1334 

1335 

3038  1336 
procedure initModule; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

1337 
begin 
2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1338 
fpsTexture:= nil; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1339 
FollowGear:= nil; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1340 
WindBarWidth:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1341 
bShowAmmoMenu:= false; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1342 
bSelected:= false; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1343 
bShowFinger:= false; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1344 
Frames:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1345 
WorldDx:= 512; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1346 
WorldDy:= 256; 
3697  1347 

2948
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1348 
FPS:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1349 
CountTicks:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1350 
SoundTimerTicks:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1351 
prevPoint.X:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1352 
prevPoint.Y:= 0; 
3f21a9dc93d0
Replace tabs with spaces using 'expand t 4' command
unc0rr
parents:
2931
diff
changeset

1353 
missionTimer:= 0; 
3240  1354 
missionTex:= nil; 
3463  1355 
cOffsetY:= 0; 
4850  1356 
stereoDepth:= 0; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

1357 
end; 
4  1358 