author  smxx 
Wed, 10 Feb 2010 00:55:40 +0000  
changeset 2786  85f6425a4d74 
parent 2765  8a5685581aeb 
child 2803  1f446fc5c8ec 
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); 
2786  45 
procedure ShowMission(caption, subcaption, text: string; icon, time : LongInt); 
46 
procedure HideMission; 

4  47 

48 
implementation 

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

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

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

53 
GL; 
1906  54 
{$ENDIF} 
1807  55 

4  56 
type TCaptionStr = record 
762  57 
Tex: PTexture; 
4  58 
EndTime: LongWord; 
59 
end; 

60 

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

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

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

63 
AMxShift, SlotsNum: LongInt; 
249adefa9c1c
replace initialization/finalization statements with custom init functions
koda
parents:
2682
diff
changeset

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

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

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

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

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

69 
prevPoint: TPoint; 
2747  70 
amSel: TAmmoType = amNothing; 
2786  71 
missionTex: PTexture; 
72 
missionTimer: LongInt; 

4  73 

74 
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

75 
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

76 
cp: PClan; 
4  77 
begin 
2786  78 
missionTimer:= 0; 
79 

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

80 
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

81 
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

82 
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

83 
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

84 
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

85 
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

86 
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

87 
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

88 
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

89 
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

90 
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

91 
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

92 
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

93 
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

94 
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

95 
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

96 

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

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

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

100 

284  101 
cGearScrEdgesDist:= Min(cScreenWidth div 2  100, cScreenHeight div 2  50); 
74  102 
SDL_WarpMouse(cScreenWidth div 2, cScreenHeight div 2); 
2197  103 
prevPoint.X:= 0; 
74  104 
prevPoint.Y:= cScreenHeight div 2; 
1760  105 
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

106 
WorldDy:=  (LAND_HEIGHT  (playHeight div 2)) + (cScreenHeight div 2); 
1120  107 
AMxShift:= 210 
161  108 
end; 
109 

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

112 
var x, y, i, t, l, g: LongInt; 
371  113 
Slot, Pos: LongInt; 
161  114 
begin 
2428  115 
if (TurnTimeLeft = 0) or (((CurAmmoGear = nil) or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) = 0)) and hideAmmoMenu) then bShowAmmoMenu:= false; 
165  116 
if bShowAmmoMenu then 
117 
begin 

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

118 
FollowGear:= nil; 
1120  119 
if AMxShift = 210 then prevPoint.X:= 0; 
1812  120 
if cReducedQuality then 
121 
AMxShift:= 0 

122 
else 

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

165  124 
end else 
125 
begin 

1120  126 
if AMxShift = 0 then 
165  127 
begin 
2579  128 
CursorPoint.X:= cScreenWidth shr 1; 
129 
CursorPoint.Y:= cScreenHeight shr 1; 

165  130 
prevPoint:= CursorPoint; 
2197  131 
SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y) 
165  132 
end; 
1812  133 
if cReducedQuality then 
134 
AMxShift:= 210 

135 
else 

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

165  137 
end; 
161  138 

139 
if CurrentTeam = nil then exit; 

162  140 
Slot:= 0; 
141 
Pos:= 1; 

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

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

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

145 
SlotsNum:= 0; 
2579  146 
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

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

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

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

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

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

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

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

154 
for i:= cMaxSlotIndex downto 0 do 
2361  155 
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

156 
begin 
2197  157 
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

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

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

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

161 
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

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

164 
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

165 
begin 
2379  166 
if (Ammo^[i, t].AmmoType <> amNothing) then 
167 
begin 

168 
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

169 

2379  170 
if l >= 0 then 
171 
begin 

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

2765  173 
if l < 100 then DrawSprite(sprTurnsLeft, x + g * 33 + 51, y + 17, l); 
2379  174 
end else 
175 
DrawSprite(sprAMAmmos, x + g * 33 + 35, y + 1, LongInt(Ammo^[i, t].AmmoType)1); 

176 
if (Slot = i) 

177 
and (CursorPoint.X >= x + g * 33 + 35) 

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

179 
begin 

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

181 
Pos:= t; 

182 
end; 

183 
inc(g) 

184 
end; 

185 
inc(t) 

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

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

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

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

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

190 

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

191 
if (Pos >= 0) then 
2747  192 
begin 
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

193 
if (Ammo^[Slot, Pos].Count > 0) and (Ammo^[Slot, Pos].AmmoType <> amNothing) then 
2747  194 
if (amSel <> Ammo^[Slot, Pos].AmmoType) or (WeaponTooltipTex = nil) then 
195 
begin 

196 
amSel:= Ammo^[Slot, Pos].AmmoType; 

197 
RenderWeaponTooltip(amSel) 

198 
end; 

199 

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

2376  201 

2747  202 
if Ammo^[Slot, Pos].Count < AMMO_INFINITE then 
203 
DrawTexture(cScreenWidth div 2 + AMxShift  35, cScreenHeight  68, CountTexz[Ammo^[Slot, Pos].Count]); 

2376  204 

2747  205 
if bSelected and (Ammoz[Ammo^[Slot, Pos].AmmoType].SkipTurns  CurrentTeam^.Clan^.TurnNumber < 0) then 
206 
begin 

207 
bShowAmmoMenu:= false; 

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

209 
bSelected:= false; 

210 
FreeWeaponTooltip; 

211 
exit 

212 
end; 

213 
end 

214 
else 

215 
FreeWeaponTooltip; 

216 

217 
if (WeaponTooltipTex <> nil) and (AMxShift = 0) then 

218 
ShowWeaponTooltip(x  WeaponTooltipTex^.w  3, y); 

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

219 
end; 
162  220 

221 
bSelected:= false; 

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

162  225 
procedure MoveCamera; forward; 
226 

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

227 
procedure DrawWater(Alpha: byte); 
1915  228 
var VertexBuffer: array [0..3] of TVertex2f; 
229 
r: TSDL_Rect; 

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

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

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

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

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

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

236 

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

237 
lw:= cScreenWidth / cScaleFactor; 
2378  238 
lh:= trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2 + 16; 
1915  239 
// Water 
2378  240 
r.y:= WorldDy + cWaterLine; 
241 
if WorldDy < trunc(cScreenHeight / cScaleFactor) + cScreenHeight div 2  cWaterLine then 

1915  242 
begin 
243 
if r.y < 0 then r.y:= 0; 

244 

245 
glDisable(GL_TEXTURE_2D); 

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

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

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

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

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

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

253 
VertexBuffer[3].Y:= lh; 
1915  254 

255 
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

256 
glColorPointer(4, GL_UNSIGNED_BYTE, 0, @WaterColorArray[0]); 
1915  257 

258 
glEnableClientState(GL_VERTEX_ARRAY); 

259 
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

260 

1915  261 
glDrawArrays(GL_TRIANGLE_FAN, 0, Length(VertexBuffer)); 
262 

2330  263 
glDisableClientState(GL_VERTEX_ARRAY); 
1915  264 
glDisableClientState(GL_COLOR_ARRAY); 
265 

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

267 
glEnable(GL_TEXTURE_2D) 

268 
end 

269 
end; 

270 

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

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

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

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

277 

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

278 
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

279 

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

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

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

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

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

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

285 
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

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

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

288 

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

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

292 
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

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

294 
TextureBuffer[2].X:= TextureBuffer[1].X; 
2553  295 
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

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

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

298 

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

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

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

301 

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

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

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

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

305 

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

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

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

308 

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

309 

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

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

313 
cWaterLine + WorldDy + dY, 

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

314 
0)} 
2288  315 
end; 
316 

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

319 
begin 

320 
sw:= round(cScreenWidth / cScaleFactor); 

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

322 
begin 

323 
w:= SpritesData[spr].Width; 

324 
i:= Shift mod w; 

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

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

327 
repeat 

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

329 
inc(i, w) 

330 
until i > sw 

331 
end else 

332 
begin 

333 
w:= SpritesData[spr].Width; 

334 
dec(Shift, w div 2); 

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

336 

337 
sw:= round(cScreenWidth / cScaleFactor); 

338 

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

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

341 
begin 

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

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

344 
end; 

345 

346 
i:= Shift + w; 

347 
while i <= sw do 

348 
begin 

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

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

351 
end 

352 
end 

353 
end; 

354 

355 

956  356 
procedure DrawWorld(Lag: LongInt); 
371  357 
var i, t: LongInt; 
4  358 
r: TSDL_Rect; 
107  359 
tdx, tdy: Double; 
175  360 
grp: TCapGroup; 
174  361 
s: string[15]; 
2747  362 
highlight: Boolean; 
2567  363 
offset: LongInt; 
2724  364 
scale: GLfloat; 
4  365 
begin 
2372  366 
if ZoomValue < zoom then 
367 
begin 

2379  368 
zoom:= zoom  0.002 * Lag; 
2374  369 
if ZoomValue > zoom then zoom:= ZoomValue 
2372  370 
end else 
371 
if ZoomValue > zoom then 

372 
begin 

2379  373 
zoom:= zoom + 0.002 * Lag; 
2374  374 
if ZoomValue < zoom then zoom:= ZoomValue 
2372  375 
end; 
2376  376 

770  377 
// Sky 
756  378 
glClear(GL_COLOR_BUFFER_BIT); 
379 
glEnable(GL_BLEND); 

775  380 
glEnable(GL_TEXTURE_2D); 
777  381 
//glPushMatrix; 
382 
//glScalef(1.0, 1.0, 1.0); 

756  383 

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

384 
if not isPaused then MoveCamera; 
162  385 

1812  386 
if not cReducedQuality then 
387 
begin 

388 
// background 

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

4  391 

1812  392 
DrawVisualGears(0); 
2288  393 
end; 
803  394 

2288  395 
// Waves 
2579  396 
DrawWaves( 1, 0,  (cWaveHeight shl 1)); 
397 
DrawWaves(1, 100,  (cWaveHeight + (cWaveHeight shr 1))); 

1812  398 

4  399 

762  400 
DrawLand(WorldDx, WorldDy); 
1911  401 

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

402 
DrawWater(255); 
4  403 

1660  404 
// Attack bar 
405 
if CurrentTeam <> nil then 

406 
case AttackBar of 

407 
(* 1: begin 

408 
r:= StuffPoz[sPowerBar]; 

409 
{$WARNINGS OFF} 

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

411 
{$WARNINGS ON} 

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

413 
end;*) 

414 
2: with CurrentHedgehog^ do 

415 
begin 

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

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

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

419 
DrawSprite(sprPower, 

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

1660  422 
i) 
423 
end 

424 
end; 

425 

2713  426 
DrawVisualGears(1); 
427 

956  428 
DrawGears; 
4  429 

2713  430 
DrawVisualGears(2); 
1045  431 

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

433 

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

438 

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

439 

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

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

442 
if TargetPoint.X <> NoPointX then DrawSprite(sprTargetP, TargetPoint.X + WorldDx  16, TargetPoint.Y + WorldDy  16, 0); 
4  443 
{$WARNINGS ON} 
2161
0c8634241fa4
Some work on zooming. Hedgewars are now unplayable.
unc0rr
parents:
2152
diff
changeset

444 

2567  445 
{$IFDEF IPHONEOS} 
2724  446 
scale:= 1.5; 
2567  447 
{$ELSE} 
2724  448 
scale:= 2.0; 
449 
{$ENDIF} 

450 
SetScale(scale); 

451 

452 

453 
// Turn time 

2567  454 
offset:= 48; 
4  455 
if TurnTimeLeft <> 0 then 
456 
begin 

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

458 
if i>99 then t:= 112 

459 
else if i>9 then t:= 96 

460 
else t:= 80; 

2567  461 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  offset, 1); 
4  462 
while i > 0 do 
463 
begin 

464 
dec(t, 32); 

2567  465 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  offset, i mod 10); 
4  466 
i:= i div 10 
467 
end; 

2567  468 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  offset, 0); 
4  469 
end; 
79  470 

2567  471 
{$IFNDEF IPHONEOS} 
2428  472 
// Timetrial 
473 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then 

474 
begin 

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

476 
t:= 272; 

477 
// right frame 

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

479 
dec(t, 32); 

480 
// 1 ms 

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

482 
dec(t, 32); 

483 
i:= i div 10; 

484 
// 10 ms 

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

486 
dec(t, 32); 

487 
i:= i div 10; 

488 
// 100 ms 

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

490 
dec(t, 16); 

491 
// Point 

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

493 
dec(t, 32); 

494 
i:= i div 10; 

495 
// 1 s 

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

497 
dec(t, 32); 

498 
i:= i div 10; 

499 
// 10s 

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

501 
dec(t, 16); 

502 
// Point 

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

504 
dec(t, 32); 

505 
i:= i div 6; 

506 
// 1 m 

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

508 
dec(t, 32); 

509 
i:= i div 10; 

510 
// 10 m 

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

512 
// left frame 

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

514 
end; 

2567  515 
{$ENDIF} 
516 

4  517 
// Captions 
2567  518 
{$IFDEF IPHONEOS} 
2724  519 
offset:= 49; 
2567  520 
{$ELSE} 
2724  521 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then offset:= 48 
522 
else offset:= 8; 

2567  523 
{$ENDIF} 
2428  524 

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

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

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

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

528 
begin 
2724  529 
DrawCentered(0, offset, Tex); 
530 
inc(offset, Tex^.h + 2); 

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

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

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

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

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

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

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

537 
end; 
4  538 

47  539 
// Teams Healths 
2747  540 

547  541 
for t:= 0 to Pred(TeamsCount) do 
542 
with TeamsArray[t]^ do 

47  543 
begin 
2747  544 
highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500); 
545 

546 
if highlight then 

547 
glColor4f(((Clan^.Color shr 16) and $ff) / $ff, ((Clan^.Color shr 8) and $ff) / $ff, (Clan^.Color and $ff) / $ff, 1); 

548 
DrawTexture( NameTagTex^.w  16, cScreenHeight + DrawHealthY, NameTagTex); 

549 

690  550 
r.x:= 0; 
551 
r.y:= 0; 

2747  552 

553 
r.w:= 26; 

554 
r.h:= 19; 

555 
DrawFromRect(14, cScreenHeight + DrawHealthY, @r, FlagTex); 

556 

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

558 
r.h:= HealthTex^.h; 
2747  559 
DrawFromRect(14, cScreenHeight + DrawHealthY, @r, HealthTex); 
690  560 

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

690  563 

2747  564 
DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY, @r, HealthTex); 
565 
if highlight then // if highlighted, draw flag again to keep its colors 

566 
begin 

567 
r.x:= 2; 

568 
r.y:= 2; 

569 
r.w:= 22; 

570 
r.h:= 15; 

571 
glColor4f(1, 1, 1, 1); 

572 
DrawFromRect(12, cScreenHeight + DrawHealthY + 2, @r, FlagTex); 

573 
end; 

47  574 
end; 
575 

5  576 
// Lag alert 
2567  577 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  578 

5  579 
// Wind bar 
2567  580 
{$IFDEF IPHONEOS} 
2724  581 
offset:= 305; 
2567  582 
{$ELSE} 
583 
offset:= 30; 

584 
{$ENDIF} 

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

6  586 
if WindBarWidth > 0 then 
5  587 
begin 
689  588 
{$WARNINGS OFF} 
589 
r.x:= 8  (RealTicks shr 6) mod 8; 

590 
{$WARNINGS ON} 

591 
r.y:= 0; 

592 
r.w:= WindBarWidth; 

593 
r.h:= 13; 

2571  594 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  103, cScreenHeight  offset + 2, 13, 0); 
5  595 
end else 
6  596 
if WindBarWidth < 0 then 
5  597 
begin 
689  598 
{$WARNINGS OFF} 
599 
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; 

600 
{$WARNINGS ON} 

601 
r.y:= 0; 

602 
r.w:=  WindBarWidth; 

603 
r.h:= 13; 

2571  604 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  106 + WindBarWidth, cScreenHeight  offset + 2, 13, 0); 
5  605 
end; 
606 

161  607 
// AmmoMenu 
1120  608 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  609 

2287  610 
// Cursor 
611 
if isCursorVisible and bShowAmmoMenu then 

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

942  613 

2287  614 
DrawChat; 
4  615 

2567  616 
if fastUntilLag then DrawCentered(0, (cScreenHeight shr 1), SyncTexture); 
617 
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

618 

2786  619 
if missionTimer <> 0 then 
620 
begin 

621 
if missionTimer > 0 then dec(missionTimer, Lag); 

622 
if missionTimer < 0 then missionTimer:= 0; // avoid subtracting below 0 

623 
if missionTex <> nil then 

624 
DrawCentered(0, (cScreenHeight shr 1) + 100, missionTex); 

625 
end; 

626 

2724  627 
// fps 
628 
{$IFDEF IPHONEOS} 

629 
offset:= 40; 

630 
{$ELSE} 

631 
offset:= 10; 

632 
{$ENDIF} 

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

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

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

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

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

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

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

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

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

644 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 
2670  645 
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

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

648 
end; 
759  649 
if fpsTexture <> nil then 
2724  650 
DrawTexture((cScreenWidth shr 1)  50, offset, fpsTexture); 
4  651 
end; 
174  652 

2724  653 
// lag warning (?) 
174  654 
inc(SoundTimerTicks, Lag); 
655 
if SoundTimerTicks >= 50 then 

656 
begin 

657 
SoundTimerTicks:= 0; 

658 
if cVolumeDelta <> 0 then 

659 
begin 

660 
str(ChangeVolume(cVolumeDelta), s); 

2619  661 
AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) 
174  662 
end 
756  663 
end; 
664 

2724  665 
if GameState = gsConfirm then 
666 
DrawCentered(0, cScreenHeight div 2, ConfirmTexture); 

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

667 

2162  668 
SetScale(zoom); 
1023  669 

2287  670 
// Cursor 
671 
if isCursorVisible then 

672 
begin 

673 
if not bShowAmmoMenu then 

674 
with CurrentHedgehog^ do 

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

676 
begin 

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

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

679 
if PosCount > 1 then 

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

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

682 
i); 

683 
end; 

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

685 
end; 

686 

687 

775  688 
glDisable(GL_TEXTURE_2D); 
756  689 
glDisable(GL_BLEND) 
4  690 
end; 
691 

108  692 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  693 
begin 
2142  694 
//if Group in [capgrpGameState] then WriteLnToConsole(s); 
762  695 
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); 
4  696 

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

699 
case Group of 

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

701 
else 

2735  702 
Captions[Group].EndTime:= RealTicks + 1400 + LongWord(Captions[Group].Tex^.w) * 3; 
2142  703 
end; 
4  704 
end; 
705 

79  706 
procedure MoveCamera; 
4  707 
const PrevSentPointTime: LongWord = 0; 
2428  708 
var EdgesDist, wdy: LongInt; 
4  709 
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

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

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

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

715 
end; 
678  716 

2762
2fbc8d35eb52
Mode to place hogs at start of game. Will probably need a bit more testing.
nemo
parents:
2747
diff
changeset

717 
if (not PlacingHogs) and (FollowGear <> nil) and (not isCursorVisible) and (not fastUntilLag) then 
1689  718 
if abs(CursorPoint.X  prevPoint.X) + abs(CursorPoint.Y  prevpoint.Y) > 4 then 
719 
begin 

720 
FollowGear:= nil; 

2197  721 
prevPoint:= CursorPoint; 
1689  722 
exit 
723 
end 

724 
else begin 

2198  725 
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; 
2197  726 
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight  (hwRound(FollowGear^.Y) + WorldDy)) div 8; 
1689  727 
end; 
4  728 

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

731 

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

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

736 
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

737 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  10; 
2197  738 
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; 
739 
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; 

1689  740 
prevPoint:= CursorPoint; 
2197  741 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
1689  742 
exit 
743 
end; 

162  744 

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

749 
SendIPCXY('P', CursorPoint.X  WorldDx, cScreenHeight  CursorPoint.Y  WorldDy); 
1689  750 
PrevSentPointTime:= GameTicks 
751 
end; 

752 
end; 

351  753 

4  754 
if isCursorVisible or (FollowGear <> nil) then 
755 
begin 

284  756 
if isCursorVisible then EdgesDist:= cCursorEdgesDist 
757 
else EdgesDist:= cGearScrEdgesDist; 

2197  758 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 
4  759 
begin 
2197  760 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 
761 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

4  762 
end else 
2197  763 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 
4  764 
begin 
2197  765 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 
2198  766 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 
4  767 
end; 
284  768 
if CursorPoint.Y < EdgesDist then 
4  769 
begin 
2197  770 
WorldDy:= WorldDy + CursorPoint.Y  EdgesDist; 
284  771 
CursorPoint.Y:= EdgesDist 
4  772 
end else 
284  773 
if CursorPoint.Y > cScreenHeight  EdgesDist then 
4  774 
begin 
2197  775 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 
284  776 
CursorPoint.Y:= cScreenHeight  EdgesDist 
4  777 
end; 
778 
end else 

308  779 
if cHasFocus then 
780 
begin 

70  781 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 
2197  782 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 
2162  783 
CursorPoint.X:= 0; 
784 
CursorPoint.Y:= cScreenHeight div 2; 

308  785 
end; 
351  786 

4  787 
prevPoint:= CursorPoint; 
2567  788 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight  CursorPoint.Y); 
1760  789 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2375  790 
if WorldDy < wdy then WorldDy:= wdy; 
2426  791 
if WorldDx <  LAND_WIDTH  1024 then WorldDx:=  LAND_WIDTH  1024; 
792 
if WorldDx > 1024 then WorldDx:= 1024; 

4  793 
end; 
794 

2786  795 
procedure ShowMission(caption, subcaption, text: string; icon, time : LongInt); 
796 
var r: TSDL_Rect; 

797 
begin 

798 
r.w:= 32; 

799 
r.h:= 32; 

800 

801 
if time = 0 then time:= 5000; 

802 
missionTimer:= time; 

803 
if missionTex <> nil then FreeTexture(missionTex); 

804 

805 
if icon > 1 then 

806 
begin 

807 
r.x:= 0; 

808 
r.y:= icon * 32; 

809 
missionTex:= RenderHelpWindow(caption, subcaption, text, '', 0, MissionIcons, @r) 

810 
end 

811 
else 

812 
begin 

813 
r.x:= ((icon  1) shr 5) * 32; 

814 
r.y:= ((icon  1) mod 32) * 32; 

815 
missionTex:= RenderHelpWindow(caption, subcaption, text, '', 0, SpritesData[sprAMAmmos].Surface, @r) 

816 
end; 

817 
end; 

818 

819 
procedure HideMission; 

820 
begin 

821 
missionTimer:= 0 

822 
end; 

823 

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

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

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

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

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

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

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

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

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

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

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

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

835 

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

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

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

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

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

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

842 

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

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

844 
end; 
4  845 

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

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

847 
begin 
2786  848 
if missionTex <> nil then FreeTexture(missionTex); 
2716
b9ca1bfca24f
complete the replacement of init/free wrappers for every unit
koda
parents:
2713
diff
changeset

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

850 

4  851 
end. 