Hacking Skills and Attributes in Daggerfall's FALL.EXE

                        - Written By Dave Humphrey -
	                       dave@uesp.net
                                29 May 1998


To start right off, here's the offsets for v2.13 in the FALL.EXE to change
certain things regarding skills and attributes.

        Offset     Change to       Effect
      =========   ===========   =================================
       0x87F24      C8 72         Attributes can be raised up to 200 when
                                  leveling.

       0x88485      C8 77         Allows attributes and skills to remain 
       0x8849A      C8 76         above 100, up to 200, when checking for 
       0x884AD      C8            skills and level increases every 8 game
       0x884F0      C8 76         hours.
       0x88506      C8

       0x886F1      C8            Allows skills to increase naturally up
       0x88381      7F            to 127.

These values have been tested by myself and appear to work perfectly fine.
Still, it is possible that these could mess up the game in any number of
ways so caution is warrented.  There are problems when your skills and
attributes are above 100 and you become a vampire (and probably a werewolf
or wereboar as well). Skills and attributes above 100 are still chopped.
Actually, there is a bug in the game which chops off skills enhanced past
100 with magic.  For instance, my Restoration skill was at 130 due to a
couple of items.  When I became a vampire this was reduced to 100.  So when
I remove those items, my restoration would drop to 70 and I would actually
lose levels...oops!  It's probably a good idea to become whatever you'd like
to be before using this hack.

For those who don't want to mess with hex editting, or don't know how, I've
created a simple and small program to do all this for you.  DFSkills can be
found at the Unofficial Elder Scrolls Pages in the Daggerfall Files Area
(http://www.uesp.net/dagger/files/).  It also allows you to replace
the original values.  It works only with patched version 2.13.


   EXPLANATION
=======================================
If your wondering how I found these and how you can do the same...read on
for a hopefully complete and relatively straightforward explanation.  I do
assume that you are familiar with hex numbers and hex-editting files.

I started by searching through the FALL.EXE file for all occurances of the
hex-sequence '64 00 00 00' (or, 100 in long integer format).  I changed each
of these to a higher number and loaded up the game to see the effects.  One
may notice that there are many hundreds of these in the file so I did take
several shortcuts such as changing 10 of them before loading up the game.
Unfortunately, besides a few crashes, I found nothing.

I now started the same search for '64 00', changing several, loading up the
game, and observing the effects with skills and attributes.  I found two
places which did appear to effect the skills and attributes (the 0x884AD
and 0x88506 offsets above).  Changing them from 0x64 to 0xC8 (which is 200
in decimal) had the effect of setting a skill/attribute to a value of 200 if
it was above 100 (set by a savegame editor for example).  This occured every
8 hours or so when I rested.  What I wanted to do was to be able to set the
skill/attribute at 200 only if it was above 200, not 100.

I now turned to programming, creating some very simple files and viewing the
EXEs in a hex editor.  Essentially I was looking for hex codes for a
comparison between two numbers.  What I found was the following code:

                        38 F? 64 7? 
                38 = The compare code
                F? = FC, FE, FF, F8, etc... I _think_ this refers to what
                     we are comparing against, the variable reference.   
                64 = Number to compare with, in this case 100.
                7? = 70 to 7F defining the type of compare, less than,
                     greater than, equals to, etc..   

Essentially, these are the machine codes for comparing too things. In C and 
assembly this would look like (if you don't know asm, don't worry):

        if (variable == 64) {           cmp ax, 64
          }                             jne 


If you have any problems, suggestions or comments on this page or website, please feel free to use the Contact Form to send a message to the WebMaster.
This document was last modified on: Tuesday, 15 February 2011, at 20:25:32 and has been accessed 2529 times ( dagger/dfsfall.txt ).
/text.shtml