RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Inside UO/Gump Editor...the whole shebang

Inside UO/Gump Editor...the whole shebang

Okay. So this is going to be partly an explanation and then partly a question. I thought I'd compile all of my findings so others may benefit from what I've found out so far. Well after sorting through countless unhelpful posts with people saying things to newbies like, "you are a retard, go look on google," and other completely useless crap from quick-witted people with too much time their hands, I've managed to conclude the following about verdata editing (I may be wrong in some parts). Please do not post, unhelpful useless crap here. There is no tutorial for gump editing, and I'd like for there to be a general post for everyone to refer to with some basic steps.

First of all, most of Ultima Online's files are in .mul form. This includes your very own character's files. Only a few programs are in existence that allow editing andviewing of such files. No, this does not mean you can edit your character's stats from home and expect the server to pick up on it. If you've ever tried saving your macro file, you'll know that the server ignores its recent addition. This is most likely one precaution taken by osi.

I'm taking a huge, leaping guess here when I say this, but my thoughts are that the gump files are on a grid, and the computer is told to read such and such tile to such and such tile to display the gumps. And if I'm correct in guessing this, that means that we can only overwrite such files, or edit them, and are incapable
of assigning new tiles to that grid to display custom gumps. In English: If Sally Joe wants curly Q's she's going to have to give up her Mohawk. I could be entirely wrong here.

Okay, so say for example somebody wanted Angel Wings (this is just an example...if someone already did this...well good for you but that script isn't goign to teach us how to edit gumps) that are equippable.

(Well first of all these have to be layered as a cloak, since they're for the person's back. That, however will come later in the script as that can be altered using [props).

We want to check our gump and animation files to make sure something might already be in existence to save us alot of trouble of drawing the damn things ourselves.

InsideUO is a very helpful tool which will allow you to view .mul files. You may find it here: http://uo.stratics.com/heptazane/insideuo/index.shtml

And sure enough we find that the Forest Lord has neat wings that could pass off as Angel Wings. This means than an artist is going to have to crop the Forest Lord from every one of those animation sequences and then reposition the wings so that they match the player body. Also, one would have to come up with a wing gump for the paper doll, as to avoid trashy lameness in just expanding the size of the wings.

Now that you've found the the Forest Lord, you'll need to export him into a .bmp image. Apparently you can use other programs to do this...but the frustrating thing with Gump Studio is that it will not import the gumpart file...at least for me it won't (which means its probably not meant for that anyway...).

To export the Forest Lord into a .bmp file for editing:

1. Open up InsideUO
2. Click the Animation Button
3. Find ForestLord under LBR Monsters and expand it
4. Create a New Folder on your desktop and call it Wings or something suitable
5. Right Click one animation and choose save as bitmap and save in folder
Note: You will get a warning about overwriting the files, just click through it
as long as you're saving into a new folder
6. Open up paint and/or photoshop and edit it accordingly

Animation Editing, however, is not a fun past time. Let me further explain it:
In total there are 37 animation categories per item (clothes, bodies, etc).
Which Include:

Walk Unarmed
Walk Armed
Run Unarmed
Run Armed
Stand
Fidget 3
Fidget 2
Stand for one handed attack
Stand for two handed attack
Attack One handed
Attack Unarmed 1
Attack Unarmed 2
Atack Two Handed Down
Attack Two Handed Wide
Attack Two Handed Jab
Walk In Attack Position
Cast Directed
Cast Area/Summon
Attack Bow and Arrow
Attack Crossbow
Take Hit
Die 1
Die 2
Horseback Ride Slow
Horseback Ride Fast
Horseback Stand
Horseback Attack
Horseback Attack Bow and Arrow
Horseback Attack Crossbow
Horseback Slap horse
Turn
Attack Unarmed and Walk? <--apparently they weren't sure about this one
Bow
Salute
Fidget 3

And in additon to each of those categories, there are five directions
per each one, which include:

Down
Down-Left
Left
Up-Left
Up

So now you've got your edited animations...but you don't know where to go from there...well, hell...neither do I.

OSI no longer uses a verdata.mul file. They stopped doing that around the Blackthorne's Revenge release. So instead you have to use a mul patcher to edit directly into the other muls. Also, if you want to assign a whole new range of numbers for custom gumps, you have to edit the client.

The Mul Patcher can be found:
http://premium1.uploadit.org/GoldDraco13/mulpatcher.zip
You have to use something else to play with the client.
You can probably find something in here:
http://www.shardwire.org/index.php?name=Downloads&d_op=viewdownload&cid=76

The MulPatcher will display the unused values for gumps. Now, you might be wondering the same thing as I am, "How do I assign my gumps to those unused number so that Sally Joe doesn't have to give up her previous existing clothes?"

With MulPatcher you first have to load all of your files into the program. I've looked through MulPatcher and as far as I can conclude it only displays the gumps with a list of accompanying values.

So the big question here is:
How does one go about converting the .bmp image back into the .mul file but as a new assigned number?


Mul patcher shows us which ones aren't being used...but it doesn't tell us how to actually assign a gump to those values.

Gump Editor imports the gumps from the actual gumpart file by using the tile ranges found in Inside Uo, but it can only overwrite other gumps with its copy and paste feature.

Michelangelo...well frankly I don't understand Michelangelo...It imports the file from the .mul and .idx files found in the Ultima Online directory, and it exports them back into the .mul file. But it can only do that and save it as its own michelangelo file type...what the heck? Again this does not help in converting the .bmp file back into the .mul file as a gump, with a new assigned number taken from the list provided by MulPatch.

Maybe one of our more experienced verdata editors will help us out.

Other useful information:
"as for these not apearing in 3d, all you have to do is add these items (in 3d) into iris gump editor and there in the game for iris clients" - Elglas
 

Atomic

Wanderer
Try the old Avatar Patch (sometimes refered to as Iolo)
I don't have a link here but shouldn't be hard to find. You also should post a copy of this tutorial in FAQ when its ready :)
 

HellRazor

Knight
First, an explanation of terms.

- Art tiles are the items you interact with in the world. (For instance, the sword you pick up off the ground is an art tile). These are made up of 2 parts, the actual art is in art.mul and there are "flags" for each art item stored in tiledata.mul.

- Gumps are the items you see in your paperdoll (i.e., your characters body, the clothes he is wearing in the paperdoll, his hair) - as well as menus, the interior of backpacks, and other large pictures.

- Animations are the characters, monsters, and NPC's and their equipment (i.e., the dragon you are fighting is an animation; your character is an animation; the horse he is riding and the sword he is holding in his hand that is swinging at the dragon is an animation). All mounts, wearable and equipable items, characters, NPC's, and monsters have animations.

Take a minute and browse through all these different types of art in InsideUO and you'll see what I mean.

Here is how art tiles, gumps, and animations link together (note this is for the 2D client):

- Animation # (from InsideUO) + 50,000 decimal = Male Gump ID

- Male Gump ID + 10,000 decimal = Female Gump ID

(If there is no female gump, the client will use the male gump for both males and females).

Find the art item in an editor such as TDV MulPatcher. To link the art item to an animation, set the Gump/Anim offset flag to point at the animation model # from InsideUO.

Now you have an item that can be picked up, , seen in the paperdoll when equipped, and which has an animation when equipped.

When adding new stuff, you also need to be aware that there are text files the client uses called .def files which allow the client to create new items using existing art (for instance, the hell hound uses the same animation as a wolf).

Here is a description of the .def files, you can open these with any text editor:

anim(1|2|3|4).def : used for converting animation action numbers from 'virtual' server-sent values to the 'physical' MUL-file action numbers. This is just used so UO:TD can have more animations. In effect, it says something like 'wave hand action converts to raise arms in air action.'
Format:
inputAction {outputAction} 0

art.def : table used to convert new art to old art
Format:
inputID {outputID} outputHue

body.def : table used to convert new animations to old animations
Format:
inputBody {outputBody} outputHue

bodyconv.def : table used to convert body values to physical file slots in anim2.mul or anim3.mul
Format:
bodyValue anim2slot anim3slot

corpse.def : table used to override the corpse graphic for some bodies (like elementals)
Format:
inputBody {outputBody} outputHue

gump.def : table used to override paperdoll gump graphics for some items
Format:
inputGumpID {outputGumpID} outputHue

intrface.def : UO:TD datafile describing all interface elements, simple format but with many different element types

music.def : no data, but one can imagine it is to convert music IDs
Format: ?
inputMusicID {outputMusicID} 0

sound.def : used to convert new soundIDs to old soundIDs
Format:
inputSoundID {outputSoundID} 0

texterr.def : I'm unsure of exact usage, it may be a UO:TD only file


Also, this statement:

FaerieLantern said:
I'm taking a huge, leaping guess here when I say this, but my thoughts are that the gump files are on a grid, and the computer is told to read such and such tile to such and such tile to display the gumps. And if I'm correct in guessing this, that means that we can only overwrite such files, or edit them, and are incapable
of assigning new tiles to that grid to display custom gumps. In English: If Sally Joe wants curly Q's she's going to have to give up her Mohawk. I could be entirely wrong here.

...isn't really true as written. Don't think of it as a "grid". Think of it as a list of numbers. Each type of art has its own minimum and maximum range (so yes, there is a limit as to how many things you can add, but any of the empty blocks that aren't used in the MUL or DEF files is up for grabs). The animations can be more confusing because the animations are made up of more than one piece of art. Here is some general info and formulas on animations:

General info about animations in UO:

Character and item animations have 35 types of animations.
Low-detail creature animations have 13 types of animations.
High-detail creature animations have 22 types of animations.

Each animation type has 5 directions (down, down-left, left, up-left, up; these directions correspond to south-east, south, south-west, west, and north-west; the directions down-right, right and up-right are computed by the client by mirroring the existing directions).

That means that each char/item has 175 animation sequences (35 types, 5 directions per type). Low-detail creatures have 65 sequences (13 types), and high-detail creatures have 110 sequences (22 types).

Each animation sequence has a varying number of frames. The existing sequences have between 1 and 10 frames per animation. You should probably stick with that. (1 frame is used for "Stand".)

An image has a palette with 256 color entries. All images of an animation sequence use the same palette. A color entry is a 16Bit RGB value (5 bits red, 5 bits green, 5 bits blue, 1 bit unused).

--------------------------------------------------------------------------------

Computations:

First, some explanations of what these numbers are.

GumpID: the ID of the gump, as seen in InsideUO (also the file blocknumber)
AnimID: the animations creature ID, as seen in InsideUO
FirstAnimBlock: the first block number of an animation (i.e. every equipment has 175 animation blocks, ranging from FirstAnimBlock to FirstAnimBlock+174). You will need this number for michelangelo, since Michelangelo indexes animations by their block number - just like the UO client.

GumpID from AnimID:
GumpID = AnimID + 50000

AnimID from GumpID:
AnimID = GumpID - 50000

FirstAnimBlock from AnimID (only for equipment):
FirstAnimBlock = (AnimID - 0x190) * 175 + 35000

FirstAnimBlock from AnimID (only for low-detail creatures):
FirstAnimBlock = (AnimID - 0xC8) * 65 + 22000

FirstAnimBlock from AnimID (only for high-detail creatures):
FirstAnimBlock = (AnimID * 110)

--------------------------------------------------------------------------------

Animation Blocks (=Animation Sequences):
Creature ID (cID) Animation Type Number of Blocks First Animation Blocknumber (aID)
0x000 - 0x0C7 High-detail creature 110 aID = cID * 110
0x0C8 - 0x18F Low-detail creatures 65 aID = (cID - 0x0C8) * 65 + 22000
0x190 and up Human and Equipment 175 aID = (cID - 0x190) * 175 + 35000

The following list shows the offsets for the various types of animations. Each type has 5 directions: down, downleft, left, upleft and up, in this order.

High-detail Creatures Blocknumber Offset Explanation

0 Walk
5 Stand
10 Die 1
15 Die 2
20 Attack 1
25 Attack 2
30 Attack 3
35 Misc. 1
40 Misc. 2
45 Misc. 3
50 Stumble
55 Misc. (Stomp, slap ground, etc.)
60 Misc. (Cast, breathe fire, etc.)
65 Take Hit 1
70 Misc. 4
75 Take Hit 2
80 Take Hit 3
85 Fidget 1
90 Fidget 2
95 Fly
100 Landing Animation
105 Die in Flight

Low-detail Creatures Blocknumber Offset Explanation

0 Walk
5 Run
10 Stand
15 Graze or Eat
20 ?
25 Attack 1
30 Attack 2
35 Attack 3
40 Die 1
45 Fidget 1
50 Fidget 2
55 Lie Down
60 Die 2

Human and Equipment Blocknumber Offset Explanation

0 Walk Unarmed
5 Walk Armed
10 Run Unarmed
15 Run Armed
20 Stand
25 Fidget 1
30 Fidget 2
35 Stand Ready for One-handed Attack
40 Stand Ready for Two-handed Attack
45 Attack with One-handed Weapon
50 Attack Unarmed 1
55 Attack Unarmed 2
60 Attack Two-handed (downstrike)
65 Attack Two-handed (wide swing)
70 Attack Two-handed (jab)
75 Walk in Attack Mode
80 Cast (Directed Spell)
85 Cast (Summon/Area Spell)
90 Attack with Bow and Arrow
95 Attack with Crossbow
100 Take Hit
105 Die, falling backwards
110 Die, falling forwards
115 On Horseback, riding slow
120 On Horseback, riding fast
125 On Horseback, stand
130 On Horseback, attack
135 On Horseback, attack with bow and arrow
140 On Horseback, attack with crossbow
145 On Horseback, slap horse
150 Turn Around
155 Attack Unarmed 3 (?)
160 Bow
165 Salute
170 Fidget 3


Hope this information is helpful!
 

Bradley

Sorceror
HellRazor said:
First, an explanation of terms.
- Gumps are the items you see in your paperdoll (i.e., your characters body, the clothes he is wearing in the paperdoll, his hair) - as well as menus, the interior of backpacks, and other large pictures.


This is actually incorrect. Gump is actually an acronym, I found the definition somewhere on stratics. It's actually (G)raphical (U)ser (M)enu (P)rogram (The P could also be "Popup", it's been awhile and I can no longer find the page to be cirtain). A Gump is the Collection of images and fields that make up the customizable menus displayed by the client. The individual images are just that, Images. Gumps are made up of Images, Items, Backgrounds, RepeatingImages, Text Areas, Buttons, Pages, and so on. For example, the entire paper doll, armor, weapons, shields, background and buttons, is one single gump. The standard color picker is a single gump.

I'm sorry, but people refering to single images as "Gumps" is one of my biggest pet peeves, and I will not rest until everyone understands what Gumps actually are. :)

For more proof, just look at how you build a gump in RunUO, you create a class that inherits from "Gump", and inside it are all the parts that make up the interface.

As the author of Gump Studio, I think I have a pretty good grasp of the proper terminology.
 

HellRazor

Knight
FaerieLantern said:
You are a piece of Heaven smothered in Chocolate...

Thank You So Much

Quite welcome, thanks to you as well for posting all that helpful information! :)

I've been wanting to create a UO editing guide for some time but alas, just haven't found the time. It can be pretty complicated, everything I know I had to scrap together from bits and pieces of info and from messing around with things.
 

HellRazor

Knight
You're 100% right! But most people (myself included :eek: ) call that entire range of artwork "gumps" even though it is not technically correct.

Blame the author of InsideUO, it all started there - this was the first utility for viewing the artwork and he labeled that section of artwork "gumps", obviously it caught on. ;)

Bradley said:
This is actually incorrect. Gump is actually an acronym, I found the definition somewhere on stratics. It's actually (G)raphical (U)ser (M)enu (P)rogram (The P could also be "Popup", it's been awhile and I can no longer find the page to be cirtain). A Gump is the Collection of images and fields that make up the customizable menus displayed by the client. The individual images are just that, Images. Gumps are made up of Images, Items, Backgrounds, RepeatingImages, Text Areas, Buttons, Pages, and so on. For example, the entire paper doll, armor, weapons, shields, background and buttons, is one single gump. The standard color picker is a single gump.

I'm sorry, but people refering to single images as "Gumps" is one of my biggest pet peeves, and I will not rest until everyone understands what Gumps actually are. :)

For more proof, just look at how you build a gump in RunUO, you create a class that inherits from "Gump", and inside it are all the parts that make up the interface.

As the author of Gump Studio, I think I have a pretty good grasp of the proper terminology.
 

HellRazor

Knight
Helpful tip:

The body.def file is a very easy way to create new equipable items without having to add a new animation.

For instance, you can create a new sword and just use the viking sword animation to display it in the client. Just find an unused animation slot and add it to body.def, point it to the viking sword animation, and then link your new gump and art items to that "new" animation. Viola, a new sword without having to create a billion new animation frames.
 
Okay. I tried to figure this all out, and it's just not clicking.

I did however, get to the point where I could import my .bmp image into
a new value under what MulPatcher defines as Gump(anim). So I have this
new shirt displaying for the value of 0xC6E8 in both InsideUO and MulPatcher.

Here's how I got that far for those who need to follow along:

1. Open up GumpEditor and import appropriate "gump" files from
0 - 60993. Export female bustier and plain dress as .bmp image.
2. Open up paint/photoshop and create a new shirt.
3. Open up MulPatcher and load the "gumps" into the "gump(anim)"
4. Click on "gump(anim)" tab
5. List all unused values through dropdown box
6. Pick an unused value and rightclick it
7. Choose Load from Bitmap
8. Browse computer and open .bmp image
9. Click on the Settings tab
10. Select save under gumps
11. Browse for gump.idx file
12. Save

So now I've gotten to the part with .def files. And by that last post
explaining how to link the files, I've gotten myself confused.

Here's what I did:

Using InsideUO to view my new shirt, it gives me the value of 50920 in
the bottom left hand corner. So I'm assuming that this is the appropriate
value I need. However, as female gumps are said to be 10000 above
males, I changed that to 60920.

Next, I refer to MulPatcher and find 0xC6E8 and find that the animation value
that matches its "gumpid" is 0x398 and it does not exist.

Then, using InsideUO, I find that the model# for the art for the female bustier
(or the one I'd like to use) is 7178 (0x1C0A)

Then I find the animation # for the bustier with InsideUO and it tells me the
model # is 925 (0x39D)


So, I have to link these all together using .def files. But the formats don't
make any sense to me. What I did was open up the gump.def and add the following

#Customs
60925 {60920} 0

Next I opened up the body.def and added:

#Customs
398 {925} 0


And I have no idea what I'm doing with the art value.
I have a feeling I'm doing this entirely wrong

What I'm trying to do is link my given value of 60920 (my new shirt) to the ones I found,
so that I have an item that displays as a bustier on the ground, animates as a
bustier, and displays as my new shirt on the paperdoll. And then create a script
so that its constructable


Looking at the GM Robes from the suits folder found in my RunUo directory I came up with

Code:
using System;
using Server;

namespace Server.Items
{
	public class PhoenixShirt : BaseShirt
	{
		[Constructable]
		public PhoenixShirt() : base( <insert ? value here>, <insert ? value here> )
		{
		}

		public PhoenixShirt( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();
		}
	}
}

With all these values floating around..I'm not really sure which ones to put in...
 

HellRazor

Knight
If the gump for the shirt is stored at 0xC6E8, that is decimal 50920. So remember, Male Gump - 50,000 = location of the new animation block you are going to use.

50920 - 50000 = 920.

(Note, you should always start by finding an empty animation block to start from! In this case 920 is empty).

Now add a new art tile to represent the new shirt in game. In this example, lets just say we stored it at 0x3F16. After saving the art, edit the flags for this item in tiledata.mul. You want to make this item equipable, wearable, and point the gump/anim offset flag to 920 (location of your new animation for this item).

Ok, now let's deal with the animation. We don't want to create a whole new animation, we want to use the leather bustier at 925. So in body.def, to use animation 925 to display your new animation block 920, add this:

920 {925} 0

Finally, your script for the new shirt should reference the art item you added to represent the new shirt in game. For instance:

public NewShirt( int hue ) : base( 0x3F16, hue ) <--- 0x3F16 is where the art item is stored.

I didn't test all this and I'm doing it from memory but I'm pretty sure this is all correct, hope it is of help.
 

Kwwres10

Wanderer
Hehe. I taught myself how to create muls after clicking on shit for 15 minutes in MulPatcher. I love the proggy. BTW. Faerie, if you wanna throw couple of those graphics my way I would be your best buddy.:D I tried to make a bloody ear animation (as if you cut off someones ear) and it came out looking like an ogre had a hernia and crapped a bloody pancake. (In less graphic terms, I CAN NOT create art.) I made vampire skulls though! I jacked the skulls from inside UO, Put some pointy teeth on them and .muled them up. I was so proud of myself.:D Anyways, enough talkey.

P.S. I dig the tutorial!

Cheers,
-Nox
 

phoo

Sorceror
from a simpleton perspective lets say i wanted to add a new art item.. and add it in
I am curious what program to create the bmp file in how many colors how to implement its palate what pixel sizes does the new art need to be ? can we get a basic step by step of the process as a whole that would be a great learning utility in itself.
 

HellRazor

Knight
One easy way to ensure that your palette is correct is to open up InsideUO and save one of the art files as a .bmp. Then open up your paint program and use the file you saved as a way to get the correct pallette for your new art item.

The art can be any size although it gets a little tricky to make large objects. Due to the way the client displays them, you have to cut them into pieces. There is a program by Darus that can help simplify this, it is called UO Image Cutter. I haven't used it much, but I tested it and it seems to work. You can find it in the downloads section at:

http://www.uodev.de

The site is in German. It is in the downloads section under "Tools für Map / Static / Mul-Files", you will need to register before you will see it.
 

Atomic

Wanderer
.bmp's don't have palettes AFAIK, they use RGB values. The default configuration of color depth in MS Paint works fine.
 
HellRazor said:
Helpful tip:

The body.def file is a very easy way to create new equipable items without having to add a new animation.

For instance, you can create a new sword and just use the viking sword animation to display it in the client. Just find an unused animation slot and add it to body.def, point it to the viking sword animation, and then link your new gump and art items to that "new" animation. Viola, a new sword without having to create a billion new animation frames.

HellRazor....

Ok i was able to do this successfuly on 95% on my new items that I patched. My question is this: What do you do when your custom animation number that you obtain when adding in the art in the gump muls and tiledata mul turns out to be the same as one ALREADY in the body.def file?

For example...I have a custom bustier armor that I patched in and when viewed in InsideUO I see this in the gumps section:

0000C364 The handle is 50020 (0xC364)

Ok so I understand 50k-50020 leaves me with 20 for the animation block.

Now when I try to make the change into the body.def since I want it to have the standard bustier animation (922 I think), I see this for 20:

Code:
20 {28} 1153

Now...I'm a bit confused on this part as to how that 20 slot can share different animations....(hope that makes some sense). Do I need to change the gump patch location for the bustier or is there a way to share the animation within the body.def

Thanks.

Adam
 

HellRazor

Knight
You either need to find an empty slot not in use by body.def, or you need to delete that particular entry in body.def. That's why I recommend that you always find the animation ID # first (so you can be sure you are using an empty spot), and then determine where to place the gumps. Whenever you check for empty animation slots you have to check both the animations (using InsideUO or some other MUL editor) *AND* body.def. None of the MUL viewer/editors that I know of use body.def so none of them will spot it if an animation ID is in use in body.def.

Body.def is just a file that allows the client to "copy" an existing animation and assign it a new animation ID. For example, Hell Hounds are just hued copies of wolves, but they have their own animation ID because they have their own entry in body.def.
 
Top