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, bora b, nota , 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
-NAMEand the next+NAMEstill 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)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 999 |
| 1 | picture | file in maps/ |
| 2 | root | names maps/<root>.ter, .obl, .mon, the music section and the fall-back tune |
| 3 | display name | |
| 4 | flags | C-style number: 0x is hex, a leading 0 is octal. 4 dangerous, 8 safe |
| 5 | theme | 0 to 255 |
TERRAINS (required 3)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 9 |
| 1 | name | |
| 2 | damage | taken while standing on it |
| 3 | token | optional: needed to travel on it |
TOKENS (required 2)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 4095 |
| 1 | description | a TOKEN line in the script overrides it |
TROPHIES (required 8)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 4095 |
| 1 | name | |
| 2 | sheet | art sheet name |
| 3 | cell | cell on that sheet |
| 4 | stack | per bag slot, capped at 99 |
| 5 | price | of a full stack |
| 6 | monsters | dotted list of monsters that drop it |
| 7 | chance | drop probability |
| 8 | token | optional: needed before it drops |
| 9 | flags | optional |
ELEMENTS (required 2)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 7 are full records; the first row for a number wins |
| 1 | name | up to 29 characters. Default: Life, Water, Nature, Earth, Death, Fire, Spirit, Air |
HANDS (required 2)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 7 |
| 1 | name | also names equipment slots 2 to 9 |
| 2 | range | attack reach, 0 to 100 |
| 3 | sound | optional hit sound |
EQUIP (required 2)
| # | Column | Notes |
|---|---|---|
| 0 | slot | 0 to 13. Defaults: 0 Helmet, 1 Armor, 2-9 the hands, 10 Boots, 11 Shield, 12 Ring, 13 Amulet |
| 1 | name | up to 39 characters |
ITEMS (required 15)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 5119; 0 is the price template |
| 1 | name | |
| 2 | class | class.ticketMode.destMap.destLink.dropIn.onlyInScene; the dotted parts are for travel tickets (class 4) |
| 3 | picture | cell[.extension]; a leading + means extension 1 |
| 4 | price | scaled by item 0 |
| 5 | requirements | level.token.flags.maxCount.trophyUsed.trophyMade.countUsed.countMade |
| 6 | spell | spell.bootEffect |
| 7 | element | |
| 8 | defense | capped at 255 |
| 9 | attack | capped at 255 |
| 10 | hp | restored or added |
| 11 | mp | restored or added |
| 12 | ability points | capped at 20 |
| 13 | find | chance.onlyFromMonster |
| 14 | description | |
| 15 | sound | optional. A weapon with none gets a random sword sound; for class 201 this names the web page |
| 16 | attack effect | optional 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)
| # | Column | Notes |
|---|---|---|
| 0 | number | 1 to 767; 0 is the cost template |
| 1 | name | |
| 2 | pp | training points to learn; 0 = automatic |
| 3 | element | |
| 4 | damage | damage.summonedMonster; 0 = automatic |
| 5 | mp | to cast; 0 = automatic |
| 6 | level | level.flags.levelToLearn.token.trophyUsed.trophyMade.countUsed.countMade; add 100 for all targets |
| 7 | path | flight path style |
| 8 | row | row on the effects sheet, 0 to 31 |
| 9 | columns | default 16 |
| 10 | sparkles | default 32, up to 1023 |
| 11 | msec | per frame, default 100 |
| 12 | gravity / effects / weather | weather*1000000 + fx*1000 + gravity, or dotted gravity.fx.weather |
| 13 | loop | |
| 14-16 | sounds | summon, travel, strike; empty picks a stock sound |
| 17 | icon | sheet.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)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 4095; 0 is the template |
| 1 | name | |
| 2 | skin | monsters/<skin>.bmp |
| 3 | look | scale.flags.colourTable.transparent |
| 4 | kind | element.alignment; the alignment word is what KM.<word> counts |
| 5-8 | HP, MP, defense, attack | 0 or less = automatic |
| 9 | experience | 0 or less = automatic; -2 forces 0 |
| 10 | gold | 0 or less = automatic; -2 forces 0 |
| 11 | level | |
| 12-16 | STR, STA, AGI, DEX, WIS | optional; automatic when 0 or less, capped at 255 |
| 17, 18 | growl, pain | sounds; empty picks a stock one |
| 19 | attack path | -1 = random |
| 20 | AI | AI 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)
| # | Column | Notes |
|---|---|---|
| 0 | number | 1 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+ | members | monster numbers, up to nine |
THEMES (required 3)
| # | Column | Notes |
|---|---|---|
| 0 | number | 0 to 255 |
| 1 | name | |
| 2 | loop | the looping background sound |
| 3+ | seconds=sound | a one-shot sound roughly every N seconds, as many as you like |
LEVELS, numeric rows (required 5)
| # | Column | Notes |
|---|---|---|
| 0 | key | class times 100 plus level: class 1 to 89, level 0 to 100 |
| 1 | experience | read but not used; the curve is built in |
| 2 | hp gained | the level-0 row is the base; a gain carries forward until changed |
| 3 | mp gained | the same |
| 4 | title | gender forms separated by a vertical bar; the level-0 title is the class name |
| 5 | magic ratio | level 0 only, 0 to 100; the hand ratio is the rest |
| 6 | weapon | level 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.
| Keyword | Arguments | Effect |
|---|---|---|
DESCRIPTION | text | class text in the New Soul window, up to 259 characters |
AUTO_MAX | minHP maxHP minMP maxMP startMPLevel | replaces 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_WALLET | n | lowers the gold cap (below 1: the class can hold no gold) |
NO_GIFTS | the class cannot be given or tossed items | |
MAGIC_RATIO, HAND_RATIO | n | 0 to 100; the other becomes the rest |
START_ABILITY, MAX_ABILITY | str wis sta agi dex | each up to 255 |
START_ELEMENT_PP, MAX_ELEMENT_PP | eight values | in element order |
START_HAND_PP, MAX_HAND_PP | eight values | hands 0 to 7 |
START_LOCATION | map link dropIn | where a new hero appears |
START_ITEMS, START_SPELLS, START_TOKENS | up to eight numbers | |
DEFAULT_SKIN | up to four skin names | one per gender |
HIDDEN_CLASS | level | not 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]
| Key | Default | Meaning |
|---|---|---|
StartingGP | 1000 | gold a new hero starts with |
goldName | GP | what the game calls gold |
maxUnspentPP | 1000000 | cap on unspent training points |
cookieProtection | 0 | 0 none, 1 hash cookies named secure..., 2 hash all |
noGivingGP | 0 | non-zero stops players handing gold to each other |
maxPKAttackAdvantage | 80 | level advantage allowed in a player-versus-player attack |
PKHandPercent, PKMagicPercent | 100 | damage percentages in such fights |
pkTrophy | 0 | trophy awarded for a player kill |
petsCanBitePeople | 1 | whether pets may attack players |
karmaPointsAreAlsoWarPoints, monsterXPAreAlsoWarPoints, tacticsWinGivesWarPoints, tacticsSourceUrl | 0, 0, empty, empty | guild 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.