Before you begin editing, you'll need to aquaint yourself with U7's debug "cheaters" menu.
To activate the menu, at the DOS prompt type:
U7.EXE ABCD<alt-255 on the numeric keypad><spacebar> SPAM S
Activates main debug menu.
Hack mover- Move any onscreen object (even ground tiles).
Power Avatar- Unlimited hitpoints, spellpoints, reagents, etc...
Edit npc- Edit almost every aspect of a npc's stats or physical state (aka, solid\etheral\swim\fly).
Create item- Create any item found in the game.
<Alt>+<4> (the 4 at the top of the keyboard)
force any container and most npc's to be emptied of it's (or his or her's) contents.
Teleport to anywhere on the worldmap.
Spells (1-72) ex: in SI, 12 is Great Light, 23 is Translate.
Identify item targeted with the crosshairs (click left mouse button when mouse pointer changes to a crosshair). M
Most of my notes also apply to Serpent Isle. Serpent Isle command line:
SI.EXE PASS SPAM S
With Silver Seed installed:
SI.EXE MANIMAL SPAM S
U7.EXE reads three files when it loads up scenery in the game, a 512-byte segment of U7MAP (static dir), a U7IFIX?? file (static dir), and a U7IREG?? file (gamedat dir).
|Chunks Map (16-16)||Super Chunks (12x12)|
The land in Ultima 7 is neatly segmented into 144 (12x12) sections. U7MAP is segmented into 144 512-byte "SuperChunks", and correspondingly, there are 144 U7IFIX??'sand 144 U7IREG?? files.
Most of the first story scenery is read from the U7MAP file, the only omissions are the swirling space tiles (Tetrahedron, I think), the chasm tiles in FOV (truth test area), and some misc. first story scenery (columns, monoliths, statues, or any other scenery that doesn't leave a glowing square when removed with the hack mover).
All second story scenery is read from the U7IFIX?? files, this includes second story walls and roof tiles (regular andmountain).
All objects that can be manipulated by the user (hack moving not included), and specials (eggs) are read and savedin the U7IREG?? files.
BTW, most of the information and tricks that I use are catered to Norton DE, those with PCTools or another good hexeditor shouldn't have any trouble, but I don't recommendusing Dos Debug.
I want to give special thanks to Samuel Chong who originally figured out the purpose of U7MAP and the Ifix files, which I would have missed if he hadn't pointed 'emout to me.
The U7MAP file is segmented into 144 (12x12 grid on the worldmap) 512-byte segments (conveniently, most hex editors separate data into 512-byte segments), called "SuperChunks".
The SuperChunks are further subdivided into 256 two-byte chunks (16X16 grid on each SuperChunk).
Each of the chunks is about the size of a one room house (about four inches each way).
Each SuperChunk has 16 rows of 16 two-byte chunks, after reading the 16th chunk, the program starts a new row (one row takes up two 16-byte lines in the U7MAP file).
Here's a good way to test out the U7MAP file (back up the original first):
The U7IFIX?? files in the Static directory contain all second story scenery (except for trees), roof chunks, and some misc. first story objects (columns, monoliths, alters, etc...).
There are 144 Ifix files (U7IFIX00-U7IFIX8F).
Each Ifix file is separated into two parts, the top half (starting at hex offset 80 and ending at offset 87F) is the pointer segment and the bottom half (offset 880->) is the data segment.
As with U7MAP SuperChunks, each Ifix file has 256 chunks (16x16 grid).
Each Ifix chunk is represented by an eight byte string in the top half, ex: 80 05 00 00 0A 00 00 00 80 05 refers to the hex offset 05 80 (in the bottom, data half) where the data for the Ifix chunk begins, 0A tells the program how many bytes it needs to read to complete the chunk (art data read from Shapes.vga).
Unfortunately, each Ifix has it's own palette of picture data, so there won't be a single Ifix chunk list. You can customize Ifix files to your specification though. All you have to do is copy data from one Ifix file and tack it on the the end of another, then write in the chunks's new starting address and length.
Let's say you want to grab the second story walkway connecting the two mountain ranges to the North and East of Britain (from U7IFIX28), and transfer the Ifix chunk to the Ifix file that holds LB's castle (U7IFIX33).
The U7IREG?? files in the Gamedat directory are where the game stores all objects that can be manipulated by the user (weapons, magic carpets, doors, eggs, etc...)
The data is separated into two groups, object data and specials data.
Object data is stored in a six byte format:
06 2E A7 AE 02 09 00 (Magic leg armor) | | | | | | |-> Number of charges | | | | | |-> Spam Modifier, change to a 1, 11 or 31 to | | | | | make item created with the "Create item" | | | | | command in the Debug Menu permanent. | | | |__|-> Item number (in hex) | |__|-> X, Y coordinates |-> String size indicater
Specials data (eggs & stats) are stored in a twelve byte format:
0C 12 06 13 01 71 64 04 00 00 75 03 | |-> I don't have my "egg/usecode" notes in front of me | right now, but will post 'em if you need 'em. |-> String size indicater.
***Note, if you change an item that is on-screen when you saved your game, you'll also have to change data in the U7IBUF.DAT file.
38 00 2E A7 AE 02 09 08 | | | | |__|-> Spam modifier | | |__|-> Item number (Magic leg armor) |__|-> X, Y coordinates
One of the problems with altering Ireg and U7IBUF.DAT object strings is finding the right spam modifier, since each class of objects has it's own (weapons, tools, secret doors, etc...).
Happily, there is a simple way around all this (you don't even to edit the files, hehe), all you have to do is duplicate the contents of the Ireg files:
That's it, total, wholesale plundering of anything you could ever want. Don't you feel evil<g>?