Modding

In the current version of the game (0.0.54.9) it is possible to edit some features, both aesthetic and functional, such as:
 * Vehicles models and textures using .obj and .png import;
 * Game shaders, located on the game folder;
 * Custom building designs, using the building designer tool;
 * Game constants, editing the .lua files;
 * Game sound and music, located on the game folder;
 * The game textures, located on the game folder.

'''On the latest test branch (0.0.55.1), called "Architect Update", you can now import custom .obj models for decorations on the building designer, and uv map the mesh faces to use the game palette colors. '''The following information are some possibilities confirmed after testing and information from the devs.

Modpacks
Modpacks, as the name says, are packages of modifications made to game files. In the same modpack, it is possible to make changes to the game's sounds and music, textures, shaders, game mechanics, among other aspects. you can have many modpacks, provided they have a different name, but can only load one at once. The active modpack can be changed in the main menu.

Modpacks are an open (not compressed) folder, with the same folders inside as the New Cities steam folder (excluding the modpack folder). Any files in their proper place will be loaded instead, provided that modpack is selected in the game's modpack menu. Modpacks do not need to contain every file; only those with changes. To make a new modpack, simply copy the "yours" folder and change the name. The name of the folder will be used as the modpack name. Copy any files you wish to modify from the steam folder into your new modpack folder before changing, or you'll modify the base game instead.

LUA Constants
Some aspects of the game can be changed by modifying the file "constants.lua". The file is located in "New Cities/modpacks/YourModpackName/data/constants.lua".

Time
CStartYear = Set the starting year ingame.

Render and Camera
CRenderWeather = false or true. Toggle the weather effect ingame.

CRenderSnow = false or true. Toggle the snow effect ingame.

CRenderNight = false or true. Toggle the day/night cycle ingame.

Land
CMaxHeight = Set the max height of land generated in a new city.

CMaxSlope = Set the maximum slope of land generated in a new city.

Roads
CMaxGrade = Set the maximum grade that roads can be built.

Road Tool
CEnableUTurn = True/False. Controls whether U-turns are allowed at intersections

Money
CGoodFaithLOC = Set the starting loan amount

CStartingMoney = Set the starting money amount

Sound and Music
It is possible for modders to add more sounds to the game by adding them as .ogg files to the folder modpacks/ /sounds/environment/ on the game files. The game uses the filename to determine when to play the sound, similar to how building texture filenames work. See sounds/environment/ for the existing sound files and to get an idea of what the file format is.

Graphics
* This is a section copied from modpacks/yours/textures/buildings*


 * 1) File Format ###

All building textures are ordinary PNG image files. A building texture file must be placed in modpacks/ /textures/buildings. The dimensions of the image should be 4 times as tall as wide, but there is no set resolution. The image is divided into 4 sections, top to bottom.

The first section is the roof texture. Ancillary objects, such as chimneys and air conditioners, are colored using the top middle pixel of the image. The triangular space under a pitched roof, and the flat part of a flat roof, are also colored using this pixel.

The second section is the upper stories of the building. It represents a section 4 stories tall and just as wide. The section starts from the top, allowing you to create an interesting trim for the top of the building.

The third section is for the middle of the building. This section is only used for tall buildings. This section starts from the bottom.

The fourth section is for the first 4 stories of the building, as well as a basement. Doorways should be placed 5/8ths of a story, or 5/128ths of the total image, above the bottom of the image. This will align the doorway with walking paths and sidewalks.

There are three types of texture file, albedo, illumination, and normal. Albedo textures are ordinary RGB colors.

Illumination textures appear at night as appropriate. They are generally all black, or transparent, with a light yellow color over windows. There are generally four levels of illumination, with level 4 being mostly (but not entirely) illuminated, and level 1 having just a few windows lit up. We suggest you blur or texturize the illumination, which will create a better sense of depth and realism.

Normal textures are currently unimplemented. When implemented, the red and green channels will be used as explained here: https://en.wikipedia.org/wiki/Normal_mapping. The blue channel will be used for specularity. Blue regions will reflect the sun. The z value of the normal will be assumed to be 1, or possibly calculated using the pythagorean theorem.


 * 1) Filenames ###

The filename tells NewCity how to use the building texture. The filename is parsed without it’s path or file extension. It is tokenized into attributes divided by underscores. Each attribute is an attribute name, a dash, and then a parameter, or in some cases an attribute name with no parameter. The parameter must not have an underscore or a dash in it.

Zones: Some of the attributes set a zone. Zones only apply to albedo textures. An albedo texture can apply to multiple zones. Albedo textures that don’t have any zone will not be used.

Design: Use the "design" attribute to assign a texture to a specific building design, based on design filename. The word used must be a substring match. This attribute can be used multiple times.

Size: Always add “size-4-4-4” to the filename. This attribute isn’t used yet, but we might support different sizes/shapes in the future.

Illum groups: the illum attribute sets the illum group for the texture. Illum groups make it possible to have multiple albedo textures with different colors or materials, but the same window arrangement. Then they can share illumination textures, reducing the number of textures. The key is that they have to have the EXACT same window arrangement for it to work. Make sure that you are not re-using illum groups for textures with different window arrangements.

The illum group can be any alphanumeric string (no dashes or underscores). An albedo with an illum group set is matched with illumination textures with the same illum group. The illumination texture with the most appropriate illumination level is chosen, based on the building’s level of activity and time of day.

For illumination texture filenames, only include the illum group, the size attribute, and the illumination attribute: “illum-9pane_size-4-4-4_illumination-4.png”

Norm groups: the norm attribute sets the norm group for the texture. The norm group can be any alphanumeric string (no dashes or underscores). An albedo with a norm group set is matched with a normal texture with the same norm group AND the same illum group. We assume that if a building has a different arrangement of windows, then it will certainly need a different normal texture too.

For normal texture filenames, only include the norm group, the illum group, the size attribute, and the normal attribute: “illum-9pane_norm-corrugatedvertical_size-4-4-4_normal.png”

Other Attributes: Other attributes are provided to filter what type of building and neighborhood the texture is best suited for.


 * 1) Attributes: ###

“size” - indicates the size of the texture, using three numbers. The first number is how many segments (currently always 4). The second number is the width of the texture, and the third number is the height in floors. Currently only size-4-4-4 is supported. This attribute is provided for future proofing.

“residential” - residential buildings will get this texture.

“retail” - retail buildings will get this texture.

“farm” - farm buildings will get this texture.

“government” - government buildings, aka amenities, will get this texture.

“university” - university buildings will get this texture.

“mixeduse” - mixed use buildings will get this texture.

“office” - office buildings will get this texture.

“industrial” - industrial buildings will get this texture.

“design” - restricts this texture to building designs where there is a substring match with the attribute parameter.

“minvalue” - sets the minimum land value for which this texture will apply.

“maxvalue” - sets the maximum land value for which this texture will apply.

“mindensity” - sets the minimum density for which this texture will apply.

“maxdensity” - sets the maximum density for which this texture will apply.

“minfloors” - sets the minimum number of floors tall a building must be for his texture to apply.

“maxfloors” - sets the minimum number of floors tall a building must be for his texture to apply.

“illum” - sets the illum group. See documentation on illum groups above.

“norm” - sets the norm group. See documentation on norm groups above.

“illumination” - declares this texture an illumination texture. Is generally paired with a parameter setting the light level of the illumination texture. For example, a illumination texture with almost all windows lit up would be labeled “illumination-4”.

“albedo” - declares this texture an albedo texture. It is paired with an appropriate illumination texture and normal texture based on it’s illum group, norm group, and light level.

“normal” - declares this texture a normal texture. Normal textures are currently unimplemented.


 * 1) Quality of Life ###

Set CStartBuildingDesigner = true to start the game in building designer mode. Use the paint and illumination sliders to see building designs under multiple textures, and to see which textures are valid for particular designs.