Install Steam
login
|
language
简体中文 (Simplified Chinese)
繁體中文 (Traditional Chinese)
日本語 (Japanese)
한국어 (Korean)
ไทย (Thai)
Български (Bulgarian)
Čeština (Czech)
Dansk (Danish)
Deutsch (German)
Español - España (Spanish - Spain)
Español - Latinoamérica (Spanish - Latin America)
Ελληνικά (Greek)
Français (French)
Italiano (Italian)
Bahasa Indonesia (Indonesian)
Magyar (Hungarian)
Nederlands (Dutch)
Norsk (Norwegian)
Polski (Polish)
Português (Portuguese - Portugal)
Português - Brasil (Portuguese - Brazil)
Română (Romanian)
Русский (Russian)
Suomi (Finnish)
Svenska (Swedish)
Türkçe (Turkish)
Tiếng Việt (Vietnamese)
Українська (Ukrainian)
Report a translation problem
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.
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.
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.
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!
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 ..
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.
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 .. )
You can find out what resistance the sphere has from negative spells only by pressing the "CTRL+SHIFT+F2" button from step 29.
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.
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.
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.
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.
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?
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".
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.