[Updated 27/12/2003] Tools for adding new skills
People who are creating their own new skills often wonder how to integrate them with the client. Client reads only 52 skill names from skills.mul - we can edit them, but adding new ones is not easy. As I run into these problems, I've sat and written two utilities to deal with this. They are both command-line tools. Of course, new skills must be scripted server-side, and standard client skill window may sometimes crash the client - I've adapted [skills gump to function like normal skills menu.
[Version 1.0 removed, description of 2.0 is in the later post]
http://nelderim.org/files/SkillTools.zip
First one is simple skills.mul viewer/editor. Here's the readme:
[code:1]
UO skills.mul (de)compiler
Copyright (c) 2003 Omega Red - [email protected]
Usage: SkillsMul [skills script]
Files skills.idx and skills.mul must be in the program's directory.
Without arguments, program displays contents of skills.mul file.
To build custom skills.mul, provide script filename as command-line argument.
Example: SkillsMul myskills.txt
Script consists of lines in format:
<allow use> <skill name>
allow use - should be 0 or 1, determines if skill has "use" button.
skill name - self explaining
ID of skill is determined by order in script file - first is #0, next #1 and so on.
Standard AOS skill set is provided in script file uoskills.txt
[/code:1]
Sample output from listing mode:
[code:1]
id start size use unkn name
-------------------------------------------------
0000: 0000 [0009]: [ ] [ 0] Alchemy
0001: 0009 [0009]: [*] [ 0] Anatomy
0002: 0012 [000d]: [*] [ 0] Animal lore
0003: 001f [000f]: [*] [ 0] Item Identify
0004: 002e [000b]: [*] [ 0] Arms lore
0005: 0039 [000a]: [ ] [ 0] Parrying
0006: 0043 [0009]: [ ] [ 0] Begging
0007: 004c [000f]: [ ] [ 0] Blacksmithing
0008: 005b [000a]: [ ] [ 0] Bowcraft
0009: 0065 [000d]: [*] [ 0] Peacemaking
0010: 0072 [0009]: [ ] [ 0] Camping
0011: 007b [000b]: [ ] [ 0] Carpentry
0012: 0086 [000d]: [ ] [ 0] Cartography
0013: 0093 [0009]: [ ] [ 0] Cooking
0014: 009c [0012]: [*] [ 0] Detecting Hidden
0015: 00ae [000d]: [*] [ 0] Discordance
0016: 00bb [0017]: [*] [ 0] Evaluate intelligence
0017: 00d2 [0009]: [ ] [ 0] Healing
0018: 00db [0009]: [ ] [ 0] Fishing
0019: 00e4 [0015]: [ ] [ 0] Forensic Evaluation
0020: 00f9 [0009]: [ ] [ 0] Herding
0021: 0102 [0008]: [*] [ 0] Hiding
0022: 010a [000d]: [*] [ 0] Provocation
0023: 0117 [000d]: [*] [ 0] Inscription
0024: 0124 [000d]: [ ] [ 0] Lockpicking
0025: 0131 [0008]: [ ] [ 0] Magery
0026: 0139 [0012]: [ ] [ 0] Magic Resistance
0027: 014b [0009]: [ ] [ 0] Tactics
0028: 0154 [000a]: [ ] [ 0] Snooping
0029: 015e [000e]: [ ] [ 0] Musicianship
0030: 016c [000b]: [*] [ 0] Poisoning
0031: 0177 [0009]: [ ] [ 0] Archery
0032: 0180 [0011]: [*] [ 0] Spirit Speaking
0033: 0191 [000a]: [*] [ 0] Stealing
0034: 019b [000b]: [ ] [ 0] Tailoring
0035: 01a6 [000f]: [*] [ 0] Animal Taming
0036: 01b5 [0016]: [ ] [ 0] Taste Identification
0037: 01cb [000b]: [ ] [ 0] Tinkering
0038: 01d6 [000a]: [*] [ 0] Tracking
0039: 01e0 [000c]: [ ] [ 0] Veterinary
0040: 01ec [000f]: [ ] [ 0] Swordsmanship
0041: 01fb [000e]: [ ] [ 0] Macefighting
0042: 0209 [0009]: [ ] [ 0] Fencing
0043: 0212 [000b]: [ ] [ 0] Wrestling
0044: 021d [000f]: [ ] [ 0] Lumberjacking
0045: 022c [0008]: [ ] [ 0] Mining
0046: 0234 [000c]: [*] [ 0] Meditation
0047: 0240 [0009]: [*] [ 0] Stealth
0048: 0249 [000e]: [ ] [ 0] Remove Traps
0049: 0257 [000c]: [ ] [ 0] Necromancy
0050: 0263 [0007]: [ ] [ 0] Focus
0051: 026a [000a]: [ ] [ 0] Chivalry
0052: 0274 [000b]: [ ] [ 0] TestSkill
[/code:1]
The second one was more tricky, as it patches the client to allow use of more than 52 skills. The readme again:
[code:1]
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
This utility changes hardcoded UO client skill limit to whatever you wish
(oh well, in range of 52-255
Usage: UoSkillPatcher <client-exe-filename> <number of max skills>
Example: UoSkillPatcher no_crypt_client.exe 53
If all goes well, output is written to new_client.exe
Number of skills MUST match of that in skills.mul or client will crash!
Use my SkillsMul for viewing/editing that
Patching is based on bytestream search so it should work with any client version (starting from AOS).
Hovewer, if it fails (and you're sure it's AOS client, not some older one),
drop me an e-mail with some details (preferably with that client attached
[/code:1]
Sample output from older client:
[code:1]
E:\uo2d\clients>uoskillpatcher client300c.exe 53
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
Filesize: 1490944 bytes.
One of the code signatures was not found - patch failed.
Either supplied client is too old (must be an AOS one)
or it's too new and OSI has significantly changed their code ;]
Contact me at [email protected] and provide some details about your client.
[/code:1]
..and succesfull patching:
[code:1]
E:\uo2d\clients>uoskillpatcher client400c.exe 53
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
Filesize: 1945600 bytes.
Skill limit found at offset 0x00043535.
Max number of skills successfully set to 53.
Modified client saved to new_client.exe - all OK!
[/code:1]
And one screenshot:
People who are creating their own new skills often wonder how to integrate them with the client. Client reads only 52 skill names from skills.mul - we can edit them, but adding new ones is not easy. As I run into these problems, I've sat and written two utilities to deal with this. They are both command-line tools. Of course, new skills must be scripted server-side, and standard client skill window may sometimes crash the client - I've adapted [skills gump to function like normal skills menu.
[Version 1.0 removed, description of 2.0 is in the later post]
http://nelderim.org/files/SkillTools.zip
First one is simple skills.mul viewer/editor. Here's the readme:
[code:1]
UO skills.mul (de)compiler
Copyright (c) 2003 Omega Red - [email protected]
Usage: SkillsMul [skills script]
Files skills.idx and skills.mul must be in the program's directory.
Without arguments, program displays contents of skills.mul file.
To build custom skills.mul, provide script filename as command-line argument.
Example: SkillsMul myskills.txt
Script consists of lines in format:
<allow use> <skill name>
allow use - should be 0 or 1, determines if skill has "use" button.
skill name - self explaining
ID of skill is determined by order in script file - first is #0, next #1 and so on.
Standard AOS skill set is provided in script file uoskills.txt
[/code:1]
Sample output from listing mode:
[code:1]
id start size use unkn name
-------------------------------------------------
0000: 0000 [0009]: [ ] [ 0] Alchemy
0001: 0009 [0009]: [*] [ 0] Anatomy
0002: 0012 [000d]: [*] [ 0] Animal lore
0003: 001f [000f]: [*] [ 0] Item Identify
0004: 002e [000b]: [*] [ 0] Arms lore
0005: 0039 [000a]: [ ] [ 0] Parrying
0006: 0043 [0009]: [ ] [ 0] Begging
0007: 004c [000f]: [ ] [ 0] Blacksmithing
0008: 005b [000a]: [ ] [ 0] Bowcraft
0009: 0065 [000d]: [*] [ 0] Peacemaking
0010: 0072 [0009]: [ ] [ 0] Camping
0011: 007b [000b]: [ ] [ 0] Carpentry
0012: 0086 [000d]: [ ] [ 0] Cartography
0013: 0093 [0009]: [ ] [ 0] Cooking
0014: 009c [0012]: [*] [ 0] Detecting Hidden
0015: 00ae [000d]: [*] [ 0] Discordance
0016: 00bb [0017]: [*] [ 0] Evaluate intelligence
0017: 00d2 [0009]: [ ] [ 0] Healing
0018: 00db [0009]: [ ] [ 0] Fishing
0019: 00e4 [0015]: [ ] [ 0] Forensic Evaluation
0020: 00f9 [0009]: [ ] [ 0] Herding
0021: 0102 [0008]: [*] [ 0] Hiding
0022: 010a [000d]: [*] [ 0] Provocation
0023: 0117 [000d]: [*] [ 0] Inscription
0024: 0124 [000d]: [ ] [ 0] Lockpicking
0025: 0131 [0008]: [ ] [ 0] Magery
0026: 0139 [0012]: [ ] [ 0] Magic Resistance
0027: 014b [0009]: [ ] [ 0] Tactics
0028: 0154 [000a]: [ ] [ 0] Snooping
0029: 015e [000e]: [ ] [ 0] Musicianship
0030: 016c [000b]: [*] [ 0] Poisoning
0031: 0177 [0009]: [ ] [ 0] Archery
0032: 0180 [0011]: [*] [ 0] Spirit Speaking
0033: 0191 [000a]: [*] [ 0] Stealing
0034: 019b [000b]: [ ] [ 0] Tailoring
0035: 01a6 [000f]: [*] [ 0] Animal Taming
0036: 01b5 [0016]: [ ] [ 0] Taste Identification
0037: 01cb [000b]: [ ] [ 0] Tinkering
0038: 01d6 [000a]: [*] [ 0] Tracking
0039: 01e0 [000c]: [ ] [ 0] Veterinary
0040: 01ec [000f]: [ ] [ 0] Swordsmanship
0041: 01fb [000e]: [ ] [ 0] Macefighting
0042: 0209 [0009]: [ ] [ 0] Fencing
0043: 0212 [000b]: [ ] [ 0] Wrestling
0044: 021d [000f]: [ ] [ 0] Lumberjacking
0045: 022c [0008]: [ ] [ 0] Mining
0046: 0234 [000c]: [*] [ 0] Meditation
0047: 0240 [0009]: [*] [ 0] Stealth
0048: 0249 [000e]: [ ] [ 0] Remove Traps
0049: 0257 [000c]: [ ] [ 0] Necromancy
0050: 0263 [0007]: [ ] [ 0] Focus
0051: 026a [000a]: [ ] [ 0] Chivalry
0052: 0274 [000b]: [ ] [ 0] TestSkill
[/code:1]
The second one was more tricky, as it patches the client to allow use of more than 52 skills. The readme again:
[code:1]
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
This utility changes hardcoded UO client skill limit to whatever you wish
(oh well, in range of 52-255
Usage: UoSkillPatcher <client-exe-filename> <number of max skills>
Example: UoSkillPatcher no_crypt_client.exe 53
If all goes well, output is written to new_client.exe
Number of skills MUST match of that in skills.mul or client will crash!
Use my SkillsMul for viewing/editing that
Patching is based on bytestream search so it should work with any client version (starting from AOS).
Hovewer, if it fails (and you're sure it's AOS client, not some older one),
drop me an e-mail with some details (preferably with that client attached
[/code:1]
Sample output from older client:
[code:1]
E:\uo2d\clients>uoskillpatcher client300c.exe 53
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
Filesize: 1490944 bytes.
One of the code signatures was not found - patch failed.
Either supplied client is too old (must be an AOS one)
or it's too new and OSI has significantly changed their code ;]
Contact me at [email protected] and provide some details about your client.
[/code:1]
..and succesfull patching:
[code:1]
E:\uo2d\clients>uoskillpatcher client400c.exe 53
UO client 52-skill limit remover
Copyright (c) 2003 Omega Red - [email protected]
Filesize: 1945600 bytes.
Skill limit found at offset 0x00043535.
Max number of skills successfully set to 53.
Modified client saved to new_client.exe - all OK!
[/code:1]
And one screenshot: