Wizardry 8

Wizardry 8

Zolaerla Dec 9, 2023 @ 6:23pm
Consolidated Formulas & Game Data: W8 Demystified
THIS IS STILL CURRENTLY A WORK-IN-PROGRESS. ALSO, IT'S FILLED WITH SPOILERS, TO WARN NEWER PLAYERS!

Over the last few months, I have been putting together all of the information I can find about Wizardry 8 together into a collection of LibreOffice documents. This is eating up enormous amounts of time, but it's starting to shape up to what I want the end result to be, and now that several of the more complex parts are completed, and I apparently keep running into old data vs new, I figured I'd post this in case anybody else is interested in having way more information than anybody needs about this game.

When this is complete, this will basically contain all of the information from the peddroelm guide, the Flamestryke website, all of the extra tidbits gleaned through the forums, and so on. There are many lists in this that I could not find anywhere, such as lists of what equipment modifies what attributes/skills, where everything spawns, where to find every item (no guarantees that helps you though with some of those awful percentage chances!), etc.

If nobody is interested, I'll just finish this for myself anyways. If people like this, though, please let me know and I'll upload my updates over the old file.

This should always be the latest version:
http://junk.zolaerla.com/Media/W8Demystified.rar

And if anybody finds any mistakes, please let me know!
< >
Showing 1-13 of 13 comments
Horpner Sneed Dec 10, 2023 @ 7:17am 
This looks really interesting! Thanks for sharing it.
Zolaerla Dec 12, 2023 @ 12:03pm 
@Zergs - This is my response to Zergs in another posting when talking about this set of docs, since this is a better place to talk about it. You've given me three new sources of data to test and incorporate into the docs (one from a reply to something else like 3 years ago):
http://www.postcount.net/forum/showthread.php?231545-Exploits-glitches-and-various-nefarious-powergaming-techniques
https://steamcommunity.com/app/245450/discussions/0/4826187053915490046/
https://steamcommunity.com/app/245450/discussions/0/3490879077211691977/

If I could install cheat engine myself and test the numbers, I would, but my real life job prevents me from installing untrusted software like that, esp. anything from Russia. If I can get a configuration of Wizardry 8 running in a VM, I'll get Cheat Engine and v1.28 running in that, but VirtualBox is all sorts of messed up at the moment for 3D software.

I am a programmer for eCommerce sites, but I have quite a lot of x86 & 6502 assembly programming experience as well. I bring this up, because I think I'd rather just use Ghidra and disassembly instead, though I've done a complete game disassembly on an old Atari RPG (Alternate Reality: The Dungeon), partly with a disassembler I had to write myself, and that took about 2 months to get to 100% understanding of everything on a game that ran on 48KB of RAM, so I'm under no illusion that trying to figure everything out in Wizardry 8 would be remotely fast.

In any case, the sources I have used so far in the document are listed in the main document, and are:
Wizardry 8's Manual
Flamestryke's Wizardry 8 Guide: https://www.zimlab.com/wizardry/recovered/flamestryke/wizardry8/flamestrykes_w8.html
peddroelm's guide and all links from it to other Steam forums: https://steamcommunity.com/sharedfiles/filedetails/?id=899973393
And three additional steam posts from kaymarciy and Uncle AI:
https://steamcommunity.com/app/245450/discussions/0/2139714324763372941/
https://steamcommunity.com/app/245450/discussions/0/2244426820396642796/
https://steamcommunity.com/app/245450/discussions/0/2139714324759466927/
Cosmic Forge Editor (is there a better link for it? The official site is moved or just gone):
https://www.zimlab.com/wizardry/mods/cosmic.htm

There is also a lot of personal data that I have included or calculated on my own that I could not find anywhere. Some of it really simple, like what negative effects there are from really low Stamina, others required a lot of testing.
Horpner Sneed Dec 12, 2023 @ 12:25pm 
You might find some things searching for posts by Silicoid as well, another excellent Wizardry 8 reverse engineer.
Zolaerla Dec 16, 2023 @ 6:16pm 
After messaging Zergs a bit about the missing information, I decided to try learning how to use Ghidra to look at the game's source to answer yet more questions I kept having. Since the data wasn't matching on Skill Gain Rolls (what I call SGRs for short), I decided to start there. Just commenting/renaming data for that one function has already shown me that the information is incomplete even for something as simple as this.

There are some additional parameters that need further investigation into this, but the equation that's been passed used to test if a skill gain occurs is wrong.

The wrong version being passed around is:
SkillGainRoll = ((100 - Skill) * (Attr1 + Attr2) / 2) / 100

This is incomplete. For example, if this is applied to a skill at 99 and both attributes are not 100, then you would have a Roll of 0 due to how processors round down on integer math.

In fact, the ASM requires the roll to be a minimum of 1, so you will always have at least a 1% chance of getting a skill gain.

The second problem is that this value is divided by 2 for expert skills, which means they level up a lot more slowly. So the real equation(s) come out to:
SkillGainRoll = Max(((100 - Skill) * (Attr1 + Attr2) / 2) / (IsExpertSkill ? 200 : 100), 1)

As before a roll from 0 to 99 is used, and if the roll is less than SkillGainRoll, the skill is increased.

I'm interested in checking out how the actual # of SGRs are calculated, and will incorporate that info into the docs once I start getting more concrete information.
Zergs Dec 17, 2023 @ 6:16am 
Interesting finding on the 1/2 speed training for Expert Skills.

I sent you a handful of spreadsheets and my raw data log from Peddroelm's test script. One thing I couldn't figure out is what governs how many training rolls you get for weapon training at the end of each round. It seemed to have some random factor. For spells, however, I felt confident of the # of training rolls based on kaymarciy's SL+PL and (SL+PL+2)/4 formulas.
Last edited by Zergs; Dec 17, 2023 @ 6:18am
Zolaerla Dec 17, 2023 @ 9:54pm 
@Zergs - Thank you! I got the email with the attachments. It'll be nice to be able to use your data to test all of the equations I find going through the source for this.

This weekend, I spent too long in Ghidra today. Good GOD the asm is so scrambled by the compiler's optimizer, it takes a lot more time to go through than I was hoping because everything is non-sequential... and the Wizardry 8 coders used humongous functions that definitely do not follow the DRY principle.

Anyways, I was tracing everywhere that skill gains happen, and haven't finished yet. Some parts are incomplete, but what I have found:

Mythology: When IDing an enemy, it absolute always gives 10 SGRs... it's hard coded that way.

Snake Speed: When starting each round, 1 SGR for Snake Speed is rolled.

Casting Spells: I found casting spells, and can now verify with the code that you appear to be 100% correct! Not only that, but if the character has Power Cast unlocked, it also gets (SL+PL+2)/4 SGRs.

Artifacts: IDing items is wonky because the value of "To ID" is stored as 0 to 20 in the game data, and your character's Artifacts skill is divided by 6 to compare to that (so a range of 0 to 120). As you saw, you always get 2 SGRs, so long as your skill isn't more than 18 above the minimum. At 18 above, though, you also seem to ID the cursed state.

Stealth: Stealth is in a giant complex function, so I'm not 100% certain, but when it DOES try to roll, it only makes 1 SGR 50% of the time. I think it happens every time that character gets attacked.

Communication: Haven't figured out the conversation function yet, but sometimes you get 8 SGRs and other times you get 5 SGRs... not sure why yet.

Pickpocket: Haven't fully parsed it yet either. Two different parts of pickpocketting give 5 SGRs, but I don't know if you can line them up to get both at this time.

Critical Strike / Power Strike / Eagle Eye: 1 SGR every hit I think. Again, in a giant, confusing function, but that appears accurate.

Iron Skin: There are three places that can cause 1 SGR for Iron Skin, and they all seem to be just when the character is getting hit. The code did answer one question for me though: no matter how high your DA gets, you can never get health back from getting hit, cause they do account for that!
peddroelm Dec 19, 2023 @ 11:31pm 
@Zolaerla 2 personal requests :)

1) could you make a basic how to video on how you're debugging Wiz8 functions using Ghidra ?
2) please use your (considerable) skills to also take a look at how magical damage is calculated ..
Zolaerla Dec 20, 2023 @ 12:46am 
@peddroelm - Oh, I haven't seen you on the forums before! You're my inspiration to even get this whole thing started, so it's awesome that you're still around. I don't use CheatEngine, but there is so much info in your .ct logging script that helped me a TON to get started in Wiz8 in Ghidra since I had documented details about where various things were in the source code. The documentation on the data structures is very, very helpful!

1) I have been working with assembly code off and on since about 1994 when I started making hobby MS-DOS games with TASM... have made complete games in pure ASM, though nothing I could sell since by the time I got "good" at it, it was 1996, when nobody wanted DOS games anymore. I don't run Wiz8 stuff in a debugger or the like, I just follow the ASM. It's just so scrambled, it takes me a while to decipher it, esp. with all of the fast divides and interwoven code. The C code it decompiles is very buggy, but it does named constants better than the ASM side and it deciphers some of the weird fast divides so I can cross-compare with what I'm seeing in the raw ASM. I am not certain what I could offer to help with debugging.

2) I absolutely want to figure out how magic damage is calculated, but also to answer some questions people like Zergs and mpnorman have had, such as why the resistance breaking is weaker for some spells than others. For me, I've been just trying to nail down the skill gain first since I have so many weird teams that I've made that need to gain all sorts of skills to test weird things, but yep, I definitely want to try to figure that one out.

Should I maybe start a separate thread about things we want answered from the source? I'd just be posting updates to the docs here then.
peddroelm Dec 20, 2023 @ 2:51am 
Originally posted by Zolaerla:
..
Should I maybe start a separate thread about things we want answered from the source? I'd just be posting updates to the docs here then.

is it still a long list of unknowns at this point ?
If we want precise and accurate damage /dice rolls calculations .. probably ... Condition effects on player units / monsters / etc ...

Don't have a lot of spare time to put into this at the moment ..but would still appreciate some info on Ghidra operation .. With live debugging ..one can find a value and trip the code that accesses it (find the relevant code) .. How do you find the interesting/relevant functions in ghidra ? By function signature ? ( go through all functions that take n number of parameters ? .. must be a lot of them for every n ... No idea .. Then once you do find a relevant function .. can you grok it by code alone ? Can you 'feed' it altered entry parameters to see which branches execute / what in-game output ? ) .. Doing it without executing code seems so much more difficult :) .. No data structures in memory to look at ..(some of them are volatile .. require code breaks / step by step execution to 'see' how they change after every line of code execution .. )
Last edited by peddroelm; Dec 20, 2023 @ 2:58am
GreatMage Dec 27, 2023 @ 7:02am 
Originally posted by Zolaerla:
If I could install cheat engine myself and test the numbers, I would, but my real life job prevents me from installing untrusted software like that, esp. anything from Russia. If I can get a configuration of Wizardry 8 running in a VM, I'll get Cheat Engine and v1.28 running in that, but VirtualBox is all sorts of messed up at the moment for 3D software.


There is also a lot of personal data that I have included or calculated on my own that I could not find anywhere. Some of it really simple, like what negative effects there are from really low Stamina, others required a lot of testing.
Open the file "\Patch128_README\Fan patch 1.28 provides a lot of additional features for Modders.doc" - follow steps 14.0 and 14.1 to activate developer mode.

You can find out what resistance the sphere has from negative spells only by pressing the "CTRL+SHIFT+F2" button from step 29.


Originally posted by Zolaerla:
Cosmic Forge Editor (is there a better link for it? The official site is moved or just gone):
https://www.zimlab.com/wizardry/mods/cosmic.htm
The "Tiny Hut" website was permanently removed because another hosting company bought the rights to the old hosting and removed the free hosting.
Therefore, Mad'god is forced to create another site https://spershin.wixsite.com/mad-god-tiny-hut/cosmic-forge

However, the eternal live forum "tapatalk.com" for Cosmic Forge, site https://www.tapatalk.com/groups/cosmicforge/.
There on the CF forum site, I left some comments on the technical documentation for Wizardry 8.




Originally posted by Zolaerla:
Over the last few months, I have been putting together all of the information I can find about Wizardry 8 together into a collection of LibreOffice documents. This is eating up enormous amounts of time, but it's starting to shape up to what I want the end result to be, and now that several of the more complex parts are completed, and I apparently keep running into old data vs new, I figured I'd post this in case anybody else is interested in having way more information than anybody needs about this game.

For a long time, I tried a full decoding of “unknown parameters” for “Monster Editor”, “Projectile Editor”, “Spell Editor” to report in the Mad'god forum and the next version of Cosmic Forgre 4.25 has new options and a greatly abbreviated “Unknown parameters”.

Here I will share information:
1)
In Cosmic Forge -> Monster Editor -> Levels:

There are 4 Levels fields.
Field 1 is the NPC level (protection from charm, protection from theft, protection from make sure, difficulty determining the characteristics of monsters). Since March 10, 2019, I have discovered the influence of protection from damage and enchantment spells.
Field 2 - unused.
Field 3 - level of the real monster (there is a monster in the location; monster generation).
4 field - unused.


2) NPC EDITOR items formula price.xls
https://disk.yandex.ru/d/P0onHZ5fSi4HMg

I wanted to suggest implementing fields in the “price calculator” table in CF -> NPC Editor -> Trader Parameters so that the new version of Cosmic Forge 4.29 is released. But then he will implement it, first gradually part of the implementation and fixes for the next version.


-------
Are you planning to not only decipher the balance formula, but in the future create your own mod for Wizardry 8? - as the author Modder Flamestryke did.
Zolaerla Dec 28, 2023 @ 6:20pm 
Originally posted by peddroelm:
Don't have a lot of spare time to put into this at the moment ..but would still appreciate some info on Ghidra operation .. With live debugging ..one can find a value and trip the code that accesses it (find the relevant code) .. How do you find the interesting/relevant functions in ghidra ? By function signature ? ( go through all functions that take n number of parameters ? .. must be a lot of them for every n ... No idea .. Then once you do find a relevant function .. can you grok it by code alone ? Can you 'feed' it altered entry parameters to see which branches execute / what in-game output ? ) .. Doing it without executing code seems so much more difficult :) .. No data structures in memory to look at ..(some of them are volatile .. require code breaks / step by step execution to 'see' how they change after every line of code execution .. )

Ghidra does most of this automatically if you run the full analysis on it.

For functions, every function is split out with a fake name with its address, and a list of every piece of code that references it. It lets you rename functions, so to get started I looked at the Cheat Engine logging you wrote to latch into the "Skill Gain Test" code, renamed that to something like PC_TestSkillGain, and then everywhere in the source now says
call PC_TestSkillGain
and I can go to absolutely ever point in the code that calls it using the XREFs in Ghidra.

You can define Enums, Structs, etc. right in Ghidra, and latch those into memory addresses. For example, for the PC data, I created a PC_CharStruct and for the pointer have it be a PC_CharStruct * and references to it work in Ghidra, even with the multipliers to access all 8 characters. I haven't had anything to report because I'm setting up tons of these sorts of data structures, and I've also been so insanely busy IRL due to taking one freakin' day off (self-employment sucks sometimes).

When I look at ASM, yes, I understand what it's doing once I get some named constants tossed in there (and with more work without), though the really scrambled (due to the compiler optimization) ASM takes longer. Ghidra lets you add all the comments you want as well, so I can add more details where necessary.

I really don't need to debug the code to tell what it's doing. Heck, I've already found a couple minor bugs from what little I've looked at, but they didn't actually affect anything noticeable in game so I can see why they never found them in their own testing.
Zolaerla Dec 28, 2023 @ 6:30pm 
Originally posted by GreatMage:
Are you planning to not only decipher the balance formula, but in the future create your own mod for Wizardry 8? - as the author Modder Flamestryke did.

Hiya GreatMage! I haven't even been able to get 1.28 to download, because I have to enable Russian sites which I absolutely do not trust (I use NoScript in my browser). I haven't worked on trying to get Wiz8 working in a VM, but probably will eventually and will play with it in there.

I'm only interesting in fully documenting how v1.2.4 of the official game functions. I have made several docs similar to this for other older games, and though fan patches are interesting (or really awful in the case of Master of Magic), I am not interesting in documenting how they function.

I have no interest in making mods for the game. To me, this is more "solving one heck of an esoteric puzzle" than wanting to do much with all that knowledge afterwards, aside from making some bizarre parties. I used to like playing puzzle games... then I disassembled another old game, "Alternate Reality: The Dungeon" from 1987, and doing that just makes all puzzle games just so, so simplistic in comparison. eg, I played "Curse of the Obra Dinn" at the same time I was disassembling the game... huh, looking at a weird fact frozen in time (source) and trying to figure out what is going on by naming everybody (naming vars/functions) and how they died (what the code is doing). Meh... I have weird-ass hobbies.
GreatMage Jan 4, 2024 @ 2:01am 
Originally posted by Zolaerla:
Originally posted by GreatMage:
Are you planning to not only decipher the balance formula, but in the future create your own mod for Wizardry 8? - as the author Modder Flamestryke did.
Hiya GreatMage! I haven't even been able to get 1.28 to download, because I have to enable Russian sites which I absolutely do not trust (I use NoScript in my browser). I haven't worked on trying to get Wiz8 working in a VM, but probably will eventually and will play with it in there.
Hiya!
The site "yandex.com" is a search engine competitor with "google.com"
The site "disk.yandex.ru" has its cloud file storage as "drive.google.com".
However, "drive.google.com" does not have a "download" counter, unlike "disk.yandex.ru". Yandex file, Wizardry 8 fan-patch 1.28 build 6200 - 631 people downloaded.

I have Opera 49 plus the "AdGuard" extension. Would you try installing the "AdGuard" extension?


Originally posted by Zolaerla:
I'm only interesting in fully documenting how v1.2.4 of the official game functions.
Version 1.24 removed a lot of the "cheat codes and developer mode" code, except for 1.0. Long ago Fan patch 1.28 has already restored approximately 60% of the removed assembler for "cheat codes".

Originally posted by Zolaerla:
To me, this is more "solving one heck of an esoteric puzzle" than wanting to do much with all that knowledge afterwards, aside from making some bizarre parties.
If you like to solve the most difficult riddle, then try “Cosmic Forge -> Location Editor -> Modify Location Dynamic Object -> Lock/Trap”, also debugging. The unknown variable "n1,bt1,bt2,bt3,bt4,bt5,bt7,bt8,bt9" affects the difficulty and increases the time and attempt. Can you decrypt? Also the "Trap" option with the "Difficulty" option affects different negative spells.

If you don’t want to do it, don’t.
Last edited by GreatMage; Jan 4, 2024 @ 2:01am
< >
Showing 1-13 of 13 comments
Per page: 1530 50