2 <title>Aymargeddon Map</title>
5 [$ if exists $udat{-id} and exists $udat{-game} $]
9 # TODO: center relocation
10 # TODO: bug/feature setting y did not work with local variables
15 my $game = $udat{-game};
16 my $user = $udat{-id};
19 my $db = Aymargeddon->new($game,$user);
20 my $dat = $db->get_map();
23 # map[x][y][0] = background-color
24 # map[x][y][1] = occupant-color
26 # map[x][y][3] = owner-color
27 # map[x][y][4] = avatar-case
28 # map[x][y][5] = god-fight
29 # map[x][y][6] = earthling-fight /foreign earthling units approaching /plague
30 # map[x][y][7] = arc present
34 my ($loc,$ter,$own,$occ,$temple,$plague) = @$row;
36 $loc =~ /^(\d+)_(\d+)$/;
38 $xmax = $x if $x > $xmax;
39 $ymax = $y if $y > $ymax;
41 if(!$db->sight($loc)){
42 $map[$x][$y][0] = 'B';
43 $map[$x][$y][1] = 'B';
46 $map[$x][$y][4] = 'X';
50 if($ter eq 'POLE' or $ter eq 'AYMARGEDDON'){
51 $map[$x][$y][1] = 'P';
53 $map[$x][$y][1] = 'O';
54 }elsif($db->get_relation($occ) eq 'FRIEND' or $db->get_relation($occ) eq 'ALLIED'){
55 $map[$x][$y][1] = 'F';
56 }elsif($db->get_relation($occ) eq 'FOE' or $db->get_relation($occ) eq 'BETRAY'){
57 $map[$x][$y][1] = 'E';
59 $map[$x][$y][1] = 'N';
61 $map[$x][$y][1] = 'U';
64 $map[$x][$y][0] = ($ter eq 'WATER' or $ter eq 'ISLE')
65 ? 'W' : $map[$x][$y][1];
68 $map[$x][$y][2] = ($ter eq 'ISLE')?'I':'M';
69 }elsif($ter eq 'CITY'){
70 $map[$x][$y][2] = 'C';
71 }elsif($ter eq 'ISLE' or $ter eq 'WATER'){
72 $map[$x][$y][2] = 'W';
74 $map[$x][$y][2] = 'L';
77 $map[$x][$y][3] = 'U';
79 if($ter eq 'AYMARGEDDON'){
80 $map[$x][$y][3] = 'A';
81 }elsif($ter eq 'MOUNTAIN' or $ter eq 'ISLE' or $ter eq 'CITY'){
82 if($map[$x][$y][2] eq 'W'){
83 $map[$x][$y][3] = 'N'; # Isles without temple are always neutral
85 $map[$x][$y][3] = 'B'; # Cities without owner are non-homecities
86 }elsif($own eq $user){
87 $map[$x][$y][3] = 'O';
88 }elsif($db->get_relation($own) eq 'FRIEND' or $db->get_relation($own) eq 'ALLIED'){
89 $map[$x][$y][3] = 'F';
90 }elsif($db->get_relation($own) eq 'FOE' or $db->get_relation($own) eq 'BETRAY'){
91 $map[$x][$y][3] = 'E';
93 $map[$x][$y][3] = 'N';
97 $map[$x][$y][5] = $db->god_fight($loc) ? 'G':'U';
98 $map[$x][$y][6] = $db->earthling_fight($loc) ? 'E': 'U';
99 $map[$x][$y][7] = (($ter ne 'WATER' or !$occ) and $db->arc_present($loc)) ? 'A':'U';
100 my $fea = $db->foreign_earthling_approaching($loc,$occ) ? 'F':'U';
101 $map[$x][$y][6] = $map[$x][$y][6] eq 'E' ? 'E' : $fea;
102 if($map[$x][$y][6] eq 'U' and $plague){
103 $map[$x][$y][6] = 'P';
106 $avatars = $db->avatar_present($loc);
107 ($own_avatar,$friend_avatar,$neutral_avatar,$enemy_avatar) = (0,0,0,0);
108 for my $a (@$avatars){
113 elsif($db->get_relation($a) eq 'FOE' or $db->get_relation($a) eq 'BETRAY'){
116 elsif($db->get_relation($a) eq 'FRIEND' or $db->get_relation($a) eq 'ALLIED'){
126 $map[$x][$y][4] = '0';
127 }elsif($neutral_avatar){
128 $map[$x][$y][4] = '1';
129 }elsif($friend_avatar){
130 $map[$x][$y][4] = '2';
132 $map[$x][$y][4] = '3';
134 }elsif($friend_avatar){
136 $map[$x][$y][4] = '4';
137 }elsif($neutral_avatar){
138 $map[$x][$y][4] = '5';
140 $map[$x][$y][4] = '6';
142 }elsif($enemy_avatar){
144 $map[$x][$y][4] = '7';
146 $map[$x][$y][4] = '8';
148 }elsif($neutral_avatar){
149 $map[$x][$y][4] = '9';
151 $map[$x][$y][4] = ($map[$x][$y][5] eq 'U' and $map[$x][$y][6] eq 'U' and $map[$x][$y][7] eq 'U')
152 ? 'X' : 'U'; # don't use overlay icons if all are empy (to save space)
159 $xoff = $udat{-xoff};
160 $yoff = $udat{-yoff};
164 <table border="0" cellspacing="0" cellpadding="0">
165 [$ foreach $yy (0..($ymax-1)) $]
166 <tr><td><img src="map/SB[+ $map[$xoff][($yy+$yoff)%$ymax][0] +].png"></td>
167 [$ foreach $xx (0..($xmax-1)) $]
168 [- $x = ($xx +$xoff) % $xmax; -]
170 [- $y = ($yy +$yoff -($xx / 2)) % $ymax; -]
171 [$ if $map[$x][$y][4] eq 'X' $]
172 [$ if $map[$x][$y][1] eq 'B' $]
173 <th rowspan="2"><img src="map/CB.png"></th>
175 <th rowspan="2"><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/C[+ $map[$x][$y][1].$map[$x][$y][2].$map[$x][$y][3] +].png"></a></th>
178 <th rowspan="2" background="map/C[+ $map[$x][$y][1].$map[$x][$y][2].$map[$x][$y][3] +].png"><table cellpadding="0" cellspacing="0" border="0">
179 <tr><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][4] +].png"></a></td><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][5] +].png"></a></td></tr>
180 <tr><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][6] +].png"></a></td><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][7] +].png"></a></td></tr></table></th>
183 <td><img src="map/BB[+$map[$x][$y][0]+].png"></td>
185 <td><img src="map/B[+$map[($x+1)%$xmax][($y-1)%$ymax][0].$map[$x][$y][0]+].png"></td>
189 <td><img src="map/HB.png"></td>
190 [$ if $xx==$xmax-1 $]
191 <td><img src="map/SBB.png"></td>
193 <td><img src="map/SB[+$map[($x+1)%$xmax][($y-1)%$ymax][0]+].png"></td>
196 [$ if $xx==$xmax-1 $]
197 <td><img src="map/S[+$map[$x][($y-1)%$ymax][0]+]B.png"></td>
199 <td><img src="map/S[+$map[$x][($y-1)%$ymax][0].$map[($x+1)%$xmax][($y-1)%$ymax][0]+].png"></td>
205 <td><img src="map/B[+$map[$xoff][($yy+$yoff)%$ymax][0]+]B.png"></td>
206 [$ foreach $xx (0..($xmax-1)) $]
208 [- $x = ($xx +$xoff +1)%$xmax; $y = ($yy +$yoff -($xx/2))%$ymax; -]
209 <td><img src="map/S[+$map[($x-1)%$xmax][$y][0].$map[$x][$y][0]+].png"></td>
210 [$ if $map[$x][$y][4] eq 'X' $]
211 [$ if $map[$x][$y][1] eq 'B' $]
212 <th rowspan="2"><img src="map/CB.png"></th>
214 <th rowspan="2"><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/C[+ $map[$x][$y][1].$map[$x][$y][2].$map[$x][$y][3] +].png"></a></th>
217 <th rowspan="2" background="map/C[+ $map[$x][$y][1].$map[$x][$y][2].$map[$x][$y][3] +].png"><table cellpadding="0" cellspacing="0" border="0">
218 <tr><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][4] +].png"></a></td><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][5] +].png"></a></td></tr>
219 <tr><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][6] +].png"></a></td><td><a href="field.epl?x=[+$x+]&y=[+$y+]" target="field"><img border="0" src="map/I[+ $map[$x][$y][7] +].png"></a></td></tr></table></th>
221 [$ if $xx==$xmax-2 $]
222 <td><img src="map/BB[+$map[$x][$y][0] +].png"></td>
224 <td><img src="map/B[+$map[($x+1)%$xmax][($y-1)%$ymax][0].$map[$x][$y][0] +].png"></td>
231 <td><img src="map/SBB.png"></td>
232 [$ foreach $xx (0..($xmax-1)) $]
234 [- $x = ($xx + $xoff) % $xmax; $y = ($ymax +$yoff -($xx/2))% $ymax; -]
235 <td><img src="map/HB.png"></td>
236 <td><img src="map/B[+ $map[$x][$y][0] +]B.png"></td>
237 <td><img src="map/S[+ $map[$x][$y][0] +]B.png"></td>
244 To view an Aymargeddon world-map, you must first <a href="login.epl" target="_top">login</a>,
245 because we need to know which game to display and for whom.