MetalStorm Progress Report (28 June 2016)

Information and updates for all other projects by Black Omen Productions (besides Shadow Empires): Namely Codename: MetalStorm, Anti-Balance, Ultimate Fixer and all versions of XyRAX

Moderators: Nefarius, Joel, Vendanna, Doombreed-x

Post Reply
User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

MetalStorm Progress Report (28 June 2016)

Post by Nefarius » Sat Dec 29, 2007 5:55 pm

This topic will serve as a better public change and progress log then the other topic with key features, as it keeps things organized. If you have questions about a recent implementation feel free to post it.

For older updates read: viewtopic.php?t=51604

All Vanilla (Player) Skills Recoded: 7th November, 2009.
CEL File Limit Removed: 11th May, 2011.
All Vanilla Shrines Recoded 3rd December, 2011
All Vanilla Item Events Recoded 3rd December, 2011
All Vanilla Active State Funcs Recoded 24th June, 2012
All Classic D2 AIs Recoded 24th June, 2012
All LoD AIs Recoded 2nd January, 2014
All Level Generation Code Replaced 2nd January, 2014
All Hireling Code Replaced 18th March 2015

MetalStorm 160628
(SYS) The compile data and time and the version number of the build are evaluated dynamically based on the timestamp in the PE header now (this is vastly superior to using __DATE__ which doesn't accept custom formating).
(SYS) The MetalStorm log is now logging times down to the millisecond.
(SYS) Removed the option to restrict the game to one CPU core from MetalStorm.DLL, an equivalent option was added to D2Run.EXE in 2015.
(SYS) Removed old and now unnecessary 9X-specific legacy junk from Nefex.cpp (such as options to disable NT-exclusive functions during patching). No point in keeping this because our graphics core will require DirectX 9+.
(SYS) All realtime calls to strftime have been replaced with calls to the more performant CTIME_Format which is restricted to doing exactly what we need it to.
(CORE) The Thaumaturgic Shrine now works the way it did in Diablo, that is it refills all previously opened chests of the current level.
(CORE) The Monster Shrine no longer checks the 'Height' column in MonGFX.txt to see wether something is eligible for upgrading, the other checks are sufficient to eliminate all undesired monsters.
(CORE) The Monster Shrine no longer checks wether the monster is in NU or WL modes (or RN which we added in 2011), it will consider any monster eligible for upgrades no matter what mode it is in (as long as it isn't dead or dying).
(CORE) Monster's upgraded by the Monster Shrine are removed from their pack unless they are the boss of the pack (previously we removed them even if they were the boss, but that didn't make a lot of sense).
(CORE) In vanilla a monster's AI type is not changed by Revive, Confuse and Conversion, this has been changed in order to make it easier to test wether a monster's AI is modified by something or not.
(CORE) A new implementation of UNITS_Find was written that unifies the client and server exclusive versions that are currently in use, this version abstracts the three client/server specific tests into a callback function. Writing this version gave me an opportunity to re-examine the vanilla implementation and its plethora of previously undocumented bugs (these are all documented below in the bugs section now).
(CORE) It is now possible to pass SITEM_Generate options to SITEM_SpawnItemsInTreasureClass, these are combined with any SITEM_Generate options specified by the TC itself (socketed, ethereal).
(CORE) Added a new CREATEITEMFLAG to SITEM_Generate that instructs the unique item selector to ignore wether the item already exists in the current session.
(CORE) The Exploding and Poison Shrines were revised, they now create 5-10 potions again (in vanilla they create 5-9 due to an off by 1 error) which are now using a TC. The missiles created by these shrines are more potent now (see below).
(CORE) Missiles and skills will from now one use code that is largely shared between client and server without define or template hacks, this will be accomplished using a callback table. Initial steps toward this have already been put into place and it is expected to come to full fruition once the revision ventures into the skill and missile code wholesale.
(CORE) The D2UnitMessage dispatching code was extended to allow any packet to be dispatched as a broadcast to all eligible clients. This will deprecate a whole series of shims that were previously required to broadcast such updates.
(CORE) The Glowing Shrine has been restored to its Hellfire behavior although it will not reduce your Experience unless you have enough for it to add 1 point to Energy.
(CORE) Hellforge.txt being a prototype of ItemLists.txt was merged into it for the time being (however when I get around to it these drops will be turned into a TC).
(CORE) Somewhat unlike the Diablo version our revised take on the Holy Shrine will warp you to a random room in the current level that is at least 20 tiles away from the shrine's room. This is not restricted to adjacent rooms, every accessible room in the current level is an eligible destination. If it choses to send you across the map it will.
(CORE) The Oily Shrine was overhauled and now does its phrase justice, it only grants a stat bonus if you survive the explosion triggered by the shrine. Instead of adding a bonus to two random stats it now adds +2 to your highest stat (if the stat is equal to or exceeds half the sum of your stats) or otherwise +1 to your two highest stats.
(CORE) Missiles can now be created by all unit types server side, this allows us to eliminate a whole class of shims that vanilla and metalstorm previously required to get missiles to emerge from objects.
(CORE) The Fascinating, Ornate and Sacred Shrines will automatically set the temporary skills they grant the player as the right mouse button skill. The skill level is now calculated as '(Level - LevelMin) / Divisor + Add' where Level refers to the dungeon level of the map and LevelMin refers to the minimum dungeon level the shrine can occur at, at dungeon level 99 the shrines currently add their skills at level 25.
(CORE) The Eldritch Shrine uses a novel approach to transform Healing and Mana into Rejuvenation Potions, instead of deleting and creating items it transforms them in place now.
(CORE) The Health and Mana Exchange Shrines were restored to their original behavior of taking half your current Mana or HP and adding 5 times as much to current HP or Mana respectively. The bug that allowed these unused shrines to leave a player with illegal Mana or HP values has been fixed.
(CORE) The Divine Shrine now uses a TC to determine what potions it will create for you (see below for more information). It also fully restores life and mana now like it did in Diablo.
(CORE) Using a Refilling or Health Shrine now updates your HP immediately for other clients in the game by calling SUNIT_UpdateHP.
(CORE) Items that receive a magical bonus to durability now display their durability in blue, the bonus is also shown in the item's modifier list.
(CORE) Items that had their durability modified by the Hidden Shrine are now marked with ITEMFLAG_MAGICAL if they're not already of a magic quality.
(CORE) Shrine functions now take pShrinesAUX instead of pShrinesTXT as the parameter, Blizzard's old file is going to be deprecated completely soon.
(CORE) The Spiritual Shrine has been changed to work as it did in Diablo, it now creates a small amount of gold in each unoccupied inventory square (see below for the amount of gold it creates per pile).
(CORE) Blizzard originally intended for inventory gold to show a different graphic depending on the amount of gold in the pile (basically like it works for gold on the ground), unfortunately this was broken because they used cel-directions instead of loading the separate inventory gold graphics. I merged INVGLD.DC6, INVGLDM.DC6 and INVGLDH.DC6 into a multi-direction inventory file to restore the original behavior (and added it back to CITEM_DrawInventoryItem).
(CORE) When gold is created as an inventory item it can now be right-clicked to add it to your gold amount instead of having to drop and pick it up again.
(CORE) The Murphy's Shrine was revised and now works much closer to how it did in Hellfire. It now has a 1 in 3 chance to reduce the durability of any breakable and non-stackable item that isn't already broken by half it's maximum durability (thus applying the effect twice to the same item will break that item). If it doesn't find an item it will subtract half of your maximum inventory gold from your current inventory gold. It will only affect one item at a time, however this item is randomly selected from those it found to be eligible to prevent manipulation.
(CORE) Item effect function 18 is now a thin wrapper around item effect function 4 with the exception that it will remove any states in its state's group before assigning a new state.
(CORE) SITEM_PRV_AddStat will add the same value to STAT_OTHER_ANIMRATE automatically when stat STAT_ATTACKRATE is added to the potion statlist which mirrors skill behavior.
(CORE) Item effect functions 3, 4 and 5 now call UNITS_RecalculateAnimRate in order to correctly support velocity modifications (STAT_VELOCITYPERCENT, STAT_ATTACKRATE, STAT_OTHER_ANIMRATE).
(CORE) Got rid of STAT_MS_MODIFIERLIST_ITEM and STAT_MS_MODIFIERLIST_PALETTE which have not served a purpose for years (they were hacks introduced prior to my removing of the state limit).
(CORE) A massive clean-up of DRLG and other map related structures was performed in order to eliminate many old unnecessary unions and some duplicated structures (D2Rect vs. DRLGRect --- etc).
(CORE) Object TC's were split between Acts.txt and Objects2.txt, the former defines the basic TC for each act and difficulty and the latter can override these with a custom per-object TC as before.
(CORE) TC spawning functions now test TC ID's using IS_VALID_TREASURE_CLASS instead of guessing (the Blizzard way) if a TC ID is valid.
(CORE) Object TC spawns are no longer limited to 6 items, objects that check for spawned item quality do so differently now.
(CORE) OBJECT_NONE (0) is now treated as an error value across the board rather than just in some of the object lookups (at least as far as those we control are concerned).
(CORE) The association between ITEMTYPE_GEM and STAT_MS_ITEM_GEMBONUS and ITEMTYPE_RUNE and STAT_MS_ITEM_RUNEBONUS has been softcoded into ItemTypesAUX making it possible to produce custom upgrade chains and stats without touching the code (it's also possible to use this to make stats that for example turn all swords into gold).
(CORE) STAT_ITEM_GOLDBONUS uses the overrun-proof math API to calculate the percentage and perform the addition now. This also applies to the 'mul' keyword.
(CORE) Previously I changed the limit on items per TC drop to 256 (from 6), the limit is now only enforced when a limit is needed by the code (which only applies to a handful of object drops --- everything else is completely unlimited by default).
(CORE) Setting Picks to 0 now disables a TC without having to delete it from TreasureClassEx.txt (the original code defaults to 1).
(CORE) Negative probabilities (Magic, Rare, Set, Unique) in TreasureClassEx.txt are accepted now, they reduce the probability of the quality in question (change is actually from March 2015 but was not documented before IIRC).
(CORE) The damage dealt by Open Wounds is no longer calculated by a formula in the code, it is now read from OpenWounds.txt where a value can be set for each level (the values in the default OpenWounds.txt were precalculated using the standard formula).
(CORE) UNIT_TIMER_REGENERATE is no longer arbitrarily deleted from all monsters in a room when there're no players near that room anymore.
(CORE) SMONSTER_TIMER_Regenerate was cleaned up, it is now using the overrun-proof math API.
(CORE) The AI no longer sets bonuses to STAT_HPREGEN itself, instead such bonuses are added through a new member added to pMonsterData now. This deprecates an older fix involving states.
(CORE) sgpD2DataTables is largely deprecated in favor of our own global control structure to increase the speed of legacy TXT file queries from our code.
(CORE) The three Healing Potion item effect functions (3, 4 and 5) now support negative values, using a potion that reduces HP will kill the user if HP is lowered to zero.
(CORE) It is now possible for the three Healing Potion item effect functions (3, 4 and 5) to buff the user as well (scaling only affects STAT_HPREGEN and STAT_MANARECOVERY now).
(CORE) Rejuvenation Potions can be changed to offer healing over time like Mana and Healing Potions by making them add STAT_HPREGEN and STAT_MANARECOVERY instead of STAT_HITPOINTS and STAT_MANA now.
(CORE) Item effect functions 3, 4 and 5 will assign their state even when all their stats links resolve to -1, states by themselves can have an effect so there's no reason not to assign the state.
(CORE) The three Healing Potion item effect functions (3, 4 and 5) originally incorporated into MetalStorm.DLL in 2008 were redesigned from the ground up to correct many logic problems inherited from vanilla (see more under bugs).
(CORE) An attack now counts as a missile attack only when HITFLAG_MISSILE is set in tDamage and not by the bResist boolean being set in calls to SDMG_ProcessDamage.
(CORE) Player cheats for debug builds are now saved to the D2S file instead of being read from D2.ini, a new backend API was added to manage them.
(CORE) The damage formula used by the Jester item modifier is now identical to the one from Hellfire (although it can now grant +600% damage instead of capping out at 595% due to a bug).
(CORE) The player Mana and HP regeneration code has been cleaned up, the new version is using the overrun-proof math API.
(CORE) The monster lifebar and modifier description code has been completely redesigned (the old version was a hacky mess I didn't touch since 2008 or even earlier that was almost as bad as the original code). Monster lifebar behavior is now controlled by a single field in MonStatsAUX as opposed to being a hodgepodge of multiple settings.
(CORE) A legacy shim that made certain monster names always appear in gold (to replace a series of equivalent hardcodes in vanilla) was eliminated in favor of a new setting that marks these monsters as unique upon spawning.
(CORE) It is now possible to hide the UMod and resistance descriptions of a monsters by setting MONSTATSAUX_HIDEMODS in MonStatsAUX to TRUE (this just reimplements the hardcoded 1.11b uber-boss behavior I previously removed).
(CORE) An archaic hack that instructed the client to release Charged Bolts when a LEB was damaged by an attack with RESULTFLAG_SOFTHIT set was eliminated (we didn't have a use for it since around 2007 when all their UMod code was replaced but kept the hack, the purpose of which I didn't research at the time).
(CORE) Hireling names will show up in red text if they are owned by a player who is currently hostile to you.
(CORE) Shadow Master and Shadow Warrior display a standard lifebar instead of the hireling lifebar now, they only used the latter in vanilla to hide a bug (a hack which ironically led to an even worse bug where the game leaks memory every frame while their name is shown).
(CORE) ITEMS_GetTransformPalette has been split into ITEMS_GetTransformPalette and ITEMS_PRV_GetTransformColor.
(MOD) The Eldritch Shrine now creates yellow Rejuvenation Potions (they work like purple Rejuvenation Potions in every respect). Now that Diablo phrase it's using actually makes sense again.
(MOD) Chance of Getting Better Gems and Chance of Getting Better Runes use a simpler formula to do their magic (see below).
(MOD) Prevent Heal only cancels a monster's natural HP regeneration (including any AI driven bonuses) now, it will not effect the healing bestowed by Healing Potions (etc).
(MOD) Poison and co. can now interrupt interruptable monster attacks (this will not interrupt monsters that're occupied with special things like the Vulture Demons when they fly).
(MOD) Every point in Vitality above 400 counts as 1/256 HP regenerated per frame (this deprecates the old HP regeneration formula).
(MOD) Poison, Open Wounds and related status ailments will no longer kill you while you're inside a town.
(MOD) The Mana Recovery formula has been changed to: (Energy * 256) / 1000.
(MOD) Poison and related status ailments no longer interrupt you as frequently, the chance was reduced to 5 % per frame (or 1 in 20) assuming of course that you can currently be interrupted.
(D2) The Monster Shrine will always upgraded monsters to unique, never champion (this is an old change from 2011 but I'm not sure it was documented before).
(D2) The Fire Shrine was changed to reduce HP to 50 % only when current HP is above 50 % instead of reducing current HP by 50 %. The fire balls spawned by the shrine are evently spaced now too (this is an earlier change from at least 2011 that was likely also documented at the time).
(D2) The Gem Shrine is able to create Chipped Skulls now.
(D2) The Refilling Shrine now takes 5 minutes to regenerate whereas the Health and Mana Shrines take 2 minutes instead.
(D2) Automatic TC upgrades to exceptional (and elite --- even if they didn't exist back then) were restored more or less exactly to how they worked prior to the expansion (at which point they were disabled in favor of more grind).
(D2) Open Wounds has been restored to its original behavior, with a few modifications (see below).
(D2) All Healing Potions now take the same time to heal their designated amount to improve their effectiveness (this is how Mana Potions have always worked).
(D2) Crushing Blow has been restored to its original behavior, the only difference is that it uses the effective amount of damage resistance now (this means that Sanctuary will negate it to zero if the target is undead for example).
(D2) I restored the original double healing formula as documented by Blizzard in the Chaos Sanctuary (it should be noted that this formula was not used in any released version of the game, the formula used is very different from the one in their documentation).
(BUG) ITEMS_GetTC could return a different TC for the same level depending on the search direction (upgrade versus downgrade).
(BUG) Fixed a dumb but very cryptic bug that was lingering in the codebase since at least 2014 (no earlier versions were retrieved from the archive to test) that prevented Mephisto's Double-Helix Lightning skill from working correctly.
(D2BUG) Blizzard didn't check wether monsters being evaluated by a Monster Shrine had their AI changed by a skill or other effect, this can lead to strange behavior where it turns monsters affected by Confusion, Terror, Dim Vision or mounted Demon Imps into unique monsters.
(D2BUG) Blizzard doesn't call UNITS_AddToUpdateQueue after marking the monster upgraded by the Monster Shrine for updating, the updates are only dispatched to the client if something else attaches an update to the unit later which can result in desync.
(D2BUG) The Fire Shrine could reduce player HP in town in the event that it spawned in a room directly adjacent to the town.
(D2BUG) The Fire Shrine was supposed to only reduce HP of attackable and searchable players and monsters, due to a bug with its implementation these filters are never tested.
(D2BUG) The client version of UNITS_Find did not acquire the owner for missiles performing a search whereas the server version did so when doing an alignment check, this results in inconsistent behavior and desync.
(D2BUG) The server version of UNITS_Find did not acquire the owner for missiles being tested during alignment checks, this results in FILTER_HOSTILE and FILTER_FRIENDLY not working as expected when combined with FILTER_MISSILE.
(D2BUG) The server version of UNITS_Find acquired the missile owner for missiles performing a search when testing FILTER_MELEE, the client version did not, this results in inconsistent behavior (and it doesn't make sense to boot).
(D2BUG) When testing wether rooms fall into the search radius all three vanilla implementations of UNITS_Find are bugged and consider every room eligible for unit searching no matter how distant due to poor math.
(D2BUG) The client version of UNITS_Find did not ignore async units such as critters, instead it relied entirely on none of the other filters applying to them (which is not guaranteed to be the case if for example the search is composed only of FILTER_MONSTER for example), this results in inconsistent behavior and desync.
(D2BUG) The D2Common version of UNITS_Find performed a legacy LOS test using the field tables that was not modified since 1.00, the D2Client and D2Game versions perform modern LOS tests, this can result in inconsistent behavior and is very inefficient (field tables were certainly deprecated for a reason).
(D2BUG) The LOS tests performed by all three versions of UNITS_Find only test for COLLIDE_WALL, this means they will see units behind closed doors due to a missing COLLIDE_DOOR test.
(D2BUG) If the searching unit is a missile the server version of UNITS_Find causes severe desync when FILTER_HOSTILE, FILTER_FRIENDLY or FILTER_MELEE are paired with FILTER_LOS due to the searching unit being permanently overwritten prior to the LOS test (thus passing a completely different unit to it compared to the client).
(D2BUG) The Stamina Shrine was supposed to add +200% to Stamina, due to a bug it will always add 0 unless the player already has STAT_SKILL_STAMINA_PERCENT from another source, in which case it will add a percent of that value (!).
(D2BUG) The Combat Shrine calculates it's bonus to Attack Rating incorrectly in vanilla, this has been fixed a long time ago but was to my knowledge never properly documented.
(D2BUG) The unused Health and Mana Exchange Shrines were each using the message string intended for the other.
(D2BUG) INV_GetComponent returns the wrong component for Barbarians who're dual-wielding two-handed swords (it'll return COMPONENT_RH for both swords).
(D2BUG) Fixes a crash bug in INV_GetComponent, the vanilla function does not test the unit for NULL.
(D2BUG) Due to what I presume was a mass-replace operation all TC spawns for Act 5 objects were inaccurate (they replaced level 132 with 136 in the object TC level table).
(D2BUG) Negative STAT_ITEM_GOLDBONUS will no longer result in gold piles with zero STAT_GOLD. Minimum gold per pile is now 1.
(D2BUG) Fixed an infinite loop condition in the TC spawner caused by negative picks paired with a probability sum lower than the absolute value of picks.
(D2BUG) The 'cm', 'cr', 'cs' and 'cu' parameters you can set for individual items in TreasureClassEx.txt are not used by the TC spawning code. They can now be used together with the other quality percentages, they function much in the same way but affect single items only.
(D2BUG) If a TC drops the maximum amount of items permitted the last item will be unaffected by STAT_ITEM_GOLDBONUS because SITEM_CreateItemsInTreasureClass will return before applying it.
(D2BUG) If a non-pet monster kills another monster the game will apply its STAT_ITEM_MAGICBONUS twice if it is the leader of a pack.
(D2BUG) PATH_IsInNewRoom will fault if a unit of type UNIT_WARP is passed to the function (they retrieve +2C as hPath instead of hPlacement).
(D2BUG) In vanilla Open Wounds does not set UNIT_TIMER_REGENERATE, thus if the monster isn't already regenerating it will take no damage from Open Wounds (assuming that the attack that applied the effect didn't damage the monster to trigger regeneration).
(D2BUG) Due to UNIT_TIMER_REGENERATE being deleted when there're no players near the monster's room monsters will not regenerate HP before they get fully deactivated and then reactivated if you return to that room later (it also means monsters in distant rooms stop taking damage from poison and open wounds).
(D2BUG) STATE_HEALINGPOTION was not removed once a monster (including hirelings) had recovered to full health, this was changed to make the behave like the player code.
(D2BUG) Hirelings and other pets were not supposed to die to poison while in town, unfortunately the order of checks in the vanilla version of SMONSTER_TIMER_Regenerate is wrong rendering it completely moot (they will simply die).
(D2BUG) There's a whole class of cryptic bugs resulting from the way Healing Potions, Prevent Heal and Poison/Open Wounds interact when they're affecting the same monster (especially hirelings). We fixed all of these bugs by making SSTAT_CB_RemoveState set a new UNIT_TIMER_REGENERATE when a statlist with STAT_HPREGEN is removed from a monster.
(D2BUG) The three Healing Potion item effect functions (3, 4 and 5) all share a series of bugs that prevents them from being useable with stats other than STAT_HITPOINTS, STAT_MANA, STAT_STAMINA, STAT_DURABILITY, STAT_HPREGEN and STAT_MANARECOVERY (they could've just as well kept them hardcoded, would've been better for performance seing how they can't be used for anything they're not already used for).
(D2BUG) Healing and Mana don't recover their full amount because the UNIT_TIMER_REGENERATE event is processed prior to the item taking effect (so in essence they're missing a frame worth of regeneration - before you ask, this can't be fixed by increasing their duration by 1 frame in Misc.txt because that will only reduce the amount they recover per frame).
(D2BUG) The amount of HP restored by Healing Potion (hp3) is not divisible by the duration of that potion, this results in it not healing you the correct amount.
(D2BUG) Blizzard reads the duration of statlists even if they don't have STATLIST_EXPIRES set, this will result in chaos if the statlist doesn't have a duration in certain functions.
(D2BUG) CLT_INL_IsLUIOpen was missing a check for UI_TYPE_BARK_SCROLL which leads to a display bug if that UI is open while you hover over a monster.
(D2BUG) UI_GetRect sets the height to sgnScreenW instead of sgnScreenH, thankfully none of the places that call that function used the height of the rectangle it returns for anything.
(D2BUG) When given a string with embedded color codes the standard D2WinGetPixWidth variant included those characters in the width calculation which results in bugs when its return value is used for text alignment (which it almost always is).
(D2BUG) Monster descriptions are now linked directly to the D2Win lifebar and tooltip API, this resolves a whole class of bugs where descriptive text is shown even when a lifebar is not.
(D2BUG) Monster descriptions calculated their drawing offset without setting a font, this meant that their placement could become unpredictable if the order of function calls is changed (and they'd thus use whatever font was previously set using D2WinSetFont).
(D2BUG) Blizzard tried to prevent the monster descriptions from overlapping with the right and left UI panel but they used a constant value of 480 for this which doesn't work properly, the cap is now calculated dynamically based on game resolution and UI state. In LoD they forgot to mirror this code when adding descriptions for resistance, with the effect that these will always bleed into the UI with no recourse.
(D2BUG) The immunity strings shown under monster names were not centered correctly due to a bug in D2WinGetPixWidth (see above).
(D2BUG) The function updating client life percentages can be coaxed into treating non-players as players which results in undefined behavior.
(D2BUG) While under the effect of a Stamina Shrine your Stamina Recovery is 50 % higher while you run than it is while you walk.
(MISC) DumbDiff - A new tool similar to (but much, much simpler than) diff that creates a tab-delimited table showing differences between source files at the word rather than line/block level (useful for validating large-scale replacing operations --- as became necessary today due to the DRLG/map structure clean-up pass) has been added to the arsenal.
(MISC) Fixed a minor problem with D2PalEdit which prevented it from loading GIF files created by XnView (they're missing a value in the GIF header the code was checking during validation).

Fire / Exploding / Poison Shrine
Blizzard caps the maximum level of the missiles spawned by these shrines to 8 (this is based on the current character level divided by 5). I have removed the maximum cap.

Divine Shrine (These values are provisional and will be subject to future balancing)

Code: Select all

Level       Healing Potion               Mana Potion
----------------------------------------------------
 1-11       Light Healing Potion         Light Mana Potion
12-19       Healing Potion               Mana Potion
20-35       Greater Healing Potion       Greater Mana Potion
36-44       Super Healing Potion         Super Mana Potion
45-99       Full Rejuvenation Potion     Full Rejuvenation Potion
Spiritual Shrine

Code: Select all

Difficulty  Act  Min  Max   Total (40 Squares)
----------------------------------------------
Normal      1      5   15             200- 600
Normal      2     10   30             400-1200
Normal      3     15   45             600-1800
Normal      4     20   60             800-2400
Normal      5     25   75            1000-3000
----------------------------------------------
Nightmare   1     30   90            1200-3600
Nightmare   2     35  105            1400-4200
Nightmare   3     40  120            1600-4800
Nightmare   4     45  135            1800-5400
Nightmare   5     50  150            2000-6000
----------------------------------------------
Hell        1     55  165            2200-6600
Hell        2     60  180            2400-7200
Hell        3     65  195            2600-7800
Hell        4     70  210            2800-8400
Hell        5     75  225            3000-9000
Exceptional/Elite Upgrades
When an item drops there is a 10 % (Nightmare) and 20 % (Hell) chance that it will be upgraded to exceptional, in Hell difficulty there is a chance of 30 % that it will be upgraded to elite if the first upgrade succeeds. 40 % monster drops and all drops by quest monsters (those labelled 'Boss' in MonStats.txt) double the chance for upgrades to exceptional and increase the chance for upgrades to elite to 40 %.

Gem/Rune Bonus
Each Gem and Rune has a limit to its chance of being upgraded, for example El has a limit of 90 %, if you have 100 % Chance of Getting Better Runes the remaining 10 % won't be factored into this roll, upon success the total value is divided by 2 (thus having more than 100 % helps, although you would need an astronomical amount to get from El to Zod directly, but of course late in the game not all runes drop as El so your upgrade path begins higher up in the chain giving you a better chance to reach the top) and so on.

Open Wounds
While we restored the damage dealt by open wounds to the original values through OpenWounds.txt, we did change to what monsters it can be applied. In previous builds monsters that couldn't bleed were immune to Open Wounds, this wasn't very satisfactory because many monsters where open wounds would've made sense (such as Giant Spiders) cannot bleed by default. Instead Open Wounds tests whenever the monster has been assigned MONSTER_TEMPLATE_SKELETON and/or MONSTER_TEMPLATE_CONSTRUCT. Ethereal monsters (and players affected by skills that bestow this effect) are also invulnerable to Open Wounds. In vanilla Open Wounds damage is divided by 4 when players are subject to it (and by 2 again if it is a missile attack against a player). It is also divided by 2 if the monster is a Unique (including Super Unique Monsters and those with an attached quest event) or Champion. These divisors were kept, however the missile divisor is applied independent of wether the target is a player, Open Wounds damage to hirelings is treated like that dealt to players (so it is divided by 4). Further the damage is divided by 2 also for monsters labelled as Boss in MonStats.txt to be consistent with other stat effects.
Last edited by Nefarius on Tue Jun 28, 2016 7:10 am, edited 294 times in total.
Reason: 2016/06/28
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
sPoT
Forum Regular
Angel
Posts: 811
Joined: Sat Jun 21, 2003 9:10 am
Location: Poland

Post by sPoT » Thu Feb 07, 2008 10:18 am

I just can't resist to write here, though the topic is directly related but to the actuall work progress.

Here comes the modification whose author gives us fairly regular news about the percentage of completion. This is very nice of you Nefarius, as people expect just that thing - to have the certainty that it's all being carried on with. The time it takes to wait isn't that boring, becasue if anything gets completed, we are automatically informed about it.

Just wanted to share my point of view as a devoted fan's :mrgreen:.
Good job.
Do you know that every modding question has an answer? Just use the power, click me!
"The Defile" - Forum - currently closed
The best guide for every modmaker!

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (6th Feb. 2008)

Post by Nefarius » Thu Feb 07, 2008 11:12 am

To have the certainty that it's all being carried on with. The time it takes to wait isn't that boring, becasue if anything gets completed, we are automatically informed about it.
This was pretty much the idea behind starting a public dev. log like this. When it comes to negotiating the development state of a so massive project to the public there are two ways to do so. The first would be to release a horrid barely functional premature 'beta'* (see rant below), the other is to give a look of what happens behind the scenes and that things, indeed are, being developed.

I think the topic also gives an idea of the amount of effort required on working on such a large project and why they all take so long. (If I shamelessly take 'MetalStorm' for example, the original start was in v1.10 back in 2004 with D2Mod, the idea and some of the concepts now implemented were floating around since 2001, but there was no means to implement even a tiny bit of it back then [keep in mind, prior to LoD even CUBE RECIPIES and GEMS were hardcoded]). This topic is also a great way to display the amount of changes without spoiling too much of the game play.

* Alpha, Beta, Gamma --- People tend to confuse alpha, beta and gamma releases. Many of those betas left and right are alpha builds. The actual sense of a beta is a postproduction method to polish up and debug an otherwise entirely complete project and not to push a premature, currently still under core development, thing. In terms there is a shift where beta=alpha and gamma=beta. (That is, a bugged-as-bloody-hell v1.00, and there won't be a stable build until say v2.00 or v3.00)...
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
CoreInsanity
Posts: 29
Joined: Wed Feb 13, 2008 3:20 am

Re: MetalStorm Progress Report (16th Feb. 2008)

Post by CoreInsanity » Mon Feb 18, 2008 1:16 am

I hate to sound a bit out of the loop here or anything (Though, I am), but what exactly is this?

I am assuming this is the same thing as: viewtopic.php?t=47116&postdays=0&postorder=asc&start=0

however I do not get exactly what you are doing? rewriting the game? making DLLs for it or?

The notes look like good work though.
Last edited by CoreInsanity on Mon Feb 18, 2008 1:17 am, edited 1 time in total.

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (16th Feb. 2008)

Post by Nefarius » Mon Feb 18, 2008 4:50 am

It's all explained on the last page of that topic: viewtopic.php?t=47116&postdays=0&postorder=asc&start=75

My last post therein

;)
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
CoreInsanity
Posts: 29
Joined: Wed Feb 13, 2008 3:20 am

Re: MetalStorm Progress Report (16th Feb. 2008)

Post by CoreInsanity » Mon Feb 18, 2008 5:10 am

[quote=Nefarius";p="377133"]It's all explained on the last page of that topic: viewtopic.php?t=47116&postdays=0&postorder=asc&start=75

My last post therein

;)[/quote]

Ah, thanks. I thought I read them all but I must have missed one, my bad.

It looks nice though, can't wait to see it.

Thanks.

User avatar
Newman Iron
Posts: 9
Joined: Thu Sep 27, 2007 8:07 pm

Re: MetalStorm Progress Report (23rd Feb. 2008)

Post by Newman Iron » Sat Feb 23, 2008 2:38 pm

About the latest addition to the char screen:

Are you going to change the way the attack damage is displayed?
Something that has always annoyed me is that there are no display of how much damage of each element you do :x
It would be cool if this would be displayed in a popup when you hover over the button :)

Is it possible that you have plans for something like this?


ps. I was like 8-O when i saw the video you posted yesterday! That's really nice! :D
Last edited by Newman Iron on Sat Feb 23, 2008 2:39 pm, edited 1 time in total.

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (23rd Feb. 2008)

Post by Nefarius » Sat Feb 23, 2008 2:51 pm

[quote=Newman Iron";p="377702"]
About the latest addition to the char screen:

Are you going to change the way the attack damage is displayed?
Something that has always annoyed me is that there are no display of how much damage of each element you do :x
It would be cool if this would be displayed in a popup when you hover over the button :)

Is it possible that you have plans for something like this?


ps. I was like 8-O when i saw the video you posted yesterday! That's really nice! :D
[/quote]

Hehe, I actually had the same idea a while ago, I will probably include this for those attacks that utilize weapon damage.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
Newman Iron
Posts: 9
Joined: Thu Sep 27, 2007 8:07 pm

Re: MetalStorm Progress Report (23rd Feb. 2008)

Post by Newman Iron » Sat Feb 23, 2008 4:15 pm

Great! :D

You have really done a great job with this!! :D
It's so da*n interesting to watch this topic!

User avatar
DemonicAngel
Forum Legend
Principality
Posts: 2425
Joined: Mon Nov 27, 2006 2:06 am

Re: MetalStorm Progress Report (23rd Feb. 2008)

Post by DemonicAngel » Sat Feb 23, 2008 10:01 pm

Agreed.
I check it everyday for updates. ;)
It all sounds so enticing! :mrgreen:

With all this progress being made daily, how close is the mod to being done?
Soon, I hope. :)
Or will this mod be so big that we're still only ~30% finished? :lol:

User avatar
CoreInsanity
Posts: 29
Joined: Wed Feb 13, 2008 3:20 am

Re: MetalStorm Progress Report (23rd Feb. 2008)

Post by CoreInsanity » Sun Feb 24, 2008 2:14 am

The updates look really nice, can't wait to see it. I too check it every day.


I was wondering, will this be any type of open source for people to modify?

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (24th Feb. 2008)

Post by Nefarius » Sun Feb 24, 2008 10:22 am

With all this progress being made daily, how close is the mod to being done?
Soon, I hope. icon_smile.gif
Or will this mod be so big that we're still only ~30% finished?
It's closer to being 'done' then it was a few month ago :twisted:

I was wondering, will this be any type of open source for people to modify?
It's way too early in dev for me to be able to answer this accurately, time will tell in what context results of this will be made available on top of MetalStorm itself.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
CoreInsanity
Posts: 29
Joined: Wed Feb 13, 2008 3:20 am

Re: MetalStorm Progress Report (24th Feb. 2008)

Post by CoreInsanity » Sun Feb 24, 2008 3:05 pm

Nefarius";p="377815" wrote:
With all this progress being made daily, how close is the mod to being done?
Soon, I hope. icon_smile.gif
Or will this mod be so big that we're still only ~30% finished?
It's closer to being 'done' then it was a few month ago :twisted:

I was wondering, will this be any type of open source for people to modify?
It's way too early in dev for me to be able to answer this accurately, time will tell in what context results of this will be made available on top of MetalStorm itself.
Cool, I look forward to seeing the results.

User avatar
CorniI
Dark Alliance Beta Test
Champion of the Light
Posts: 371
Joined: Wed Apr 12, 2006 9:02 am

Re: MetalStorm Progress Report (27th Feb. 2008)

Post by CorniI » Wed Feb 27, 2008 2:08 pm

[quote=Nefarius]...something...[/quote]
Teh end of teh 1337 Codename :P
Edit my post if you want to remove the highlighted part :P

EDIT: ;) - thanks for catching that
Last edited by CorniI on Wed Feb 27, 2008 2:13 pm, edited 2 times in total.
Linux is like a Wigwam - NO Windows, no Gates and Apache inside

User avatar
Destrictor
Posts: 37
Joined: Sat Mar 29, 2008 12:29 am

Post by Destrictor » Mon Apr 14, 2008 10:31 pm

would you mind giving us drooling people an update? :roll:

User avatar
DemonicAngel
Forum Legend
Principality
Posts: 2425
Joined: Mon Nov 27, 2006 2:06 am

Post by DemonicAngel » Mon Apr 21, 2008 2:20 am

[quote=Destrictor";p="383512"]would you mind giving us drooling people an update? :roll:[/quote]

Bordering on a month... :-|

User avatar
Radamer
Posts: 27
Joined: Fri Mar 21, 2008 8:15 pm
Location: A leaf in the wind
Contact:

Re: MetalStorm Progress Report (24th Mar. 2008)

Post by Radamer » Fri May 02, 2008 2:00 pm

I'd hate to be that guy, but anything new to report. Even if you're just testing or have been busy with other things, it's all good.

I'm just really excited about this mod, that's all.

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (24th Mar. 2008)

Post by Nefarius » Sat May 03, 2008 5:56 pm

Pretty busy with stuff here, I will be back sometime next month hopefully, same applies to Vendanna who does the testing part, we both expect to be back in action during June.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
CorniI
Dark Alliance Beta Test
Champion of the Light
Posts: 371
Joined: Wed Apr 12, 2006 9:02 am

Post by CorniI » Fri May 16, 2008 8:39 pm

>>>>- Started porting code to new, cleaner convention, revising some functionality along the way too.

What are you revising? Do you stop call functions as numbers (as your Commonxxxx)? Or do you introduce Namespaces instead of prefixing functions with long names? Or something other, like use a pt instead of p to show a pointer?
Corni
Linux is like a Wigwam - NO Windows, no Gates and Apache inside

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (16th May, 2008)

Post by Nefarius » Sat May 17, 2008 12:15 am

This will probably be one of the things done, at least to very common functions.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
Destrictor
Posts: 37
Joined: Sat Mar 29, 2008 12:29 am

Post by Destrictor » Fri Jun 13, 2008 9:53 pm

i'm sorry if this has been mentioned before, but will the be damage caps? like the 89k for hits and the 89k/frame for streaming damages?

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (12th June, 2008, #3)

Post by Nefarius » Fri Jun 13, 2008 11:27 pm

Those aren't caps, those are the result of broken calculations (the game was never meant to handle values like this). MetalStorm can handle any amount of damage because all of the code is replaced, nontheless, there will not be anything doing anywhere near that amount of damage.
Last edited by Nefarius on Fri Jun 13, 2008 11:28 pm, edited 1 time in total.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

User avatar
Eisenfaust86
Posts: 95
Joined: Wed Mar 22, 2006 4:48 am

Re: MetalStorm Progress Report (12th June, 2008, #3)

Post by Eisenfaust86 » Sat Jun 14, 2008 2:28 am

[quote=Nefarius";p="391322"]
nontheless, there will not be anything doing anywhere near that amount of damage.[/quote]

Perfect: now we can all say goodbye to the dreaded "overflowing damage of doom" that appears in numerous other mods.

User avatar
Newman Iron
Posts: 9
Joined: Thu Sep 27, 2007 8:07 pm

Re: MetalStorm Progress Report (17th June, 2008)

Post by Newman Iron » Tue Jun 17, 2008 8:02 pm

As you probably know patch 1.12 have been released with a nocd-crack.
Will the code edits in metalstorm be compatible with this patch?

Wow! Blood Boil looks awsome! Great work! 8-O

User avatar
Nefarius
Retired Admin
Cherub
Posts: 11607
Joined: Sat Jun 15, 2002 8:13 pm
Location: Where the blood forever rains
Contact:

Hand-picked

Re: MetalStorm Progress Report (17th June, 2008)

Post by Nefarius » Tue Jun 17, 2008 8:50 pm

Ofc not, and I have no intention to port >100K lines of code to a new patch.

You don't need a CD to play MetalStorm anyway, just to load the game initially (nothing is being read from the CDs --- see the Config file topic).

It's probably possible to use the v1.12 exe to launch to v1.11x dlls, at least we will experiment with this. Especially now with the SecuRom garbage gone.
Last edited by Nefarius on Tue Jun 17, 2008 8:55 pm, edited 1 time in total.
''(...) The game can basically be considered unhackable. '' - Blizzard Entertainment (30th May 2000)
Black Omen Productions | MetalStorm: Progress Report | Screenshots

Post Reply

Return to “Mods by Nefarius”