-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwod_client.html
More file actions
395 lines (349 loc) · 29.2 KB
/
wod_client.html
File metadata and controls
395 lines (349 loc) · 29.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Python: module wod_client</title>
</head><body>
<table class="heading">
<tr class="heading-text decor">
<td class="title"> <br><strong class="title">wod_client</strong></td>
<td class="extra"><a href=".">index</a><br><a href="file:c%3A%5Cusers%5Cnew%5Cdocuments%5Ccoding%5Cpython%5Cto_work_on%5Cwar-of-dots-%5Cwod_client.py">c:\users\new\documents\coding\python\to_work_on\war-of-dots-\wod_client.py</a></td></tr></table>
<p></p>
<p>
<table class="section">
<tr class="decor pkg-content-decor heading-text">
<td class="section-title" colspan=3> <br><strong class="bigsection">Modules</strong></td></tr>
<tr><td class="decor pkg-content-decor"><span class="code"> </span></td><td> </td>
<td class="singlecolumn"><table><tr><td class="multicolumn"><a href="math.html">math</a><br>
<a href="numpy.html">numpy</a><br>
</td><td class="multicolumn"><a href="orjson.html">orjson</a><br>
<a href="pygame.html">pygame</a><br>
</td><td class="multicolumn"><a href="random.html">random</a><br>
<a href="simple_socket.html">simple_socket</a><br>
</td><td class="multicolumn"></td></tr></table></td></tr></table><p>
<table class="section">
<tr class="decor index-decor heading-text">
<td class="section-title" colspan=3> <br><strong class="bigsection">Classes</strong></td></tr>
<tr><td class="decor index-decor"><span class="code"> </span></td><td> </td>
<td class="singlecolumn"><dl>
<dt class="heading-text"><a href="builtins.html#object">builtins.object</a>
</dt><dd>
<dl>
<dt class="heading-text"><a href="wod_client.html#Game">Game</a>
</dt><dt class="heading-text"><a href="wod_client.html#WorldInfo">WorldInfo</a>
</dt></dl>
</dd>
</dl>
<p>
<table class="section">
<tr class="decor title-decor heading-text">
<td class="section-title" colspan=3> <br><a name="Game">class <strong>Game</strong></a>(<a href="builtins.html#object">builtins.object</a>)</td></tr>
<tr><td class="decor title-decor" rowspan=2><span class="code"> </span></td>
<td class="decor title-decor" colspan=2><span class="code"><a href="#Game">Game</a>(title: str) -&gt; None<br>
<br>
Represents the client-side game application, handling the connection to the server, receiving terrain and game state information,<br>
and managing the player input and rendering of the game world.<br> </span></td></tr>
<tr><td> </td>
<td class="singlecolumn">Methods defined here:<br>
<dl><dt><a name="Game-__init__"><strong>__init__</strong></a>(self, title: str) -> None</dt><dd><span class="code">Initializes the <a href="#Game">Game</a> client, connects to the server, receives initial terrain and game state information,<br>
and sets up the game window and rendering parameters.<br>
<br>
Args:<br>
title (str): The title of the game window</span></dd></dl>
<dl><dt><a name="Game-clamp_camera"><strong>clamp_camera</strong></a>(self) -> None</dt><dd><span class="code">Clamps the camera position to the world boundaries.</span></dd></dl>
<dl><dt><a name="Game-create_dynamic_surface"><strong>create_dynamic_surface</strong></a>(self, z: float) -> pygame.Surface</dt><dd><span class="code">Creates a dynamic surface for drawing game elements scaled by zoom level.<br>
<br>
Args:<br>
z (float): The zoom level.<br>
<br>
Returns:<br>
pygame.Surface: The dynamic surface for drawing game elements at the given zoom level.</span></dd></dl>
<dl><dt><a name="Game-create_fog_surface"><strong>create_fog_surface</strong></a>(self, z: float) -> pygame.Surface</dt><dd><span class="code">Creates a fog surface for drawing fog of war effects scaled by zoom level.<br>
<br>
Args:<br>
z (float): The zoom level.<br>
<br>
Returns:<br>
pygame.Surface: The fog surface for drawing fog of war effects at the given zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw"><strong>draw</strong></a>(self) -> None</dt><dd><span class="code">Draws the game world, including the terrain, cities, troops, vision, and borders,<br>
as well as any paths being drawn by the player and pause text if the game is paused.</span></dd></dl>
<dl><dt><a name="Game-draw_border"><strong>draw_border</strong></a>(self, border_grid: np.ndarray, fog: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws the border on the fog surface.<br>
<br>
Args:<br>
border_grid (np.ndarray): The border grid data.<br>
fog (pygame.Surface): The fog surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_cities"><strong>draw_cities</strong></a>(self, cities: list, dynamic: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws cities on the dynamic surface.<br>
<br>
Args:<br>
cities (list): List of city data (position, cid, path, owner).<br>
dynamic (pygame.Surface): The dynamic surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_city"><strong>draw_city</strong></a>(
self,
color: tuple,
position: tuple,
dynamic: pygame.Surface,
z: float
) -> None</dt><dd><span class="code">Draws a city on the dynamic surface.<br>
<br>
Args:<br>
color (tuple): The color of the city.<br>
position (tuple): The position of the city.<br>
dynamic (pygame.Surface): The dynamic surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_city_paths"><strong>draw_city_paths</strong></a>(self, dynamic: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws city paths on the dynamic surface.<br>
<br>
Args:<br>
dynamic (pygame.Surface): The dynamic surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_pause_text"><strong>draw_pause_text</strong></a>(self, fog: pygame.Surface) -> None</dt><dd><span class="code">Draws the pause text on the fog surface.<br>
<br>
Args:<br>
fog (pygame.Surface): The fog surface to draw on.</span></dd></dl>
<dl><dt><a name="Game-draw_troop_paths"><strong>draw_troop_paths</strong></a>(self, dynamic: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws troop paths on the dynamic surface.<br>
<br>
Args:<br>
dynamic (pygame.Surface): The dynamic surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_troops"><strong>draw_troops</strong></a>(self, troops: list, dynamic: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws troops on the dynamic surface.<br>
<br>
Args:<br>
troops (list): List of troop data (position, tid, owner, path, health).<br>
dynamic (pygame.Surface): The dynamic surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-draw_vision"><strong>draw_vision</strong></a>(self, vision_grid: np.ndarray, fog: pygame.Surface, z: float) -> None</dt><dd><span class="code">Draws the vision grid on the fog surface.<br>
<br>
Args:<br>
vision_grid (np.ndarray): The vision grid data.<br>
fog (pygame.Surface): The fog surface to draw on.<br>
z (float): The zoom level.</span></dd></dl>
<dl><dt><a name="Game-extend_city_path"><strong>extend_city_path</strong></a>(self, pos: tuple[int, int]) -> None</dt><dd><span class="code">Extends the path for a city.<br>
<br>
Args:<br>
pos (tuple[int, int]): The position in screen space to extend the path to.</span></dd></dl>
<dl><dt><a name="Game-extend_troop_path"><strong>extend_troop_path</strong></a>(self, pos: tuple[int, int]) -> None</dt><dd><span class="code">Extends the path for a troop.<br>
<br>
Args:<br>
pos (tuple[int, int]): The position in screen space to extend the path to.</span></dd></dl>
<dl><dt><a name="Game-find_city_at_click"><strong>find_city_at_click</strong></a>(self, mx: int, my: int) -> int</dt><dd><span class="code">Finds a city at the given screen coordinates.<br>
Args:<br>
mx (int): The x-coordinate in screen space.<br>
my (int): The y-coordinate in screen space.<br>
Returns:<br>
int: The city ID of the selected city, or None if no city is selected.</span></dd></dl>
<dl><dt><a name="Game-find_troop_at_click"><strong>find_troop_at_click</strong></a>(self, mx: int, my: int) -> int</dt><dd><span class="code">Finds a troop at the given screen coordinates.<br>
<br>
Args:<br>
mx (int): The x-coordinate in screen space.<br>
my (int): The y-coordinate in screen space.<br>
Returns:<br>
int: The troop ID of the selected troop, or None if no troop is selected.</span></dd></dl>
<dl><dt><a name="Game-get_zoom"><strong>get_zoom</strong></a>(self, zoom_idx: int) -> float</dt><dd><span class="code">Returns the zoom level for a given zoom index.<br>
<br>
Args:<br>
zoom_idx (int): The zoom index to get the zoom level for.<br>
<br>
Returns:<br>
float: The zoom level for the given zoom index.</span></dd></dl>
<dl><dt><a name="Game-handle_events"><strong>handle_events</strong></a>(self) -> None</dt><dd><span class="code">Handles player input events, including mouse and keyboard events for controlling the camera,<br>
selecting troops and cities, and submitting paths to the server.</span></dd></dl>
<dl><dt><a name="Game-handle_key_down"><strong>handle_key_down</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles key down events for various game actions.<br>
<br>
Args:<br>
e (pygame.event.Event): The key down event</span></dd></dl>
<dl><dt><a name="Game-handle_left_click"><strong>handle_left_click</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles left mouse button clicks for selecting troops or cities.<br>
<br>
Args:<br>
e (pygame.event.Event): The left mouse button down event</span></dd></dl>
<dl><dt><a name="Game-handle_mouse_down"><strong>handle_mouse_down</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles mouse button down events for starting camera panning or selecting troops and cities.<br>
<br>
Args:<br>
e (pygame.event.Event): The mouse button down event</span></dd></dl>
<dl><dt><a name="Game-handle_mouse_motion"><strong>handle_mouse_motion</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles mouse motion events for drawing paths or panning the camera.<br>
Args:<br>
e (pygame.event.Event): The mouse motion event</span></dd></dl>
<dl><dt><a name="Game-handle_mouse_up"><strong>handle_mouse_up</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles mouse button up events for stopping camera panning or finishing path drawing.<br>
Args:<br>
e (pygame.event.Event): The mouse button up event</span></dd></dl>
<dl><dt><a name="Game-handle_mouse_wheel"><strong>handle_mouse_wheel</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles mouse wheel events for zooming in and out.<br>
<br>
Args:<br>
e (pygame.event.Event): The mouse wheel event</span></dd></dl>
<dl><dt><a name="Game-handle_paused_key_down"><strong>handle_paused_key_down</strong></a>(self, e: pygame.event.Event) -> None</dt><dd><span class="code">Handles key down events when the game is paused.<br>
<br>
Args:<br>
e (pygame.event.Event): The paused key down event</span></dd></dl>
<dl><dt><a name="Game-pan_camera"><strong>pan_camera</strong></a>(self, pos: tuple[int, int]) -> None</dt><dd><span class="code">Pans the camera to a new position.<br>
<br>
Args:<br>
pos (tuple[int, int]): The position in screen space to pan the camera to.</span></dd></dl>
<dl><dt><a name="Game-remove_existing_city_path"><strong>remove_existing_city_path</strong></a>(self, cid: int) -> None</dt><dd><span class="code">Removes an existing path for a city.<br>
<br>
Args:<br>
cid (int): The city ID to remove the path for.</span></dd></dl>
<dl><dt><a name="Game-remove_existing_troop_path"><strong>remove_existing_troop_path</strong></a>(self, tid: int) -> None</dt><dd><span class="code">Removes an existing path for a troop.<br>
<br>
Args:<br>
tid (int): The troop ID to remove the path for.</span></dd></dl>
<dl><dt><a name="Game-run_game"><strong>run_game</strong></a>(self) -> None</dt><dd><span class="code">Runs the main game loop, handling player input, rendering the game world,<br>
and communicating with the server for game state updates.</span></dd></dl>
<dl><dt><a name="Game-set_zoom_index"><strong>set_zoom_index</strong></a>(self, new_idx: int, screen_pos: tuple[int, int]) -> None</dt><dd><span class="code">Sets the zoom index to a new value, adjusting the camera position accordingly.<br>
<br>
Args:<br>
new_idx (int): The new zoom index.<br>
screen_pos (tuple[int, int]): The position in screen space to maintain the same world position.</span></dd></dl>
<dl><dt><a name="Game-start_city_path"><strong>start_city_path</strong></a>(self, cid: int, mx: int, my: int) -> None</dt><dd><span class="code">Starts drawing a path for a city.<br>
<br>
Args:<br>
cid (int): The city ID to start drawing a path for.<br>
mx (int): The x-coordinate in screen space.<br>
my (int): The y-coordinate in screen space.</span></dd></dl>
<dl><dt><a name="Game-start_troop_path"><strong>start_troop_path</strong></a>(self, tid: int, mx: int, my: int) -> None</dt><dd><span class="code">Starts drawing a path for a troop.<br>
<br>
Args:<br>
tid (int): The troop ID to start drawing a path for.<br>
mx (int): The x-coordinate in screen space.<br>
my (int): The y-coordinate in screen space.</span></dd></dl>
<dl><dt><a name="Game-submit_paths"><strong>submit_paths</strong></a>(self) -> None</dt><dd><span class="code">Submits the currently drawn paths for troops and cities to the server, and resets the path drawing state.</span></dd></dl>
<dl><dt><a name="Game-update_draw_info"><strong>update_draw_info</strong></a>(self) -> None</dt><dd><span class="code">Updates the draw_info attribute with data received from the client.</span></dd></dl>
<dl><dt><a name="Game-zoom_in_at"><strong>zoom_in_at</strong></a>(self, screen_pos: tuple[int, int]) -> None</dt><dd><span class="code">Zooms in at a specific screen position.<br>
<br>
Args:<br>
screen_pos (tuple[int, int]): The position in screen space to zoom in at.</span></dd></dl>
<dl><dt><a name="Game-zoom_out_at"><strong>zoom_out_at</strong></a>(self, screen_pos: tuple[int, int]) -> None</dt><dd><span class="code">Zooms out at a specific screen position.<br>
<br>
Args:<br>
screen_pos (tuple[int, int]): The position in screen space to zoom out at.</span></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><span class="code">dictionary for instance variables</span></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><span class="code">list of weak references to the object</span></dd>
</dl>
</td></tr></table> <p>
<table class="section">
<tr class="decor title-decor heading-text">
<td class="section-title" colspan=3> <br><a name="WorldInfo">class <strong>WorldInfo</strong></a>(<a href="builtins.html#object">builtins.object</a>)</td></tr>
<tr><td class="decor title-decor" rowspan=2><span class="code"> </span></td>
<td class="decor title-decor" colspan=2><span class="code"><a href="#WorldInfo">WorldInfo</a>(players: int) -&gt; None<br>
<br>
Holds information about the world size and player count,<br>
and calculates the world size based on the player count.<br> </span></td></tr>
<tr><td> </td>
<td class="singlecolumn">Methods defined here:<br>
<dl><dt><a name="WorldInfo-__init__"><strong>__init__</strong></a>(self, players: int) -> None</dt><dd><span class="code">Initializes the <a href="#WorldInfo">WorldInfo</a> with the number of players and calculates the world size.<br>
<br>
Args:<br>
players (int): The number of players in the world</span></dd></dl>
<dl><dt><a name="WorldInfo-calculate_size"><strong>calculate_size</strong></a>(self) -> None</dt><dd><span class="code">Calculates the world size based on the number of players,<br>
cities per player, area per city, and aspect ratio.</span></dd></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><span class="code">dictionary for instance variables</span></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><span class="code">list of weak references to the object</span></dd>
</dl>
</td></tr></table></td></tr></table><p>
<table class="section">
<tr class="decor functions-decor heading-text">
<td class="section-title" colspan=3> <br><strong class="bigsection">Functions</strong></td></tr>
<tr><td class="decor functions-decor"><span class="code"> </span></td><td> </td>
<td class="singlecolumn"><dl><dt><a name="-dir_dis_to_xy"><strong>dir_dis_to_xy</strong></a>(direction: float, distance: float) -> tuple</dt><dd><span class="code">Converts a direction and distance to an x, y offset.<br>
<br>
Args:<br>
direction (float): Direction in degrees<br>
distance (float): Distance in that direction<br>
<br>
Returns:<br>
tuple: The x, y offset</span></dd></dl>
<dl><dt><a name="-interp"><strong>interp</strong></a>(threshold: float, a: float, b: float) -> float</dt><dd><span class="code">Interpolates a value between two values based on a threshold.<br>
<br>
Args:<br>
threshold (float): The threshold value to interpolate against<br>
a (float): The first value<br>
b (float): The second value<br>
<br>
Returns:<br>
float: The interpolated value between a and b based on the threshold</span></dd></dl>
<dl><dt><a name="-marching_squares"><strong>marching_squares</strong></a>(
grid: np.ndarray,
cell_size: float,
rows: int,
cols: int,
threshold: float
) -> list</dt><dd><span class="code">Performs marching squares on a grid to extract contour lines.<br>
<br>
Args:<br>
grid (np.ndarray): The grid to perform marching squares on<br>
cell_size (float): The size of each cell in the grid<br>
rows (int): The number of rows in the grid<br>
cols (int): The number of columns in the grid<br>
threshold (float): The threshold value to use for contour extraction<br>
<br>
Returns:<br>
list: The list of segments extracted from the grid</span></dd></dl>
<dl><dt><a name="-marching_squares_layers"><strong>marching_squares_layers</strong></a>(
grid: np.ndarray,
cell_size: float,
rows: int,
cols: int,
thresholds: list[float]
) -> list</dt><dd><span class="code">Performs marching squares on a grid to extract polygonal regions for multiple thresholds, creating layers of polygons.<br>
<br>
Args:<br>
grid (np.ndarray): The grid to perform marching squares on<br>
cell_size (float): The size of each cell in the grid<br>
rows (int): The number of rows in the grid<br>
cols (int): The number of columns in the grid<br>
thresholds (list[float]): The list of threshold values to use for polygon extraction<br>
<br>
Returns:<br>
list: The list of layers of polygons extracted from the grid</span></dd></dl>
<dl><dt><a name="-marching_squares_poly"><strong>marching_squares_poly</strong></a>(
grid: np.ndarray,
cell_size: float,
rows: int,
cols: int,
threshold: float
) -> list</dt><dd><span class="code">Performs marching squares on a grid to extract polygonal regions.<br>
<br>
Args:<br>
grid (np.ndarray): The grid to perform marching squares on<br>
cell_size (float): The size of each cell in the grid<br>
rows (int): The number of rows in the grid<br>
cols (int): The number of columns in the grid<br>
threshold (float): The threshold value to use for polygon extraction<br>
<br>
Returns:<br>
list: The list of polygons extracted from the grid</span></dd></dl>
</td></tr></table><p>
<table class="section">
<tr class="decor data-decor heading-text">
<td class="section-title" colspan=3> <br><strong class="bigsection">Data</strong></td></tr>
<tr><td class="decor data-decor"><span class="code"> </span></td><td> </td>
<td class="singlecolumn"><strong>AREA_PER_CITIES</strong> = 80000<br>
<strong>CELL_SIZE</strong> = 20<br>
<strong>CITIES_PER_PLAYER</strong> = 5<br>
<strong>CITY_COLOR</strong> = (255, 215, 0)<br>
<strong>CITY_R</strong> = 15<br>
<strong>COLORS</strong> = [(255, 0, 0), (0, 0, 255), (255, 150, 0), (175, 0, 175), (0, 175, 0), (0, 255, 255)]<br>
<strong>FOREST</strong> = <constants.TerrainType object><br>
<strong>HILL</strong> = <constants.TerrainType object><br>
<strong>MOUNTAIN</strong> = <constants.TerrainType object><br>
<strong>PATH_SPACING</strong> = 100<br>
<strong>PLAINS</strong> = <constants.TerrainType object><br>
<strong>PORTS</strong> = [1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, ...]<br>
<strong>RATIO</strong> = 0.5625<br>
<strong>TABLE</strong> = {1: [['v0', 'p_top', 'p_left']], 2: [['v1', 'p_right', 'p_top']], 3: [['p_left', 'v0', 'v1', 'p_right']], 4: [['v2', 'p_bottom', 'p_right']], 5: [['v0', 'p_top', 'p_left'], ['v2', 'p_right', 'p_bottom']], 6: [['p_top', 'v1', 'v2', 'p_bottom']], 7: [['p_left', 'v0', 'v1', 'v2', 'p_bottom']], 8: [['v3', 'p_left', 'p_bottom']], 9: [['p_top', 'v0', 'v3', 'p_bottom']], 10: [['p_top', 'v1', 'p_right'], ['p_bottom', 'v3', 'p_left']], ...}<br>
<strong>TERRAIN_TYPES</strong> = [<constants.TerrainType object>, <constants.TerrainType object>, <constants.TerrainType object>, <constants.TerrainType object>, <constants.TerrainType object>]<br>
<strong>THRESHOLD</strong> = 0.5<br>
<strong>TROOP_D</strong> = 14<br>
<strong>TROOP_HEALTH</strong> = 100<br>
<strong>TROOP_R</strong> = 7<br>
<strong>WATER</strong> = <constants.TerrainType object></td></tr></table>
</body></html>