City Overview

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.

Structure

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.

Objects

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).

City Creating

Objects naming

Introduction

.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

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_

PROPS objects

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_

PSDL Objects

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:

DECALS 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_

POLICES Objects

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

PSDL Objects in 3DS

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

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.

Road without sidewalks

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

Road with sidewalks

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:


Intersection

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:

Example

This example shows one roads and two intersections.

... to be continued.