Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 19.04.2020]

The role-playing games (I-X) that started it all and the various spin-offs (including Dark Messiah).

Moderator: Moderators

User avatar
Xfing
Raider
Raider
Posts: 761
Joined: 04 Jul 2011

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Xfing » May 7 2018, 6:41

DarthVadre wrote:Is it reasonable to increase the skill points cap? I'm guessing the limit we see now (62) is a data structure constriction, so maybe it would be possible to double it with a new 'skill', store the added value in a buffer, and reference that? I could see wiring the UI being really tricky though, as well as dealing with skill modifiers.

I dunno, I'm very much out of my domain here. I'm a high level programmer (js, php, python, etc)


Well, 60 is already quite monstrous in terms of power in any skill, if you even manage to reach it. You're saying in the merge it's 62 now? You'd have to get your character to like level 1000 or something to get several skills to level 124, lol :D

Mortis
Leprechaun
Leprechaun
Posts: 30
Joined: 30 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Mortis » May 7 2018, 7:26

Daedros wrote:
Mortis wrote:I would like to disagree with you Xfing:)
Next, vampires with dagger in one hand and shield in second is for me complete misunderstanding. They should be or:
some version of dark knights with plate/chainmal and axe/sword in right hand and shield in left(all GM level all)
or
light-armoured warriors with dagger in each hand and Leather Master and Dodging GM.
They are almost eternal creatures with hundred years of expierience, so additionaly GM in ID monster ID items as they in their long life got knowledge about many items and monsters.
Moreover- undead with healing body magic and spirit? NO way. Those two should be restricted to clerics, Body magic at expert level maybe also for druids and paladins. For vampires none- they have their own usefull natural skills. If you must, give them mind magic becouse mind control is something related to vampires.

Vampires are already "light-armoured warriors with dagger in each hand and Leather Master". If you're using a Shield on a Vampire, you're not making the most of their strengths. Vampires excel when dual wielding Foulfangs, or any dual daggers that are "of Darkness" or "Vampiric". They become high DPS leech tanks then. As for "some version of dark knights with plate/chainmal and axe/sword in right hand and shield in left(all GM level all)" your describing Death Knights from HoMM. Vampires in HoMM 5+ fit that description, but wield two handed swords instead.
https://www.youtube.com/watch?v=fMn-9WmqRmo
https://www.youtube.com/watch?v=tI4oIBZwVDs
If a Race option were ever added to character creation in the Merge, then i suppose you could make a Vampire Knight that would fit what you want. Have all the skills of a Knight, but with the Vampire ability as well.

There is no need of any additional race or other option, just editing class skill files in Tables folder, the same way how you can modify each class in the game. I dont use a shield playing vampire, i deleted it as skill possible for this character. I wrote about using shield and dagger or sword in other hand only becouse it is one of default combination in original mm8 game. Pointless combination in my opinion, becouse as you said true force of vampire is dual wielding daggers. Using shield by this character would have more sense for me if vampires were some kind of dark knights and that is why i mentioned about such possibitily. I know about vampires in Heroes 5, which are quite similar to those from Heroes 6.

User avatar
justl
Scout
Scout
Posts: 167
Joined: 26 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby justl » May 7 2018, 18:10

found a minor issue in the hive after defeating the reactor:
most walls go down but those on the immediate right and left side of the party dont (although there is nothing behind them, so no harm done).
but as you approach them walls you can walk through them from behindside.

and i downloaded the newest patch --> all your downloads are dd.mm.2017 ... add +1 plz :-D

one question about townportal used at the "high magic places":
is it intended, that even the first time its used there, it goes to the other "high magic place" from the chosen continent?
or shouldnt it rather be new sorpigal / emerald island / daggerwound isles first time round (dont know if its time consuming to implement that) - so the game starts "properly" on that continent
Last edited by justl on May 7 2018, 19:23, edited 2 times in total.

UnknownHuman
Leprechaun
Leprechaun
Posts: 39
Joined: 11 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby UnknownHuman » May 8 2018, 5:16

@Rodril

Is it possible to make the "Hire/Mercs" 100% Random ?
I mean when I start in MM8 I only see the chars from there, would like to see chars from ALL of the games randomized.
Also, is it possible to make random classes ?
I mean Trolls/Minotaurs/Vampires/Dark Elfs can be knights, priests, thieves or anything but just trolls/minotaurs/vampires/dark elfs ?
I do understand that the trolls cannot use Plate, but thats OK, I can play with them using only Chain even though they can learn plate.

Just a few questions, because the Mercs get so stale and old very fast.
Maybe you can create a Merc file on the side that does 100% random.

BUG: If you get to many skills on the left side, Magic, Weapons and such they disappear. I cannot see my Dark Magic skill level anymore.

Thanks for your time.
Last edited by UnknownHuman on May 9 2018, 11:25, edited 2 times in total.

User avatar
justl
Scout
Scout
Posts: 167
Joined: 26 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby justl » May 9 2018, 20:42

i cant remember being it that way in mm7 standalone:
every time you leave a dungeon on emerald island or take a rest at the inn, the dragon flies have respawned - in my memory they took at least a week to do that

emerald island, dragon cave: when you leave without the contestants shield its gone the next time you enter the cave.

another thing i found at the moon temple on emerald island: in the dialog window the villain is called sal sabertooth, but in the monster id he is called sal sharktooth - dont know if its already that in the original game, but i found it worth mentioning :)
Last edited by justl on May 9 2018, 20:59, edited 2 times in total.

User avatar
Avonu
Round Table Hero
Round Table Hero
Posts: 3854
Joined: 06 Aug 2006
Location: City of Griffin
Contact:

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Avonu » May 10 2018, 5:59

justl wrote:i cant remember being it that way in mm7 standalone:
every time you leave a dungeon on emerald island or take a rest at the inn, the dragon flies have respawned - in my memory they took at least a week to do that

They respawn every day in MM7. After a while (if you're killing them day after day), they respawn after 2 days and eventually they stop respawn by 3rd month.

User avatar
justl
Scout
Scout
Posts: 167
Joined: 26 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby justl » May 10 2018, 7:24

Avonu wrote:
justl wrote:i cant remember being it that way in mm7 standalone:
every time you leave a dungeon on emerald island or take a rest at the inn, the dragon flies have respawned - in my memory they took at least a week to do that

They respawn every day in MM7. After a while (if you're killing them day after day), they respawn after 2 days and eventually they stop respawn by 3rd month.

still ... respawn after leaving any dungeon on the island isnt correct behaviuor either

Rodril
Demon
Demon
Posts: 342
Joined: 18 Nov 2016

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Rodril » May 10 2018, 17:06

Patch link have been updated. Unique items were tweaked to match new values, Arena will choose monsters more carefully now, cleric in Jadame will get proper promotion, thanks.
Xfing wrote:One question - since there is no way for me to check directly without some minutes of playing - have you also altered the loot levels of the items? For example will the best weapon of each category now be treated as a level 6 treasure?

Yes, you can check these in "rnditems.txt" in EnglishT.lod with MMArchive
Mortis wrote:Now investing in strengh, accuracy, dexterity and others has bigger and better influence on yours damages, armor class, HP, SP, especially after 50 points of skill.
.
I think, it is possible, but i would like to save original system of progression, party already becomes very powerful quiet fast.
Xfing wrote:Crossbow:
Normal - Skill added to attack bonus
Expert - Skill reduces recovery time
Master - Skill added to damage
Grand - Double all previous bonuses

I wonder if something like this could be coded without having to split the bow skill into two?

I don't know any way to add new skill right now and i'm not sure it is possible to split bow and crossbow like this without altering .exe file.
Xfing wrote:- The Hatchling/Dragonette/Young Dragon line has a way too steep strengthening curve. At party level ~110 Young Dragons have ~4500k health, while Dragon Flightleaders are still under 2000.

Strange. Could you send me your savegame? They scaling properly for me: young ones never became stronger than flightleaders.
No more Reactors at arena. Speak with Hume again to remove quest. I look into problem with potions further.
I have not included any class changes yet.
Xfing wrote:And another thing: Alice Hargreaves doesn't leave the party when the Hero quest for Charles Quixote is completed.

Speak with him again to get rid of her.
Daedros wrote:Speaking of Dragons, i wonder if it would be possible to actually fix them one day. Everyone knows how broken Dragons are, and by that i don't just mean OP. I mean that Might/Accuracy does absolutely nothing for them because they never use a melee attack, they always use that breath attack that ignores all Resists, and that never misses so long as the graphic for it connects. Would it be possible to replace that with a melee attack, and make their only breath ability to be Flameblast (the AoE Fire Damage spell of theirs that costs SP)?

It is possible. Open "Character portraits.txt" from "...Data\Tables" folder and set field "DefAttack" to 0 for dragon portraits. They will always use melee attack after it. Experiment with it at will. I would not include it right now (at least without complete balancing), dragons seems like cheat but that's what makes them and mm8 special in some terms.
I'll look what can be done with blasters.
DarthVadre wrote:Is it reasonable to increase the skill points cap?

It will require a lot of tweaking in .exe, because currently skill level and mastery stored in single byte, we have to change this approach everywhere in .exe to increase max value.
justl wrote:is it intended, that even the first time its used there, it goes to the other "high magic place" from the chosen continent?

Yes, once jumped to other continent, you'll get clues how to start it's story.
UnknownHuman wrote:Is it possible to make the "Hire/Mercs" 100% Random ?

Yes, edit "Character selection.txt" from "...Data\Tables" folder, set "x" in each cell and remove all numbers from "Portrait exceptions" rows.
UnknownHuman wrote:If you get to many skills on the left side, Magic, Weapons and such they disappear. I cannot see my Dark Magic skill level anymore.

With what class have you achieved that much skills in left window?
justl wrote:i cant remember being it that way in mm7 standalone

I think it is intended, they should spawn without limits according to original scripts, i'll check it again.

User avatar
Daedros
Pixie
Pixie
Posts: 128
Joined: 04 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Daedros » May 10 2018, 22:50

Rodril wrote:
Daedros wrote:Speaking of Dragons, i wonder if it would be possible to actually fix them one day. Everyone knows how broken Dragons are, and by that i don't just mean OP. I mean that Might/Accuracy does absolutely nothing for them because they never use a melee attack, they always use that breath attack that ignores all Resists, and that never misses so long as the graphic for it connects. Would it be possible to replace that with a melee attack, and make their only breath ability to be Flameblast (the AoE Fire Damage spell of theirs that costs SP)?

It is possible. Open "Character portraits.txt" from "...Data\Tables" folder and set field "DefAttack" to 0 for dragon portraits. They will always use melee attack after it. Experiment with it at will. I would not include it right now (at least without complete balancing), dragons seems like cheat but that's what makes them and mm8 special in some terms.
I'll look what can be done with blasters.

Which entry is for the Dragon portraits? I'm not seeing any indication in that file as to which is the Dragon portraits. My best guess, would be the Dragons are #24 and #25.

Rodril
Demon
Demon
Posts: 342
Joined: 18 Nov 2016

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Rodril » May 11 2018, 0:17

Yes, 24 and 25 they are. Only these have special default attack.

UnknownHuman
Leprechaun
Leprechaun
Posts: 39
Joined: 11 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby UnknownHuman » May 11 2018, 4:59

@Rodril

It was a custom class. Magic user, wanted to learn all magic on one character, Priest of Light, Dark.
Since Dodge and Unarmed was learned the magic (Dark) disappeared.
The Right side with skills goes further down than the Left side so you can see all the skills learned, but not the Left side.

Thanks on the Mercs :)

EDIT : Tried what you said, I got people from 6 in MM8, works great :)
But, Vampires are Vampires, and a Minotaur is a Minotaur. Wanted Minotaur mix class of anything but always Minotaur :)

Thanks again .
Last edited by UnknownHuman on May 11 2018, 8:12, edited 2 times in total.

User avatar
Xfing
Raider
Raider
Posts: 761
Joined: 04 Jul 2011

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Xfing » May 11 2018, 9:38

As for blasters - keep in mind that BDJ already implemented something like making them a distance weapon only, worn on your back instead of in your hand (blaster rifles at least) - but the problem is, the projectile they fired looked and sounded the same as a bow's arrow, instead of a blaster projectile. For that reason his solution is untenable in my opinion, something different would have to be come up with in regards to this. But this probably isn't a priority, blasters are OP overall anyway. Or they used to be - I've noticed that their recovery time cap is now 30 like with bows, instead of 5 like it used to be. Is that intentional to nerf their power?

As for character change classes - yeah, again, they're just a reflection of changes made by NWC themselves in the transition between MM7 and MM8 - so they're "lore friendly", "canon" or call them what you will. Pretty safe to take another look at I'd say.

And when it comes to dragons - you could nerf them a little by setting their breath attack to behave like the bow attack - only fires outside of melee range. In melee range, they could use a scratching attack, so basically give them Master Unarmed and make them use this attack when close to enemies. This would of course screw with the designers' original intentions, so it's up to you. Alternatively you could make the Dragon Ability skill also increase the damage of melee attacks of Dragons.

User avatar
justl
Scout
Scout
Posts: 167
Joined: 26 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby justl » May 11 2018, 18:47

i ended mm6 and got a "cycle of life" ring - how does that thing work? (especially how do i make the shared life work?)

User avatar
Daedros
Pixie
Pixie
Posts: 128
Joined: 04 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Daedros » May 11 2018, 21:17

Xfing wrote:But this probably isn't a priority, blasters are OP overall anyway. Or they used to be - I've noticed that their recovery time cap is now 30 like with bows, instead of 5 like it used to be. Is that intentional to nerf their power?.

Compared to the Noblebone Bow or Bows "of Carnage", Blasters are actually underpowered. Bows "of Carnage" were pretty rare in M&M7. The AoE capability of a bow "of Carnage" allows it to vastly outdamage a Blaster against groups (which is most fights in M&M). The only weaknesses that a Carnage bow has, is that it can AoE your own party if you shoot too close, and that it deals Fire damage, so any opponent immune to Fire damage (such as Fire Elementals) are immune to a Carnage bow.

justl wrote:i ended mm6 and got a "cycle of life" ring - how does that thing work? (especially how do i make the shared life work?)

Wear one, and every 10 seconds or so, it'll automatically cast Shared Life on your group. Give a Champion/Black Knight a Vampiric weapon such as Spiritslayer, and it synergizes very well with the Cycle of Life ring to keep your party alive.
Last edited by Daedros on May 11 2018, 21:19, edited 1 time in total.

User avatar
Xfing
Raider
Raider
Posts: 761
Joined: 04 Jul 2011

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Xfing » May 11 2018, 22:05

Daedros wrote:
justl wrote:i ended mm6 and got a "cycle of life" ring - how does that thing work? (especially how do i make the shared life work?)

Wear one, and every 10 seconds or so, it'll automatically cast Shared Life on your group. Give a Champion/Black Knight a Vampiric weapon such as Spiritslayer, and it synergizes very well with the Cycle of Life ring to keep your party alive.


Oh, I actually thought it worked a bit differently - that only the characters wearing the rings would get the shared life effect, and that it would be permanent. Say, the knight and the vampire wear a ring each. The vampire takes 50 damage, but in practice both the knight and the vampire take 25 each because of the effect. The way you're describing it is a bit different to be sure. Still, if one ring is all it takes to cast the spell on the party, why is there a need for 5?

nortonex
Leprechaun
Leprechaun
Posts: 15
Joined: 07 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby nortonex » May 12 2018, 0:52

@Rodril didn't you ever think to fix Mega-Dragon in MM7? Ingame files contain proper sprite, stats, and special abilities (eradication) of Mega-Dragon.

In the polish m&m community there is an user that fixed it (@Kiririn from acidcave.net). His mod is doing a little bit more changes, but to fix Mega-Dragon it is needed only to replace mdt12.dlv file in games.lod and change one line in Hostile.txt file from events.lod related to Mega-Dragon. Link to the mod can be found here: http://www.vault.acidcave.net/download.php?id=541

This is the result:
Image

What do you think about it?

User avatar
justl
Scout
Scout
Posts: 167
Joined: 26 Dec 2017

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby justl » May 12 2018, 6:06

Daedros wrote:
justl wrote:i ended mm6 and got a "cycle of life" ring - how does that thing work? (especially how do i make the shared life work?)

Wear one, and every 10 seconds or so, it'll automatically cast Shared Life on your group. Give a Champion/Black Knight a Vampiric weapon such as Spiritslayer, and it synergizes very well with the Cycle of Life ring to keep your party alive.


i havent seen that happen by now, neither by graphic effect nor by health points of the group

User avatar
Xfing
Raider
Raider
Posts: 761
Joined: 04 Jul 2011

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Xfing » May 12 2018, 17:10

I agree that the Mega-Dragon in the actual product was vastly underwhelming and didn't live up to its reputation at all. It was just a red dragon. If he was intended to be much more powerful by the designers (well duh! good to know he was, too), then I'm all for fixing him as well!

User avatar
Waffel
Leprechaun
Leprechaun
Posts: 14
Joined: 20 Dec 2017
Location: ロシア

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Waffel » May 12 2018, 18:50

Good day everyone!

I'm glad to see this amazing project keeps improving day by day, hour by hour! Today I'll add my five cents into it.

This debug messages appear when I try to look up the attack speed ratio in inventory of my newly hired Initiate (Monk) while she's unarmed.

UPD: Unarmed melee attacks are also causing debug messages to appear.

Code: Select all


...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16dcb340)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1484ee00)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16dcb340)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1484ee00)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16d7c6a0)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x148ec818)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------
>


And this message appears when the wand becomes empty:

Code: Select all


...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16dcb340)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1484ee00)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------・
...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16dcb340)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1484ee00)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------・
...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16d7c6a0)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x148ec818)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------・
...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------・
...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------・
...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x0339e710)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x1490ab10)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------

...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: array index (0) out of bounds [1, 138]

stack traceback:
   [C]: in function 'error'
   Scripts/Core/RSMem.lua:1342: in function '__index'
   ...II - Day of the Destroyer\Scripts\General\MiscTweaks.lua:280: in function 'v'
   Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>

arguments of '__index':
   t = (table: 0x16985f50)
   a = 0
   v = nil

local variables of '__index':
   aorig = 0
   a1 = -1
   n = 138

upvalues of '__index':
   ptr = nil
   u4 = (table: 0x0712c128)
   GetPtr = (function: 0x0712e828)
   obj = (table: 0x148f7228)
   o = 1192
   assertnum = (function: 0x071297c0)
   error = (function: 0x07099fa8)
   type = (function: builtin#3)
   SetLen = nil
   low = 1
   GetLen = (function: 0x075d81b8)
   lenP = nil
   lenA = nil
   count = 138
   size = 36
   _index = nil
   _newindex = nil
   tonumber = (function: builtin#17)
   beyondLen = nil
   f = (function: 0x0708e198)
   format = (function: builtin#91)
   sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
   tostring = (function: builtin#18)
   tostring2 = (function: 0x07129828)
-----------------------------------------------------------------------------------
>


Sometimes I find wands with zero charges lying on the ground in MM7 (one of them can be found in Barrow Downs). This was the same for the original game IIRC.

Also I've come up with some ideas for improving potion system (its buff and healing potions at least). I hope you'll enjoy it.

The main idea is to add new white potions which grant pretty powerful buffs (or at least of any notable effect compared to the existing Expert Alchemy potions) for a limited time (e.g. 6 hours or less). For example, Superior Heroism potion:

Code: Select all

--Superior Heroism
evt.PotionEffects[55] = function(IsDrunk, Target, Power)

         if IsDrunk then
   local Buff = Target.SpellBuffs[const.PlayerBuff.Heroism]
   Buff.ExpireTime = Game.Time + const.Hour*6
   Buff.Power = Power
   Buff.Skill = 4
   Buff.OverlayId = 1
end
end


This potion grants 5+(X points of potion power) additional melee damage for 6 hours and puts on a Heroism buff which overlays any other Heroism buff on a target character. It requires Alchemy Master and two compound Heroism potions to be mixed. The power of this potion in the hands of a character with Alchemy Grand and a huge Alchemy bonus from items may seem imbalace and devastating but you most likely would run out of ingredients and bottles pretty quick.

And now the idea of Healing Salve - the potion of regeneration.
Though Rodril has put a new formula for Regeneration spell into action, Regeneration buff from potion is weirdly not the same as from the spell. It has formula like 1+(X potion power) HP per 5 minutes of game time.

Code: Select all

evt.PotionEffects[54] = function(IsDrunk, Target, Power)

         if IsDrunk then
   local Buff = Target.SpellBuffs[const.PlayerBuff.Regeneration]
   Buff.ExpireTime = Game.Time + const.Hour*2
   Buff.Power = Power/2
   Buff.Skill = 0
   Buff.OverlayId = 1
end
end


This potion is Alchemy Expert potion resulting as a product of mixing two red potions. Due to its great healing power the effect duration is only 2 hours of game time. This potion grants Regeneration buff which overlays any other Regeneration buff and heals 1+(Potion Power)/2 HP per 5 minutes of game time.

In the same fashion the black potions may be made [Elemental Elixir of Protection that adds 40 points to every elemental resistance for 6 hours and requires any two white potions of the same element (Fire etc.) to be mixed].

For these potions I've used MM6 sprites while testing so it might be a good use for the unused graphical content. But I feel nostalgic for MM7 potion bottles.

Here is the link for the [ITEMS, rnditems, POTION, POTNOTES, Potion settings] and script files which I use now (compatible with the latest MM678 update). https://puu.sh/AkVmF/c79f89a8b5.zip
Last edited by Waffel on May 12 2018, 19:12, edited 3 times in total.

User avatar
Daedros
Pixie
Pixie
Posts: 128
Joined: 04 Apr 2018

Re: Might and Magic 6, 7, 8 merge based on mm8 engine.

Postby Daedros » May 12 2018, 22:50

justl wrote:i havent seen that happen by now, neither by graphic effect nor by health points of the group


It doesn't show a graphic, but you should see your party HP be redistributed every now and then. It'll take hitpoints from huge HP pool classes such as as Trolls, Dragons or Knights first, and redistribute it to heal party members that have lower HP.


Return to “Might and Magic”

Who is online

Users browsing this forum: No registered users and 6 guests