AMIGA RPG CHARACTER FILE FORMATS------------------------------------------ This document was created on 11/5/05, and last updated on 11/12/09, by James Jacobs of Amigan Software (amigansoftware@gmail.com). Corrections and additions are welcomed. At the Amigan Software site (primary URL is http://amigan.1emu.net/) you will find various character editors for Amiga and MS-DOS. The games covered are: Alternate Reality: The City Bard's Tale 1-3 & Construction Set BattleTech Chambers of Shaolin Champions of Krynn Citadel of Vras Demon's Winter Dragon Wars Faery Tale Adventure Hillsfar Might and Magic 2 Neuromancer Phantasie 1 Phantasie 3 Questron 2 Shadowlands Times of Lore Ultima 3 Ultima 4 Ultima 5 Wizardry 6 Zerg The basic methodology for obtaining this data is by trial and error. For example: load the game, examine the characters, write down their statistics. Quit the game, examine the file(s) in a hex editor, looking for correspondences between in-game values and stored hex values. Change values in the hex editor, save, check what effects these have had in the game. And, change values in the game (eg. by creating characters, buying items, killing monsters, etc.), save, check what effects these have had in the hex editor. Reiterate as necessary. The HowDif program is used to easily compare binary files, and FileX to modify them. Alternate Reality: The City (ARCHAR:AR.Name, 13268 bytes)----------------- Name: only stored in filename! STA 15 WIS 15 They could be $9E, $9F, $A1, $A2, $B2, $B3, $B5, $B6 SKL 23 could be $1C, $A8, $A9, $AB, $AC INT 16 could be $21, $23, $94, $95, $97, $98, $140 CHR 13 STR 13 They could be $8D, $8E, $BC, $BD, $BF, $C0 HP 10 could be $E9, $EB, $ED, $322A Unknown locations/encodings: Experience Level Food Packets Water Flasks Inventory Coins Location? Facing direction? Secret stats? Quest status? Time of day? Bard's Tale 1-3 & Construction Set---------------------------------------- There is a character editor (but not a saved game editor) available for these games. The file formats are documented in the source code. See Aminet:game/edit/BTCE.lha Additionally, there is a BT1 character editor on AMOS PD #188, a BT1 character editor on the MA-GA Docs Disks, a BT2 character enhancer in ACE #22 p. 104, and BT1 and BT2 character editors on Megadisc #?. BTCS (Amiga and IBM-PC) (ROSTER.CHR, 94 bytes per character)-------------- 0..13: Name (unused bytes are NULL) 14..15: ? 16..17: Status bit 6 (%1000000) = paralyzed bit 5 (%0100000) = stoned bit 4 (%0010000) = possessed bit 3 (%0001000) = old bit 2 (%0000100) = insane bit 1 (%0000010) = poisoned bit 0 (%0000001) = dead 18: Race 0 = Human 1 = Elf 2 = Dwarf 3 = Hobbit 4 = Half-elf 5 = Half-orc 6 = Gnome 19: Class 0 = Warrior 1 = Paladin 2 = Rogue 3 = Bard 4 = Hunter 5 = Monk 6 = Conjurer 7 = Magician 8 = Sorcerer 9 = Wizard 10 = Archmage 11 = Monster 12 = Illusion 20: Current ST 21: Current IQ 22: Current DX 23: Current CN 24: Current LK 25: Maximum ST 26: Maximum IQ 27: Maximum DX 28: Maximum CN 29: Maximum LK 30..31: Base armour class 32..33: Maximum HP 34..35: Current HP 36..37: Current SP 38..39: Maximum SP 40: Item #1 type 41: Item #1 equipped 42: Item #2 type 43: Item #2 equipped 44: Item #3 type 45: Item #3 equipped 46: Item #4 type 47: Item #4 equipped 48: Item #5 type 49: Item #5 equipped 50: Item #6 type 51: Item #6 equipped 52: Item #7 type 53: Item #7 equipped 54: Item #8 type 55: Item #8 equipped 56: Item #1 quantity 57: Item #2 quantity 58: Item #3 quantity 59: Item #4 quantity 60: Item #5 quantity 61: Item #6 quantity 62: Item #7 quantity 63: Item #8 quantity 64..67: XP 68..71: GP 72: Current level 73: Maximum level 74: Sorcerer spell level 75: Conjurer spell level 76: Magician spell level 77: Wizard spell level 78: Archmage spell level 79..81: ? 82: Number of bard songs remaining? 83: Number of attacks per round 84..93: ? Equipped: $20 = yes, $00 = no. All BTCS values are stored in little-endian format :-( . BattleTech (Game1..Game6, 3929 bytes)------------------------------------- $D3C: Money ("C-Bills")? $D70: Money ("C-Bills")? $E10: Money ("C-Bills")? $E14: Money ("C-Bills")? $E2A: Money ("C-Bills")? $E2E: Money ("C-Bills")? Unknown encodings/locations: Name Location Facing direction? (maybe there isn't one) Weapon (eg. cudgel) Armour Health Skills: Bow & Blade Pistol Rifle Gunnery Piloting Tech Medical MedKit (yes/no) Mapper (yes/no) Field Surgery Kit (yes/no) B, D, C gauges Game settings (eg. movement rate)? Are these saved as part of the saved game? Quest status? Chambers of Shaolin (SAVEGAME, 16384 bytes)------------------------------- Note that this information applies only to the WHDLoad slave (V1.1), not to the floppy version, which seems to use a different format. There seems to be a bug in the WHDLoad slave (V1.1), in that only the first character "slot" can be used. 0..4: $56 $4F $4C $33 $01 ("VOL3\1"): header All bytes (except header) are stored in 'mirror' format (explained below). All unmentioned bytes are $00. This is a little-endian format :-( 100..109 ($64..$6D): Name (padded with spaces (stored as $04 which decrypts to $20/32/' ')) After decryption, these are ordinary ASCII characters (uppercase and numerals, at least, are permitted). 100 ($64): 2nd character of name 101 ($65): 1st character of name 102 ($66): 4th character of name 103 ($67): 3rd character of name 104 ($68): 6th character of name 105 ($69): 5th character of name 106 ($6A): 8th character of name 107 ($6B): 7th character of name 108 ($6C): 10th character of name 109 ($6D): 9th character of name 110 ($6E): low byte of an unknown variable? 111 ($6F): high byte of an unknown variable? 112 ($70): low byte of STRENGTH 113 ($71): high byte of STRENGTH 114 ($72): low byte of ATTACK FORCE 115 ($73): high byte of ATTACK FORCE 116 ($74): low byte of DEFENCE FORCE 117 ($75): high byte of DEFENCE FORCE 118 ($76): low byte of CONSTITUTION 119 ($77): high byte of CONSTITUTION 120 ($78): low byte of an unknown variable? 121 ($79): high byte of an unknown variable? 122 ($7A): low byte of an unknown variable? 123 ($7B): high byte of an unknown variable? 124 ($7C): low byte of an unknown variable? 125 ($7D): high byte of an unknown variable? Examples of the mirrored format: $01 = %00000001 -> %10000000 = 128 $02 = %00000010 -> %01000000 = 64 $03 = %00000011 -> %11000000 = 192 $04 = %00000100 -> %00100000 = 32 $2A = %00101010 -> %01010100 = 84 $50 = %01010000 -> %00001010 = 10 $60 = %01100000 -> %00000110 = 6 $80 = %10000000 -> %00000001 = 1 $8C = %10001100 -> %00110001 = 49 $A0 = %10100000 -> %00000101 = 5 $B0 = %10110000 -> %00001101 = 13 $C0 = %11000000 -> %00000011 = 3 $CA = %11001010 -> %01010011 = 83 $FF = %11111111 -> %11111111 = 255 A stored value of $E7C0 gives you 999 stat value (the highest displayable value). --------ASCII------- Mirrored 'A' $41 = 65 = %01000001 -> %10000010 = $82 'B' $42 = 66 = %01000010 -> %01000010 = $42 'C' $43 = 67 = %01000011 -> %11000010 = $C2 'D' $44 = 68 = %01000100 -> %00100010 = $22 'E' $45 = 69 = %01000101 -> %10100010 = $A2 'F' $46 = 70 = %01000110 -> %01100010 = $62 'G' $47 = 71 = %01000111 -> %11100010 = $E2 'H' $48 = 72 = %01001000 -> %00010010 = $12 'I' $49 = 73 = %01001001 -> %10010010 = $92 'J' $4A = 74 = %01001010 -> %01010010 = $52 'K' $4B = 75 = %01001011 -> %11010010 = $D2 'L' $4C = 76 = %01001100 -> %00110010 = $32 'M' $4D = 77 = %01001101 -> %10110010 = $B2 'N' $4E = 78 = %01001110 -> %01110010 = $72 'O' $4F = 79 = %01001111 -> %11110010 = $F2 'P' $50 = 80 = %01010000 -> %00001010 = $0A 'Q' $51 = 81 = %01010001 -> %10001010 = $8A 'R' $52 = 82 = %01010010 -> %01001010 = $4A 'S' $53 = 83 = %01010011 -> %11001010 = $CA 'T' $54 = 84 = %01010100 -> %00101010 = $2A 'U' $55 = 85 = %01010101 -> %10101010 = $AA 'V' $56 = 86 = %01010110 -> %01101010 = $6A 'W' $57 = 87 = %01010111 -> %11101010 = $EA 'X' $58 = 88 = %01011000 -> %00011010 = $1A 'Y' $59 = 89 = %01011001 -> %10011010 = $9A 'Z' $5A = 90 = %01011010 -> %01011010 = $5A Here is a routine to reverse the bits. This will return the 'mirrored' version (ie. 'encrypted' or 'decrypted') of the input byte. MODULE UBYTE reversebits(UBYTE input) { return ( ((input & 128) >> 7) // bit 7 goes in bit 0 + ((input & 64) >> 5) // bit 6 goes in bit 1 + ((input & 32) >> 3) // bit 5 goes in bit 2 + ((input & 16) >> 1) // bit 4 goes in bit 3 + ((input & 8) << 1) // bit 3 goes in bit 4 + ((input & 4) << 3) // bit 2 goes in bit 5 + ((input & 2) << 5) // bit 1 goes in bit 6 + ((input & 1) << 7) // bit 0 goes in bit 7 ); } Champions of Krynn (426 bytes per character, save/????????.who)----------- 0..15: Name 17: STR 19: INT 21: WIS 23: DEX 25: CON 27: CHA 29: exceptional STR 91: race: 0 = Silvanesti Elf 1 = Qualinesti Elf 2 = Half-Elf 3 = Mountain Dwarf 4 = Hill Dwarf 5 = Kender 6 = Human 7 = Monster 92: class 0 = Cleric 1 = Druid 2 = Fighter 3 = Paladin 4 = Ranger 5 = Mage 6 = Thief 7 = Knight 8 = Cleric/Fighter 9 = Cleric/Fighter/Mage 10 = Cleric/Ranger 11 = Cleric/Mage 12 = Cleric/Thief 13 = Fighter/Mage 14 = Fighter/Thief 15 = Fighter/Mage/Thief 16 = Mage/Thief 93: knight type (only applies to knights) 1 = Knight of the Crown 2 = Knight of the Sword 3 = Knight of the Rose 94: god (only applies to clerics) 0 = None (Renegade Cleric) 1 = Paladine 2 = Majere 3 = Kiri-Solith 4 = Mishakal 5 = Sirrion 6 = Reorx 7 = Shinare 95: robes (only applies to mages) 1 = White (L/G, N/G, C/G alignments) 2 = Red (L/N, T/N, C/N alignments) 3 = Black (L/E, N/E, C/E alignments) 4 = None (Renegade Mage) 98..99: age 100: maximum hit points 103..201 (99 bytes): spell flags (1 = known, 0 = not known) 1- 7: cleric 8-20: mage 21-27: cleric 28-34: mage 36-43: cleric 44-54: mage 57: cleric 66-69: cleric 80-88: mage 99: mage 242..243: copper pieces 244..245: bronze pieces 246..247: platinum pieces 248..249: steel pieces 250..251: gems 252..253: jewelery 254: cleric level 255: druid level 256: fighter level 257: paladin level 258: ranger level 259: mage level 260: thief level 261: knight level 270: sex 0 = Male 1 = Female 271: alignment 0 = Lawful Good 1 = Lawful Neutral 2 = Lawful Evil 3 = Neutral Good 4 = True Neutral 5 = Neutral Evil 6 = Chaotic Good 7 = Chaotic Neutral 8 = Chaotic Evil 286..289: experience points 407: health 0 = Okay 1 = Animated 2 = TempGone 3 = Running 4 = Unconscious 5 = Dying 6 = Dead 7 = Stoned 8 = Gone 9 = Fucked 408: becomes 1 when healed 424: current hit points Citadel of Vras (280 bytes + 155 bytes per rostered character, savedgame)- ULONG ROSTERED, // number of characters in roster (bytes $0..$3) PARTY, // number of characters in party (bytes $4..$7) number[5? or PARTY?], // roster number (counting from 1) of each party member // 1st given is character in 1st party slot, etc. race[ROSTERED], unknown[ROSTERED], // for tamper detection (must be 1?)? weaponskill[ROSTERED], intelligence[ROSTERED], dexterity[ROSTERED], constitution[ROSTERED], luck[ROSTERED], cur_hp[ROSTERED], max_hp[ROSTERED], pe[ROSTERED], money[ROSTERED], // "GFCredits" xp[ROSTERED]; UWORD unknown1[ROSTERED], // always 1 (something to do with inventory) unknown2[ROSTERED], // always 0 unknown3[ROSTERED], // always 0 unknown4[ROSTERED], // always 0 unknown5[ROSTERED]; // 1,2,1,3 TEXT name[14 + 1]; // padded with nulls and null-terminated ... // remainder of file is unknown These values are all right-justified (and presumably big-endian). ULONG, UWORD and TEXT are of course unsigned 32-, 16- and 8-bit integers (4, 2 or 1 byte), respectively. ROSTER may range from 0..15. PARTY may range from 0..5. Race is encoded as follows: 0 = Jedi Knight 1 = Arcturian 2 = Ant Warrior 3 = Denk Mentat 4 = Lamian Elfin 5 = Sirian Lizard Unknown locations/encodings: Items (ie. inventory) (Spell-like) Powers Status (eg. alive, dead) Level Location (probably not stored, as saving can only be done at spaceport)? AC (Armour Class?) WC (?) Demon's Winter (V1.0) (1494 bytes, PARTY.DAT)----------------------------- $00..$0B 0.. 11: Name (padded with NULLs) (9 characters max) $0C 12: Item A $1D Item B $2E Item C $3F 63: Item D $50 80: Item E $61 97: Item F $72 114: Item G $83 Item H $94 Item I $A5 Item J $C4..$C7 196..199: Experience $C8..$E6 200..230: skills: these are $00 for no, $01 for yes $C8 200: Fencing $C9 201: Sword $CA 202: Axe $CB 203: Mace $CC 204: Karate $CD 205: Kung fu $CE 206: Berserking $CF 207: Tactics $D0 208: Hunting $D1 209: Persuasiveness $D2 210: Detect traps $D3 211: Disarm traps $D4 212: Illusion $D5 213: Possession $D6 214: Summoning $D7 215: #Shaman $D8 216: #Priesthood $D9 217: Fire runes $DA 218: Metal runes $DB 219: Wind runes $DC 220: Ice runes $DD 221: Spirit runes $DE 222: Weapon lore $DF 223: Potion lore $E0 224: Item lore $E1 225: Monster lore $E2 226: View land $E3 227: View room $E4 228: View items $E5 229: View mind $E6 230: Armored skin $F4 244: Level $F5 245: Race: 0 for Human 1 for Elf 2 for Dwarf 3 for Dark Elf 4 for Troll $F6 246: Class: 0 for Ranger 1 for Paladin 2 for Barbarian 3 for Monk 4 for Cleric 5 for Thief 6 for Wizard 7 for Sorcerer 8 for Visionary 9 for Scholar $F7 247: Speed $F8 248: Strength $F9 249: Intellect $FA 250: Endurance $FB 251: Skill $FC 252: Maximum HP $FD 253: Current HP $FE 254: Maximum SP $FF 255: Current SP 1310..1313: gold (999,999,999 is displayable limit) 1454: number of characters in party 1455: provisions (food) Item encodings are: 0: dagger 1: small axe 2: short sword 3: mace 4: morning star 5: broad sword 6: battle axe 7: 2-hand sword 8: cloth 9: leather 11: chain 11: scale 12: plate 13: crown 14: vial 15: ring 16: wand 17: staff 18: rod 19: gem 20: amulet 21: medallion 22: figurine 23: talisman 24: salve 25: vial 26: torch 27: lantern 28: Demon Crystal 29: Orb/Evertime 40: Ancient 41: Iron key 47: Bed 255: Nothing (empty) # skills have deities. All files are 1494 bytes long. 0.. 259 character 1 260.. 519 character 2 520.. 780 character 3 781..1041 character 4 1042..1301 character 5 1302..1493 footer 0: item 1: first dormant power 2: point cost of first dormant power 3: second dormant power 4: point cost of second dormant power 5: 0.. 99: invoked power usable how often per day 100..200: breakability + 100 (eg. 200 = 100%) 6: unknown 7: invoked power: 0 $00: none 1 $01: FLAME STRIKE 2 $02: FIRE STORM 3 $03: FLAME SHIELD 4 $04: SWORD 5 $05: CHAINS 6 $06: DEATH BLADE 7 $07: STRENGTH 8 $08: ARMOR 9 $09: RUST ARMOR 10 $0A: TEMPEST 11 $0B: STILL AIR 12 $0C: WINGS OF VICTORY 13 $0D: WINGS 14 $0E: HAIL STORM 15 $0F: CHILL 16 $10: SLOW 17 $11: FREEZE 18 $12: ICE SHIELD 19 $13: SPIRIT WRACK 20 $14: WEAKEN 21 $15: CLUMSINESS 22 $16: SANCTUARY 23 $17: WITHER STRIKE 24 $18: SUMMON 25 $19: ILLUSION 26 $1A: POSSESSION 27 $1B: WIND WALK 28 $1C: MELT 29 $1D: BREAK BONDS 30 $1E: FREEDOM 31 $1F: BREATH OF LIFE 32 $20: HEAL 33 $21: CURE POISON 34 $22: TRANSFERRENCE 35 $23: MAGIC TORCH 36 $24: CRYSTALIGHT 37 $25: RESURRECT 38 $26: ET CETERA 39 $27: POISON 40 $28: YOUTH 41 $29: POWER LEECH 42 $2A: THE END 8: point cost of invoked power 9: 1st constant power: $00: Berserking $01: Tactics $02: Hunting $03: Persuasiveness $04: Detect traps $05: Monster lore $06: View mind $07: Armored skin $08: God runes 10: 1st constant power, yes/no 11: 2nd constant power 12: 2nd constant power, yes/no 13: cursed ($00 for no, $01 for yes) 14: plus/minus + 10 (-10 to +245) ($09 is -1, $0A is +0, $0B is +1, etc.) 15: quality $00/$01: normal $02: Well made $03: Silver $04: Jade $05: Crystal $06: Gold $07: Platinum $08: Jewel encrusted 16: identified ($00 is no, $01 is yes) Unknown locations/encodings are: for each character: deity (for Shamen [sic] and Priesthood) "modifiers" to attributes, spell points, etc. (perhaps applied automatically by game?) dungeon items equipped weapon equipped armor status (poisoned/bound/etc.) item flags to indicate whether invoked power affects user or opponent? more generally: location time (hour, day, month) "order" (not talking about marching order)/formation ships (number, location, damage status, boarded or not) There is a character editor available for this game. See Aminet:game/edit/DWCE.lha Dragon Wars--------------------------------------------------------------- This game uses an encrypted format. The dw, data1 and/or data2 files are used for saved games. Unknown locations/encodings: For each character: Name Race? Status (a la Bard's Tale)? STR DEX INT SPR AC Combat AV Magic AV DV Level Points Experience Current health Maximum health Current stun Maximum stun Current power Maximum power GP Low Magic High Magic Other Magic Druid Magic Sun Magic Skills: Town Lore Climb Hiding Lockpick Pickpocket Swim Swords Bandage Bureaucracy High Magic Low Magic Bows Arcane Lore Druid Magic Sun Magic (presumably there are more) General: Time of day? Quest status? Location Facing direction Faery Tale Adventure (1181 bytes per character, [A-H].faery)-------------- 1 ?moving 4 ?moving 5 ?moving 8 ?moving 9 ?moving 15 ?moving 18 *trainer 30- 31 .BRaVery 32- 33 .LuCK 34- 35 .KiNDness 36- 37 .WeaLTH 39 @hunger 41 @sleepiness 43 %brother: $01 for Julian $02 for Philip $03 for Kevin 50- 51 ?time of day 53 ?time of day 88 ?moving 89 ?moving 93 ?turning 98 ?turning 100 %weapon in hand: $01 for dirk $02 for mace $03 for sword $04 for bow $05 for wand 105 ?turning 106-107 .VITality 108 ?turning 115 ?moving 137 ?moving 154 *dirk 155 *mace 156 *sword 157 *bow 158 *wand 159 *lasso 160 *shell 161 *sun stone 162 @arrows 163 @blue stones 164 @green jewels 165 @glass vials 166 @crystal orbs 167 @bird totems 168 @gold rings 169 @jade skulls 170 @gold keys 171 @green keys 172 @blue keys 173 @red keys 174 @grey keys 175 @white keys 176 *talisman 177 *rose 178 *fruit 179 @gold statues 180 *book 181 *herb 182 *writ 183 *bone 184 *shard Unknown locations/encodings: Location, facing direction, quest status, mount (none/raft/turtle/swan), map level, object locations/availability, time of day, hidden 'maximum vitality' (if it exists), combat: enemy types, locations, vitalities, facing directions. @ = 8-bit quantity. . = 16-bit quantity. * = flag ($00 for no, $01 for yes). ? = are unknown encodings. % = multiple choice. There is a character editor available for this game. See Aminet:game/edit/FTACE.lha Additionally, there is a character editor for this game on the MA-GA Docs Disks. Note that you must use a separate disk for saving, not the Faery Tale Adventure game disk. Note also that the currently available WHDLoad version seems to use 1299- byte save files; this alternative format has not yet been reverse engineered and is therefore not yet documented here, nor supported by FTACE. Hillsfar (V1.0) (188 bytes per character, ????????.HIL)------------------- 0: $00: $FC (magic byte) 1- 3: $01-$03: ? (elapsed time?) 4- 19: $04-$13: Name NULL-terminated, then padded with spaces. <= 15 characters, not including NULL byte. First 8 characters of name are also used in filename. 20: $14: STR 21: $15: exceptional STR 22: $16: INT 23: $17: WIS 24: $18: DEX 25: $19: CON 26: $1A: CHA 27: $1B: ? 28: $1C: Alignment 0 = L/G (Lawful Good) 1 = L/N (Lawful Neutral) 2 = L/E (Lawful Evil) 3 = N/G (Neutral Good) 4 = T/N (True Neutral) 5 = N/E (Neutral Evil) 6 = C/G (Chaotic Good) 7 = C/N (Chaotic Neutral) 8 = C/E (Chaotic Evil) 29: $1D: ? 30- 31: $1E-$1F: Age 32: $20: current HP 33: $21: maximum HP 34: $22: ? 35: $23: # of charges of Rod of Blasting 36- 39: $24-$27: ? 40- 43: $28-$2B: GP (signed 32-bit integer) 44: $2C: Sex 0 = male 1 = female 45: $2D: Race 0 = Dwarf 1 = Elf 2 = Gnome 3 = Half-Elf 4 = Halfling 5 = Human 46- 49: $2E-$31: XP (signed 32-bit integer) 50- 52: $32-$34: ? 53: $35: Class !$1 = cmfT = Thief !$2 = cmFt = Fighter !$3 = cmFT = Fighter/Thief !$4 = cMft = Magic-User !$5 = cMfT = Magic-User/Thief !$6 = cMFt = Fighter/Magic-User !$7 = cMFT = Fighter/Magic-User/Thief !$8 = Cmft = Cleric -$9 = CmfT = Cleric/Thief !$A = CmFt = Cleric/Fighter -$B = CmFT = Fighter/Cleric/Thief !$C = CMft = Cleric/Magic-User -$D = CMfT = Cleric/Magic-User/Thief !$E = CMFt = Cleric/Fighter/Magic-User -$F = CMFT = Fighter/Cleric/Magic-User/Thief Upper nybble is normally a copy of the lower nybble (but seems to be ignored by the game). "!" are possible to be created (for certain races). "-" are impossible to be created (but might be supportable nevertheless). 54- 68: $36-$44: ? 69: $45: Bit fields: 1 = bit is set if you have lockpicks 2 = ? 4 = ? 8 = bit is set if you have the Chime of Opening 16 = ? 32 = ? 64 = ? 128 = ? 70: $46: left head of pick #1 71: $47: right head of pick #1 72- 73: $48-$49: ? 74: $4A: status of pick #1 75: $4B: left head of pick #2 76: $4C: right head of pick #2 77- 78: $4D-$4E: ? 79: $4F: status of pick #2 80: $50: left head of pick #3 81: $51: right head of pick #3 82- 83: $52-$53: ? 84: $54: status of pick #3 85: $55: left head of pick #4 86: $56: right head of pick #4 87- 88: $57-$58: ? 89: $59: status of pick #4 90: $5A: left head of pick #5 91: $5B: right head of pick #5 92- 93: $5C-$5D: ? 94: $5E: status of pick #5 95: $5F: left head of pick #6 96: $60: right head of pick #6 97- 98: $61-$62: ? 99: $63: status of pick #6 100: $64: left head of pick #7 101: $65: right head of pick #7 102-103: $66-$67: ? 104: $68: status of pick #7 105: $69: left head of pick #8 106: $6A: right head of pick #8 107-108: $6B-$6C: ? 109: $6D: status of pick #8 110: $6E: left head of pick #9 111: $6F: right head of pick #9 112-113: $70-$71: ? 114: $72: status of pick #9 115: $73: left head of pick #10 116: $74: right head of pick #10 117-118: $75-$76: ? 119: $77: status of pick #10 120: $78: left head of pick #11 121: $79: right head of pick #11 122-123: $7A-$7B: ? 124: $7C: status of pick #11 125: $7D: left head of pick #12 126: $7E: right head of pick #12 127-128: $7F-$80: ? 129: $81: status of pick #12 130-133: $82-$85: ? 134: $86: # of knock rings 135: $87: # of healing potions 136: $88: always $07? 137-154: $89-$9A: ? 155: $9B: always $01? 156: $9C: always $07? 157-169: $9D-$A9: ? 170: $AA: always $01? 171-182: $AB-$B6: ? 183: $B7: Cleric level 184: $B8: Magic-User level 185: $B9: Fighter level 186: $BA: Thief level 187: $BB: ? Picks are numbered as follows: -1- -2- -3- -4- -5- -6- -7- -8- -9- 10- 11- 12- Pick statuses are as follows: $01: missing $02: reversed? $03: normal? $07: broken Left pick heads are at least $28..$38. Right pick heads are at least $15..$27. Unknown locations/encodings: time of day? quest statuses NPCs (eg. locksmith) present or not spells? horse attributes which buildings you have tried to break into recently There is a character editor available for this game. See Aminet:game/edit/HCE.lha Might and Magic 2 (ROSTER.DAT, 8320 bytes)-------------------------------- Each character's section in the file ROSTER.DAT is 128 ($00..$7F) bytes long, as follows: $00..$09: Character's name (not NULL-terminated, padded with spaces) $0A: Null $0B: City: $01: Middlegate $02: Atlantium $03: Tundara $04: Vulcania $05: Sansobar $0C: Sex: $00: Male $01: Female $0D: Alignment: $00: Good $01: Neutral $02: Evil $0E: Race: $00: Human $01: Elf $02: Dwarf $03: Gnome $04: Half-Orc $0F: Class: $00: K... $01: P... $02: A... $03: C... $04: S... $05: R... $06: N... $07: B... $10: Might (maximum) $11: Intelligence (maximum) $12: Personality (maximum) $13: Speed (maximum) $14: Accuracy (maximum) $15: Luck (maximum) $16: Magic Resistance (as measured in Vulcania) $17: Fire Resistance $18: Electricity Resistance $19: Cold Resistance $1A: Energy Resistance $1B: Sleep Resistance $1C: Poison Resistance $1D: Acid Resistance $1E: Thievery $1F..$20: ? $21: Age $22: ? $23: Spell level (maximum) $24: Armour class $25: Food $26: Condition: $00: Good $08: Poisoned $81: Dead $27: ? $28..$2D: Equipped 1..6 (see Might and Magic II items list for full information regarding what goes here) $2E..$33: Equipped 1..6 charges (even though in theory you can give an item $FF charges, the item will only recognize a maximum of $3F) $34..$39: Equipped 1..6 + $3A..$3F: Pack 1..6 $40..$45: Pack 1..6 charges $46..$4B: Pack 1..6 + $4C..$4F: ? $50: Secondary skills (one per nybble): $0: No Skills $1: Arms Master $2: Athlete $3: Cartographer $4: Crusader $5: Diplomat $6: Gambler $7: Gladiator $8: Hero $9: Linguist $A: Merchant $B: Moutaineer $C: Navigator $D: Pathfinder $E: Pickpocket $F: Soldier $51..$56: Available spells (set bytes $51..$56 to $FF to obtain ALL spells) $57: Null $58..$59: Current spell points (little-endian) $5A..$5B: Maximum spell points (little-endian) $5C..$5D: Gems (little-endian) $5E..$5F: Current hit points (little-endian) $60..$61: Maximum hit points (little-endian) $62..$65: Experience points (little-endian) $66..$69: Gold (little-endian) $6A: Null $6B: Might (current) $6C: Intelligence (current) $6D: Personality (current) $6E: Speed (current) $6F: Accuracy (current) $70: Luck (current) $71: Level $72: Spell level (current) $73: Endurance $74..$7F: ? Neuromancer (Game1..Game4, 1564 bytes)------------------------------------ Unknown locations/encodings: Name: 8 characters length maximum Date: MM/DD/YY? Time: HH:MMzm? Items: eg. $6 pawn ticket CON: (CONstitution?) A 16-bit integer? Skills Game settings? Phantasie 1 (V1.0) (GUILD.DAT, 7050 bytes, 282 bytes per character)------- 0-1: Strength 2-3: Intelligence 4-5: Dexterity 6-7: Constitution 8-9: Charisma 10-11: Luck 17: Spell points (maximum) 19: Spell points (current) 21: Hit points (maximum) 23: Hit points (current) 25: Status: $00: Dead $01: OK $02: Sleep 30-31: Attack skill 32-33: Parry skill 34-35: Find Item skill 36-37: Spot Trap skill 38-39: Disarm Trap skill 40-41: Listen skill 44-45: Pick Lock skill 48-49: Swim skill 70-71: Score (0..$7FFF are possible but scores >999 don't display correctly in the game) 73: Air runes ($00 = no, $01 = yes) 75: Earth runes ($00 = no, $01 = yes) 77: Fire runes ($00 = no, $01 = yes) 79: Water runes ($00 = no, $01 = yes) 81: God runes ($00 = no, $01 = yes) 83: 3rd Equipment slot: $00 = Nothing $01 = Gloves $02 = Wood Shld $03 = Wood Sh+1 $04 = Sm Shield $05 = Sm Shld+1 $06 = Sm Shld+2 $07 = Sm Shld+3 $08 = Md Shield $09 = Md Shld+1 $0A = Md Shld+2 $0B = Md Shld+3 $0C = Lr Shield $0D = Lr Shld+1 $0E = Lr Shld+2 $0F = Lr Shld+3 $10 = Giant Sh $11 = Gnt Sh +1 $12 = Gnt Sh +2 $13 = Gnt Sh +3 $14 = God Shld $15 = Clothing $16 = Robes $17 = Leather $18 = H Leather $19 = Ring Mail $1A = Scale Ml $1B = Chain Ml $1C = Splint Ml $1D = Banded Ml $1E = Plate Ml $1F = Cloth +1 $20 = Robes +1 $21 = Leather+1 $22 = Leather+2 $23 = Ring Ml+1 $24 = Ring Ml+2 $25 = Chain +1 $26 = Chain +2 $27 = God Robes $28 = God Armour $29 = Stick $2A = Knife $2B = Sm Club $2C = Sm Staff $2D = Sm Mace $2E = Dagger $2F = Sm Flail $30 = Club $31 = Mace $32 = Sm Hammer $33 = Sm Axe $34 = Staff $35 = Sm Sword $36 = Flail $37 = Hammer $38 = Ptch Fork $39 = Spear $3A = Axe $3B = Sword $3C = Hvy Mace $3D = Maul $3E = Trident $3F = Lrg Spear $40 = Lrg Axe $41 = Morn.Star $42 = Pike $43 = Lng Sword $44 = Spetum $45 = Bardiche $46 = Halberd $47 = Sm Mace+1 $48 = Dagger+1 $49 = Sm Mace+2 $4A = Dagger+2 $4B = Dagger+3 $4C = Staff +1 $4D = Dagger+4 $4E = Flail +1 $4F = Spear +1 $50 = Axe +1 $51 = Sword +1 $52 = Sword +2 $53 = Sword +3 $54 = Lrg Axe+1 $55 = Sword +4 $56 = Sword +5 $57 = Sword +6 $58 = Halberd+1 $59 = Sword +7 $5A = Halberd+2 $5B = Halberd+3 $5C = Sword +10 $5D = Halberd+4 $5E = Halberd+5 $5F = Halberd+6 $60 = Halberd+7 $61 = God Knife $62 = God Mace $63 = God Axe $64 = God Sword $65 = Heal Pot1 $66 = Heal Pot2 $67 = Heal Pot3 $68 = Heal Pot4 $69 = Heal Pot5 $6A = Heal Pot6 $6B = Heal Pot7 $6C = Heal Pot8 $6D = Heal Pot9 $6E = Healing10 $6F = Magic 1 $70 = Magic 2 $71 = Magic 3 $72 = Magic 4 $73 = Magic 5 $74 = Magic 6 $75 = Magic 7 $76 = Magic 8 $77 = Magic 9 $78 = Magic 10 $79 = Scroll 1 $7A = Scroll 2 $7B = Scroll 3 $7C = Scroll 4 $7D = Scroll 5 $7E = Scroll 6 $7F = Scroll 7 $80 = Scroll 8 $81 = Scroll 9 $82 = Scroll 10 $83 = Scroll 11 $84 = Scroll 12 $85 = Scroll 13 $86 = Scroll 14 $87 = Scroll 15 $88 = Scroll 16 $89 = Scroll 17 $8A = Scroll 18 $8B = Sroll 19 [sic] $8C = Scroll 20 $8D = Ring A $8E = Ring B $8F = Ring C $90 = Ring D $91 = Ring E $92 = Ring F $93 = Ring G $94 = Ring H $95 = Ring I $96 = Wand $97 = Emerald A $98 = Emerald B $99 = Key $9A = Emerald D $9B = Emerald E $9C = Sapphire A $9D = Sapphire B $9E = Sapphire D [sic] $9F = Sapphire C [sic] $A0 = Sapphire E [sic] $A1 = Ruby A $A2 = Ruby B $A3 = Ruby C $A4 = Ruby D $A5 = Ruby E $A6 = Coin A $A7 = Coin B $A8 = Coin C $A9 = Coin D $AA = Coin E $AB = Gold Stat $AC = Gold Key $AD = Gold Platinum $AE = Gold Coin $AF = Gold Ring $B0 = Diamond A $B1 = Diamond B $B2 = Diamond C $B3 = Diamond D $B4 = Diamond E 85: 2nd Equipment slot 87: 1st Equipment slot 89: Level 91: purged flag ($00 = purged, $01 = normal) Spells ($00 = no, $01 = yes): 97: Healing 1 99: Healing 2 101: Healing 3 103: Healing 4 105: Fireflash 1 107: Fireflash 2 109: Fireflash 3 111: Fireflash 4 113: Quickness 1 115: Quickness 2 117: Quickness 3 119: Quickness 4 121: Strength 1 123: Strength 2 125: Strength 3 127: Strength 4 129: Protection 1 131: Protection 2 133: Protection 3 135: Protection 4 137: Confusion 1 139: Confusion 2 141: Confusion 3 143: Confusion 4 145: Weakness 1 147: Weakness 2 149: Weakness 3 151: Weakness 4 153: Binding 1 155: Binding 2 157: Binding 3 159: Binding 4 161: Mindblast 1 163: Mindblast 2 165: Mindblast 3 167: Mindblast 4 169: Flamebolt 1 171: Flamebolt 2 173: Flamebolt 3 175: Flamebolt 4 177: Charm 179: Sleep 181: Teleportation 221: Class: $00: Thief $01: Monk $02: Ranger $03: Fighter $04: Priest $05: Wizard 257: Race: $00: Human $01: Dwarf $02: Elf $03: Halfling $04: Gnome $05: Pixie $06: Sprite $07: Ogre $08: Gnoll $09: Troll $0A: Kobold $0B: Orc $0C: Goblin $0D: Lizard Man $0E: Minotaur $0F: Undead 262-263: GP 264-265: Age ($0000..$7FFF): age is this value divided by 26 (0..1260) 266-269: XP 270-278: Name (up to 9 characters) (all unused bytes are 0) Unknown locations/encodings: For each character: healing potions magic potions scrolls treasures location (ie. which city) party member yes/no flag For entire party: location (ie. which city) For equipment slots, values >$64 are illegal. File is 7050 bytes long. 0.. 7049: 25 character records (the roster); each character record is 282 bytes long. There is a character editor available for this game. See Aminet:game/edit/PCE.lha Additionally, there is a character editor for this game, or Phantasie 3, or perhaps both, on the MA-GA Docs Disks. Phantasie 3 (V1.0) (GAMESAVE.DAT, 11812 bytes, 262 bytes per character)--- 0-6: Name (up to 7 characters) (all unused bytes are 0) Stats have a maximum of 22. 10-11: STR 12-13: INT 14-15: DEX 16-17: CON 18-19: CHA 20-21: LCK 28-29: maximum SP 30-31: current SP 32-33: maximum HP 34-35: current HP 39: number of items carried (limit of 9) 40-41: Age ($0000..$7FFF): age is this value divided by 26 (0..1260) 45: Status: $00: Dead $01: Okay $02: Asleep $03: Out $04: Down 48-49: Attack skill 52-53: Parry skill 56-57: Find Item skill 60-61: Find Trap skill 64-65: Disarm Trap skill 68-69: Listen skill 72-73: Fire Bow skill 76-77: Pick Lock skill 80-81: Swimming skill 87: number of spells known (limit is 32) 89: Origin: $00: Gelnor $01: Ferronrah $02: Netherworld $03: Scandor $04: Light $05: Darkness 95: Location: $01: Pendragon (24,37) $02: Sandy Shores (15,39) $03: Pendleton ( 5,35) $04: Rocky Hills (36,42) $05: Deltor (44,52) $06: Tirith (23,65) $07: Tierrin (11,69) $08: Asmith (25,27) $09: Sierion ( 5,51) $0A: Xanador (45,66) $0B: Flagler (45, 5) $0C: Lansing (21,11) $0D: Scanport ( 9, 9) $0E: Sciattica (15,22) $0F: Light $10: Dark $11: Death 116-117: Level (maximum is 21) 130-131: Score 143: Social $00: Peasant $01: Labourer $02: Craftsman $03: Noble $04: Darklord $05: Superhero 149: Class $00: Fighter $01: Thief $02: Priest $03: Ranger $04: Monk $05: Wizard 151: 1st item 153: 2nd item 155: 3rd item 157: 4th item 159: 5th item 161: 6th item 163: 7th item 165: 8th item 167: 9th item 169: Race $00: Human $01: Dwarf $02: Elf $03: Gnome $04: Halfling $05: Random $06: Gnoll $07: Goblin $08: Kobold $09: Lizard Man $0A: Minotaur $0B: Ogre $0C: Orc $0D: Pixie $0E: Sprite $0F: Troll $10: Elemental $11: Undead 177: 1st spell 179: 2nd spell 181: 3rd spell 183: 4th spell 185: 5th spell 187: 6th spell 189: 7th spell 191: 8th spell 193: 9th spell 195: 10th spell 197: 11th spell 199: 12th spell 201: 13th spell 203: 14th spell 205: 15th spell 207: 16th spell 209: 17th spell 211: 18th spell 213: 19th spell 215: 20th spell 217: 21st spell 219: 22nd spell 221: 23rd spell 223: 24th spell 225: 25th spell 227: 26th spell 229: 27th spell 231: 28th spell 233: 29th spell 235: 30th spell 237: 31st spell 239: 32nd spell Null byte between each spell, and between each item. 243: Head $00: Okay $01: Injured $02: Broken $03: Gone 245: Left Arm 247: Right Arm 249: Torso 251: Left Leg 253: Right Leg 254-257: GP 258-261: XP No particular item ordering seems enforced. Items are: Shields: $01 Glove $02 Wooden Shield +0 $03 Wooden Shield +1 $04 Small Shield +0 $05 Small Shield +1 $06 Small Shield +2 $06 Small Shield +3 $08 Medium Shield +0 $09 Medium Shield +1 $0A Medium Shield +2 $0B Medium Shield +3 $0C Large Shield +0 $0D Large Shield +1 $0E Large Shield +2 $0F Large Shield +3 $10 Giant Shield +0 $11 Giant Shield +1 $12 Giant Shield +2 $13 Giant Shield +3 $14 God Shield Armour: $15 Clothing $16 Robes $17 Leather $18 Hard Leather $19 Ring Mail $1A Scale Mail $1B Chain Mail $1C Splint Mail $1D Banded Mail $1E Plate Mail $1F Cloth +1 $20 Robes +1 $21 Leather +1 $22 Leather +2 $23 Ring Mail +1 $24 Ring Mail +2 $25 Chain Mail +1 $26 Chain Mail +2 $27 God Robes $28 God Armour Bows: $29 Self Bow +0 $2A Self Bow +1 $2B Self Bow +2 $2C Short Bow +0 $2D Short Bow +1 $2E Short Bow +2 $2F Medium Bow +0 $30 Medium Bow +1 $31 Medium Bow +2 $32 Compound Bow +0 $33 Compound Bow +1 $34 Compound Bow +2 $35 Gnome Bow $36 Long Bow +0 $37 Long Bow +1 $38 Long Bow +2 $39 Crossbow +0 $3A Crossbow +2 $3B Old Bow $3C God Bow Weapons: $3D Knife $3E Dagger +0 $3F Club +0 $40 Mace $41 Small Axe $42 Staff $43 Short Sword $44 Flail +0 $45 Hammer $46 Spear +0 $47 Axe $48 Sword +0 $49 Heavy Mace $4A Trident $4B Large Spear $4C Large Axe $4D Pike $4E Long Sword $4F Bardiche $50 Halberd +0 $51 Dagger +1 $52 Dagger +2 $53 Club +1 $54 Club +2 $55 Flail +1 $56 Flail +2 $57 Spear +1 $58 Sword +1 $59 Sword +2 $5A Sword +4 $5B Sword +5 $5C Sword +6 $5D Halberd +1 $5E Halberd +2 $5F Sword +10 $60 Halberd +5 $61 Halberd +6 $62 God Knife $63 God Mace $64 God Sword Potions: $65 Healing Potion 1 $66 Healing Potion 2 $67 Healing Potion 3 $68 Healing Potion 4 $69 Healing Potion 5 $6A Healing Potion 6 $6B Healing Potion 7 $6C Healing Potion 8 $6D Healing Potion 9 $6E Healing Potion 10 $6F Magic Potion 1 $70 Magic Potion 2 $71 Magic Potion 3 $72 Magic Potion 4 $73 Magic Potion 5 $74 Magic Potion 6 $75 Magic Potion 7 $76 Magic Potion 8 $77 Magic Potion 9 $78 Magic Potion 10 Scrolls: $79 Scroll 1 $7A Scroll 2 $7B Scroll 3 $7C Scroll 3 $7D Scroll 3 $7E Scroll 4 $7F Scroll 5 $80 Scroll 6 $81 Scroll 7 $82 Scroll 7 $83 Scroll 7 $84 Scroll 8 $85 Scroll 9 $86 Scroll 10 $87 Scroll 11 $88 Scroll 12 $89 Scroll 13 $8A Scroll 14 $8B Scroll 15 $8C Scroll 16 Treasures: $8D Quartz $8E a Pearl $8F Crystal $90 Gold Ore $91 a Statuette $92 Jade $93 Onyx $94 a Statue $95 a Sapphire $96 Azurite $97 Coral $98 Turquoise $99 Topaz $9A Jacinth $9B a Burnt Gem $9C a Sweet Bottle $9D a Foul Bottle $9E a Black Jar $9F a Ruby $A0 a Nice Gem $A1 an Opal $A2 a Star Ruby $A3 an Emerald $A4 a Blue Opal $A5 a Diamond $A6 Amethyst $A7 a Fire Opal $A8 a Gem of Light $A9 a Black Urn $AA a Dark Key $AB a Black Vase $AC a Light Key $AD a Golden Chalice $AE a Silk Tapestry $AF a Painting $B0 a Golden Belt $B1 an Old Crown $B2 an Old Coin $B3 Old Wine $B4 Wand of Nikademus File is 11812 bytes long. 0.. 6549: 25 character records (the roster); each character record is 262 bytes long. 6550.. 8383: 7 character records (the party); each character record is 262 bytes long. 8384..11811: non-character-specific data 8384.. 8509: distribution of items/XP? 8510.. 8513: gold carried by party $2145: time? (starts at 0) $2167: time? $2147 (8519), $214F (8527): party X-location (4-46) $2149 (8521), $2151 (8529): party Y-location (4-70) 8547: party location (ie. which city) Unknown locations/encoding: Time There is a character editor available for this game. See Aminet:game/edit/PCE.lha Additionally, there is a character editor for this game, or Phantasie 1, or perhaps both, on the MA-GA Docs Disks. Spells: $01 Healing 1 $02 Healing 2 $03 Healing 3 $04 Healing 4 $05 Fireflash 1 $06 Fireflash 2 $07 Fireflash 3 $08 Fireflash 4 $09 Quickness 1 $0A Quickness 2 $0B Quickness 3 $0C Quickness 4 $0D Flame Arrow 1 $0E P.Flame Arrow 1 $0F Flame Arrow 2 $10 P.Flame Arrow 2 $11 Protection 1 $12 Protection 2 $13 Protection 3 $14 Protection 4 $15 Confusion 1 $16 Confusion 2 $17 Confusion 3 $18 Confusion 4 $19 Weakness 1 $1A Weakness 2 $1B Weakness 3 $1C Weakness 4 $1D Binding 1 $1E Binding 2 $1F Binding 3 $20 Binding 4 $21 Mindblast 1 $22 Mindblast 2 $23 Mindblast 3 $24 Mindblast 4 $25 Flamebolt 1 $26 Flamebolt 2 $27 Flamebolt 3 $28 Flamebolt 4 $29 Charm $2A Sleep $2B Teleportation $2C Resurrection $2D Ninja 2 $2E Fear $2F Dissolve $30 Summon Elemental $31 Dispell Undead $32 Ninja 1 $33 Awaken $34 Monster Evaluate $35 Vision $36 Transportation $37 Accuracy $38 Party Accuracy $39 Divine Aid Questron 2 (V1.0)--------------------------------------------------------- NAMES (144 bytes)--------------------------------------------------------- 0 flag for character #1 ($80 = used, $00 = purged) 1- 2 $00 3- 16 name of character #1 (14 chars max, unused bytes are $00) 17 $00 18 flag for character #2 ($80 = used, $00 = purged) 19- 20 $00 21- 34 name of character #2 (14 chars max, unused bytes are $00) 35 $00 36 flag for character #3 ($80 = used, $00 = purged) 37- 38 $00 39- 52 name of character #3 (14 chars max, purged bytes are $00) 53 $00 54 flag for character #4 ($80 = used, $00 = purged) 55- 56 $00 57- 70 name of character #4 (14 chars max, unused bytes are $00) 71 $00 72 flag for character #5 ($80 = used, $00 = purged) 73- 74 $00 75- 88 name of character #5 (14 chars max, unused bytes are $00) 89 $00 90 flag for character #6 ($80 = used, $00 = purged) 91- 92 $00 93-106 name of character #6 (14 chars max, unused bytes are $00) 107 $00 108 flag for character #7 ($80 = used, $00 = purged) 109-110 $00 111-124 name of character #7 (14 chars max, unused bytes are $00) 125 $00 126 flag for character #8 ($80 = used, $00 = purged) 127-128 $00 129-142 name of character #8 (14 chars max, unused bytes are $00) 144 $00 Gn (ie. G0, G1, G2, G3, G4, G5, G6, G7) (255 bytes each)------------------ 0- 1 Hit points 2- 3 Food 4- 5 Gold pieces 6 ? 7 Charisma 8 Strength 9 Agility 10 Stamina 11 Intelligence 12 Armed (wielded) weapon: $6B ( 0) = Dagger $6C ( 1) = Hammer $69 ( 2) = Hatchet $6A ( 3) = Staff $6F ( 4) = Cudgel $70 ( 5) = Rapier $6D ( 6) = Axe $6E ( 7) = Fauchard $63 ( 8) = Sabre $64 ( 9) = Weighted Spear $61 (10) = Pike $62 (11) = Shortbow $67 (12) = Broadsword $68 (13) = Crossbow anything else = no wielded weapon 13 Worn armour: $6B ( 0) = Rawhide $6C ( 1) = Studded Leather $69 ( 2) = Ring Mail $6A ( 3) = Bar Mail $6F ( 4) = Chain Mail $70 ( 5) = Plate Mail $6D ( 6) = Ribbed Plate anything else = no worn armour 14 Mount: $6B ( 0) = none $6C ( 1) = bird $69 ( 2) = ship $6A ( 3) = donkey? $6F ( 4) = horse? $70 ( 5) = camel 15 ? 16 X-location 17 Y-location 18 ? 19 Magic Missile 20 Fireball 21 Sonic Whine 22 Time Sap 23 ? 24 Dagger (weapon # 0) 25 Hammer (weapon # 1) 26 Hatchet (weapon # 2) 27 Staff (weapon # 3) 28 Cudgel (weapon # 4) 29 Rapier (weapon # 5) 30 Axe (weapon # 6) 31 Fauchard (weapon # 7) 32 Sabre (weapon # 8) 33 Weighted Spear (weapon # 9) 34 Pike (weapon #10) 35 Shortbow (weapon #11) 36 Broadsword (weapon #12) 37 Crossbow (weapon #13) 38 ? 39 Rawhide (armour # 0) 40 Studded Leather (armour # 1) 41 Ring Mail (armour # 2) 42 Bar Mail (armour # 3) 43 Chain Mail (armour # 4) 44 Plate Mail (armour # 5) 45 Ribbed Plate (armour # 6) 46 ? 47 Gold Key (item # 0) 48 Opal Key (item # 1) 49 Iron Key (item # 2) 50 Brass Key (item # 3) 51 Copper Key (item # 4) 52 Silver Key (item # 5) 53 Emerald Key (item # 6) 54 Onyx Key (item # 7) 55 Ruby Key (item # 8) 56 Agate Key (item # 9) 57 Sapphire Key (item #10) 58 Black Key (item #11) 59 Diamond (item #12) 60 Unicorn Horn (item #13) 61 Wand of Power (item #14) 62 Eternal Flame (item #15) 63 Book of Magic (item #16) 64 Crystal Goblet (item #17) 65 Chalice of Arvyl (item #18) 66 Moonstone Amulet (item #19) 67 Orb of Enchantment (item #20) 68 Scroll of Scalna (item #21) 69 Rope & Hooks (item #22) 70 Bread of Life (quantity) 71- 75 ? 76 Rank: $6B ( 0) = Plebe $6C ( 1) = Adventurer $69 ( 2) = Scout $6A ( 3) = Apprentice $6F ( 4) = Knight 77- 79 ? 80- 94 name (encrypted; unused bytes are $6B (0)) 95- 98 ? 99-100 time 101 Item in use: $6B ( 0) = Gold Key $6C ( 1) = Opal Key $69 ( 2) = Iron Key $6A ( 3) = Brass Key $6F ( 4) = Copper Key $70 ( 5) = Silver Key $6D ( 6) = Emerald Key $6E ( 7) = Onyx Key $63 ( 8) = Ruby Key $64 ( 9) = Agate Key $61 (10) = Sapphire Key $62 (11) = Black Key $67 (12) = Diamond $68 (13) = Unicorn Horn $65 (14) = Wand of Power $66 (15) = Eternal Flame $5B (16) = Book of Magic $5C (17) = Crystal Goblet $57 (18) = Chalice of Arvyl $56 (19) = Moonstone Amulet $5F (20) = Orb of Enchantment $60 (21) = Scroll of Scalna $5D (22) = Rope & Hooks anything else = no item in use 102-143 ? G0..G7 correspond to characters #1..#8 respectively. Purging is done by the game as follows: the relevant 'used' flag in NAMES is cleared (to $00). all bytes in the appropriate Gn file are cleared (to $6B). Notes: Carrying all/nearly all weapons + armour + items can cause rendering problems in the game. Saving in towns and dungeons is not possible. "Realm" seems not to be stored explicitly, but rather is determined by the X/Y location variables. Inventory slots are: $6B (0) = don't have it. $6C (1) = do have it. 1-byte quantities (attributes, locations, quantities of spells, bread of life) are stored in this 'encrypted' format: $00 = 181 $01 = 170 $02 = 171 $03 = 168 $04 = 169 $05 = 174 $06 = 175 $07 = 172 $08 = 173 $09 = 162 $0A = 163 $0B = 160 $0C = 161 $0D = 166 $0E = 167 $0F = 164 $10 = 165 $11 = 90 $12 = 91 $13 = 88 $14 = 89 $15 = 94 $16 = 95 $17 = 92 $18 = 93 $19 = 82 $1A = 83 $1B = 80 $1C = 81 $1D = 86 $1E = 87 $1F = 84 $20 = 85 $21 = 74 $22 = 75 $23 = 72 $24 = 73 $25 = 78 $26 = 79 $27 = 76 $28 = 77 $29 = 66 $2A = 67 $2B = 64 $2C = 65 $2D = 70 $2E = 71 $2F = 68 $30 = 69 $31 = 122 $32 = 123 $33 = 120 $34 = 121 $35 = 126 $36 = 127 $37 = 124 $38 = 125 $39 = 114 $3A = 115 $3B = 112 $3C = 113 $3D = 118 $3E = 119 $3F = 116 $40 = 117 $41 = 106 $42 = 107 $43 = 104 $44 = 105 $45 = 110 $46 = 111 $47 = 108 $48 = 109 $49 = 98 $4A = 99 $4B = 96 $4C = 97 $4D = 102 $4E = 103 $4F = 100 $50 = 101 $51 = 26 $52 = 27 $53 = 24 $54 = 25 $55 = 30 $56 = 19 $57 = 18 $58 = 29 $59 = 28 $5A = 31 $5B = 16 $5C = 17 $5D = 22 $5E = 23 $5F = 20 $60 = 21 $61 = 10 $62 = 11 $63 = 8 $64 = 9 $65 = 14 $66 = 15 $67 = 12 $68 = 13 $69 = 2 $6A = 3 $6B = 0 $6C = 1 $6D = 6 $6E = 7 $6F = 4 $70 = 5 $71 = 58 $72 = 59 $73 = 56 $74 = 57 $75 = 62 $76 = 63 $77 = 60 $78 = 61 $79 = 50 $7A = 51 $7B = 48 $7C = 49 $7D = 54 $7E = 55 $7F = 52 $80 = 53 $81 = 42 $82 = 43 $83 = 40 $84 = 41 $85 = 46 $86 = 47 $87 = 44 $88 = 45 $89 = 34 $8A = 35 $8B = 32 $8C = 33 $8D = 38 $8E = 39 $8F = 36 $90 = 37 $91 = 218 $92 = 219 $93 = 216 $94 = 217 $95 = 222 $96 = 223 $97 = 220 $98 = 221 $99 = 210 $9A = 211 $9B = 208 $9C = 209 $9D = 214 $9E = 215 $9F = 212 $A0 = 213 $A1 = 202 $A2 = 203 $A3 = 200 $A4 = 201 $A5 = 206 $A6 = 207 $A7 = 204 $A8 = 209 $A9 = 194 $AA = 195 $AB = 192 $AC = 193 $AD = 198 $AE = 199 $AF = 196 $B0 = 197 $B1 = 250 $B2 = 251 $B3 = 248 $B4 = 249 $B5 = 254 $B6 = 255 $B7 = 252 $B8 = 253 $B9 = 242 $BA = 243 $BB = 240 $BC = 241 $BD = 246 $BE = 247 $BF = 244 $C0 = 245 $C1 = 234 $C2 = 235 $C3 = 232 $C4 = 233 $C5 = 238 $C6 = 239 $C7 = 236 $C8 = 237 $C9 = 226 $CA = 227 $CB = 224 $CC = 225 $CD = 230 $CE = 231 $CF = 228 $D0 = 229 $D1 = 154 $D2 = 155 $D3 = 152 $D4 = 153 $D5 = 158 $D6 = 159 $D7 = 156 $D8 = 157 $D9 = 146 $DA = 147 $DB = 144 $DC = 145 $DD = 150 $DE = 151 $DF = 148 $E0 = 149 $E1 = 138 $E2 = 139 $E3 = 136 $E4 = 137 $E5 = 142 $E6 = 143 $E7 = 140 $E8 = 141 $E9 = 130 $EA = 131 $EB = 128 $EC = 129 $ED = 134 $EE = 135 $EF = 132 $F0 = 133 $F1 = 186 $F2 = 187 $F3 = 184 $F4 = 185 $F5 = 190 $F6 = 191 $F7 = 188 $F8 = 189 $F9 = 178 $FA = 179 $FB = 176 $FC = 177 $FD = 182 $FE = 183 $FF = 180 2-byte numbers are 'encrypted' as follows (these are just two encypted 1- byte numbers, big-endian; ie. the high and low bytes are encrypted separately): $1000 = 42421 $2000 = 21941 $3000 = 17845 $4000 = 30133 $5000 = 26037 $6B6B = 0 (ie. ($6B ( 0) * 256 = 0) + ($6B ( 0) * 1 = 0) = 0) $6BA3 = 200 (ie. ($6B ( 0) * 256 = 0) + ($A3 (200) * 1 = 200) = 200) $AAAA = 50115 $B6B6 = 65535 (ie. ($B6 (255) * 256 = 65280) + ($B6 (255) * 1 = 255) = 65535) There is a character editor available for this game. See Aminet:game/edit/Q2CE.lha Shadowlands--------------------------------------------------------------- As this uses a non-AmigaDOS disk format, disk-based rather than file-based editing is required. Saved games are stored on disk 3 of 3. Unknown locations/encodings: For each character: Name Location Facing direction? Class? Race? Status (eg. dead)? Combat Lvl Magik Current Strength Maximum Strength Current Health Maximum Health Current Armour Maximum Armour Gauges for food, water and Force Items (15 slots) Extra (held-in-hand?) item slot General: Formation (4x4 grid) Time of day? Stats of nearby monsters? Quest status? Times of Lore (SAVEGAME.DAT, 5782 bytes)---------------------------------- 4966..4967: $1366..$1367: Rations of food? 5392..5393: $1510..$1511: Rations of food? 5488..5489: $1570..$1571: Gold pieces Unknown locations/encodings: Score? Location Facing direction Time of day Class (warrior/barbarian/woman?) Objects Quest status? Locations, types, facing directions, HP, etc. of nearby monsters? Weapon in hand Ultima 3 (rost.bin, 1280 bytes; plrs.bin, 256 bytes)---------------------- The character codes used by the game are: $$$$$$$$$$$$$$$$$$$$$$$$$$ CCCCCCCCCCCCCCCDDDDDDDDDDD 123456789ABCDEF0123456789A -------------------------- ABCDEFGHIJKLMNOPQRSTUVWXYZ Each character is 64 bytes. 20 characters can be stored in ROST.BIN and 4 in PLRS.BIN. For characters currently in the party, the game reads the PLRS.bin file; for other characters, the game reads the ROST.BIN file. For each character: 0..11: Name (NULL-terminated) 12..13: ? 14: Cards/marks (bits are set if cards/marks are held) $80 = Snake mark $40 = Kings mark $20 = Fire mark $10 = Force mark $08 = Moons card $04 = Death card $02 = Sol card $01 = Love card 15: Torches (in packed BCD format) 16: Whether in party or not ($00 = no, $FF = yes) 17: Status $C4 (D) = Dead $C7 (G) = Good $D0 (P) = Poisoned 18: Strength (in packed BCD format) 19: Dexterity (in packed BCD format) 20: Intelligence (in packed BCD format) 21: Wisdom (in packed BCD format) 22: Race $C2 (B) = Bobbit $C4 (D) = Dwarf $C5 (E) = Elf $C6 (F) = Fuzzy $C8 (H) = Human 23: Class ("Profession") $C1 (A) = Alchemist $C2 (B) = Barbarian $C3 (C) = Cleric $C4 (D) = Druid $C6 (F) = Fighter $C9 (I) = Illusionist $CC (L) = Lark $D0 (P) = Paladin $D2 (R) = Ranger $D4 (T) = Thief $D7 (W) = Wizard 24: Sex $C6 (F) = Female $CD (M) = Male $CF (O) = Other 25: Current magic points (in packed BCD format) 26..27: Current hit points (in big-endian packed BCD format) 28..29: Maximum hit points (in big-endian packed BCD format) 30..31: Experience points (in big-endian packed BCD format) 32..33: Food (in big-endian packed BCD format) 34: ? 35..36: Gold pieces (in big-endian packed BCD format) 37: Gems (in packed BCD format) 38: Keys (in packed BCD format) 39: Powders (in packed BCD format) 40: Worn armour $00 = skin $01 = cloth $02 = leather $03 = chain $04 = plate $05 = +2 chain $06 = +2 plate $07 = exotic armour 41..47: # possessed of each kind of armour: 41: # of cloths 42: # of leathers 43: # of chains 44: # of plates 45: # of +2 chains 46: # of +2 plates 47: # of exotic armours 48: Wielded weapon $00 = hands $01 = dagger $02 = mace $03 = sling $04 = axe $05 = bow $06 = sword $07 = 2-handed sword $08 = +2 axe $09 = +2 bow $0A = +2 sword $0B = gloves $0C = +4 axe $0D = +4 bow $0E = +4 sword $0F = exotic weapon 49..63: # possessed of each kind of weapon: 49: # of daggers 50: # of maces 51: # of slings 52: # of axes 53: # of bows 54: # of swords 55: # of 2-handed swords 56: # of +2 axes 57: # of +2 bows 58: # of +2 swords 59: # of gloves 60: # of +4 axes 61: # of +4 bows 62: # of +4 swords 63: # of exotic weapons The game calculates characters' levels automagically, based on their experience points. The MS-DOS format seems identical except the files are ROSTER.ULT instead of ROST.BIN, and PARTY.ULT instead of PLRS.BIN, and that there are 18 unknown bytes preceding the PARTY.ULT file. Unknown locations/encodings: elapsed moves Ultima 4 (rost.bin, 512 bytes)-------------------------------------------- Each character is 32 bytes. For each character: 0.. 7: Name (NULL-terminated) The Avatar's name is in ASCII format. Names of other characters are in Ultima 3 format. 8.. 18: ? 19: STR (in packed BCD format) 20: DEX (in packed BCD format) 21: INT (in packed BCD format) 22: Magic Points (in packed BCD format) 23: ? 24.. 25: current Hit Points (in big-endian packed BCD format) 26.. 27: maximum Hit Points (in big-endian packed BCD format) 28.. 29: Experience Points (in big-endian packed BCD format) 30.. 31: ? Unknown locations/encodings: for each character: sex class status weapons owned armour owned weapon wielded armour worn whether in party or not for whole party: items owned mixtures owned elapsed moves location gems keys most reagents For whole party: 264: Torches (in packed BCD format) 272..273: Food (in big-endian packed BCD format) 274: ? 275..276: Gold (in big-endian packed BCD format) 274..312: ? 313: Ginseng (in packed BCD format) 314: Garlic (in packed BCD format) Ultima 5 (saved.gam, 4838 bytes)------------------------------------------ 0: $0000: ? 1: $0001: $00 means they are in the party? $FF means they are not in the party? 2- 9: $0002..$0009: Name of character #1 (unused bytes are $00) 10- 11: $000A..$000B: ? 12: $000C: Class of character #1: "A" = Avatar "B" = Bard "F" = Fighter "M" = Mage 13: $000D: Status of character #1: "D" = Dead? "G" = Good "P" = Poisoned? 14: $000E: STRength of character #1 15: $000F: DEXterity of character #1 16: $0010: INTelligence of character #1 17: $0011: current Magic Points of character #1 (maximum MP is INT) 18- 19: $0012..$0013: current Hit Points of character #1 20- 21: $0014..$0015: maximum Hit Points of character #1 22- 23: $0016..$0017: eXperience Points of character #1 24: $0018: experience level of character #1 25- 31: $0019..$001F: ? 32- 63: $0020..$003F: same as $0000..$001F but for Shamino 64- 95: $0040..$005F: same as $0000..$001F but for Iolo 96- 127: $0060..$007F: same as $0000..$001F but for Mariah 128- 159: $0080..$009F: same as $0000..$001F but for Geoffrey 160- 191: $00A0..$00BF: same as $0000..$001F but for Jaana 192- 223: $00C0..$00DF: same as $0000..$001F but for Julia 224- 255: $00E0..$00FF: same as $0000..$001F but for Dupre 256- 287: $0100..$011F: same as $0000..$001F but for Katrina 288- 319: $0120..$013F: same as $0000..$001F but for Sentri 320- 351: $0140..$015F: same as $0000..$001F but for Gwenno 352- 383: $0160..$017F: same as $0000..$001F but for Johne 384- 415: $0180..$019F: same as $0000..$001F but for Gorn 416- 447: $01A0..$01BF: same as $0000..$001F but for Maxwell 448- 479: $01C0..$01DF: same as $0000..$001F but for Toshi 480- 511: $01E0..$01FF: same as $0000..$001F but for Saduj 512- 513: $0200..$0201: ? 514- 515: $0202..$0203: Food 516- 517: $0204..$0205: Gold (pieces) 518: $0206: Keys 519: $0207: Gems 520: $0208: Torches 521- 541: $0209..$021D: ? 542: $021E: Sm. Shield 543: $021F: ? 544: $0220: ? 545: $0221: ? 546: $0222: ? 547: $0223: Cloth 548: $0224: ? 549: $0225: ? 550: $0226: ? 551: $0227: ? 552: $0228: ? 553: $0229: ? 554: $022A: Dagger 555: $022B: ? 556: $022C: Club 557: $022D: Flame Oil 558- 585: $022E..$0249: ? 586: $024A: In Lor 587: $024B: Grav Por 588: $024C: An Zu 589: $024D: An Nox 590: $024E: Mani 591: $024F: ? 592: $0250: ? 593: $0251: An Xen Cor 594: $0252: ? 595: $0253: ? 596: $0254: ? 597: $0255: ? 598: $0256: Vas Lor 599: $0257: Vas Flam 600- 629: $0258..$0279: ? 630: $027A: Great Light (Vas Lor ) scrolls 631: $027B: Wind Change (Rel Hur ) scrolls 632: $027C: Protection (In Sanct ) scrolls 633: $027D: Negate Magic (In An ) scrolls 634: $027E: Location (In Quas Wis ) scrolls 635: $027F: Call demon (Kac Xen Corp) scrolls 636: $0280: Resurrection (In Mani Corp) scrolls 637: $0281: Time stop (An Tym ) scrolls 638: $0282: Blue potions 639: $0283: Yellow potions 640: $0284: Red potions 641: $0285: Green potions 642: $0286: Orange potions 643: $0287: Purple potions 644: $0288: Black potions 645: $0289: White potions 646- 681: $028A..$02A9: ? 682: $02AA: Sulfur Ash 683: $02AB: Ginseng 684: $02AC: Garlic 685: $02AD: Sp. Silk 686: $02AE: Blood Moss 687: $02AF: Blk. Pearl 688: $02B0: Nightshade 689: $02B1: Mandrake 690-4837: $02B2..$12E5: ? Unknown locations/encodings: location facing direction sex (male/female) rest of the statuses: charmed?, paralyzed? rest of the spells rest of the armaments rest of the items, esp. Pocket Watch (might not be stored) arms (stored individually for each character) (try buying some arms and see which bytes change) OOL files Character #1 is the Avatar. Wizardry 6 (SAVEGAME.DBS, 50720 bytes)------------------------------------ scenario.hdr (414 bytes) may also be involved. Unknown locations/encodings: For each character: Sex (male/female) Portrait (user-selectable a la Ultima 6) Name Race Class LeVeL RaNK EXPerience MarKSmanship STRength INTellect/INTelligence PIEty VITality DEXterity SPeeD PERsuasiveness KARma Current HP Maximum HP STM (percentage value) CoNDition (eg. OK) GP Current CC Maximum CC ARMORCLASS eg. "10 (+0)" Individual armorclasses for: Unknown Head Torso Legs Hands Feet Skills: Weaponry: WAND&DAGGER SWORD AXE MACE&FLAIL POLE&STAFF THROWING SLING BOWS SHIELD Physical: SCOUTING Academia: ARTIFACTS MYTHOLOGY SCRIBE Skill points (unspent?) Items: at least 5 slots available for each item: equipped-or-not status weight? type? (eg. "feet", "legs") AC modifier (eg. the "plus" of it)? speed? 6 pairs of numbers (eg. "0/0"), each pair denoted by a symbol, eg. lightning eye General: Time of day? Quest status? Location Facing direction Zerg (V1.0) (RAM:SAVE, 2026 bytes)---------------------------------------- 0..7 : Name/rank ("Wanderer")? 8..12: 0 21: Level (1..6) 41: STRength and AGiLity 45: WISdom 57: current MP 61: maximum MP 65: current HP 69: maximum HP 72..73: eXperience Points 76..77: GP 81: worn armour $00 = none $01 = heavy furs $02 = leather $03 = studded leather $04 = scale mail $05 = chain mail $06 = full mail $07 = splint mail $08 = banded mail $09 = plate mail 85: readied weapon $00 = bare hands $01 = dagger $02 = mace $03 = spear $04 = short sword $05 = flail $06 = longsword $07 = morning star $08 = battle axe $09 = pike 88..89: body count Unknown locations/encodings: Location (X,Y coordinates) Inventory Class? Quest status Monster locations END OF DOCUMENT-----------------------------------------------------------