Arena:Technical Reference

The UESPWiki – Your source for The Elder Scrolls since 1995
Jump to: navigation, search
The purpose of this reference material is for support of the information listed on UESP. Changing the game file could have unintended consequences for your game and could potentially pose a risk to other files on your computer.

Game Executable[edit]

Hex Editor Basics[edit]

When you open a file in a HEX editor you are often presented with three windows. One window appears as a basic TEXT editor. A second window shows the lower level code presented in hexadecimal format. This is often organized in sections of 8 characters each, while some editors show groups of 2 or 4 characters. A third window displays the location of the first “byte” (2 characters) in the hexadecimal window which is also the first “character” in the text window. This "location" marker is often displayed in hexadecimal format. Opening the decompressed A.EXE file in a very narrow windowed hex editor you may be presented with the following:

00000 | 4D5A2001 7202440F | "MZ  r D "

The first character in the text window is “M”. This is a representation of the first byte in the hexadecimal window “4D” and it is located at “00000” The seventh character in the text window is “D”. This is a representation of the seventh byte in the hexadecimal window “44” and is at location “00006”. If you enter “Hex to Ascii” in your search engine, you can find a converter to enter “44” which can be converted to ASCII (text) as “D”. It should be noted that what is presented in the text window depends on the font being used and some of the hexadecimal bytes will not represent any text character. The first example includes 4 spaces, however only the first space was an original ascii text character. The remaining 3 were converted into standard spaces for the example.

While hexadecimal characters can represent text, they are actually numbers. The decimal system is based on ten characters. (0,1,2,3,4,5,6,7,8,9) The hexadecimal system is based on 16 characters. (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) One value higher than nine is represented in the decimal system by combining “1” and “0” to make “10”, while incrementing one number higher than nine in the hexadecimal system is represented by the character “A”. The number fifteen is represented by “F” and incrementing one more to sixteen is represented by combining as in the decimal system. Hexadecimal “10” represents sixteen. This is important for understanding the locations, because you will often have to count, but you must remember to count in hexadecimal. Hex values are often listed with the “hash” or “0x” prefix such as #4D or 0x4D” and can be listed with lower-case letters as in 0x4d. The listing of the byte location for the character "D" was location "00006". A location reference is sometimes called an “offset”. Offsets are sometimes listed with an additional “ampersand” prefix such as @06 or @0x06 and any preceding “0’s” may be left off. A location in the hex editor as 00FD8 may be listed as @fd8.

Bytes, Words, and Dwords[edit]

Generally the hexadecimal code is organized in sections of 8 characters. In the previous example the first section was “4D5A2001”.

  • A BYTE consists of 2 characters. So the first section contains 4 bytes (“4D 5A 20 01”) Bytes can be converted using a hex to ascii converter, (“M Z (space) (non-character)”), or using a hex to decimal converter (“77 90 32 1”). Only convert 1 byte at a time. Just as combining decimals 10 and 10 are no longer two tens, but “one thousand and ten”, combining 4D and 5A are no longer 77 and 90, but 19,802.
  • A WORD is 2 bytes or 4 characters. The example contains two “words”. (“4D5A 2001”). You can convert “words” using a hex to dec converter, but you have to enter the bytes from right to left. The first “word” “4D5A” is entered into the hex converter as “5A4D” and is converted to “23,117”. The second word “2001” is entered into the hex converter as “0120” and converted to “288”.
  • A DWORD is 2 “words” (literally “double-word”), 4 bytes, or 8 characters. The example is a single “dword” (“4D5A2001”). “Dwords” can be converted using a hex to dec converter, but as with “words”, you must enter the “bytes” from right to left. The “dword” “4D5A2001” is entered as “01205A4D” and converted to “18,897,485”.

When using converters, enter the values without punctuation such as commas or parentheses.

Sort Order[edit]

Values in the code will often be stored in an array with specific sort orders. For example the Hit Die for each class is stored one after the other but sorted by the Class order; Mage, Spellsword, etc. The base stat values are sorted first by Race, followed by Gender, and finally by Stat order. The first 8 values are stats for a Breton male. The second set of 8 are values for a Breton Female. The third set is for a Redguard male. The offset location only lists the first byte in the array. The offset for Character Stats is 0x39CF3 which is the location of the first byte in the array which represents the Strength stat for a Breton male.

  • CLASS:
    • Mage, Spellsword, Battlemage, Sorceror, Healer, Nightblade, Bard, Burglar, Rogue, Acrobat, Thief, Assassin, Monk, Archer, Ranger, Barbarian, Warrior, Knight
  • RACE:
    • Bretons, Redguards, Nords, Dark Elves, High Elves, Wood Elves, Khajiit, Argonians
  • GENDER:
    • Male, Female
  • STAT:
    • STR, INT, WIL, AGI, SPD, END, PER, LUC
  • MONSTER:
    • Rat, Goblin, Lizard Man, Wolf, Snow Wolf, Orc, Skeleton, Minotaur, Spider, Ghoul, Hell Hound, Ghost, Zombie, Troll, Wraith, Homonculus, Ice Golem, Stone Golem, Iron Golem, Fire Daemon, Medusa, Vampire, Lich

Game Code[edit]

Description Offset Data Structure Sort Order/Value
Initial Health Modifier 0x1655B BYTE +(25)
Initial Gold (min) 0x165B2 BYTE min(50)
Initial Gold (max) 0x165B5 BYTE max(200)
Initial Bonus Point Die 0x165CF BYTE d(25)
Initial Stat Die 0x1715D BYTE d(20)
Initial Health "if <1" 0x17191 BYTE <(1)
Initial Health "+1" if 0 0x17196 BYTE +(1)
Base Player Stats 0x39CF3 BYTE (array)

First 8 bytes are Breton male stats

Divide decimal result by 2.55

Race / Gender / Stat
Base Monster Stats 0x39DBB BYTE (array)

First 8 bytes are Rat stats

Divide decimal result by 2.55

Monster / Stat
Class Hit Die 0x42001 BYTE (array) Class
Monster Level 0x42096 BYTE (array) Monster
Monster Hit Point Range (HP) 0x420DE WORD (array)

1st Word is Rat min HP

2nd Word is Rat max HP

Monster
Monster Experience Points 0x4213E DWORD (array) Monster
Monster Exp/HP 0x4219E BYTE (array) Monster
Monster Damage Range 0x421B6 BYTE (array)

1st Byte is Rat min Damage

2nd Byte is Rat max Damage

Monster
Wilderness Block (List A) 0x42D5C BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order
Wilderness Block (List B) 0x42D75 BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order
Wilderness Block (List C) 0x42D82 BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order
Wilderness Block (List D) 0x42D8F BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order
Wilderness Block (List E) 0x42D9A BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order
Wilderness Block (List F)

Not Used

0x42DA6 BYTE (array)

1st Byte represents the number of Blocks in the list

Numerical Order

Notes[edit]

  • The information provided is basic and specific to Arena and may not apply to other areas.
  • All information on this page is specific to version 1.06 but also applies to version 1.07 except where noted.
  • All location markers ("offsets") were obtained using A.EXE version 1.06 and decompressed using UNP version 4.11 with default parameters. The information is the same as ver 1.07 but the offsets are different.
  • Initial Health modifiers at offset 0x17191 and 0x17196 work together for a +1 bonus if your Health modifier from your END stat is "+0" and your initial Health die roll is also "0". Testing shows that if your Health die roll plus the END stat bonus is less than the value at 0x17191, then your Health value will be the value located at 0x17196 + 25. An unexpected exception occurs if the scenario has the same values but the END bonus is "-1". If the Health die and END bonus = "-1" it will remain unchanged and your final starting Health will be "24". This has a very low probability of occurring, but is possible.

Modifying Saved Games[edit]

SAVEENGN.0x[edit]

Stats and gold are located in the saveengn.0x files, where x is a value between 0 and 9. When you save a game, the box you use determines this number. This section of the file is encrypted so changes do not provide obvious results.

Gold[edit]

Gold is stored as a WORD at offset 0x41E. To give a character 1,000,000,000 gold, change the hex value to "18FAC483". Changing the value to "18FA80F8" will give you 1,088,342,528 gold and just changing the single byte at 0x41F to "CC", will give you approximately 65K gold.

The information below this notice is copied from the 1994 Unofficial FAQ. This information should be tested, updated, and then incorporated above this notice until fully incorporated.

How can I change my character's attributes?[edit]

Stats and gold are located in the saveengn.xx files.

Offset 040C is part of the field for Experience. Change it from 48 to 4F to get around 1.28 x 10^11 Experience points. (This will make you in the range of 24-28th level in byte 06)

[Method to use - change 40C to 4F, win fight, distribute points, then change 40C BACK to the original value, and change 006 back too. This CAN be repeated. Each time you will have OVER 100 points to distribute. If you want LESS points, change 40B instead.]

Field covers 4 bytes - 409 to 40C (hex) 409 holds the lowest value and 40C holds the highest value.

Note that you'll get, all at once, the bonus points that comes with the level you become, including improved hitpoints, etc, but may have to fight first.

To give a character more attribute points make the following change (next fight gives the points) in file SAVEENGN.0x (all values in HEX):

                Offset 006      87 (make character level 1)

at the time of the next fight you will get a bunch of points to distribute. The number depends on the difference between level 1 and the character's current level. However, be certain NOT to go to 100 for each attribute, since that will hang the game when the character next gains a level and there is NO place to put the points. Leave at least (6*(26-current level)) points available for distribution. The value in offset 006 will then be at the correct value for the level the character should be at, and the exercise can be repeated.

You should be able to do anything you want if you do this. Someone else might have locations for each of the stats, etc.... If the idea is to increase stats, use the offset 006 change until the values you want to increase are high enough. Allow for normal increases during the game, plus finding of 50 points via one of the artifacts....

Its much easier to edit the spells, since they're kept in clear hex. Use Spellmaker to create a spell that does 1-1 pts of damage, +1-1/level, then look the spell up in the SPELLS.xx file (where xx is the savegame #), and change it to 99-99, + 99-99/level, etc, etc. [see 17 below for details.]

You can also edit the % chance, plus the duration, etc.... You'll also find a couple of new spell effects in here, that probably never got implemented, CAGE and DEATH SPELL. Attempting to use them generally results in disharmonious outcomes... [Advice - Do not try them].

How do you make spells more powerful and cost less?[edit]

The following is extracted from a spellbook to demonstrate the method used to change the value of a purchased spell. [Each line below starts with its offset from the beginning of the file (in hex) and then the 16 hex bytes, followed on the right with the ASCII equivalents.] The values to change all precede the name of the spell. Multiple spells follow on each other and follow the same pattern.

 
                           PCTools DiskEdit
                              Version 9.0

     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F   0   4   8   C        
 000 63 00 63 00 63 00 01 00 01 00 63 00 00 00 00 00   c.c.c...c.....    
     ^^    ^^    ^^    **    **    **
 010 01 00 00 00 00 00 01 00 1E 00 01 00 01 00 00 00   ...........    
                             &&    &&    &&
 020 00 00 00 00 00 00 05 00 00 14 0F 0C 00 00 01 00   .............    
 030 00 FF 01 00 72 65 67 65 6E 2F 69 6E 76 2F 68 65   ...regen/inv/he    
           ++ ++
 040 61 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00   al..............    
 050 00 00 00 00 00                                    .....               

Patching spells..... You must use a hexadecimal editor. Examples include the DiskEdit from both Central Point's PCTools and Norton/Symantec's Norton Utilities.

The 63 over each ^^ in the first line above changes the original 01 points to 99 points.

Where the spell has wording such as 1 to 1 points, as heal does, the 63 over the ** in the first line changes it to 99 to 99 points

The values over the &&s is the number of turns between repeats. 1E is equivalent to 30 turns. Change as desired.

The 01 00 over the ++ changes the cost of the spell to 0 spell points.

This pattern using 85 bytes repeats for each spell in a spell book.

32 spells can be added to the spells book, requiring 2720 bytes, which is the size of the SPELLS.xx file, where xx is a value of between 00 and 09, and depends on the saved character's position in the list of saved games.