From The Mana World
< User:O11c
Revision as of 06:45, 27 December 2012 by O11c (talk | contribs) (→‎char/save/storage.txt: replace named constant with value)

This is some notes on the save formats of TMWA. It is not intended to authorative, but rather a porting tool.

General

Save files generally consist of a number of tab separated fields, each of which may consist of a number of space and/or comma-separated fields.

Any line starting with //, or being empty, is usually ignored. But, any line not matching for format correctly is also usually ignored.

If there are any C0 control characters, funny stuff might happen.

integer

All integers stored at this level are in base 10.

/0|-?[1-9][0-9]*/

bool

A bool is just an integer that is expected to have the value 0 or 1 only.

string

A string is a sequence of non-control characters.

word

A word is a string containing no spaces.

char

a char is maybe a word of length 1. Bad things would happen if it were length 0 instead.

item

An item - which is usually in a space-separated list, which is itself between tabs - consists of:

Comma-separated fields:

  1. int id
  2. int nameid
  3. int amount
  4. int equip
  5. int identify
  6. int refine
  7. int attribute
  8. int card0
  9. int card1
  10. int card2
  11. int card3
  12. optional int borken

Add new common types here

login/save/account.txt

The standard 12 or 13 tab separated fields form, followed by a final "special" field:

  1. int account_id
  2. string userid
  3. string pass
  4. string lastlogin
  5. char sex
  6. int logincount
  7. int state
  8. string email
  9. string error_message
  10. int connect_until_time
  11. string last_ip
  12. string memo
  13. optional int ban_until_time
  14. account_reg2 variables (##) (there may be from 0 to 16 of these, separated by spaces)
    1. variable entries - the key and value are comma separated.
      1. string-nocomma key
      2. int value

There is an older version with 5-7 fields, plus the variables again:

  1. int account_id
  2. string userid
  3. string pass
  4. string lastlogin
  5. char sex
  6. optional int logincount
  7. optional int state
  8. account_reg2 variables again ...

Finally, there is a sentinel:

  1. int account_id
  2. literal string "%newid%"

char/save/athena.txt

char/save/accreg.txt

char/save/storage.txt

tab-separated:

  1. comma-separated:
    1. int account_id
    2. int storage_amount
  2. 0 to 300 space separated:
    1. item (however the 'broken' field does not work properly)

char/save/party.txt

It may be a sentinel:

  1. int party_newid
  2. literal string %newid%

It may be a party entry:

  1. int party_id
  2. string name
  3. comma separated:
    1. bool exp
    2. bool item

immediately followed by 0 to 12 of *tab* separated (hmph):

  1. comma-separated
    1. int account_id
    2. int leader
  2. string name

map/save/mapreg.txt

This file does NOT do comment checking. However, it does still check the format and skip if it fails.

Each line is tab separated:

  1. comma-separated...
    1. string varname
    2. optional int arrayindex
  2. string/int value, depending on whether varname ends with a $

Add new sections here