10 my $INT_MAX = 0x7fffffff;
11 my $INT_MIN = -$INT_MAX - 1;
46 my ($ef, $id, $key, @rest) = @_;
47 my $args = join(' ', @rest);
48 print "edit $ef2edit{$ef} $id $key $args\n";
52 my ($ef, $id, @rest) = @_;
53 print "edit $ef2edit{$ef} $id\n";
65 my ($x, $y) = split /,/, $id;
71 my ($ef, $id, $key, $lob, $upb) = @_;
72 edit($ef, $id, $key, $lob);
73 $id = next_id($ef, $id);
74 edit($ef, $id, $key, $lob - 1)
76 $id = next_id($ef, $id);
77 edit($ef, $id, $key, $upb);
78 $id = next_id($ef, $id);
79 edit($ef, $id, $key, $upb + 1)
84 my ($ef, $id, @rest) = @_;
86 edit_int1($ef, $id, @$it);
91 my ($id, $key, $val) = @_;
92 print "setres $key $id $val\n";
96 my ($id, $key, $val) = @_;
97 print "setsect $key $id $val\n";
101 my ($id, $key, $val) = @_;
102 print "give $key $id $val\n";
106 my ($id1, $id2) = @_;
107 print "swaps $id1 $id2\ny\n";
113 edit('sect', '0,0', '@', 0);
114 setres('0,0', '@', 0);
115 setsect('0,0', '@', 0);
118 # own oldown che_target
119 for my $key ('o', 'O', 'X') {
120 edit('sect', '1,7', $key, 0);
121 edit('sect', '1,7', $key, -1);
122 edit('sect', '3,7', $key, $MAXNOC - 1);
123 edit('sect', '3,7', $key, $MAXNOC);
125 edit('sect', '5,7', 'o', 2);
126 for my $key ('ow', 'ol') {
127 setsect('7,7', $key, 0);
128 setsect('7,7', $key, -1);
129 setsect('9,7', $key, $MAXNOC - 1);
130 setsect('9,7', $key, $MAXNOC);
132 setsect('11,7', 'ow', 2);
135 edit('sect', '1,7', 'L', '5,-7');
136 edit('sect', '3,-7', 'L', '3,-7', 'L', '1,0');
138 # effic mobil iron gmin fertil oil uran work loyalty che pstage ptime
139 # fallout avail mines road rail defense
142 my ($key, $lob, $upb) = @$it;
143 edit_int1('sect', '1,1', $key, $lob, $upb);
144 my $rkey = $edit2setres{$key};
146 setres('2,2', $rkey, $lob);
147 setres('4,2', $rkey, $lob - 1);
148 setres('6,2', $rkey, $upb);
149 setres('8,2', $rkey, $upb + 1);
151 my $skey = $edit2setsect{$key};
153 setsect('1,3', $skey, $INT_MIN);
154 setsect('3:7,3', $skey, 1);
155 setsect('5,3', $skey, $INT_MAX);
156 setsect('7,3', $skey, -1);
181 # special case: unowned sector
182 edit('sect', '-1,-1', 'i', 50);
183 setres('-1,-1', 'g', 50);
184 setsect('-1,-1', 'f', 50);
186 # special case: mines in occupied sector
187 setsect('1:3,-3', 'ol', 1);
188 setsect('1,-3', 'mi', 1);
189 edit('sect', '3,-3', 'M', 1);
192 edit('sect', '2,4', 'D', '4,4');
193 edit('sect', '4,4', 'D', '4,4');
196 for my $key ('s', 'S') {
197 edit('sect', '6:8,4', $key, '+');
198 edit('sect', '6,4', $key, '+');
199 edit('sect', '8,4', $key, ',');
203 edit('sect', '1,5', 'm', 1, 'a', 1);
206 iedit('sect', '3,5', 'm 2', 'a 1');
207 iedit('sect', '5,5', ' ');
208 iedit('sect', '7:9,5', 'e 1', '', 'e 2');
211 give('2,6', 'l', $INT_MIN);
212 give('4:8,6', 'c', 1);
213 give('6,6', 'c', $INT_MAX);
214 give('8,6', 'c', -1);
215 for my $key (split(//, 'cmsgpidbfolhur')) {
216 give('10,6', $key, 1);
220 swaps('-2,2', '2,-2');
222 ## Ship, plane, land unit, nuke
224 for my $ef ('ship', 'plane', 'land', 'nuke') {
226 edit($ef, 0, '@', 0);
228 edit($ef, 0, 'O', 0);
229 edit($ef, 0, 'O', -1);
230 edit($ef, 1, 'O', $MAXNOC - 1);
231 edit($ef, 1, 'O', $MAXNOC);
232 edit($ef, 2, 'O', 2);
233 edit($ef, 4, 'O', 0, 'O', '3');
235 edit($ef, 3, 'U', 5, 'U', 3);
236 edit($ef, 0, 'U', 0, 'U', -1);
238 my $key = $ef eq 'plane' ? 'l' : 'L';
239 edit($ef, 2, $key, '3,-1');
240 edit($ef, 3, $key, '1,-1');
244 edit('ship', 6, 't', 'lc', 'O', 1, 't', 'lc', 't', 'hc', 'g', 8, 't', 'lc');
246 # ship: effic mobil tech pstage ptime milit
247 edit_int('ship', 2, (
257 edit('plane', 6, 'T', 'mb', 'O', 1, 'T', 'mb', 'T', 'hb', 'T', 'mb');
258 edit('plane', 7, 'r', 255, 'T', 'hb', 'T', 'mb');
259 edit('plane', 8, 'T', 'hb', 'r', 255, 'T', 'f1');
261 # plane: effic mobil range tech
262 edit_int('plane', 2, (
270 edit('land', 6, 'T', 'art', 'O', 1, 'T', 'art', 'T', 'hat', 'g', 12,
273 # land: effic mobil tech harden retreat milit
274 edit_int('land', 2, (
284 edit('nuke', 6, 't', '15kt', 'O', 1, 't', '15kt', 't', '50kt', 't', '15kt');
287 edit_int('nuke', 2, (
294 edit($ef, 2, $key, '~');
295 edit($ef, 3, $key, 'a');
297 unit_group('ship', 'F');
298 unit_group('plane', 'w');
299 unit_group('land', 'a');
302 for my $ef ('ship', 'land') {
303 edit($ef, 2, 'R', '""');
304 edit($ef, 3, 'R', 'jj');
305 # Take care to have only valid bits set in final state
306 edit($ef, 2, 'W', 0, 'W', 1);
307 edit($ef, 3, 'W', 513, 'W', 1030, 'W', 2);
311 for my $ef ('ship', 'land') {
312 for my $key (split(//, 'cmsgpidBfolhur')) {
313 edit($ef, 2, $key, 1);
318 # Take care to have only valid bits set in final state
319 edit('plane', 2, 'f', 4);
323 my ($ef, $key1, $key2) = @_;
324 edit($ef, 2, $key1, -1, $key1, 9999);
325 edit($ef, 3, $key1, 3);
326 edit($ef, 4, $key1, 4, $key2, 4) if defined $key2;
328 unit_carrier('plane', 's', 'y');
329 unit_carrier('land', 'S', 'Y');
330 unit_carrier('nuke', 'p');
332 # special case: move carrier's cargo away
333 edit('plane', 4, 'l', '5,1');
335 # special case: load teleports to carrier
336 edit('land', 4, 'S', 2);
339 iedit('ship', 0, 'M 2', 'm 1', 'f 1');
340 iedit('ship', 0, 'R n', 'R ""');
341 iedit('plane', 0, 'm 2', 'y -1');
342 iedit('land', 0, 'M 2', 'Y -1');
343 iedit('nuke', 0, 'S a', 'p -1');
348 edit('nat', 0, '@', 0);
350 # btus reserve timeused money
354 ['m', 0, 2147483647],
356 ['M', -2147483648, 2147483647],
360 # Take care to use ones that won't receive further telegrams
361 edit('nat', 6, 't', -1);
362 edit('nat', 7, 't', 65536);
364 # tlev rlev elev hlev
365 for my $key ('T', 'R', 'E', 'H') {
366 edit('nat', 1, $key, 3.14);
367 edit('nat', 2, $key, 100);
368 edit('nat', 3, $key, -1);
372 edit('nat', 1, 'n', 'POGO');
373 edit('nat', 2, 'n', '2');
374 edit('nat', 3, 'n', 'drei');
377 edit('nat', 1, 'r', 1);
378 edit('nat', 2, 'r', '012345678901234567890123456789');
380 # xcap,ycap xorg,yorg
381 for my $key ('c', 'o') {
382 edit('nat', 1, $key, '0,0');
383 edit('nat', 2, $key, '2,0');
387 # Refs to nats with status 0 are invalid, take care to use
388 # unreferenced ones for that
389 edit('nat', 6, 's', 0);
390 edit('nat', 7, 's', -1);
391 edit('nat', 4, 's', $STAT_GOD);
392 edit('nat', 5, 's', $STAT_GOD + 1);
395 iedit('nat', 5, 'b 640', 'T 1');
397 ## Epilog: read telegrams (they're not in xdump)
398 for my $cnum (0, 1, 2, 3, 4, 5, 98) {
399 print "read $cnum\n";