Map Making for Ants! PC

                                Map Making for Ants!
                                Hex Editor Required

	The final and main file you will be interested in is any file ending 
with .LVL that lives in your maps folder. These are the actual maps themselves. When 
ants.exe runs, it will load in them map file into memory. Modifying the file during 
the game will do nothing since the file is only loaded into memory once. From that 
point on... everything that happens during the game is actually saved in the map 
file (but only in memory not on your disk). This is how cheat-o-matic works, it is 
actually modifying the active file in memory.  Once the map file is loaded, the 
program then looks at the map file and loads in all the pieces required from the 
ants.chd to run that level.  Start with a fresh filename .. not a file that already 
exists (like tresure).  Once you have the file open you will notice that it is made 
up of 5 major sections. These sections will be called.. Sections - 0,1,2,3,4,5 for 
the purpose of this web page.  All addresses and values will be given in hexadecimal 
0000h ( or 0000d for decimal ).
 
SECTION 0  This section contains the introduction to the map.

Addr 0000-0007h appear to be just a file flag.  
Addr 0008h is the value for time duration in minutes.  
Addr 000A-0027h is the intro  
Addr 0028-0029h is a checksum.

	SECTION 1  This is an inclusion section. If you use anything in your map 
file, then it must first be defined in this section. If you know how to program even 
simple C++ then you will understand #include declarations.  I do not have a list of 
the codes used, but they are obvious. If somebody would care to email them to me, 
then I'll put them up here for you all to share.  Each cell in section 1 is in this 
format: ./level.... or 2E 5C 6C 65 76 65 6C 2E 00 00 00  for an empty cell. Pay 
carefull attention to alignment of cells when you add this section. You may also 
find that some cells are terminated with the value CD.
  
	SECTION 2  This section controls all terrain on the map. This includes: 
Dirt, Sand, Ice, Mud and Water.  The first 8 bytes of section 2 control the size of 
the map.  XX 00 00 00 XX 00 00 00  The first value is the height of the map and he 
second value is the Width.  Don't just think you can change this values to make the 
map as big as you want, there are many other factors that you must take into account 
and all checksums must be correct else your map will crash. If you want the formulas 
for the checksums, then ask one of the Brothers Of Darkness for them, if you can 
find them.  You will notice in this section that the tiles are defined by 6 byte 
blocks.
  
E5 01 00 00 00 00 - defines a clear dirt tile.  
DC 01 00 00 00 00 - defines a water tile.  
E7 01 00 00 00 00 - defines a sand tile.  Access to tiles is also controled in this 
section by the 3rd byte in each tile.  
E5 01 00 00 00 00 - An ant may walk on this tile.  
E5 01 01 00 00 00 - an ant cannot walk on this tile.

	The last two bytes appear to not be used. They may be address flags but I 
have not researched them closely to find out what they do. The fourth byte we 
haven't researched closely either, but susspect it has a control function for 
selective access like water or fire.  The following are descriptor codes only. (the 
first two bytes).  The following are codes for MUD..  
B7 01, B8 01, B9 01, BA 01, BB 01  94 02, 95 02, 96 02, 97 02, 98 02, 99 02, 9A 02, 
9B 02, 9C 02  The trick to making your map look good is never use the same codes 
next to each other.  The Following are all codes for Transition tiles and other 
terrain tiles.  E001, E201, E301, E401, E501, E601, E701, E801, E901, EA01, EB01, 
EC01, ED01, EF01  DA01, DB01, DC01, DD01, DE01, DF01, F101, F301, F501, F701, F901, 
FB01, FD01, FF01  B001, B101, B201, B301, B401, B501, B601, B701, B801, AF01, C201, 
C401, C601, C801  0102, 0302, 0502, 0702, 0902.  There are many more and I'm sorry I 
do Them all these tiles. If you use common sense and a bit of trail and error, 
you'll work out which is which. Some tiles of terrain belong beside each other. 
Chose your tiles carefully when making a map and your map will look really good.

	SECTION 3  This section contains data on objects that sit on the surface of 
the map such as Grass, Flowers, Ojects, Food, Power Ups and Ant Hills.  A standard 
blank tile is: FE 7F 00 00 XX XX  This means that this tile has no object on it at 
this location. You will find a blank tile will be 00 00 but for all other objects, 
each item should have it's exact location in this data. It will make it easier for 
you to find it later on and in the case of flowers, they will not be three 
dimensional unless this address is exactly correct !  ANT HILLS.
  
F5 00 00 00 XX XX = BLACK  
F6 00 00 00 XX XX = BLUE  
F7 00 00 00 XX XX = RED  
F8 00 00 00 XX XX = GREEN  
	
	You will note the XX are varible. They must be correct, they describe the 
position of the ant hill on the map. The first byte is the Row and the last byte is 
the Colomn.  Futher more, the ant hill may only be 4 x 4 tiles and the hole must be 
in the 2nd x 2nd tile and is defined as Fx 00 01 00 XX XX. (Fx is the Color 
descriptor byte).  POWER UPS.
  
3E 00 01 00 XX XX = Soldier  
3F 00 01 00 XX XX = Theif  
40 00 01 00 XX XX = Bomber  
41 00 01 00 XX XX = Diver  
42 00 01 00 XX XX = Fire
  
	Again, the XX's describe the position of the power up on the map.  FLOWERS  
These are static flowers ... 
 
9A 01 XX 00 XX 00  
9B 01 XX 00 XX 00  
9C 01 XX 00 XX 00  
9D 01 XX 00 XX 00  
9E 01 XX 00 XX 00  
A4 01 XX 00 XX 00 = Dancing Flower  
A5 01 XX 00 XX 00 = Power Flower  
94 01 01 00 XX XX = Clover leaning left 
95 01 01 00 XX XX = 4 Leaf Clover  
96 01 01 00 XX XX = Clover leaning right  
97 01 01 00 XX XX = Clover leaning far right   
2A 05 00 00 XX XX = Grass 1 
2B 05 00 00 XX XX = Grass 2
2C 05 00 00 XX XX = Grass 3 
2D 05 00 00 XX XX = Grass 4 
2E 05 00 00 XX XX = Grass 5 
  
	SECTION 4  In This section everything elese is included. The first two bytes 
are the number of ants at the start of the game. If you just ran off and changed it 
and found it didn't work, there's a very good reason.  Firstly, this is the TOTAL 
number of ants at the start. Every ant must be accounted for, any errors and the map 
will crash. BUT, this does not limit you in how many ants you can have, what color 
or where you put them to start. You can for example, have red start with 12 ants and 
all other colors start with only 3. Of course this would seem silly at first since 
red would have a very unfair advantage in the game, but if you designed a good map. 
You'd put the red ants hill in such a position that it would even up the game. When 
designing a map with numbers of ants, always ask yourself could I win if I was any 
color on this map. If the answer is yes, then you have a good design.  Ok, so you've 
changed the number of ants, but it doesn't work... why ?  Because you just changed 
the pointer value and didn't actually add any ants to the map !  The codes for the 
ants are as follows:
  
98 00 XX 00 XX = BLUE  
99 00 XX 00 XX = BLACK  
9A 00 XX 00 XX = GREEN
9B 00 XX 00 XX = RED  
	
	As per usal, the XX 's represent the starting positions of each ant.  A TIP: 
It is possible to make more than one ant start on the same tile. The result is quite 
funny, but I'm not sure if it can be programed into the map at the start of the 
game. Needless to say, a good map will look better if all the ants start in their 
own position.  There's more !! If you were clever, you might have noticed that there 
seems to be more than four types of ants ? At first we thought this could have been 
extra colored ants for competition games, but after searching the ants.chd file for 
other colors we realised they were not ants. A quick search of the map at those 
start postions revealed flowers ! In order to display flowers, they must be included 
in this section. (more on this later).  The Difference is in the second byte as 
follows:  

9A 01 XX 00 XX  9B 01 XX 00 XX  9C 01 XX 00 XX  9D 01 XX 00 XX  9E 01 XX 00 XX  A4 
01 XX 00 XX  A5 01 XX 00 XX 

Next in Section 5 comes.. FOOD !  We know you guys have been waiting for this for a 
while, so here it is.  Food codes a varible in length, this is why it was so hard 
for the map makers to find them all this time. Food appears in section 3 also, but 
it is a static picture. I'm not sure why section 3 has food on it. Food can be 
clones in section 3, but unless the parent piece of food is still active it will not 
work, and even then, the bites and points are still deducted from the parent food.  
The main control for food is in section 4 and even if the corresponding titles are 
not in the 3rd section.  
RR 00 CC 00 XX 00 1E 00 02 00 QQ 00 FF 01 00 00 FE 7F
This is the simplest example of a piece of food. I'll start at the begining.
  
RR = The Row position of the food  
CC = The Column position of the food  
XX = The number of bites total in the food  
1E = The value of each bite. (the points each ant gets)  
02 = The number of Display states.  
QQ = The number of bites per display state.  
FF 01 00 00 = The Food Descriptor / Display state.  
FE 7F = End flag and Final Display state.  

	A few things to be said on these values. The Maximum value for any one byte 
is FF (255).  The number of display states will determine how long the array for 
each food block is. For a value of 02 the food block is 18 bytes long. For a value 
of 03 the block is 22 bytes long and for a value of 04 the block is 26 bytes long. 
(An extra four bytes for each state).  

RR00CC00XX001E000200QQ00 FF010000 FE7F is 02 display states.  
RR00CC00XX001E000300QQ00 FF010000 FE010000 FE7F is 03 display states.  
RR00CC00XX001E000400QQ00 FF010000 FE010000 FD010000 FE7F is 04 display states,  and 
so on.  

	You can see the first, second and final display states.  Normally, this 
would be the same type of food, each state slowly being eaten away. BUT, you may 
have just about anything displayed, including different types of food. A hamburger 
may turn into a twinky after 10 bites. etc.  The most interesting effect of food is 
the last end flag. You will see this used in section 3. It simply means display 
nothing ! In this case, that is exactly what happens. When the food is gone, nothing 
is displayed on that tile. Of course this is not always the case. Sometimes there is 
something left behind, like a chicken bone, or and empty tin of potted meat. The 
last two bytes display this. You will see the classic example of all of this in 
JUNGLE. Food turns into clover when it's gone. The potted meat leaves a tin, and the 
best example is the top and bottom food turn into combant power ups.

                           Values for the variables

01 - 1
02 - 2 
03 - 3 
04 - 4 
05 - 5
06 - 6
07 - 7
08 - 8
09 - 9
0A - 10
0B - 11
0C - 12
0D - 13
0E - 14
0F - 15
10 - 16
11 - 17
12 - 18
13 -19
14 - 20
15 - 21
16 - 22
17 - 23
18- 24
19 -25
1A-26
1B  27
1C -28
1D -29
1E - 30
1F - 31
20 - 32
21 - 33
22 - 34
23 - 35
24 - 36
25 - 37
26 - 38
27 - 39
28 - 40
29 - And so on just until FF which = 255
2A - 
2B - 
2C - 
2D - 
2E - 
2F - 
30 - 
31 - 
32 - 
33 - 
34 - 
35 - 
36 - 
37 - 
38 - 
39 - 
3A - 
3B - 
3C - 
3D - 
3E - 
3F - 
40 - 
41 - 
42 - 
43 - 
44 - 
45 - 
46 - 
47 - 
48 - 
49 - 
4A - 
4B - 
4C - 
4D - 
4E - 
4F - 
50 - 
51 - 
52 - 
53 - 
54 - 
55 - 
56 - 
57 - 
58 - 
59 - 
5A - 
5B - 
5C - 
5D - 
5E - 
5F - 
60 - 
61 - 
62 - 
63 - 
64 - 
65 - 
66 - 
67 - 
68 - 
69 - 
6A - 
6B - 
6C - 
6D - 
6E - 
6F - 
70 - 
71 - 
72 - 
73 - 
74 - 
75 - 
76 - 
77 - 
78 - 
79 - 
7A - 
7B - 
7C - 
7D - 
7E - 
7F - 
80 - 
81 - 
82 - 
83 - 
84 - 
85 - 
86 - 
87 - 
88 - 
89 - 
8A - 
8B - 
8C - 
8D - 
8E - 
8F - 
90 - 
91 - 
92 - 
93 - 
94 - 
95 - 
96 - 
97 - 
98 - 
99 - 
9A - 
9B - 
9C - 
9D - 
9E - 
9F - 
A0 - 
A1 - 
A2 - 
A3 - 
A4 - 
A5 - 
A6 - 
A7 - 
A8 - 
A9 - 
AA - 
AB - 
AC - 
AD - 
AE - 
AF - 
B0 - 
B1 - 
B2 - 
B3 - 
B4 - 
B5 - 
B6 - 
B7 - 
B8 - 
B9 - 
BA - 
BB - 
BC - 
BD - 
BE - 
BF - 
C0 - 
C1 - 
C2 - 
C3 - 
C4 - 
C5 - 
C6 - 
C7 - 
C8 - 
C9 - 
CA - 
CB - 
CC - 
CD - 
CE - 
CF - 
D0 - 
D1 - 
D2 - 
D3 - 
D4 - 
D5 - 
D6 - 
D7 - 
D8 - 
D9 - 
DA - 
DB - 
DC - 
DD - 
DE - 
DF - 
E0 - 
E1 - 
E2 - 
E3 - 
E4 - 
E5 - 
E6 - 
E7 - 
E8 - 
E9 - 
EA - 
EB - 
EC - 
ED - 
EE - 
EF - 
F0 - 
F1 - 
F2 - 
F3 - 
F4 - 
F5 - 
F6 - 
F7 - 
F8 - 
F9 - 
FA - 
FB -
FC -
FD -
FE -
FF -