INSTALLING MODS
Starting in Rebuild 3 version 1.5, you can create mods that affect configuration and difficulty variables, and create language packs to replace any text in the game.
The easiest way to install/uninstall mods is via the Rebuild 3 Steam Workshop. You can also install standalone mods via the Config > Modding menu, which works on all Win/Mac versions as well as mobile.
Standalone mods are stored in the Local Store mods directory:
C:\Users\YOUR_USERNAME\AppData\Roaming\com.sarahnorthway.rebuild3\Local Store\mods\
Rebuild 3 mod files are in key-value pair format, like ini or Java properties. Here's an example of a mod that gives you 999 starting food:
mod_name = All The Food You Can Eat
mod_description = Start new cities with 999 food.
STARTING_FOOD = 999
To install this mod: open the Config > Modding menu in the game and press Install Mod. On PC you'll be prompted to choose a file (save the above as somefilename.txt). On mobile you'll paste it from the clipboard.
On Android and iOS install mods by directly pasting the text of a mod into the popup at Config > Modding > Install Mod. If you long-press on the white box beneath "paste mod data here", you should get an option to Paste text from the clipboard into it, although this may depend on your OS and which keyboard you're using.
UPLOADING MODS
Upload your mod to the game to test it through the workshop menu inside the game. Then publish your tested mod to the Steam Workshop from the same menu.
A mod file needs to be a single file or a zip with multiple files. One of the files must contain info tags including mod_type, mod_name etc.
After upload, you can replace it from inside the game, or edit, make public/private, or delete your mod via Steam's website.
CONFIG MODS
Here's an example of a config mod that makes Rebuild 3 extra hard. Any line starting with a semicolon or hash will be ignored:
mod_name = Truly Impossible
mod_description = Make Impossible difficulty way harder
; Difficulty settings
; these are all length-5 arrays for the five difficulties:
; EASY, NORMAL, CHALLENGING, HARD, IMPOSSIBLE
; How many zombies can there be max on one square at the same time?
MAX_ZOMBIES_PER_SQUARE = 50, 75, 100, 150, 9999
; How many zombies spawn on each square (away from the fort)
ZOMBIE_SPAWN_MULTIPLIER = 1.00, 1.00, 1.50, 2.00, 10
; How many days between regular zombie units spawning or attacking
DAYS_BETWEEN_ZOMBIE_UNITS = 16, 10, 8, 6, 1
; Any roll for injury vs death has this minimum chance to be injury
INJURY_CHANCE_BASE = 0.50, 0.25, 0.25, 0.25, 0
Download the config.ini template from here (old version. It contains a full list of all settings you can modify as well as their defaults. Every config mod must contain "mod_type = config" as well as mod_name and mod_description.
LANGUAGE MODS
To translate Rebuild 3, you can download the original commented language files from here (old version). This is a huge project to take on (200,000 words and dynamic genders) so you may need a team to help!
To create your own a language pack, it must be in properties format and include mod_type, mod_name, mod_description, mod_language_name, mod_locale_id in one of the files. Example:
mod_name = Spanish Resources
mod_description = Google Translated Spanish resource names
mod_language_name = Español
mod_locale_id = ES
resource_food_resourceName = Alimentación
resource_ammo_resourceName = Municiones
resource_fuel_resourceName = Combustible
resource_medicine_resourceName = Medicina
If you install this mod, most places where Food is referenced it will be called Alimentación instead. Dynamic content is where things get tricky:
mod_name = French Event
mod_description = Google Translated French of one random event
mod_language_name = Français
mod_locale_id = ES
# Original English:
# randomDeath_title = [FormalName] died
# randomDeath_1 = [Name] was killed by {1} today while [missioning].\n\n
# We'll miss [him]... Can I have [his] {2}?
# This is what it looks like in the game:
# Jane Smith died
# Jane was killed by roamers today while scavenging.
# We'll miss her... Can I have her guitar?
# En Français:
randomDeath_title = [FormalName] est morte
randomDeath_1 = [Name] a été tué aujourd'hui par des {1} tandis [missioning].\n\n
[g|Il|Elle] va nous manquer... Puis-je avoir son {2}?
In this case, the game will replace [FormalName] with the survivor's name, [missioning] with what she was doing (MissionScavenge_action, a string which will also be translated), and he/him/his/himself with the female gendered words. {1} and {2} are replaced by unitZombieRoamer_name and equip_guitar_name, strings also translated elsewhere.
In addition to the basic his/hers, French has gendered nouns ("sa guitare" vs "son pistolet"). Spanish has gendered adjectives ("alto" vs "alta"). These rules could get... complicated. But you can use [g|MALE|FEMALE] to switch a word based on gender, or define your own rules (eg [il], [lui]).
Considering the scale and complexity of translating Rebuild, it might make sense to team up with other translators using a localization crowd-sourcing tool like POEditor.com.
Details on dynamic language content:
- Text string ids ending with _picture, _pictureColin, _icon should not be changed.
- Strings can include up to three dynamic arguments: {1}, {2}, and {3}. These will be replaced by something else, eg the name of a pet, the number of zombies killed, the type of equipment found, or even a whole sentence.
- Italics are done using _underscores_.
- Line breaks are done using \n
- Common dynamic content is shown with tags in square braces []:
- [CityName] - name of the current city
- [square] - whatever building is being discussed eg "police station"
- [Square] - most tags can be auto-capitalized eg "Police station"
- [squares] - pluralized eg "police stations", defined in en_squares.properties
- [missioning] - actionText for every mission eg "scavenging" from en_missionTypes.properties
- [Faction], [factionNoThe], [factionAdjective], [faction's] - eg "The Riffs", "Riffs", "Riff", "the Riffs'" from en_factions.properties
- [FactionLeader], [factionLeader's] - eg "Gustav" from en_factions.properties
- [*one|two|three] will display a random one of the choices for flavor variation. Feel free to remove these and only translate one choice, or add your own variations
- [one|two|three] (so long as "one" is not "g", "g2", or "p" see below) also picks a random one, but consistently picks the same index during an event, eg "The [yellow|red|blue] dress was the color of [the sun|blood|the sky]". Feel free to remove these or add your own variations
- [Name] > "Joe", [FormalName] > "Joe Collins", [Name] > "Joe's", [FormalName's] > "Joe Collins'". Up to 2 survivors and 1 faction leader can be mentioned in a text string. For the second survivor, use [Name2], [Name2's], [FormalName2's] etc.
- [job], [Job], [job2], [Job2] - "engineer", "soldier" etc from en_snippets.properties
- [g|MALE_TERM|FEMAL_TERM] will be "MALE_TERM" for a male survivor or "FEMALE_TERM" for female survivor, eg [g|he is handsome|she is pretty]. Use [g2|he|she] to refer to the 2nd survivor in an event
- [his] [himself2] or [man] becomes "her" "herself" or "woman" for female survivors. These common gender rules are defined in en_rules.properties. Delete them and replace with your own eg [lui] [il] etc
- [factionHe], [FactionHe], or for your own rules [factionLui] [FactionIl] etc. All common gender rules will automatically have "faction" prepended for faction leaders
- [p|SINGULAR_TERM|PLURAL_TERM] will be "SINGULAR_TERM" if there is only one survivor or "PLURAL_TERM" for plural, eg: [p|my life|our lives].
- [we] [us] [our] becomes "I" "me" "my" etc if reporting survivor is alone. These common plural rules are defined in en_rules.properties. Delete them and replace with your own eg [nous] [on] etc
- [a] and [A] are replaced last and will become "an" if preceding a vowel. Eg "[a] [square]" will be "a police station" or "an apartment". Feel free to ignore these if your language doesn't use them
- Tutorial uses extra tags: [numColins], [numFoodPerFarm], [numFood], [numColinsPerSuburb], [completionGoal], [morale]. Also [touch] and [tap] become "touch" or "tap" on mobile, "click" on pc.