?
[aymargeddon/current.git] / html / map.epl
1 <html><head>
2   <title>Aymargeddon Map</title>
3 </head><body>
4
5 [$ if exists $udat{-id} and exists $udat{-game} $]
6
7 [-
8
9  # TODO: center relocation
10  # TODO: bug/feature setting y did not work with local variables
11
12  use FROGS::DataBase;
13  use Aymargeddon;
14  use DBI;
15  my $game = $udat{-game};
16  my $user = $udat{-id};
17
18  # look at MAP
19  my $db = Aymargeddon->new($game,$user);
20  my $dat = $db->get_map();
21
22  # create $map
23  # map[x][y][0] = background-color
24  # map[x][y][1] = occupant-color
25  # map[x][y][2] = type
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
31
32  $xmax = 0; $ymax = 0;
33  for my $row (@$dat){
34    my ($loc,$ter,$own,$occ,$temple,$plague) = @$row;
35
36    $loc =~ /^(\d+)_(\d+)$/;
37    ($x,$y) = ($1,$2);
38    $xmax = $x if $x > $xmax;
39    $ymax = $y if $y > $ymax;
40
41    if(!$db->sight($loc)){
42      $map[$x][$y][0] = 'B';
43      $map[$x][$y][1] = 'B';
44      $map[$x][$y][2] = '';
45      $map[$x][$y][3] = '';
46      $map[$x][$y][4] = 'X';
47      next;
48    }
49
50    if($ter eq 'POLE' or $ter eq 'AYMARGEDDON'){
51      $map[$x][$y][1] = 'P';
52    }elsif($occ==$user){
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';
58    }elsif($occ){
59      $map[$x][$y][1] = 'N';
60    }else{
61      $map[$x][$y][1] = 'U';
62    }
63
64    $map[$x][$y][0] = ($ter eq 'WATER' or $ter eq 'ISLE')
65                    ? 'W' : $map[$x][$y][1];
66
67    if($temple eq 'Y'){
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';
73    }else{
74      $map[$x][$y][2] = 'L';
75    }
76
77    $map[$x][$y][3] = 'U';
78
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
84      }elsif(!$own){
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';
92      }elsif($own){
93        $map[$x][$y][3] = 'N';
94      }
95    }
96
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';
104    }
105
106    $avatars = $db->avatar_present($loc);
107    ($own_avatar,$friend_avatar,$neutral_avatar,$enemy_avatar) = (0,0,0,0);
108    for my $a (@$avatars){
109      $a = $a->[0];
110      if($a == $user){
111        $own_avatar = 1;
112      }
113      elsif($db->get_relation($a) eq 'FOE' or $db->get_relation($a) eq 'BETRAY'){
114        $enemy_avatar = 1;
115      }
116      elsif($db->get_relation($a) eq 'FRIEND' or $db->get_relation($a) eq 'ALLIED'){
117        $friend_avatar = 1;
118      }
119      else{
120        $neutral_avatar = 1;
121      }
122    }
123
124    if($own_avatar){
125      if($enemy_avatar){
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';
131      }else{
132        $map[$x][$y][4] = '3';
133      }
134    }elsif($friend_avatar){
135      if($enemy_avatar){
136        $map[$x][$y][4] = '4';
137      }elsif($neutral_avatar){
138        $map[$x][$y][4] = '5';
139      }else{
140        $map[$x][$y][4] = '6';
141      }
142    }elsif($enemy_avatar){
143      if($neutral_avatar){
144        $map[$x][$y][4] = '7';
145      }else{
146        $map[$x][$y][4] = '8';
147      }
148    }elsif($neutral_avatar){
149      $map[$x][$y][4] = '9';
150    }else{
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)
153    }
154
155  }
156
157  $xmax++;$ymax++;
158
159  $xoff = $udat{-xoff};
160  $yoff = $udat{-yoff};
161
162 -]
163
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; -]
169       [$ if not $xx % 2 $] 
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>
174           [$ else $]
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>
176           [$ endif $]
177         [$ else $]
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>
181         [$ endif $]
182         [$ if not $yy $]
183           <td><img src="map/BB[+$map[$x][$y][0]+].png"></td>
184         [$ else $]
185           <td><img src="map/B[+$map[($x+1)%$xmax][($y-1)%$ymax][0].$map[$x][$y][0]+].png"></td>
186         [$ endif $]
187       [$ else $]
188         [$ if not $yy $]
189           <td><img src="map/HB.png"></td>
190           [$ if $xx==$xmax-1 $]
191             <td><img src="map/SBB.png"></td>
192           [$ else $]
193             <td><img src="map/SB[+$map[($x+1)%$xmax][($y-1)%$ymax][0]+].png"></td>
194           [$ endif $]
195         [$ else $]
196           [$ if $xx==$xmax-1 $]
197             <td><img src="map/S[+$map[$x][($y-1)%$ymax][0]+]B.png"></td>
198           [$ else $]
199             <td><img src="map/S[+$map[$x][($y-1)%$ymax][0].$map[($x+1)%$xmax][($y-1)%$ymax][0]+].png"></td>
200           [$ endif $]
201         [$ endif $]
202       [$ endif $]
203     [$ endforeach $]
204     </tr><tr>
205     <td><img src="map/B[+$map[$xoff][($yy+$yoff)%$ymax][0]+]B.png"></td>
206     [$ foreach $xx (0..($xmax-1)) $]
207       [$ if not $xx % 2 $]
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>
213           [$ else $]
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>
215           [$ endif $]
216         [$ else $]
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>
220         [$ endif $]
221         [$ if $xx==$xmax-2 $]
222           <td><img src="map/BB[+$map[$x][$y][0] +].png"></td>
223         [$ else $]
224           <td><img src="map/B[+$map[($x+1)%$xmax][($y-1)%$ymax][0].$map[$x][$y][0] +].png"></td>
225         [$ endif $]
226       [$ endif $]
227     [$ endforeach $]
228     </tr>
229   [$ endforeach $]
230   <tr>
231   <td><img src="map/SBB.png"></td>
232   [$ foreach $xx (0..($xmax-1)) $]
233     [$ if $xx % 2 $]
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>
238     [$ endif $]
239   [$ endforeach $]
240   </tr></table>
241
242 [$ else $]
243
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.
246
247 [$ endif $]
248
249 </body></html>