Creating city for MM2 is quite complicated. You have to create many files and objects and we don't know full specification of all MM2 files. Fortunately you don't have to know everything about that files, but you should have basic knowledge about them.
Like everything in MM2, additional city is a AR archive which is a normal ZIP file with changed extension. That file contains few directories:
Most of the files are created by MM2 CityTool. You have to only create textures in _texture directory
... and of course .3ds with city.
That's all you should know about cities structure in MM2. If you want to have city it game, just pack all directories to zip archive and then rename it.
In city, there are few types of objecs (I describe only objects supported by MM2CT):
With that objects, you can create quite big and complex city. In the future I'm going to add more objects (e.g. more types of roads).
.3ds allows only for short names, so we have to use special names. Every object name ends with _. This is a real end of the name. When you call your object PH1_, PH1_22, PH1_33, PH1_345, for program the name isPH1 (MM2CT removes everything which is placed after _). Because .3ds needs also uniqe names, 3DStudio and ZModeler during export add numer to objects. So, if you have two objects ROADS_ they will be exported as ROADS_, ROADS_1 (but MM2CT will cut the name, so don't worry about it).
Inst objects are unbreakable. You can make as many objects as you want. Every object needs at least high body and bound. You can also add additional bodies (medium, low, verlow). The name template is:
Pxn_ |
where: P - stands for PKG x - body type (H - high, M - medium, L - low, V - very low, B - bound) n - object name |
examples: PH1 - body H of object no. 1 PM1 - body M of object no. 1 PB2 - bound of object no. 2, uses for colissions |
As I wrote, you must have at least PHn_ and PBn_. If you want to use the same objects, but in few different positions (for example few houses), you don't have to create new objects, you can use the first one. There is special object type which is a link/alias for other object. If you want to duplicate objects, just copy PHn_ or PBn_ (you can select type during import) and rename it to PAn_. You can also rotate created alias (the angle will be calculate by MM2CT). What alias give you? There is only one PKG file for all that objects, so you save disk space.
Pxn_ |
where: P - stands for PKG x - object type (H - high, M - medium, L - low, V - very low, B - bound, A - for alias) n - object name |
examples: PH1 - body H of object no. 1 PM1 - body M of object no. 1 PB2 - bound of object no. 2, uses for colissions PA2 - alias of object no. 2, this is the copy of PH2_ or PB2_ |
Very often we use trees in city, but if you just copy them, they will look unnatural. You should rotate evey tree to random angle. MM2CT makes that process easier. You can create special objects, Txn_ which represented tree. Only diffrent between Txn_ and Pxn_ is that Txn_ are rotated radomly import. Also you don't have to copy BHn_ to create alias, you just need to copy TBn_, because only position is important, rotate angle is ignored.
Txn_ |
where: T - stands for tree x - object type (H - high, M - medium, L - low, V - very low, B - bound, A - for alias) n - object name |
examples: TH1 - body H of object no. 1 TM1 - body M of object no. 1 TB2 - bound of object no. 2, uses for colissions TA2 - alias of object no. 2, this is the copy of TB2_ |
They are breakable objects. You can make as many objects as you want. Every object needs at least high body and bound. You can also add additional bodies (medium, low, verlow). The rules are the same as for INST objects. The name template is:
Bxn_ |
where: B - stands for breakable objects x - object type (H - high, M - medium, L - low, V - very low, B - bound, A - for alias) n - object name |
examples: BH1 - body H of object no. 1 BM1 - body M of object no. 1 BB2 - bound of object no. 2, uses for colissions BA2 - alias of object no. 2, this is the copy of BH2_ or BB2_ |
Rxn_ |
where: R - stands for tRee x - object type (H - high, M - medium, L - low, V - very low, B - bound, A - for alias) n - object name |
examples: RH1 - body H of object no. 1 RM1 - body M of object no. 1 RB2 - bound of object no. 2, uses for colissions RA2 - alias of object no. 2, this is the copy of RB2_ |
This type includes objects like roads, intersections and ground. They are saved in PSDL file and are based for traffic generator. There are just few types of objects:
They are flat rectangles (4 points) with assigned texture. Decal can be use to add shadow to trees and other objects. The name template is:
DECAL_ |
They are simple boxes, not need textures. They set position of cop cars. MM2 won't use cops without BAI file, so in your city there must be at least 3 roads and 2 intersections.
COPn_ |
where: n - cop car number. Car name is binded to number in MM2CT during import |
All objects are automaticly textured by MM2. You have to only assign texture do them, you don't need (and you shouldn't) set UV mapping parameters for that objects.
Ground it's a normal object. It uses one texture which is automaticly repeated.
It must have ONE continuous circuit/perimeter.
If you have problems with circuit/perimeter, you should divide object into few parts
If you want to make forest quickly, you should rename GROUND_ to GTn_, where n is inst object index
(THn_). MM2CT will add trees using THn_ as template.
During import you type necessary parameters like offset and maximum area of a triangle
and after that, your city recieves trees. Offset is a distance between center of triangle and tree pivot.
Trees are added to each face. If area of face is too big, face is divided in smaller triangles.
It uses one texture, which is maped per face. Roads are build from pairs of points.
Angle between AB/BC and BC/CD must be about 90 degree
It uses three texture, first is the road, second is the sidewalk and third is for distance view. You have to only
assign first texture and the others are used automaticly (they must be after first texture in the texture list).
TextureList:
....
RoadTexture
SideWalkTexture
LowTexture
....
Roads with sidewalks are build from 4 points in row. If we have 4 points, 1-2 and 3-4 define sidewalks and 2-3 defines road.
Requirements:
Itersection is made from three types of objects. IS - main surface, SW - sidewalk, CW - crosswalk. You can connect as many roads as you want to intersection, there is no limit in program, but it wasn't tested for more than 4 roads.
It uses three texture, first is the main surface, second is the sidewalk and third is for crosswalk. You have to only
assign first texture and the others are used automaticly (they must be after first texture in the texture list).
TextureList:
....
MainSurfaceTexture
SideWalkTexture
CrossWalkTexture
....
Requirements:
This example shows one roads and two intersections.