I have submitted the exe to Microsoft for analysis and the scan on their website was clean. I'm now waiting for them to confirm and hopefully sort it out in the next definition update.
UPDATE FROM MICROSOFT: 3xdasav.exeSubmission ID: d4886243-59e9-43e4-a0b3-de004f4498c3 Status: Completed Submitted by: XXXXXXXX Submitted: Jan 23, 2021 09:03:46 PM User Opinion: Incorrect detection Analyst comments: We have removed the detection. Please follow the steps below to clear cached detection and obtain the latest malware definitions.
1. Open command prompt as administrator and change directory to c:\Program Files\Windows Defender 2. Run “MpCmdRun.exe -removedefinitions -dynamicsignatures” 3. Run "MpCmdRun.exe -SignatureUpdate"
Alternatively, the latest definition is available for download here: https://www.microsoft.com/en-us/wdsi/definitions
To anyone interested, I discovered how to edit the bitterblack armors bonuses. Prior to that, I only tested the enchantment on bitterblack armors themselves, but it's possible they'd work in ANY armor if you tag them well. Besides, take into consideration that pawns can be banned, so I recommend changing the bonuses to what can be applied to the said body piece. It works like this: Use the 3XDASAV editor, and open the .xml on the same folder, get the armor's ID and search it in the .xml (exact match for easier job). You'll want a entry that's in the upper part of the file (very likely the first match), it should look like this:
mNum is the number of items, mItemNo is the ID, mFlag is the rarified/enhancement tier. mChgNum, mDay1, mDay2 and mDay3 are the values that change from BBI armors to normal armors. For non LVL2/3 armors they're all 0, but for LVL2/3 they are all 65535 except mDay2, which is the identifier of the bonus. If you're changing from a normal armor to a BBI armor in the editor, the four of them should be 0, so I recommend changing all to 65535 except mDay2. I got no idea about the last 3, but the mMutationPool is always 0 and the last two can be either 0 or 1, I didn't notice a pattern there. To the big star of the show, the mDay2 values: They range from 0 to 16 (17 armor pieces). Anything outside that will either be null or another kind of bonus (only if other armors/weapons bonuses use the same mday2 tag, but I'm not interested on checking that).
Head armor: 0 to 3 Chest is 4, 6, 7 and 13 Arms is 8, 9, 10 and 11 Legs is 5, 12, 14, 15 and 16
Also, notice that some bonuses are unavailable in some sets (depending on vocation), so you should check the wiki on which ones a legit piece could have a chance of having.
The bonuses themselves: 0 Extends the duration of enemies hold 1 Boost strength/magic when noticed by enemies 2 Slight bow damage reduction 3 Bow damage reduction 4 Slightly heal pawns nearby 5 Slight carry bonus 6 Small health regen 7 Health Regen 8 Shield bonus 9 Extends attribute boosts 10 Slightly restores stamina on kill 11 Restores stamina on kill 12 Extends holds on enemies 13 Debilitations heal faster 14 Boosts carry weight 15 Improves speed while casting 16 Gives you stability to wind (immune to chimera howl and dragon wing's beat, but not terrain wind, see wiki for details)
Of course, I take no responsibility on you losing your fun or your pawn being banned for over-cheating. Albeit being banned for it is quite hard to happen IMHO.
Update: all the bonuses I've meddled did work well, at least on main character and with pieces that would normally benefit from them.
I'm mostly sure it won't ban, I guess bans are mostly from big and sudden XP/RIFT/vocation/stats changes, if at all. But if my pawn gets banned on this I'll post here. From what I'm seeing the game doesn't catch much of armor equipments, as long as the bonuses belong in the same pieces as they should and belong in BBI armors. Plus, it's always a good idea to be offline and disable steam cloud saves during testing, and do tons of backups.
I'm currently testing and it works fine. The Bonuses you describe are all correct, but a bit more limited. "?8) Shield bonus" for example, it is correct that it can only be on arms, but not on all. Carrion Arms can't have those (makes sense because it's caster gear) I still try to figure out how i can implement it without creating a sure way to be banned, there is so much potential for something going wrong :-(
Im a little confused. After opening the 3xDAsav, we are supposed to then edit the xml using notepad then save on notepad? or save using the save editor? The changes Im making to the armor dont seem to be appearing in game.
Right, for this you have to change the Armorbonus in Notepad++, save there and than finalizes in 3xDAsav. Because i developed 3xDAsav without knowing about it, i can't add that feature at the moment. I have to do a lot of rewrites at an earlier stage.
Yep that did it. Opened the xml and saved changes after opening the 3xDAsav. Then pressed save and exit and boom it worked. Thanks my guy, you rock. You too Baconsama
This example is a Sorcerer's Band for Bolide/Gicel. What we see is that these rings use data.mChgNum & data.mDay1 instead and have the other 2 "data.mDay" values at 65535. The two values are separate skill ID's and don't need to be a normally valid match. This example is an unmodified one so of course it is valid, but I've also got one to work combining Brontide with Blitz Strike. As long as you enter two valid skill ID's it shouldn't matter which you put under which of the two values; it only determines the order for the tooltip.
I'm working on finding out as many spell ID's as I can to share them in a comprehensive list.
102 Savage Lunge/Indomitable Lunge/Calamitous Lunge 104 Savage Lash/Indomitable Lash/Calamitous Lash 106 Spark Slash/Corona Slash/Ecliptic Slash 109 Arc of Might/Arc of Deliverance/Arc of Obliteration
Thanks for unlocking the thread WhiteRebirth (and of course infinite thanks for your mod!). Inspired by predwin's work, as he was before by baconsama's, I've dug deeper into Master rings IDs. Here's a summary of what I found.
- data.mItemNo is the item ID, 1155 for all Master rings. - data.mChgNum determines which combination of stats they'll give. - data.mDay1 determines the numerical value of the first stat. - data.mDay2 determines the numerical value of the second stat. - data.mDay3 is always set at 65535.
So, this ring gives 89 strength and 90 blindness resistance. Now to get the ring you want, the crucial value is its data.mChgNum. I started testing with a fire/sleep ring set at 4104 and worked my way up and down from there. The combinations are grouped by second stat (the same one data.mDay2 modifies), while the first mainly follows the same stats order as in the Status menu, with some exceptions. This means 4104 = fire/sleep, 4105 = ice/sleep, 4106 = thunder/sleep, etc. The ID stat order is as follows: hp, stam, str, mag, def, mag.def, knockdown, stagger, fire, ice, thunder, holy, dark, poison, torpor, blindness, sleep, drenched, tarred, possession, skill stifling, cursed, petrification, silence.
IDs before hp and after silence get us some strange non-functional hybrid rings boasting skills with numerical values (e.g. [Blink Strike/Burst Strike] 10 drenched 89). These crash the game if you move in the menu while inspecting them, no matter the skill value (tested data.mDay1 set at 1, 65535 and some in between). Some IDs also give you a "This ring augments basic attributes. 10." I only quickly tested these but could not find any effect whatsoever on any stat.
To sum up, we've got 24 relevant values followed by huge gaps of non-functional ones. After some trial and error I narrowed these down to 232 IDs. Yep, that and our 24 makes a byte! (Could have saved hours of my life if I knew the first thing about programming).
The order of the second stat (group by group) is the same as the first stat (inside each group), thus we've got everything we need to craft the ring of our dreams! Say we're looking for a ice/thunder, starting with my fire/sleep (ID 4104) from before. We need to subtract 8 to reach the start of its group (hp/sleep), then subtract 6 x 256 to reach the ---/thunder group, and finally add 9 to reach ice inside the thunder group (ice/thunder) = 2569 is our magic number! Would work equally well with a thunder/ice at 2314. (Quirky thing is the combinations are reversed ingame, ice/thunder reads as thunder - ice and thunder/ice as ice - thunder).
Preceptor ring IDs of equivalent combinations are offset by a bunch but I didn't bother looking into it further.
For documentation purposes, here are the tested values.
Spoiler:
Show
2060 dark fire 2314 thunder ice 4094 [Blink Strike/Burst Strike] sleep ||crash when inspecting+moving in menu > whether mDay1 at 1 or 65535, non-working hybrid 4095 [Blink Strike/Burst Strike] sleep 4096 hp sleep 4097 sta sleep 4098 str sleep 4099 mag sleep 4100 def sleep 4101 magdef sleep 4102 knockdown sleep 4103 stagger sleep 4104 fire sleep 4105 ice sleep 4106 thunder sleep 4107 holy sleep 4108 dark sleep 4109 poison sleep 4110 torpor sleep 4111 blindness sleep 4112 sleep sleep 4113 drenched sleep 4114 tarred sleep 4115 posses sleep 4116 skill.stif sleep 4117 curse sleep 4118 petri sleep 4119 silence sleep 4120 bas.attrib sleep > no effect whatsoever on any stat 4121 bas.attrib sleep 4122 bas.attrib sleep 4132 bas.attrib sleep 4182 bas.attrib sleep 4282 [Flesh Skewer/Soul Skewer] sleep 4296 bas.attrib sleep 4350 [Blink Strike/Burst Strike] sleep 4352 hp drenched 4365 poison drenched 4375 silence drenched 4385 bas.attrib drenched 4400 [Funnel Sigil/Vortex Sigil] drenched 4582 [Blink Strike/Burst Strike] drenched 4596 [Blink Strike/Burst Strike] drenched 4650 [Blink Strike/Burst Strike] tarred 4696 [Downthrust/Downcrack] tarred 5649 drenched petri
preceptor 5649 dark blindness virtuoso 5642 thunder petrif
For example: 4104 from dec to dex is 1008. We can see that "08" is the 9th stat, aka. fire, and "10" is the 17th stat, aka. sleep. Since the game reads the least significant digits first, fire is put before sleep. "0810" or "2064" in dec should be sleep/fire.
For some reason i can't level my arisen and pawn vocations levels. I set it to 9 in the editor but it's back to the original level when i load the game
Just tested with cloudsave off and the problem persists.i have MK alternate stat growth and World Difficulty by Lefein installed, could any of those mods be causing it?
Both are in there! ID="1044" Name ="Hellfire Greaves" ID="882" Name ="Hellfire Helm" ID="1146" Name ="Hellfire Cloak" ID="897" Name ="Hellfire Armor" ID="966" Name ="Hellfire Gauntlets"
Can this tool be used to change quest states? I missed talking to the duchess and am now locked out of her questline. I'd love to fix that without starting a new game.
I searched all the posts and googled a bit and couldn't figure out on how to add rings to my Arisen? I'm only interested in adding Ring of Perseverance(1151), but also tried some other item codes, but no rings can be added? Might be this due to my character being lvl 1 or something?
At least I got the Asura Armor added, so some bonus to DP accumulation is available from the start without cheesing the BBI.
421 comments
UPDATE FROM MICROSOFT:
3xdasav.exeSubmission ID: d4886243-59e9-43e4-a0b3-de004f4498c3
Status: Completed
Submitted by: XXXXXXXX
Submitted: Jan 23, 2021 09:03:46 PM
User Opinion: Incorrect detection
Analyst comments:
We have removed the detection. Please follow the steps below to clear cached detection and obtain the latest malware definitions.
1. Open command prompt as administrator and change directory to c:\Program Files\Windows Defender
2. Run “MpCmdRun.exe -removedefinitions -dynamicsignatures”
3. Run "MpCmdRun.exe -SignatureUpdate"
Alternatively, the latest definition is available for download here: https://www.microsoft.com/en-us/wdsi/definitions
Prior to that, I only tested the enchantment on bitterblack armors themselves, but it's possible they'd work in ANY armor if you tag them well.
Besides, take into consideration that pawns can be banned, so I recommend changing the bonuses to what can be applied to the said body piece.
It works like this:
Use the 3XDASAV editor, and open the .xml on the same folder, get the armor's ID and search it in the .xml (exact match for easier job). You'll want a entry that's in the upper part of the file (very likely the first match), it should look like this:
<class type="sItemManager::cITEM_PARAM_DATA">
<s16 name="data.mNum" value="1" />
<s16 name="data.mItemNo" value="1044" />
<u32 name="data.mFlag" value="1027" />
<u16 name="data.mChgNum" value="65535" />
<u16 name="data.mDay1" value="65535" />
<u16 name="data.mDay2" value="16" />
<u16 name="data.mDay3" value="65535" />
<s8 name="data.mMutationPool" value="0" />
<s8 name="data.mOwnerId" value="1" />
<u32 name="data.mKey" value="1" />
mNum is the number of items, mItemNo is the ID, mFlag is the rarified/enhancement tier.
mChgNum, mDay1, mDay2 and mDay3 are the values that change from BBI armors to normal armors. For non LVL2/3 armors they're all 0, but for LVL2/3 they are all 65535 except mDay2, which is the identifier of the bonus.
If you're changing from a normal armor to a BBI armor in the editor, the four of them should be 0, so I recommend changing all to 65535 except mDay2.
I got no idea about the last 3, but the mMutationPool is always 0 and the last two can be either 0 or 1, I didn't notice a pattern there.
To the big star of the show, the mDay2 values:
They range from 0 to 16 (17 armor pieces). Anything outside that will either be null or another kind of bonus (only if other armors/weapons bonuses use the same mday2 tag, but I'm not interested on checking that).
Head armor: 0 to 3
Chest is 4, 6, 7 and 13
Arms is 8, 9, 10 and 11
Legs is 5, 12, 14, 15 and 16
Also, notice that some bonuses are unavailable in some sets (depending on vocation), so you should check the wiki on which ones a legit piece
could have a chance of having.
The bonuses themselves:
0 Extends the duration of enemies hold
1 Boost strength/magic when noticed by enemies
2 Slight bow damage reduction
3 Bow damage reduction
4 Slightly heal pawns nearby
5 Slight carry bonus
6 Small health regen
7 Health Regen
8 Shield bonus
9 Extends attribute boosts
10 Slightly restores stamina on kill
11 Restores stamina on kill
12 Extends holds on enemies
13 Debilitations heal faster
14 Boosts carry weight
15 Improves speed while casting
16 Gives you stability to wind (immune to chimera howl and dragon wing's beat, but not terrain wind, see wiki for details)
Of course, I take no responsibility on you losing your fun or your pawn being banned for over-cheating. Albeit being banned for it is quite hard to happen IMHO.
If i can find a way to make sure to avoid a ban i'll try to implement this.
Update: all the bonuses I've meddled did work well, at least on main character and with pieces that would normally benefit from them.
I'm mostly sure it won't ban, I guess bans are mostly from big and sudden XP/RIFT/vocation/stats changes, if at all. But if my pawn gets banned on this I'll post here.
From what I'm seeing the game doesn't catch much of armor equipments, as long as the bonuses belong in the same pieces as they should and belong in BBI armors. Plus, it's always a good idea to be offline and disable steam cloud saves during testing, and do tons of backups.
"?8) Shield bonus" for example, it is correct that it can only be on arms, but not on all. Carrion Arms can't have those (makes sense because it's caster gear)
I still try to figure out how i can implement it without creating a sure way to be banned, there is so much potential for something going wrong :-(
<class type="sItemManager::cITEM_PARAM_DATA">
<s16 name="data.mNum" value="1"/>
<s16 name="data.mItemNo" value="1890"/>
<u32 name="data.mFlag" value="3"/>
<u16 name="data.mChgNum" value="227"/>
<u16 name="data.mDay1" value="228"/>
<u16 name="data.mDay2" value="65535"/>
<u16 name="data.mDay3" value="65535"/>
<s8 name="data.mMutationPool" value="0"/>
<s8 name="data.mOwnerId" value="0"/>
<u32 name="data.mKey" value="10"/>
This example is a Sorcerer's Band for Bolide/Gicel.
What we see is that these rings use data.mChgNum & data.mDay1 instead and have the other 2 "data.mDay" values at 65535.
The two values are separate skill ID's and don't need to be a normally valid match. This example is an unmodified one so of course it is valid, but I've also got one to work combining Brontide with Blitz Strike. As long as you enter two valid skill ID's it shouldn't matter which you put under which of the two values; it only determines the order for the tooltip.
I'm working on finding out as many spell ID's as I can to share them in a comprehensive list.
Swordsman:
42 Downthrust/Downcrack/DownCrush
Daggerist:
152 Scarlet Kisses/Hundred Kisses/Thousand Kisses
Staff-Bearer:
212 Levin/High Levin/Grand Levin
214 Frigor/High Frigor/Grand Frigor
215 Brontide/High Brontide/Grand Brontide
Staff Enchanter:
223 Ice Boon/Ice Affinity/Ice Pact
224 Thunder Boon/Thunder Affinity/Thunder Pact
225 Holy Boon/Holy Affinity/Holy Pact
226 Dark Boon/Dark Affinity/Dark Pact
Fighter:
47 Hindsight Slash/Hindsight Sweep/Hindsight Strike
274 Sheltered Spike/Sheltered Assault/Sheltered Fusillade
Strider
159 Stepping Stone/Leaping Stone/Soaring Stone
353 Cloudburst Volley/Downpour Volley/Hailstorm Volley
Mage
215 Brontide/High Brontide/Grand Brontide
220 Anodyne/High Anodyne/Grand Anodyne
Warrior:
104 Savage Lash/Indomitable Lash/Calamitous Lash
106 Spark Slash/Corona Slash/Ecliptic Slash
109 Arc of Might/Arc of Deliverance/Arc of Obliteration
Ranger:
403 Foot Binder/Body Binder/Secure Binder
407 Whirling Arrow/Spiral Arrow/Corkscrew Arrow
Sorcerer:
228 Gicel/High Gicel/Grand Gicel
229 Fulmination/High Fulmination/Grand Fulmination
230 Seism/High Seism/Grand Seism
Assassin:
58 Gouge/Dire Gouge/Deadly Gouge
164 Wind Harness/Gale Harness/Tempest Harness
165 Back Kick?Escape onslaught/Shirking Offensive
278 Staredown/Showdown/Crackdown
356 Keen Sight/Lyncean Sight/Eagle Sight
Magick Archer:
167 Backfire/Immolation/Flameshroud
Magick Bowman
361 Explosive Bolt/Explosive Rivet/Explosive Volley
363 Magickal Flare Magickal Gleam Magickal Radiance
Mystic Knight:
54 Stone Grove/Stone Forest/Stone Jungle
236 Sopor/High Sopor/Grand Sopor
320 Holy Glare/Holy Furor/Holy Retribution
Magick Shieldman
311 Icecounter/Frost Riposte/Blizzard Feint
312 Thundercounter/Thunder Riposte/Boltstorm Feint
313 Holycounter/Blessed Riposte/Hallowed Feint
314 Darkcounter/Abyssal Riposte/Desecration Feint
Shield Enchanter:
316 Ice Enchanter/Frost Trance/Blizzard Invocation
317 Thunder Enchanter/Lightning Trance/Boltstorm Invocation
318 Holy Enchanter/Blessed Trance/Hallowed Invocation
319 Dark Enchanter/Abyssal Trance/Desecration Invocation
Inspired by predwin's work, as he was before by baconsama's, I've dug deeper into Master rings IDs. Here's a summary of what I found.
Let's take a non-modded example in DDDA.sav.xml:
<class type="sItemManager::cITEM_PARAM_DATA">
<s16 name="data.mNum" value="1"/>
<s16 name="data.mItemNo" value="1155"/>
<u32 name="data.mFlag" value="3"/>
<u16 name="data.mChgNum" value="3842"/>
<u16 name="data.mDay1" value="89"/>
<u16 name="data.mDay2" value="90"/>
<u16 name="data.mDay3" value="65535"/>
<s8 name="data.mMutationPool" value="0"/>
<s8 name="data.mOwnerId" value="0"/>
<u32 name="data.mKey" value="4"/>
</class>
- data.mItemNo is the item ID, 1155 for all Master rings.
- data.mChgNum determines which combination of stats they'll give.
- data.mDay1 determines the numerical value of the first stat.
- data.mDay2 determines the numerical value of the second stat.
- data.mDay3 is always set at 65535.
So, this ring gives 89 strength and 90 blindness resistance. Now to get the ring you want, the crucial value is its data.mChgNum. I started testing with a fire/sleep ring set at 4104 and worked my way up and down from there. The combinations are grouped by second stat (the same one data.mDay2 modifies), while the first mainly follows the same stats order as in the Status menu, with some exceptions. This means 4104 = fire/sleep, 4105 = ice/sleep, 4106 = thunder/sleep, etc.
The ID stat order is as follows: hp, stam, str, mag, def, mag.def, knockdown, stagger, fire, ice, thunder, holy, dark, poison, torpor, blindness, sleep, drenched, tarred, possession, skill stifling, cursed, petrification, silence.
IDs before hp and after silence get us some strange non-functional hybrid rings boasting skills with numerical values (e.g. [Blink Strike/Burst Strike] 10 drenched 89). These crash the game if you move in the menu while inspecting them, no matter the skill value (tested data.mDay1 set at 1, 65535 and some in between). Some IDs also give you a "This ring augments basic attributes. 10." I only quickly tested these but could not find any effect whatsoever on any stat.
To sum up, we've got 24 relevant values followed by huge gaps of non-functional ones. After some trial and error I narrowed these down to 232 IDs. Yep, that and our 24 makes a byte! (Could have saved hours of my life if I knew the first thing about programming).
The order of the second stat (group by group) is the same as the first stat (inside each group), thus we've got everything we need to craft the ring of our dreams! Say we're looking for a ice/thunder, starting with my fire/sleep (ID 4104) from before. We need to subtract 8 to reach the start of its group (hp/sleep), then subtract 6 x 256 to reach the ---/thunder group, and finally add 9 to reach ice inside the thunder group (ice/thunder) = 2569 is our magic number!
Would work equally well with a thunder/ice at 2314. (Quirky thing is the combinations are reversed ingame, ice/thunder reads as thunder - ice and thunder/ice as ice - thunder).
Preceptor ring IDs of equivalent combinations are offset by a bunch but I didn't bother looking into it further.
For documentation purposes, here are the tested values.
2314 thunder ice
4094 [Blink Strike/Burst Strike] sleep ||crash when inspecting+moving in menu > whether mDay1 at 1 or 65535, non-working hybrid
4095 [Blink Strike/Burst Strike] sleep
4096 hp sleep
4097 sta sleep
4098 str sleep
4099 mag sleep
4100 def sleep
4101 magdef sleep
4102 knockdown sleep
4103 stagger sleep
4104 fire sleep
4105 ice sleep
4106 thunder sleep
4107 holy sleep
4108 dark sleep
4109 poison sleep
4110 torpor sleep
4111 blindness sleep
4112 sleep sleep
4113 drenched sleep
4114 tarred sleep
4115 posses sleep
4116 skill.stif sleep
4117 curse sleep
4118 petri sleep
4119 silence sleep
4120 bas.attrib sleep > no effect whatsoever on any stat
4121 bas.attrib sleep
4122 bas.attrib sleep
4132 bas.attrib sleep
4182 bas.attrib sleep
4282 [Flesh Skewer/Soul Skewer] sleep
4296 bas.attrib sleep
4350 [Blink Strike/Burst Strike] sleep
4352 hp drenched
4365 poison drenched
4375 silence drenched
4385 bas.attrib drenched
4400 [Funnel Sigil/Vortex Sigil] drenched
4582 [Blink Strike/Burst Strike] drenched
4596 [Blink Strike/Burst Strike] drenched
4650 [Blink Strike/Burst Strike] tarred
4696 [Downthrust/Downcrack] tarred
5649 drenched petri
preceptor 5649 dark blindness
virtuoso 5642 thunder petrif
For example: 4104 from dec to dex is 1008. We can see that "08" is the 9th stat, aka. fire, and "10" is the 17th stat, aka. sleep. Since the game reads the least significant digits first, fire is put before sleep. "0810" or "2064" in dec should be sleep/fire.
All we need then is a hex-dec converter.
edit: nevermind i figure it out using dec to hex
ID="1044" Name ="Hellfire Greaves"
ID="882" Name ="Hellfire Helm"
ID="1146" Name ="Hellfire Cloak"
ID="897" Name ="Hellfire Armor"
ID="966" Name ="Hellfire Gauntlets"
At least I got the Asura Armor added, so some bonus to DP accumulation is available from the start without cheesing the BBI.