author  nemo 
Tue, 23 Feb 2010 03:57:27 +0000  
changeset 2851  a9a5ce1d9f23 
parent 2850  f6f8db825ce7 
child 2855  7e6adeb57427 
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; 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

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

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

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

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

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

4  74 

75 
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

76 
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

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

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

81 
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

82 
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

83 
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

84 
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

85 
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

86 
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

87 
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

88 
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

89 
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

90 
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

91 
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

92 
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

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

95 
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

96 
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

97 

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

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

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

101 

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

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

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

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

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

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

123 
else 

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

165  125 
end else 
126 
begin 

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

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

136 
else 

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

165  138 
end; 
161  139 

140 
if CurrentTeam = nil then exit; 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

162 
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

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

165 
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

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

169 
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

170 

2379  171 
if l >= 0 then 
172 
begin 

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

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

177 
if (Slot = i) 

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

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

180 
begin 

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

182 
Pos:= t; 

183 
end; 

184 
inc(g) 

185 
end; 

186 
inc(t) 

1529
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 
end; 
3bc916b419cd
Don't hide ammo menu when user clicks on not yet available weapon
unc0rr
parents:
1439
diff
changeset

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

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

191 

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

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

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

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

198 
RenderWeaponTooltip(amSel) 

199 
end; 

200 

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

2376  202 

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

2376  205 

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

208 
bShowAmmoMenu:= false; 

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

210 
bSelected:= false; 

211 
FreeWeaponTooltip; 

212 
exit 

213 
end; 

214 
end 

215 
else 

216 
FreeWeaponTooltip; 

217 

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

219 
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

220 
end; 
162  221 

222 
bSelected:= false; 

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

162  226 
procedure MoveCamera; forward; 
227 

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

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

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

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

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

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

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

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

237 

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

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

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

245 

246 
glDisable(GL_TEXTURE_2D); 

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

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

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

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

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

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

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

256 
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

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

259 
glEnableClientState(GL_VERTEX_ARRAY); 

260 
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

261 

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

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

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

268 
glEnable(GL_TEXTURE_2D) 

269 
end 

270 
end; 

271 

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

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

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

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

278 

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

279 
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

280 

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

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

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

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

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

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

286 
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

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

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

289 

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

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

293 
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

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

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

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

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

299 

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

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

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

302 

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

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

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

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

306 

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

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

308 
glDisableClientState(GL_VERTEX_ARRAY); 
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 

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

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

314 
cWaterLine + WorldDy + dY, 

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

315 
0)} 
2288  316 
end; 
317 

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

320 
begin 

321 
sw:= round(cScreenWidth / cScaleFactor); 

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

323 
begin 

324 
w:= SpritesData[spr].Width; 

325 
i:= Shift mod w; 

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

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

328 
repeat 

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

330 
inc(i, w) 

331 
until i > sw 

332 
end else 

333 
begin 

334 
w:= SpritesData[spr].Width; 

335 
dec(Shift, w div 2); 

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

337 

338 
sw:= round(cScreenWidth / cScaleFactor); 

339 

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

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

342 
begin 

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

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

345 
end; 

346 

347 
i:= Shift + w; 

348 
while i <= sw do 

349 
begin 

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

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

352 
end 

353 
end 

354 
end; 

355 

356 

956  357 
procedure DrawWorld(Lag: LongInt); 
371  358 
var i, t: LongInt; 
4  359 
r: TSDL_Rect; 
107  360 
tdx, tdy: Double; 
175  361 
grp: TCapGroup; 
174  362 
s: string[15]; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

363 
highlight: Boolean; 
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

364 
offset, offsetX, offsetY: LongInt; 
2724  365 
scale: GLfloat; 
4  366 
begin 
2372  367 
if ZoomValue < zoom then 
368 
begin 

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

373 
begin 

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

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

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

756  384 

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

385 
if not isPaused then MoveCamera; 
162  386 

1812  387 
if not cReducedQuality then 
388 
begin 

389 
// background 

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

4  392 

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

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

1812  399 

4  400 

762  401 
DrawLand(WorldDx, WorldDy); 
1911  402 

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

403 
DrawWater(255); 
4  404 

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

407 
case AttackBar of 

408 
(* 1: begin 

409 
r:= StuffPoz[sPowerBar]; 

410 
{$WARNINGS OFF} 

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

412 
{$WARNINGS ON} 

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

414 
end;*) 

415 
2: with CurrentHedgehog^ do 

416 
begin 

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

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

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

420 
DrawSprite(sprPower, 

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

1660  423 
i) 
424 
end 

425 
end; 

426 

2713  427 
DrawVisualGears(1); 
428 

956  429 
DrawGears; 
4  430 

2713  431 
DrawVisualGears(2); 
1045  432 

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

434 

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

439 

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

440 

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

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

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

445 

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

451 
SetScale(scale); 

452 

453 

454 
// Turn time 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

455 
{$IFDEF IPHONEOS} 
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

456 
offset:= 313; 
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

457 
{$ELSE} 
2567  458 
offset:= 48; 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

459 
{$ENDIF} 
4  460 
if TurnTimeLeft <> 0 then 
461 
begin 

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

463 
if i>99 then t:= 112 

464 
else if i>9 then t:= 96 

465 
else t:= 80; 

2567  466 
DrawSprite(sprFrame, cScreenWidth div 2 + t, cScreenHeight  offset, 1); 
4  467 
while i > 0 do 
468 
begin 

469 
dec(t, 32); 

2567  470 
DrawSprite(sprBigDigit, cScreenWidth div 2 + t, cScreenHeight  offset, i mod 10); 
4  471 
i:= i div 10 
472 
end; 

2567  473 
DrawSprite(sprFrame, cScreenWidth div 2 + t  4, cScreenHeight  offset, 0); 
4  474 
end; 
79  475 

2567  476 
{$IFNDEF IPHONEOS} 
2428  477 
// Timetrial 
478 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then 

479 
begin 

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

481 
t:= 272; 

482 
// right frame 

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

484 
dec(t, 32); 

485 
// 1 ms 

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

487 
dec(t, 32); 

488 
i:= i div 10; 

489 
// 10 ms 

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

491 
dec(t, 32); 

492 
i:= i div 10; 

493 
// 100 ms 

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

495 
dec(t, 16); 

496 
// Point 

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

498 
dec(t, 32); 

499 
i:= i div 10; 

500 
// 1 s 

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

502 
dec(t, 32); 

503 
i:= i div 10; 

504 
// 10s 

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

506 
dec(t, 16); 

507 
// Point 

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

509 
dec(t, 32); 

510 
i:= i div 6; 

511 
// 1 m 

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

513 
dec(t, 32); 

514 
i:= i div 10; 

515 
// 10 m 

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

517 
// left frame 

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

519 
end; 

2567  520 
{$ENDIF} 
521 

4  522 
// Captions 
2567  523 
{$IFDEF IPHONEOS} 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

524 
offset:= 40; 
2567  525 
{$ELSE} 
2724  526 
if ((TrainingFlags and tfTimeTrial) <> 0) and (TimeTrialStartTime > 0) then offset:= 48 
527 
else offset:= 8; 

2567  528 
{$ENDIF} 
2428  529 

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

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

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

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

533 
begin 
2724  534 
DrawCentered(0, offset, Tex); 
535 
inc(offset, Tex^.h + 2); 

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

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

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

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

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

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

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

542 
end; 
4  543 

47  544 
// Teams Healths 
2747  545 

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

47  548 
begin 
2839  549 
highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500); 
550 

2747  551 
if highlight then 
552 
glColor4f(((Clan^.Color shr 16) and $ff) / $ff, ((Clan^.Color shr 8) and $ff) / $ff, (Clan^.Color and $ff) / $ff, 1); 

2839  553 

554 
// draw name 

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

556 

557 
// draw flag 

558 
DrawTexture(14, cScreenHeight + DrawHealthY, FlagTex); 

559 

560 
// draw health bar 

690  561 
r.x:= 0; 
562 
r.y:= 0; 

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

564 
r.h:= HealthTex^.h; 
2747  565 
DrawFromRect(14, cScreenHeight + DrawHealthY, @r, HealthTex); 
690  566 

2839  567 
// draw health bar's right border 
83  568 
inc(r.x, cTeamHealthWidth + 2); 
569 
r.w:= 3; 

2839  570 
DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY, @r, HealthTex); 
571 
// if highlighted, draw flag and other contents again to keep their colors 

572 
// this approach should be faster than drawing all borders one by one tinted or not 

573 
if highlight then 

574 
begin 

575 
glColor4f(1, 1, 1, 1); 

690  576 

2839  577 
// draw name 
2747  578 
r.x:= 2; 
579 
r.y:= 2; 

2839  580 
r.w:= NameTagTex^.w  4; 
581 
r.h:= NameTagTex^.h  4; 

582 
DrawFromRect(NameTagTex^.w  14, cScreenHeight + DrawHealthY + 2, @r, NameTagTex); 

583 
// draw flag 

2747  584 
r.w:= 22; 
585 
r.h:= 15; 

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

2839  587 
// draw health bar 
588 
r.w:= TeamHealthBarWidth + 1; 

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

590 
DrawFromRect(16, cScreenHeight + DrawHealthY + 2, @r, HealthTex); 

2747  591 
end; 
47  592 
end; 
593 

5  594 
// Lag alert 
2567  595 
if isInLag then DrawSprite(sprLag, 32  (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); 
4  596 

5  597 
// Wind bar 
2567  598 
{$IFDEF IPHONEOS} 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

599 
offsetX:= 305; 
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

600 
offsetY:= 315; 
2567  601 
{$ELSE} 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

602 
offsetX:= 30; 
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

603 
offsetY:= 180; 
2567  604 
{$ENDIF} 
2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

605 
DrawSprite(sprWindBar, (cScreenWidth shr 1)  offsetY, cScreenHeight  offsetX, 0); 
6  606 
if WindBarWidth > 0 then 
5  607 
begin 
689  608 
{$WARNINGS OFF} 
609 
r.x:= 8  (RealTicks shr 6) mod 8; 

610 
{$WARNINGS ON} 

611 
r.y:= 0; 

612 
r.w:= WindBarWidth; 

613 
r.h:= 13; 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

614 
DrawSpriteFromRect(sprWindR, r, (cScreenWidth shr 1)  offsetY + 77, cScreenHeight  offsetX + 2, 13, 0); 
5  615 
end else 
6  616 
if WindBarWidth < 0 then 
5  617 
begin 
689  618 
{$WARNINGS OFF} 
619 
r.x:= (WindBarWidth + RealTicks shr 6) mod 8; 

620 
{$WARNINGS ON} 

621 
r.y:= 0; 

622 
r.w:=  WindBarWidth; 

623 
r.h:= 13; 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

624 
DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1)  offsetY + 74 + WindBarWidth, cScreenHeight  offsetX + 2, 13, 0); 
5  625 
end; 
626 

161  627 
// AmmoMenu 
1120  628 
if (AMxShift < 210) or bShowAmmoMenu then ShowAmmoMenu; 
161  629 

2287  630 
// Cursor 
631 
if isCursorVisible and bShowAmmoMenu then 

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

942  633 

2287  634 
DrawChat; 
4  635 

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

638 

2786  639 
if missionTimer <> 0 then 
640 
begin 

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

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

643 
if missionTex <> nil then 

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

645 
end; 

646 

2724  647 
// fps 
648 
{$IFDEF IPHONEOS} 

2803
1f446fc5c8ec
allow to compile engine as library with HWLIBRARY symbol
koda
parents:
2786
diff
changeset

649 
offset:= 300; 
2724  650 
{$ELSE} 
651 
offset:= 10; 

652 
{$ENDIF} 

4  653 
inc(Frames); 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

654 

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

655 
if cShowFPS or (GameType = gmtDemo) then inc(CountTicks, Lag); 
2851  656 
if (GameType = gmtDemo) and (CountTicks >= 1000) then 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

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

658 
i:=GameTicks div 60000; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

659 
t:=(GameTicks(i*60000)) div 1000; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

660 
s:=''; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

661 
if i<10 then s:='0'; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

662 
s:= s+inttostr(i)+':'; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

663 
if t<10 then s:=s+'0'; 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

664 
s:= s+inttostr(t); 
2851  665 
if timeTexture <> nil then FreeTexture(timeTexture); 
2850
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

666 
tmpSurface:= TTF_RenderUTF8_Blended(Fontz[fnt16].Handle, Str2PChar(s), cWhiteColorChannels); 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

667 
tmpSurface:= doSurfaceConversion(tmpSurface); 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

668 
timeTexture:= Surface2Tex(tmpSurface, false); 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

669 
SDL_FreeSurface(tmpSurface) 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

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

671 

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

672 
if timeTexture <> nil then 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

673 
DrawTexture((cScreenWidth shr 1)  10  timeTexture^.w, offset + timeTexture^.h+5, timeTexture); 
f6f8db825ce7
A little clock for convenience in finding things in demos
nemo
parents:
2839
diff
changeset

674 

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

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

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

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

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

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

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

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

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

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

688 
end; 
759  689 
if fpsTexture <> nil then 
2724  690 
DrawTexture((cScreenWidth shr 1)  50, offset, fpsTexture); 
4  691 
end; 
174  692 

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

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

694 

2724  695 
// lag warning (?) 
174  696 
inc(SoundTimerTicks, Lag); 
697 
if SoundTimerTicks >= 50 then 

698 
begin 

699 
SoundTimerTicks:= 0; 

700 
if cVolumeDelta <> 0 then 

701 
begin 

702 
str(ChangeVolume(cVolumeDelta), s); 

2619  703 
AddCaption(Format(trmsg[sidVolume], s), cWhiteColor, capgrpVolume) 
174  704 
end 
756  705 
end; 
706 

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

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

709 

2162  710 
SetScale(zoom); 
1023  711 

2287  712 
// Cursor 
713 
if isCursorVisible then 

714 
begin 

715 
if not bShowAmmoMenu then 

716 
with CurrentHedgehog^ do 

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

718 
begin 

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

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

721 
if PosCount > 1 then 

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

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

724 
i); 

725 
end; 

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

727 
end; 

728 

729 

775  730 
glDisable(GL_TEXTURE_2D); 
756  731 
glDisable(GL_BLEND) 
4  732 
end; 
733 

108  734 
procedure AddCaption(s: string; Color: Longword; Group: TCapGroup); 
4  735 
begin 
2142  736 
//if Group in [capgrpGameState] then WriteLnToConsole(s); 
762  737 
if Captions[Group].Tex <> nil then FreeTexture(Captions[Group].Tex); 
4  738 

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

741 
case Group of 

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

743 
else 

2735  744 
Captions[Group].EndTime:= RealTicks + 1400 + LongWord(Captions[Group].Tex^.w) * 3; 
2142  745 
end; 
4  746 
end; 
747 

79  748 
procedure MoveCamera; 
4  749 
const PrevSentPointTime: LongWord = 0; 
2428  750 
var EdgesDist, wdy: LongInt; 
4  751 
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

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

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

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

757 
end; 
678  758 

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

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

762 
FollowGear:= nil; 

2197  763 
prevPoint:= CursorPoint; 
1689  764 
exit 
765 
end 

766 
else begin 

2198  767 
CursorPoint.x:= (prevPoint.x * 7 + hwRound(FollowGear^.X) + hwSign(FollowGear^.dX) * 100 + WorldDx) div 8; 
2197  768 
CursorPoint.y:= (prevPoint.y * 7 + cScreenHeight  (hwRound(FollowGear^.Y) + WorldDy)) div 8; 
1689  769 
end; 
4  770 

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

773 

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

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

778 
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

779 
if CursorPoint.X > cScreenWidth div 2 + AMxShift  10 then CursorPoint.X:= cScreenWidth div 2 + AMxShift  10; 
2197  780 
if CursorPoint.Y > 75 + SlotsNum * 33 then CursorPoint.Y:= 75 + SlotsNum * 33; 
781 
if CursorPoint.Y < 76 then CursorPoint.Y:= 76; 

1689  782 
prevPoint:= CursorPoint; 
2197  783 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + cScreenWidth div 2, cScreenHeight  CursorPoint.Y); 
1689  784 
exit 
785 
end; 

162  786 

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

791 
SendIPCXY('P', CursorPoint.X  WorldDx, cScreenHeight  CursorPoint.Y  WorldDy); 
1689  792 
PrevSentPointTime:= GameTicks 
793 
end; 

794 
end; 

351  795 

4  796 
if isCursorVisible or (FollowGear <> nil) then 
797 
begin 

284  798 
if isCursorVisible then EdgesDist:= cCursorEdgesDist 
799 
else EdgesDist:= cGearScrEdgesDist; 

2197  800 
if CursorPoint.X <  cScreenWidth div 2 + EdgesDist then 
4  801 
begin 
2197  802 
WorldDx:= WorldDx  CursorPoint.X  cScreenWidth div 2 + EdgesDist; 
803 
CursorPoint.X:=  cScreenWidth div 2 + EdgesDist 

4  804 
end else 
2197  805 
if CursorPoint.X > cScreenWidth div 2  EdgesDist then 
4  806 
begin 
2197  807 
WorldDx:= WorldDx  CursorPoint.X + cScreenWidth div 2  EdgesDist; 
2198  808 
CursorPoint.X:= cScreenWidth div 2  EdgesDist 
4  809 
end; 
284  810 
if CursorPoint.Y < EdgesDist then 
4  811 
begin 
2197  812 
WorldDy:= WorldDy + CursorPoint.Y  EdgesDist; 
284  813 
CursorPoint.Y:= EdgesDist 
4  814 
end else 
284  815 
if CursorPoint.Y > cScreenHeight  EdgesDist then 
4  816 
begin 
2197  817 
WorldDy:= WorldDy + CursorPoint.Y  cScreenHeight + EdgesDist; 
284  818 
CursorPoint.Y:= cScreenHeight  EdgesDist 
4  819 
end; 
820 
end else 

308  821 
if cHasFocus then 
822 
begin 

70  823 
WorldDx:= WorldDx  CursorPoint.X + prevPoint.X; 
2197  824 
WorldDy:= WorldDy + CursorPoint.Y  prevPoint.Y; 
2162  825 
CursorPoint.X:= 0; 
826 
CursorPoint.Y:= cScreenHeight div 2; 

308  827 
end; 
351  828 

4  829 
prevPoint:= CursorPoint; 
2567  830 
if cHasFocus then SDL_WarpMouse(CursorPoint.X + (cScreenWidth shr 1), cScreenHeight  CursorPoint.Y); 
1760  831 
if WorldDy > LAND_HEIGHT + 1024 then WorldDy:= LAND_HEIGHT + 1024; 
2375  832 
if WorldDy < wdy then WorldDy:= wdy; 
2426  833 
if WorldDx <  LAND_WIDTH  1024 then WorldDx:=  LAND_WIDTH  1024; 
834 
if WorldDx > 1024 then WorldDx:= 1024; 

4  835 
end; 
836 

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

839 
begin 

840 
r.w:= 32; 

841 
r.h:= 32; 

842 

843 
if time = 0 then time:= 5000; 

844 
missionTimer:= time; 

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

846 

847 
if icon > 1 then 

848 
begin 

849 
r.x:= 0; 

850 
r.y:= icon * 32; 

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

852 
end 

853 
else 

854 
begin 

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

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

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

858 
end; 

859 
end; 

860 

861 
procedure HideMission; 

862 
begin 

863 
missionTimer:= 0 

864 
end; 

865 

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

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

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

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

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

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

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

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

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

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

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

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

877 

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

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

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

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

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

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

884 

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

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

886 
end; 
4  887 

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

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

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

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

892 

4  893 
end. 