Community Edition “New breath for an old well.”

Table Reference

Every table section, column by column, as ReBreather's loader reads it. Columns are numbered from 0. "Required" is the number of columns a row must have before it is accepted; a shorter row is reported in the load log (/funpak) and dropped. A row with a number out of range is stored as row 0 (spells: row 1), which overwrites that table's template, so the log is worth reading.

Three tables use row 0 as a template: item 0's price, monster 0's figures and spell 0's costs are percentages (1 to 500) applied to every value the game computes for itself.

Syntax differences from the original

  • A backslash escapes the next character, and a semicolon outside quotes ends the row as a comment. The original treated both as ordinary text.
  • Write a, b or a b, not a , b: a comma with a space on both sides produces an empty column here.
  • A section name must be exact. The original accepted any longer word that began with one.
  • Lines between -NAME and the next +NAME still feed the section just closed, so keep only comments there.
  • Includes nest 24 deep (the original crashed at about 25), and a missing include is skipped silently. Inside a file that was included through a path with a forward slash, nested includes are skipped: use backslashes when nesting.
  • The world checksum that other players see is built from the script and the map, config, gender, slots and mission files. Changing any of them makes a different world as far as a server is concerned.

MAPS (required 4)

#ColumnNotes
0number0 to 999
1picturefile in maps/
2rootnames maps/<root>.ter, .obl, .mon, the music section and the fall-back tune
3display name
4flagsC-style number: 0x is hex, a leading 0 is octal. 4 dangerous, 8 safe
5theme0 to 255

TERRAINS (required 3)

#ColumnNotes
0number0 to 9
1name
2damagetaken while standing on it
3tokenoptional: needed to travel on it

TOKENS (required 2)

#ColumnNotes
0number0 to 4095
1descriptiona TOKEN line in the script overrides it

TROPHIES (required 8)

#ColumnNotes
0number0 to 4095
1name
2sheetart sheet name
3cellcell on that sheet
4stackper bag slot, capped at 99
5priceof a full stack
6monstersdotted list of monsters that drop it
7chancedrop probability
8tokenoptional: needed before it drops
9flagsoptional

ELEMENTS (required 2)

#ColumnNotes
0number0 to 7 are full records; the first row for a number wins
1nameup to 29 characters. Default: Life, Water, Nature, Earth, Death, Fire, Spirit, Air

HANDS (required 2)

#ColumnNotes
0number0 to 7
1namealso names equipment slots 2 to 9
2rangeattack reach, 0 to 100
3soundoptional hit sound

EQUIP (required 2)

#ColumnNotes
0slot0 to 13. Defaults: 0 Helmet, 1 Armor, 2-9 the hands, 10 Boots, 11 Shield, 12 Ring, 13 Amulet
1nameup to 39 characters

ITEMS (required 15)

#ColumnNotes
0number0 to 5119; 0 is the price template
1name
2classclass.ticketMode.destMap.destLink.dropIn.onlyInScene; the dotted parts are for travel tickets (class 4)
3picturecell[.extension]; a leading + means extension 1
4pricescaled by item 0
5requirementslevel.token.flags.maxCount.trophyUsed.trophyMade.countUsed.countMade
6spellspell.bootEffect
7element
8defensecapped at 255
9attackcapped at 255
10hprestored or added
11mprestored or added
12ability pointscapped at 20
13findchance.onlyFromMonster
14description
15soundoptional. A weapon with none gets a random sword sound; for class 201 this names the web page
16attack effectoptional path.image.flags.weather.effects; a part starting ? is random, -1 alone is a random attack

Classes: 0 potion, 1 antidote, 4 travel ticket, 10 helmet, 11 armor, 12 to 19 weapons for hands 0 to 7, 20 boots, 21 shield, 22 ring, 23 amulet, 100 to 104 ability seeds, 105 the multi-seed, 200 pet, 201 web page. Cells are as tall as the sheet; armor, weapons and shields are drawn 3:4, everything else square.

SPELLS (required 7)

#ColumnNotes
0number1 to 767; 0 is the cost template
1name
2pptraining points to learn; 0 = automatic
3element
4damagedamage.summonedMonster; 0 = automatic
5mpto cast; 0 = automatic
6levellevel.flags.levelToLearn.token.trophyUsed.trophyMade.countUsed.countMade; add 100 for all targets
7pathflight path style
8rowrow on the effects sheet, 0 to 31
9columnsdefault 16
10sparklesdefault 32, up to 1023
11msecper frame, default 100
12gravity / effects / weatherweather*1000000 + fx*1000 + gravity, or dotted gravity.fx.weather
13loop
14-16soundssummon, travel, strike; empty picks a stock sound
17iconsheet.cell

Automatic values grow with the level: damage from 30 at level 0 by 30 percent a level, learning cost from 250 by 50 percent (doubled for all-target spells), MP from 2 by 45 percent (times 1.2 for all targets).

MONSTERS (required 12)

#ColumnNotes
0number0 to 4095; 0 is the template
1name
2skinmonsters/<skin>.bmp
3lookscale.flags.colourTable.transparent
4kindelement.alignment; the alignment word is what KM.<word> counts
5-8HP, MP, defense, attack0 or less = automatic
9experience0 or less = automatic; -2 forces 0
10gold0 or less = automatic; -2 forces 0
11level
12-16STR, STA, AGI, DEX, WISoptional; automatic when 0 or less, capped at 255
17, 18growl, painsounds; empty picks a stock one
19attack path-1 = random
20AIAI command

Automatic figures are percentages of the level, scaled by monster 0: HP 1162, MP 513, attack 567, defense 834, strength 197, stamina 212, agility 189, dexterity 175, wisdom 231. Experience is 40 percent of HP, multiplied up by stamina, attack, defence and level, capped at 60000; gold follows the experience and the level, at least 5.

GROUPS (required 2)

#ColumnNotes
0number1 to 4095. Row 0 is not a group: a non-zero column 1 there makes every member of every group spawn instead of rolling
1+membersmonster numbers, up to nine

THEMES (required 3)

#ColumnNotes
0number0 to 255
1name
2loopthe looping background sound
3+seconds=sounda one-shot sound roughly every N seconds, as many as you like

LEVELS, numeric rows (required 5)

#ColumnNotes
0keyclass times 100 plus level: class 1 to 89, level 0 to 100
1experienceread but not used; the curve is built in
2hp gainedthe level-0 row is the base; a gain carries forward until changed
3mp gainedthe same
4titlegender forms separated by a vertical bar; the level-0 title is the class name
5magic ratiolevel 0 only, 0 to 100; the hand ratio is the rest
6weaponlevel 0 only: the starting right-hand weapon

LEVELS, keyword rows

A keyword row applies to the class of the most recent numeric row. One before any numeric row is ignored with a warning, and an unknown keyword is ignored silently.

KeywordArgumentsEffect
DESCRIPTIONtextclass text in the New Soul window, up to 259 characters
AUTO_MAXminHP maxHP minMP maxMP startMPLevelreplaces the per-level gains with a curve from the minimum at level 0 to the maximum at level 100; only the class's first one counts
MAX_WALLETnlowers the gold cap (below 1: the class can hold no gold)
NO_GIFTSthe class cannot be given or tossed items
MAGIC_RATIO, HAND_RATIOn0 to 100; the other becomes the rest
START_ABILITY, MAX_ABILITYstr wis sta agi dexeach up to 255
START_ELEMENT_PP, MAX_ELEMENT_PPeight valuesin element order
START_HAND_PP, MAX_HAND_PPeight valueshands 0 to 7
START_LOCATIONmap link dropInwhere a new hero appears
START_ITEMS, START_SPELLS, START_TOKENSup to eight numbers
DEFAULT_SKINup to four skin namesone per gender
HIDDEN_CLASSlevelnot offered at the Well; a hero moved into it is held to this level

Past level 100 a hero gains 50 HP and 20 MP a level. The gold a class can hold is 10000 times the level plus one, at most a million, unless MAX_WALLET lowers it.

config.ini, section [General]

KeyDefaultMeaning
StartingGP1000gold a new hero starts with
goldNameGPwhat the game calls gold
maxUnspentPP1000000cap on unspent training points
cookieProtection00 none, 1 hash cookies named secure..., 2 hash all
noGivingGP0non-zero stops players handing gold to each other
maxPKAttackAdvantage80level advantage allowed in a player-versus-player attack
PKHandPercent, PKMagicPercent100damage percentages in such fights
pkTrophy0trophy awarded for a player kill
petsCanBitePeople1whether pets may attack players
karmaPointsAreAlsoWarPoints, monsterXPAreAlsoWarPoints, tacticsWinGivesWarPoints, tacticsSourceUrl0, 0, empty, emptyguild war-point sources

Every key is read as a whole number except goldName and tacticsSourceUrl; a key that is present but empty reads as 0.