author  koda 
Tue, 26 Jan 2010 21:55:51 +0000  
changeset 2716  b9ca1bfca24f 
parent 2713  71250942e95b 
child 2724  601158aaa201 
permissions  rwrr 
4  1 
(* 
1066  2 
* Hedgewars, a free turn based strategy game 
1689  3 
* Copyright (c) 20042009 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"} 
20 

4  21 
unit uWorld; 
22 
interface 

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

23 
uses SDLh, uGears, uConsts, uFloat, uRandom; 
2630  24 

4  25 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

26 
var FollowGear: PGear; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

27 
WindBarWidth: LongInt; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

28 
bShowAmmoMenu: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

29 
bSelected: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

30 
bShowFinger: boolean; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

31 
Frames: Longword; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

32 
WaterColor, DeepWaterColor: TSDL_Color; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

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

35 
{$IFDEF COUNTTICKS} 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

37 
{$ENDIF} 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

38 

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

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

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

41 

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

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

43 
procedure DrawWorld(Lag: LongInt); 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

44 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  45 

46 
implementation 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

47 
uses uStore, uMisc, uTeams, uIO, uConsole, uKeys, uLocale, uSound, uAmmos, uVisualGears, uChat, uLandTexture, uLand, 
2152  48 
{$IFDEF GLES11} 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

49 
gles11; 
1906  50 
{$ELSE} 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

51 
GL; 
1906  52 
{$ENDIF} 
1807  53 

4  54 
type TCaptionStr = record 
762  55 
Tex: PTexture; 
4  56 
EndTime: LongWord; 
57 
end; 

58 

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

59 
var cWaveWidth, cWaveHeight: LongInt; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

60 
Captions: array[TCapGroup] of TCaptionStr; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

61 
AMxShift, SlotsNum: LongInt; 
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; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

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

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

67 
prevPoint: TPoint; 
4  68 

69 
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

70 
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

71 
cp: PClan; 
4  72 
begin 
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

73 
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

74 
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

75 
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

76 
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

77 
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

78 
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

79 
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

80 
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

81 
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

82 
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

83 
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

84 
ClansArray[0]^.ClanIndex:= 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

85 
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

86 
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

87 
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

88 
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

89 

1825  90 
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

91 
//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

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

93 

284  94 
cGearScrEdgesDist:= Min(cScreenWidth div 2  100, cScreenHeight div 2  50); 
74  95 
SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2); 
2197  96 
prevPoint.X:= 0; 
74  97 
prevPoint.Y:= cScreenHeight div 2; 
1760  98 
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

99 
WorldDy:=  (LAND_HEIGHT  (playHeight div 2)) + (cScreenHeight div 2); 
1120  100 
AMxShift:= 210 
161  101 
end; 
102 

956  103 
procedure ShowAmmoMenu; 
161  104 
const MENUSPEED = 15; 
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset

105 
var x, y, i, t, l, g: LongInt; 
371  106 
Slot, Pos: LongInt; 
161  107 
begin 
2428  108 
if (TurnTimeLeft = 0) or (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu) then bShowAmmoMenu:= false; 
165  109 
if bShowAmmoMenu then 
110 
begin 

2226
e35b62cb7a1c
Try turning off follow gear while ammo menu is open  needs testing w/ rope/parachute/jetpack
nemo
parents:
2224
diff
changeset

111 
FollowGear:= nil; 
1120  112 
if AMxShift = 210 then prevPoint.X:= 0; 
1812  113 
if cReducedQuality then 
114 
AMxShift:= 0 

115 
else 

116 
if AMxShift > 0 then dec(AMxShift, MENUSPEED); 

165  117 
end else 
118 
begin 

1120  119 
if AMxShift = 0 then 
165  120 
begin 
2579  121 
CursorPoint.X:= cScreenWidth shr 1; 
122 
CursorPoint.Y:= cScreenHeight shr 1; 

165  123 
prevPoint:= CursorPoint; 
2197  124 
SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y) 
165  125 
end; 
1812  126 
if cReducedQuality then 
127 
AMxShift:= 210 

128 
else 

129 
if AMxShift < 210 then inc(AMxShift, MENUSPEED); 

165  130 
end; 
161  131 

132 
if CurrentTeam = nil then exit; 

162  133 
Slot:= 0; 
134 
Pos:= 1; 

602  135 
with CurrentHedgehog^ do 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

136 
begin 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

137 
if Ammo = nil then exit; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

138 
SlotsNum:= 0; 
2579  139 
x:= (cScreenWidth shr 1)  210 + AMxShift; 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

140 
y:= cScreenHeight  40; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

141 
dec(y); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

142 
DrawSprite(sprAMBorders, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

143 
dec(y); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

144 
DrawSprite(sprAMBorders, x, y, 1); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

145 
dec(y, 33); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

146 
DrawSprite(sprAMSlotName, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

147 
for i:= cMaxSlotIndex downto 0 do 
2361  148 
if ((i = 0) and (Ammo^[i, 1].Count > 0)) or ((i <> 0) and (Ammo^[i, 0].Count > 0)) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

149 
begin 
2197  150 
if (cScreenHeight  CursorPoint.Y >= y  33) and (cScreenHeight  CursorPoint.Y < y) then Slot:= i; 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

151 
dec(y, 33); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

152 
inc(SlotsNum); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

153 
DrawSprite(sprAMSlot, x, y, 0); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

154 
DrawSprite(sprAMSlotKeys, x + 2, y + 1, i); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

155 
t:= 0; 
2581  156 
g:= 0; 
2360
d4d545da9dbe
Ok. This time I think I have it. amNothing should work.
nemo
parents:
2359
diff
changeset

157 
while (t <= cMaxSlotAmmoIndex) and (Ammo^[i, t].Count > 0) do 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

158 
begin 
2379  159 
if (Ammo^[i, t].AmmoType <> amNothing) then 
160 
begin 

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

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

162 

2379  163 
if l >= 0 then 
164 
begin 

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

166 
DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l); 

167 
end else 

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

961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

169 

2379  170 
if (Slot = i) 
171 
and (CursorPoint.X >= x + g * 33 + 35) 

172 
and (CursorPoint.X < x + g * 33 + 68) then 

173 
begin 

174 
if (l < 0) then DrawSprite(sprAMSelection, x + g * 33 + 35, y + 1, 0); 

175 
Pos:= t; 

176 
end; 

177 
inc(g) 

178 
end; 

179 
inc(t) 

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

180 
end 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

181 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

182 
dec(y, 1); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

183 
DrawSprite(sprAMBorders, x, y, 0); 
961
a9a349b2b3fa
Use turnsleft sprites to indicate turns left to activate ammo
unc0rr
parents:
956
diff
changeset

184 

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

185 
if (Pos >= 0) then 
2357
babe1a55e284
Add an empty weapon to avoid selection of weapons which aren't yet ready. Might all be useful to switch to amNothing in certain situations, like after using up all ropes, instead of bazooka.
nemo
parents:
2330
diff
changeset

186 
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

188 
DrawTexture(cScreenWidth div 2  200 + AMxShift, cScreenHeight  68, Ammoz[Ammo^[Slot, Pos].AmmoType].NameTex); 
2376  189 

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

190 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
2198  191 
DrawTexture(cScreenWidth div 2 + AMxShift  35, cScreenHeight  68, CountTexz[Ammo^[Slot, Pos].Count]); 
2376  192 

2434  193 
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber < 0) then 
1529
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

194 
begin 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

195 
bShowAmmoMenu:= false; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

196 
SetWeapon(Ammo^[Slot, Pos].AmmoType); 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

197 
bSelected:= false; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

198 
exit 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

199 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

200 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

201 
end; 
162  202 

203 
bSelected:= false; 

2197  204 
if AMxShift = 0 then DrawSprite(sprArrow, CursorPoint.X, cScreenHeight  CursorPoint.Y, (RealTicks shr 6) mod 8) 
4  205 
end; 
206 

162  207 
procedure MoveCamera; forward; 
208 

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

209 
procedure DrawWater(Alpha: byte); 
1915  210 
var VertexBuffer: array [0..3] of TVertex2f; 
211 
r: TSDL_Rect; 

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

212 
lw, lh: GLfloat; 
1915  213 
begin 
2269
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

214 
WaterColorArray[0].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

215 
WaterColorArray[1].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

216 
WaterColorArray[2].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

217 
WaterColorArray[3].a := Alpha; 
00f5704f5f39
add extra semiopaque layer of water to discolour objects in the water.
nemo
parents:
2268
diff
changeset

218 

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

219 
lw:= cScreenWidth / cScaleFactor; 
2378  220 
lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; 
1915  221 
// Water 
2378  222 
r.y:= WorldDy + cWaterLine; 
223 
if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine then 

1915  224 
begin 
225 
if r.y < 0 then r.y:= 0; 

226 

227 
glDisable(GL_TEXTURE_2D); 

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

228 
VertexBuffer[0].X:= lw; 
1915  229 
VertexBuffer[0].Y:= r.y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

230 
VertexBuffer[1].X:= lw; 
1915  231 
VertexBuffer[1].Y:= r.y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

232 
VertexBuffer[2].X:= lw; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

233 
VertexBuffer[2].Y:= lh; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

234 
VertexBuffer[3].X:= lw; 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

235 
VertexBuffer[3].Y:= lh; 
1915  236 

237 
glEnableClientState (GL_COLOR_ARRAY); 

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

238 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 
1915  239 

240 
glEnableClientState(GL_VERTEX_ARRAY); 

241 
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

242 

1915  243 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
244 

2330  245 
glDisableClientState(GL_VERTEX_ARRAY); 
1915  246 
glDisableClientState(GL_COLOR_ARRAY); 
247 

248 
glColor4f(1, 1, 1, 1); // disable coloring 

249 
glEnable(GL_TEXTURE_2D) 

250 
end 

251 
end; 

252 

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

254 
var VertexBuffer, TextureBuffer: array [0..3] of TVertex2f; 
2374  255 
lw, waves, shift: GLfloat; 
2288  256 
begin 
2292
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

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

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

259 

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

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

261 

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

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

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

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

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

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

267 
VertexBuffer[2].Y:= VertexBuffer[0].Y + SpritesData[sprWater].Height; 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

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

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

270 

2374  271 
shift:=  lw / cWaveWidth; 
2495  272 
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

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

274 
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

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

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

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

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

280 

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

281 
glEnableClientState(GL_VERTEX_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

282 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

283 

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

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

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

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

287 

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

288 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

289 
glDisableClientState(GL_VERTEX_ARRAY); 
87af4ad0ec98
New waves rendering procedure based on using texture coodrinates > 1.0
unc0rr
parents:
2290
diff
changeset

290 

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

291 

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

292 
{for i:= 1 to cWaterSprCount do 
2288  293 
DrawSprite(sprWater, 
294 
i * cWaveWidth + ((WorldDx + (RealTicks shr 6) * Dir + dX) mod cWaveWidth)  (cScreenWidth div 2), 

295 
cWaterLine + WorldDy + dY, 

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

296 
0)} 
2288  297 
end; 
298 

2426  299 
procedure DrawRepeated(spr, sprL, sprR: TSprite; Shift: LongInt); 
300 
var i, w, sw: LongInt; 

301 
begin 

302 
sw:= round(cScreenWidth / cScaleFactor); 

303 
if (SpritesData[sprL].Texture = nil) or (SpritesData[sprR].Texture = nil) then 

304 
begin 

305 
w:= SpritesData[spr].Width; 

306 
i:= Shift mod w; 

307 
if i > 0 then dec(i, w); 

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

309 
repeat 

310 
DrawSprite(spr, i, WorldDy + LAND_HEIGHT  SpritesData[spr].Height, 0); 

311 
inc(i, w) 

312 
until i > sw 

313 
end else 

314 
begin 

315 
w:= SpritesData[spr].Width; 

316 
dec(Shift, w div 2); 

317 
DrawSprite(spr, Shift, WorldDy + LAND_HEIGHT  SpritesData[spr].Height, 0); 

318 

319 
sw:= round(cScreenWidth / cScaleFactor); 

320 

321 
i:= Shift  SpritesData[sprL].Width; 

322 
while i >= sw  SpritesData[sprL].Width do 

323 
begin 

324 
DrawSprite(sprL, i, WorldDy + LAND_HEIGHT  SpritesData[sprL].Height, 0); 

325 
dec(i, SpritesData[sprL].Width); 

326 
end; 

327 

328 
i:= Shift + w; 

329 
while i <= sw do 

330 
begin 

331 
DrawSprite(sprR, i, WorldDy + LAND_HEIGHT  SpritesData[sprR].Height, 0); 

332 
inc(i, SpritesData[sprR].Width) 

333 
end 

334 
end 

335 
end; 

336 

337 

956  338 
procedure DrawWorld(Lag: LongInt); 
371  339 
var i, t: LongInt; 
4  340 
r: TSDL_Rect; 
107  341 
tdx, tdy: Double; 
175  342 
grp: TCapGroup; 
174  343 
s: string[15]; 
2569  344 
{$IFDEF IPHONEOS} 
2567  345 
x,y: LongInt; 
2569  346 
{$ENDIF} 
2567  347 
offset: LongInt; 
4  348 
begin 
2372  349 
if ZoomValue < zoom then 
350 
begin 

2379  351 
zoom:= zoom  0.002 * Lag; 
2374  352 
if ZoomValue > zoom then zoom:= ZoomValue 
2372  353 
end else 
354 
if ZoomValue > zoom then 

355 
begin 

2379  356 
zoom:= zoom + 0.002 * Lag; 
2374  357 
if ZoomValue < zoom then zoom:= ZoomValue 
2372  358 
end; 
2376  359 

770  360 
// Sky 
756  361 
glClear(GL_COLOR_BUFFER_BIT); 
362 
glEnable(GL_BLEND); 

775  363 
glEnable(GL_TEXTURE_2D); 
777  364 
//glPushMatrix; 
365 
//glScalef(1.0, 1.0, 1.0); 

756  366 

2567  367 
{$IFDEF IPHONEOS} 
2671
7e0f88013fe8
smaller patches, one missing Skylowres, IMG_Init and Mix_Init (might require newer libraries), updates to SDL bindings, code cleanup, new compile flags
koda
parents:
2670
diff
changeset

368 
SDL_GetMouseState(@x, @y); 
2682  369 
//WriteLnToConsole('x; ' + inttostr(x) + ' y: ' + inttostr(y)); 
2567  370 
{$ENDIF} 
281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

371 
if not isPaused then MoveCamera; 
162  372 

1812  373 
if not cReducedQuality then 
374 
begin 

375 
// background 

2426  376 
DrawRepeated(sprSky, sprSkyL, sprSkyR, (WorldDx + LAND_WIDTH div 2) * 3 div 8); 
377 
DrawRepeated(sprHorizont, sprHorizontL, sprHorizontR, (WorldDx + LAND_WIDTH div 2) * 3 div 5); 

4  378 

1812  379 
DrawVisualGears(0); 
2288  380 
end; 
803  381 

2288  382 
// Waves 
2579  383 
DrawWaves( 1, 0,  (cWaveHeight shl 1)); 
384 
DrawWaves(1, 100,  (cWaveHeight + (cWaveHeight shr 1))); 

1812  385 

4  386 

762  387 
DrawLand(WorldDx, WorldDy); 
1911  388 

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

389 
DrawWater(255); 
4  390 

1660  391 
// Attack bar 
392 
if CurrentTeam <> nil then 

393 
case AttackBar of 

394 
(* 1: begin 

395 
r:= StuffPoz[sPowerBar]; 

396 
{$WARNINGS OFF} 

397 
r.w:= (CurrentHedgehog^.Gear^.Power * 256) div cPowerDivisor; 

398 
{$WARNINGS ON} 

399 
DrawSpriteFromRect(r, cScreenWidth  272, cScreenHeight  48, 16, 0, Surface); 

400 
end;*) 

401 
2: with CurrentHedgehog^ do 

402 
begin 

403 
tdx:= hwSign(Gear^.dX) * Sin(Gear^.Angle * Pi / cMaxAngle); 

404 
tdy:=  Cos(Gear^.Angle * Pi / cMaxAngle); 

405 
for i:= (Gear^.Power * 24) div cPowerDivisor downto 0 do 

406 
DrawSprite(sprPower, 

2609  407 
hwRound(Gear^.X) + round(WorldDx + tdx * (24 + i * 2))  16, 
408 
hwRound(Gear^.Y) + round(WorldDy + tdy * (24 + i * 2))  12, 

1660  409 
i) 
410 
end 

411 
end; 

412 

2713  413 
DrawVisualGears(1); 
414 

956  415 
DrawGears; 
4  416 

2713  417 
DrawVisualGears(2); 
1045  418 

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

420 

5  421 
// Waves 
2288  422 
DrawWaves( 1, 25,  cWaveHeight); 
2567  423 
DrawWaves(1, 50,  (cWaveHeight shr 1)); 
2288  424 
DrawWaves( 1, 75, 0); 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

425 

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

426 

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

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

429 
if TargetPoint.X <> NoPointX then DrawSprite(sprTargetP, TargetPoint.X + WorldDx  16, TargetPoint.Y + WorldDy  16, 0); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

430 

4  431 
{$WARNINGS ON} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

432 
SetScale(2.0); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

433 

2567  434 
{$IFDEF IPHONEOS} 
435 
offset:= 465; 

436 
{$ELSE} 

437 
offset:= 48; 

438 
{$ENDIF} 

79  439 
// Turn time 
4  440 
if TurnTimeLeft <> 0 then 
441 
begin 

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

443 
if i>99 then t:= 112 

444 
else if i>9 then t:= 96 

445 
else t:= 80; 

2567  446 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  offset, 1); 
4  447 
while i > 0 do 
448 
begin 

449 
dec(t, 32); 

2567  450 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  offset, i mod 10); 
4  451 
i:= i div 10 
452 
end; 

2567  453 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  offset, 0); 
4  454 
end; 
79  455 

2567  456 
{$IFNDEF IPHONEOS} 
2428  457 
// Timetrial 
458 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then 

459 
begin 

460 
if TimeTrialStopTime = 0 then i:= RealTicks  TimeTrialStartTime else i:= TimeTrialStopTime  TimeTrialStartTime; 

461 
t:= 272; 

462 
// right frame 

463 
DrawSprite(sprFrame, cScreenWidth div 2 + t, 8, 1); 

464 
dec(t, 32); 

465 
// 1 ms 

466 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

467 
dec(t, 32); 

468 
i:= i div 10; 

469 
// 10 ms 

470 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

471 
dec(t, 32); 

472 
i:= i div 10; 

473 
// 100 ms 

474 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

475 
dec(t, 16); 

476 
// Point 

477 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, 11); 

478 
dec(t, 32); 

479 
i:= i div 10; 

480 
// 1 s 

481 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

482 
dec(t, 32); 

483 
i:= i div 10; 

484 
// 10s 

485 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 6); 

486 
dec(t, 16); 

487 
// Point 

488 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, 10); 

489 
dec(t, 32); 

490 
i:= i div 6; 

491 
// 1 m 

492 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

493 
dec(t, 32); 

494 
i:= i div 10; 

495 
// 10 m 

496 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, 8, i mod 10); 

497 
// left frame 

498 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, 8, 0); 

499 
end; 

2567  500 
{$ENDIF} 
501 

4  502 
// Captions 
2567  503 
{$IFDEF IPHONEOS} 
504 
i:= 53; 

505 
{$ELSE} 

2428  506 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then i:= 48 else i:= 8; 
2567  507 
{$ENDIF} 
2428  508 

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

509 
for grp:= Low(TCapGroup) to High(TCapGroup) do 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

510 
with Captions[grp] do 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

511 
if Tex <> nil then 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

513 
DrawCentered(0, i, Tex); 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

514 
inc(i, Tex^.h + 2); 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

515 
if EndTime <= RealTicks then 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

517 
FreeTexture(Tex); 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

518 
Tex:= nil; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

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

521 
end; 
4  522 

47  523 
// Teams Healths 
547  524 
for t:= 0 to Pred(TeamsCount) do 
525 
with TeamsArray[t]^ do 

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

527 
DrawTexture( NameTagTex^.w  3, cScreenHeight + DrawHealthY, NameTagTex); 
690  528 

529 
r.x:= 0; 

530 
r.y:= 0; 

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

532 
r.h:= HealthTex^.h; 
690  533 

2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2407
diff
changeset

534 
DrawFromRect(0, cScreenHeight + DrawHealthY, @r, HealthTex); 
690  535 

83  536 
inc(r.x, cTeamHealthWidth + 2); 
537 
r.w:= 3; 

690  538 

2409
dbf195c3e09c
fix a very rare bug in which CurSlot becomes greater than cMaxCurSlot
koda
parents:
2407
diff
changeset

539 
DrawFromRect(TeamHealthBarWidth + 2, cScreenHeight + DrawHealthY, @r, HealthTex); 
47  540 
end; 
541 

5  542 
// Lag alert 
2567  543 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  544 

5  545 
// Wind bar 
2567  546 
{$IFDEF IPHONEOS} 
547 
offset:= 450; 

548 
{$ELSE} 

549 
offset:= 30; 

550 
{$ENDIF} 

551 
DrawSprite(sprWindBar, (cScreenWidth shr 1)  180, cScreenHeight  offset, 0); 

6  552 
if WindBarWidth > 0 then 
5  553 
begin 
689  554 
{$WARNINGS OFF} 
555 
r.x:= 8  (RealTicks shr 6) mod 8; 

556 
{$WARNINGS ON} 

557 
r.y:= 0; 

558 
r.w:= WindBarWidth; 

559 
r.h:= 13; 

2571  560 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  103, cScreenHeight  offset + 2, 13, 0); 
5  561 
end else 
6  562 
if WindBarWidth < 0 then 
5  563 
begin 
689  564 
{$WARNINGS OFF} 
565 
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; 

566 
{$WARNINGS ON} 

567 
r.y:= 0; 

568 
r.w:=  WindBarWidth; 

569 
r.h:= 13; 

2571  570 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  106 + WindBarWidth, cScreenHeight  offset + 2, 13, 0); 
5  571 
end; 
572 

161  573 
// AmmoMenu 
1120  574 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  575 

2287  576 
// Cursor 
577 
if isCursorVisible and bShowAmmoMenu then 

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

942  579 

2567  580 
{$IFNDEF IPHONEOS} 
581 
{* do not draw the chat because a) no input b) too little space*} 

2287  582 
DrawChat; 
2567  583 
{$ENDIF} 
4  584 

2567  585 
if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
586 
if isPaused then DrawCentered(0, (cScreenHeight shr 1), PauseTexture); 

281
5b483aa9f2ab
Pause support (mouse cursor is released when the game is paused)
unc0rr
parents:
244
diff
changeset

587 

4  588 
inc(Frames); 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

589 
if cShowFPS then 
4  590 
begin 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

591 
inc(CountTicks, Lag); 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

592 
if CountTicks >= 1000 then 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

593 
begin 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

594 
FPS:= Frames; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

595 
Frames:= 0; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

596 
CountTicks:= 0; 
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

597 
s:= inttostr(FPS) + ' fps'; 
759  598 
if fpsTexture <> nil then FreeTexture(fpsTexture); 
2665
50b4e544c163
complete transition of longword>sdl_color for TTF bindings
koda
parents:
2630
diff
changeset

599 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 
2670  600 
tmpSurface:= doSurfaceConversion(tmpSurface); 
2290
bf87ca44782e
Selectively enable clamping  seeing if this helps avoid weird flake problems while still fixing vertical lines in waves and sky
nemo
parents:
2288
diff
changeset

601 
fpsTexture:= Surface2Tex(tmpSurface, false); 
759  602 
SDL_FreeSurface(tmpSurface) 
298
112e61bd2cc2
Render FPS value to its own surface one time a second
unc0rr
parents:
295
diff
changeset

603 
end; 
759  604 
if fpsTexture <> nil then 
2567  605 
DrawTexture((cScreenWidth shr 1)  50, 10, fpsTexture); 
4  606 
end; 
174  607 

608 
inc(SoundTimerTicks, Lag); 

609 
if SoundTimerTicks >= 50 then 

610 
begin 

611 
SoundTimerTicks:= 0; 

612 
if cVolumeDelta <> 0 then 

613 
begin 

614 
str(ChangeVolume(cVolumeDelta), s); 

2619  615 
AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) 
174  616 
end 
756  617 
end; 
618 

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

619 
if GameState = gsConfirm then DrawCentered(0, cScreenHeight div 2, ConfirmTexture); 
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

620 

2162  621 
SetScale(zoom); 
1023  622 

2287  623 
// Cursor 
624 
if isCursorVisible then 

625 
begin 

626 
if not bShowAmmoMenu then 

627 
with CurrentHedgehog^ do 

628 
if (Gear^.State and gstHHChooseTarget) <> 0 then 

629 
begin 

630 
i:= Ammo^[CurSlot, CurAmmo].Pos; 

631 
with Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType] do 

632 
if PosCount > 1 then 

633 
DrawSprite(PosSprite, CursorPoint.X  SpritesData[PosSprite].Width div 2, 

634 
cScreenHeight  CursorPoint.Y  SpritesData[PosSprite].Height div 2, 

635 
i); 

636 
end; 

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

638 
end; 

639 

640 

775  641 
glDisable(GL_TEXTURE_2D); 
756  642 
glDisable(GL_BLEND) 
4  643 
end; 
644 

108  645 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  646 
begin 
2142  647 
//if Group in [capgrpGameState] then WriteLnToConsole(s); 
762  648 
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); 
4  649 

762  650 
Captions[Group].Tex:= RenderStringTex(s, Color, fntBig); 
2142  651 

652 
case Group of 

653 
capgrpGameState: Captions[Group].EndTime:= RealTicks + 2200 

654 
else 

2712
8f4527c9137c
Minor tweak, try to make long flavour text last longer, move the hurt self messages to unused messages group, so they don't get wiped by crate an instant later.
nemo
parents:
2704
diff
changeset

655 
Captions[Group].EndTime:= RealTicks + 1400 + Captions[Group].Tex^.w*3; 
2142  656 
end; 
4  657 
end; 
658 

79  659 
procedure MoveCamera; 
4  660 
const PrevSentPointTime: LongWord = 0; 
2428  661 
var EdgesDist, wdy: LongInt; 
4  662 
begin 
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

663 
if (not (CurrentTeam^.ExtDriven and isCursorVisible)) and cHasFocus then 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

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

665 
SDL_GetMouseState(@CursorPoint.X, @CursorPoint.Y); 
2567  666 
CursorPoint.X:= CursorPoint.X  (cScreenWidth shr 1); 
2197  667 
CursorPoint.Y:= cScreenHeight  CursorPoint.Y; 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

668 
end; 
678  669 

2397
2ca4ca6b4bab
 Patch for "Syncronizing" message by Smaxx + some tweaks by me
unc0rr
parents:
2379
diff
changeset

670 
if (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then 
1689  671 
if abs(CursorPoint.X  prevPoint.X) + abs(CursorPoint.Y  prevpoint.Y) > 4 then 
672 
begin 

673 
FollowGear:= nil; 

2197  674 
prevPoint:= CursorPoint; 
1689  675 
exit 
676 
end 

677 
else begin 

2198  678 
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; 
2197  679 
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight  (hwRound(FollowGear^.Y) + WorldDy)) div 8; 
1689  680 
end; 
4  681 

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

684 

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

1120  687 
if AMxShift < 210 then 
1689  688 
begin 
2178
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset

689 
if CursorPoint.X < cScreenWidth div 2 + AMxShift  175 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  175; 
d8b3417b2704
Some fixes on camera broken by zoom code (ammo menu should work now)
unc0rr
parents:
2171
diff
changeset

690 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  10; 
2197  691 
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; 
692 
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; 

1689  693 
prevPoint:= CursorPoint; 
2197  694 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
1689  695 
exit 
696 
end; 

162  697 

4  698 
if isCursorVisible then 
1689  699 
begin 
2197  700 
if (not CurrentTeam^.ExtDriven) and (GameTicks >= PrevSentPointTime + cSendCursorPosTime) then 
1689  701 
begin 
2407
9f413bd5150e
 Fix mouse cursor bugs in net game (still has a bug near water)
unc0rr
parents:
2397
diff
changeset

702 
SendIPCXY('P', CursorPoint.X  WorldDx, cScreenHeight  CursorPoint.Y  WorldDy); 
1689  703 
PrevSentPointTime:= GameTicks 
704 
end; 

705 
end; 

351  706 

4  707 
if isCursorVisible or (FollowGear <> nil) then 
708 
begin 

284  709 
if isCursorVisible then EdgesDist:= cCursorEdgesDist 
710 
else EdgesDist:= cGearScrEdgesDist; 

2197  711 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 
4  712 
begin 
2197  713 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 
714 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

4  715 
end else 
2197  716 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 
4  717 
begin 
2197  718 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 
2198  719 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 
4  720 
end; 
284  721 
if CursorPoint.Y < EdgesDist then 
4  722 
begin 
2197  723 
WorldDy:= WorldDy + CursorPoint.Y  EdgesDist; 
284  724 
CursorPoint.Y:= EdgesDist 
4  725 
end else 
284  726 
if CursorPoint.Y > cScreenHeight  EdgesDist then 
4  727 
begin 
2197  728 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 
284  729 
CursorPoint.Y:= cScreenHeight  EdgesDist 
4  730 
end; 
731 
end else 

308  732 
if cHasFocus then 
733 
begin 

70  734 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 
2197  735 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 
2162  736 
CursorPoint.X:= 0; 
737 
CursorPoint.Y:= cScreenHeight div 2; 

308  738 
end; 
351  739 

4  740 
prevPoint:= CursorPoint; 
2567  741 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight  CursorPoint.Y); 
1760  742 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2375  743 
if WorldDy < wdy then WorldDy:= wdy; 
2426  744 
if WorldDx <  LAND_WIDTH  1024 then WorldDx:=  LAND_WIDTH  1024; 
745 
if WorldDx > 1024 then WorldDx:= 1024; 

4  746 
end; 
747 

2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

748 
procedure init_uWorld; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

749 
begin 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

750 
fpsTexture:= nil; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

751 
FollowGear:= nil; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

752 
WindBarWidth:= 0; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

753 
bShowAmmoMenu:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

754 
bSelected:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

755 
bShowFinger:= false; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

756 
Frames:= 0; 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

757 
WorldDx:= 512; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

758 
WorldDy:= 256; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

759 

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

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

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

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

763 
prevPoint.X:= 0; 
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

764 
prevPoint.Y:= 0; 
2699
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

765 

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

766 
FillChar(Captions, sizeof(Captions), 0) 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

767 
end; 
4  768 

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

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

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

771 

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

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

773 

4  774 
end. 