Multiplayer for MMMerge [beta 14.01.2024/4]

The role-playing games (I-X) that started it all and the various spin-offs (including Dark Messiah).
Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/10]

Unread postby Rodril » 23 Sep 2023, 15:03

Mercs wrote: 23 Sep 2023, 07:18 1. no 4th ally portrait in UI, not sure if resolution related, I play at 1366x768 due to old laptop, visually there's enough space for one more portrait.
2. ability to hear other player barks in combat would be nice
3. can we use some kind of console script to activate Malwick's quest? he got accidentally killed by dragonflies and we are worried we are missing content. halp~
1. I've added icon for 4th player, update mod files. Toggle icon have been moved downward. 4 players is the limit, tho. MMPatch UI extension should allow to display more, but I could not find reference manual or examples for it, and UI txt files are misty for me.
2. Will check what can be added.
3. This should work:
Party.QBits[526] = true
Messenger will start dialog upon entering Harmondale, once other conditions are met.

User avatar
rampage77t
Peasant
Peasant
Posts: 75
Joined: 03 Jun 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/11]

Unread postby rampage77t » 23 Sep 2023, 15:37

Finally we were able to complete the 3 continents, but I think something strange happened and it does not allow us to advance with the verdant missions, in the list of missions we have 2 missions left, one which is to enter the elemental planes and the other to obtain the metal that is found in Alvar's dungeon where you get Baltazar's axe, therein lies the problem since we already completed that mission and gave it to her but when talking to her she says that it is not complete, and of course since the metal is no longer there There is no way to turn it in again and continue with the missions. If you can give me a solution I would greatly appreciate it.

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/8]

Unread postby Malekitsu » 24 Sep 2023, 01:01

Rodril wrote: 20 Sep 2023, 09:24
Malekitsu wrote: 19 Sep 2023, 22:18 I've just checked but abandoned temple seems to have still the same issue on that room.
If that map was compiled with error, issue will persist. You have to load backup d05.blv / d05.dlv prior to changes with flawous editor. I've briefly reopened the map, recompiled and checked it, and it seems fine. Please, make sure you are not using compiled with error map, and if you don't, tell me, I'll check everything again.
Right, deleting the modified map fixed the issue!
Some report and thoughts about last gameplay:
- looks like gold drop (and maybe other objects aswell) are not shown on the ground if people enter the map after the object have been dropped
- there have few crash upon picking up items from the ground
- sometimes items show duplicated in the inventory
- might be cool an option for Player UI don't go away when players are a bit distant, but to keep it permanent and add opacity when player are in other maps. Being able then to change party order instead of being "loading" order would be even better.
- ctrl+1-2-3... is a bit uncomfortable for healing, I modified the file to make just to 2-3-4-5, but maybe making it settable in-game would be cooler
- is inspecting player feasable?

Overall it was great and had a lot of fun!

EDIT:
I'm trying to port the healing rework into multiplayer, but even after reading the code in Spells.lua I couldn't manage to do it.
Where/how do I change the healing amount?

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/8]

Unread postby Rodril » 24 Sep 2023, 22:02

Malekitsu wrote: 24 Sep 2023, 01:01 - might be cool an option for Player UI don't go away when players are a bit distant, but to keep it permanent and add opacity when player are in other maps. Being able then to change party order instead of being "loading" order would be even better.
- ctrl+1-2-3... is a bit uncomfortable for healing, I modified the file to make just to 2-3-4-5, but maybe making it settable in-game would be cooler
Unfortunately, MM engine does not support transparency, icon is either shown or not.
I'll add an option to keep players on same map displayed in the UI, despite the distance.
2-3-4-5 would overlap selection of players in your party, would you have more than one. I'll allow to change these keybinds in multiplayer settings.
Malekitsu wrote: 24 Sep 2023, 01:01 - is inspecting player feasable?
Not in foreseen future. Text information about stats, skills, spells, can be added relatively easy, but paperdoll and inventory inspection is not possible with existing tools.
Malekitsu wrote: 24 Sep 2023, 01:01 I'm trying to port the healing rework into multiplayer, but even after reading the code in Spells.lua I couldn't manage to do it.
Where/how do I change the healing amount?
You should not need to modify Spells.lua. That script only notifies remote players about spell being casted, it's skill level and target (there are little tweaks to allow some spells to select monster as target, rather than only player, but nothing related to spell values). MMMerge provides PlayerCastSpell event, where you can try to change spell behaivor, check bottom of this file:
https://gitlab.com/letr.rod/mmmerge/-/b ... type=heads
If TargetKind is 4, it is player, TargetId will be party id. If TargetKind is 3, it is monster, and TargetId is index of Map.Monsters. You could directly change HP of target in this handler with proper formula, and set skill and mastery to 0 to bypass change by engine, but keep animation shown. There's a mistake at the moment: skill and mastery won't match with one remote player have, but i'll fix it soon.
I don't remember if i ever changed spell formulas, tho, i think these are hardcoded.

User avatar
Mercs
Peasant
Peasant
Posts: 61
Joined: 19 Sep 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/11]

Unread postby Mercs » 24 Sep 2023, 23:52

Single target projectiles are really weird vs party members. At some points I tested Firebolt on other players and they were never hit by it. At other times, literally everyone I attacked were hit by firebolt, or the projectile would actually pass through them, yet they would still receive damage.

Is single target attacks vs. players actually intended? For some reason, when I discussed it before I always assumed only AoE damage will have friendly fire properties.

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/11]

Unread postby Rodril » 25 Sep 2023, 09:20

rampage77t wrote: 23 Sep 2023, 15:37 Finally we were able to complete the 3 continents, but I think something strange happened and it does not allow us to advance with the verdant missions, in the list of missions we have 2 missions left, one which is to enter the elemental planes and the other to obtain the metal that is found in Alvar's dungeon where you get Baltazar's axe, therein lies the problem since we already completed that mission and gave it to her but when talking to her she says that it is not complete, and of course since the metal is no longer there There is no way to turn it in again and continue with the missions. If you can give me a solution I would greatly appreciate it.
These missions are parts of telelocator quest, which you don't need for game ending. Have you tried to use town portal spell on ruins of Escaton's Crystal in Ravenshore? It should move you to final location. If it does not, could you execute this code in debug console, and send me what it says:

Code: Select all

print(dump(vars.Quest_CrossContinents.ContinentFinished), Party.QBits[56], Party.QBits[784], Party.QBits[633])
ctrl + f1 to open console, ctrl + enter to execute.
Infused metal rod will reappear in the chest after map refill. Or, if you already found it once, Oracle at Ravenshore can give it to you via "Lost It" topic.
Mercs wrote:Is single target attacks vs. players actually intended?
Yes, every projectile should do friendly damage. Only melee attacks should not. Currently arrows are not doing any damage, that i have not looked in yet. I will do some objects testings (since they reported to cause crash) and will comment their behaivor later.

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/11]

Unread postby Malekitsu » 28 Sep 2023, 08:54

2 more bug report:
1) Clients will lose some memberships everytime they connect to the game like earth magic guild in Harmondale. Some of them still work.
2) Clients will lose map exploration everytime they connect to the game and be resetted as it was the first time entering the map.

User avatar
Mercs
Peasant
Peasant
Posts: 61
Joined: 19 Sep 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/11]

Unread postby Mercs » 29 Sep 2023, 02:19

1. crashed a few times on entering stone city with no console. similar bug actually ended one of my single player campaigns long ago, stone city just won't allow in. usually much earlier saves helped.
2. only the first player able to play Arcomage cuz others have no deck (MM7)
3. sometimes when i try to heal others through number shortcut I get console error, but I didn't seem to have saved text for it, another time. not sure if this is vanilla number-casting issue or due to Malekith's update where the functionality would no longer require Ctrl button

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/12]

Unread postby Rodril » 30 Sep 2023, 19:03

Hello, updating vesrion to 23.07.2023/12.
-- Option to change keybinds of remote players UI (toggle button can be keybinded too now);
-- PlayerCastSpell event should properly handle change in skill and mastery;
-- Various player sounds will be emited now for remote players, sounds are categorized, categories can be toggled in multiplayer settings;
-- Some fixes were made in regard to player clones and weird objects behaivor on map load.

Unfortunately i could not reproduce crashes caused by object pickup and Stone City entrance. Map explorations and guilds membership fixes are not there either.
Mercs wrote: 2. only the first player able to play Arcomage cuz others have no deck (MM7)
At the moment you could use workaround - duplicate cards at mm7 Oracle (drop cards and use "Lost It" topic). I'll think what to do with fact that there's only one deck, and tavern checks whether player possess it.

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/12]

Unread postby Malekitsu » 01 Oct 2023, 18:52

Rodril wrote: 30 Sep 2023, 19:03 Hello, updating vesrion to 23.07.2023/12.
-- Option to change keybinds of remote players UI (toggle button can be keybinded too now);
-- PlayerCastSpell event should properly handle change in skill and mastery;
-- Various player sounds will be emited now for remote players, sounds are categorized, categories can be toggled in multiplayer settings;
-- Some fixes were made in regard to player clones and weird objects behaivor on map load.
great update!
I've managed to do some online code to easily send mapvars, not sure there is some easier way to do it:

Code: Select all

function mawmapvarsend(name,value)
	if not Multiplayer then return end
	maw={}
	maw[0]="maw mapvar"
	maw[1]=name
	maw[2]=value
	Multiplayer.broadcast_mapdata(maw)
end

function events.MultiplayerUserdataArrived(t)
	if t[0]=="maw mapvar" then
		mapvars[t[1]]=t[2]
	end
end
^this to broadcast required mapvars, basically I call the function in the map file when an event is triggered.

Down here is the healing code, I figured out that with Multiplayer.client_monsters() I can get the corresponding target index called by the spell event, but I didn't figure out how to see which number you have currently.
Another even better way would be to send the broadcast only to the targeted player.
Not sure if you have any advice for me, here is the code:

Code: Select all

function events.PlayerCastSpell(t)
	if Multiplayer	 and t.SpellId==68 and t.TargetKind==3 and t.Mastery>0 then
		--return if target is not an online teammate
		if not table.find(Multiplayer.client_monsters(),t.TargetId) then
			return
		end
		--healing calculation
		local persBonus=Party[Game.CurrentPlayer]:GetPersonality()/1000
		local intBonus=Party[Game.CurrentPlayer]:GetIntellect()/1000
		local statBonus=math.max(persBonus,intBonus)
		local crit=Party[Game.CurrentPlayer]:GetLuck()/1500+0.05
		local baseHeal=(5+(t.Mastery+1)*t.Skill)
		local extraHeal=baseHeal*statBonus
		roll=math.random()
		local gotCrit=false
		if roll<crit then
			extraHeal=(extraHeal+baseHeal)*(1.5+statBonus*3/2)-baseHeal
			gotCrit=true
		end
		if gotCrit then
			Sleep(1)
			Game.ShowStatusText(string.format("You Heal for " .. math.round(baseHeal+extraHeal) .. " Hit points(crit)"))
		else
			Sleep(1)
			Game.ShowStatusText(string.format("You Heal for " .. math.round(baseHeal+extraHeal) .. " Hit points"))
		end
		--end of healing calculation
		healData={}
		healData[0]="heal"
		healData[1]=math.round(extraHeal)
		healData[2]=gotCrit
		healData[3]=t.Player.Name
		healData[4]=math.round(baseHeal+extraHeal)
		healData[5]=true
		Multiplayer.broadcast_mapdata(healData)
	end
	if Multiplayer and t.SpellId==68 and t.TargetKind==4 then
		if healData and healData[1] then
			Party[t.TargetId].HP=Party[t.TargetId].HP+healData[1]
			if Party.High==0 then
				Sleep(1)
				Game.ShowStatusText(string.format(healData[3] .. " critical heals you for " .. healData[4] .. " hit points"))
			elseif	healData[2] then
				Sleep(1)
				Game.ShowStatusText(string.format(healData[3] .. " critical heals " .. Party[t.TargetId].Name .. " for " .. healData[4] .. " hit points"))
			else
				Sleep(1)
				Game.ShowStatusText(string.format(healData[3] .. " heals " .. Party[t.TargetId].Name .. " for " .. healData[4] .. " hit points"))
			end
			healData[1]=false
			Multiplayer.broadcast_mapdata(healCast)
		end
	end
end

function events.MultiplayerUserdataArrived(t)
	if t[0]=="heal" then
		for i=0,5 do
			healData[i]=t[i]
		end
	end
end

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/12]

Unread postby Rodril » 02 Oct 2023, 22:54

Malekitsu wrote: 01 Oct 2023, 18:52 ^this to broadcast required mapvars, basically I call the function in the map file when an event is triggered.
I see the problem, multiplayer does not allow to define exact remote player upon receiving heal. Best solution would be if all calculations could be done inside PlayerCastSpell event, without sending additional data (there's no gurantees, it will arrive before PlayerCastSpell on remote side, so this data should be sent in same packet). I need to think more, maybe i'll change spell handling a bit. Will update on this issue soon. At the moment, you might find this useful:

Try to use this approach, it is basicaly same, but readability is better:

Code: Select all

Multiplayer.allow_remote_event("MAWMapvarArrived")
function mawmapvarsend(name,value)
	if not Multiplayer then return end
	maw={}
	maw[1]=name
	maw[2]=value
	Multiplayer.broadcast_mapdata(maw, "MAWMapvarArrived")
end

function events.MAWMapvarArrived(t)
	mapvars[t[1]]=t[2]
end
For heal amount transfer:

Code: Select all

table.find(Multiplayer.client_monsters(),t.TargetId) -- this returns id of client, who posess this monster, so it can be changed to
local client_id = table.find(Multiplayer.client_monsters(), t.TargetId)
-- or alias:
local client_id = Multiplayer.posessed_by_player(t.TargetId) -- return value is client id if monster posessed, otherwise - nil
-- client_id can be broadcasted along, so receiving player will be able to define whether he or someone else is target, by comparing received client id with Multiplayer.my_id.

-- So you can do this:
local client_id = Multiplayer.posessed_by_player(t.TargetId)
if not client_id then
	return -- target is not remote player
end
...
healData[5]=true
healData[6]=client_id
Multiplayer.broadcast_mapdata(healData, "MAWRemoteHeal")

-- and then:
local client_id = t[6]
if client_id == Multiplayer.my_id then
	...
else
	-- optionally tell other players, what happened
end
Also, it is unnecessary to transfer name, you could use this with client id on receiver side:

Code: Select all

local name = Multiplayer.client_name(client_id, true, false) -- 2nd parameter - show class, 3rd - show condition

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/12]

Unread postby Malekitsu » 03 Oct 2023, 00:55

Rodril wrote: 02 Oct 2023, 22:54 I see the problem, multiplayer does not allow to define exact remote player upon receiving heal. Best solution would be if all calculations could be done inside PlayerCastSpell event, without sending additional data (there's no gurantees, it will arrive before PlayerCastSpell on remote side, so this data should be sent in same packet). I need to think more, maybe i'll change spell handling a bit. Will update on this issue soon. At the moment, you might find this useful:
Thanks! The code provided will be very useful, as I'll be able to pinpoint players who are supposed to receive the data.
As for the spell code to make it easier it would be cool receiving info about the caster in both clients, as currently the receiver gets the controller monster stats and not the actual party unless I'm missing something.
I guess the "easy" way to modify amount healed would be to modify the spell skill, but has lot of limitations.

Will come back with more news, unfortunately testing stuff multiplayer is really hard(don't have a 2nd pc).

EDIT:
so far the code was all in scripts/general, but:

Code: Select all

Multiplayer.allow_remote_event("MAWMapvarArrived")
Will return error unless it's inside something like events.GameInitialized2.
Shall I change folder to do such online stuff?

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Rodril » 06 Oct 2023, 09:59

I've added support for spell data transfer, thus updating version name to 23.07.2023/13, so mod will ensure all players within game have this addition.
Malekitsu wrote: 03 Oct 2023, 00:55 so far the code was all in scripts/general, but:

Code: Select all

Multiplayer.allow_remote_event("MAWMapvarArrived")
Will return error unless it's inside something like events.GameInitialized2.
Shall I change folder to do such online stuff?
It should be inside events.MultiplayerInitialized(), before this event fired, "Multiplayer.allow_remote_event" simply does not exist.

Heal spell logic with today's change could look lite this:

Code: Select all

function events.PlayerCastSpell(t)

	if Multiplayer and t.SpellId == 68 and t.TargetKind == 3 and t.Mastery > 0 then
		--return if target is not an online teammate
		if not table.find(Multiplayer.client_monsters(),t.TargetId) then
			return
		end
		--healing calculation
		local persBonus= t.Player:GetPersonality()/1000
		local intBonus=t.Player:GetIntellect()/1000
		local statBonus=math.max(persBonus,intBonus)
		local crit=t.Player:GetLuck()/1500+0.05
		local baseHeal=(5+(t.Mastery+1)*t.Skill)
		local extraHeal=baseHeal*statBonus
		roll=math.random()
		local gotCrit=false
		if roll<crit then
			extraHeal=(extraHeal+baseHeal)*(1.5+statBonus*3/2)-baseHeal
			gotCrit=true
		end
		if gotCrit then
			Sleep(1)
			Game.ShowStatusText(string.format("You Heal for " .. math.round(baseHeal+extraHeal) .. " Hit points(crit)"))
		else
			Sleep(1)
			Game.ShowStatusText(string.format("You Heal for " .. math.round(baseHeal+extraHeal) .. " Hit points"))
		end
		--end of healing calculation

		t.MultiplayerData[1]=math.round(extraHeal)
		t.MultiplayerData[2]=gotCrit
		t.MultiplayerData[3]="" -- name will be generated on remote side
		t.MultiplayerData[4]=math.round(baseHeal+extraHeal)
		t.MultiplayerData[5]=true
	end

	if Multiplayer and t.SpellId == 68 and t.TargetKind == 4 and t.RemoteData then
		local healData = t.RemoteData
		local name = Multiplayer.client_name(t.RemoteData.client_id)

		Party[t.TargetId].HP=Party[t.TargetId].HP+healData[1]
		if Party.High==0 then
			Sleep(1)
			Game.ShowStatusText(string.format(name .. " critical heals you for " .. healData[4] .. " hit points"))
		elseif	healData[2] then
			Sleep(1)
			Game.ShowStatusText(string.format(name .. " critical heals " .. Party[t.TargetId].Name .. " for " .. healData[4] .. " hit points"))
		else
			Sleep(1)
			Game.ShowStatusText(string.format(name .. " heals " .. Party[t.TargetId].Name .. " for " .. healData[4] .. " hit points"))
		end
		healData[1]=false
	end

end
PlayerCastSpell now have tow additional fields in it's data:
t.MultiplayerData - empty table, whatever you put in it will be transferred to remote player targeted by this spell.
t.RemoteData - table with content arrived from caster, it has one predefined field - "client_id" - mulriplayer id of player, who casted the spell.
t.MultiplayerData and t.RemoteData will be nil, if spell does not dupport data transfer.

This approach is supported for limited range of spells - only for buffs, because offensive spells do not trigger PlayerCastSpell event, and some buffs also handled in special way. Supported spells:

Code: Select all

3	FireResistance
5	Haste
8	Immolation
12	WizardEye
13	FeatherFall
14	AirResistance
17	Shield
19	Invisibility
23	Awaken
25	WaterResistance
31	TownPortal
36	EarthResistance
38	StoneSkin
40	StoneToFlesh
45	DetectLife
46	Bless
47	Fate
49	RemoveCurse
50	Preservation
51	Heroism
53	RaiseDead
55	Resurrection
57	RemoveFear
58	MindResistance
61	CureParalysis
64	CureInsanity
67	CureWeakness
68	Heal
69	BodyResistance
71	Regeneration
72	CurePoison
73	Hammerhands
74	CureDisease
75	ProtectionFromMagic
77	PowerCure
83	DayOfTheGods
85	DayOfProtection
86	HourOfPower
88	DivineIntervention
89	Reanimate
95	PainReflection
98	Armageddon
101	TravelersBoon
If you ever need option to send some data directly to specific player, you'll have to setup your own packet, readme has detailed example, here is brief one (script to be used in "General" folder):

Code: Select all

-- Play sound, whenever remote player selected as any spell target

local packets

function events.MultiplayerInitialized()
	packets = {
		play_sound  = {
			bulb = function(sound_id)
				return Multiplayer.utils.item_to_bin(sound_id)
			end,
			handler = function(bin_string, metadata)
				local sound_id = Multiplayer.utils.binstr_to_item(bin_string)
				Game.PlaySound(sound_id)
			end,
			same_map_only = true,
			check_delivery = true,
			compress = false
		}
	}
	Multiplayer.utils.init_packets(packets)
end

function events.PlayerCastSpell(t)
	if t.TargetKind == 3 then
		local client_id = Multiplayer.posessed_by_player(t.TargetId)
		if client_id then
			Multiplayer.add_to_send_queue(client_id, packets.play_sound:prep(130)) -- 130 - is luteguitar sound id
		end
	end
end
Malekitsu wrote: Will come back with more news, unfortunately testing stuff multiplayer is really hard(don't have a 2nd pc).
I've modified GOG executable file a bit, to allow to boot the game, despite one window is already open, but you'll need separate game folder for every copy, otherwise it will cause data access conflicts. Thus you can boot two windows of the game, and connect them to each other using LAN connection mode (if you've manually specified multiplayer port, it should be different in both windows):
https://drive.google.com/file/d/1HOLV8s ... sp=sharing

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Malekitsu » 06 Oct 2023, 13:41

Oh my god.
That's a GODLIKE update.
Scripting stuff that works also online will be 10 times easier from now on.
Thanks!

EDIT:
Everything going on great so far with the new code, the only (small) issue I have is that "Game.ShowStatusText()" doesn't show for the caster if target is selected with a keybind, but shows correctly when clicking with mouse.
Receiver works correctly in both situations.

User avatar
Mercs
Peasant
Peasant
Posts: 61
Joined: 19 Sep 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Mercs » 16 Oct 2023, 11:42

One minor inconvenience I have when healing is that, personally, I'd love to use 1,2,3,4,5 after a keybind for heals, where 1 is my own character (just like in single player).

And with one of the latest updates, I can actually keybind these buttons now and it works, but 2-5 are always different players because sometimes not all of them are in range, and they are also called "remote player 1,2,3,4", so I have to keep in mind that when UI says minotaur is "3", I have to increment by 1 and actually press "keybind + 4".

And then minotaur goes out of range entirely and their portrait dissappears, "remote player 4" takes their place as "remote player 3", so I can't just commit to memory that "minotaur is always number four" either, I have to repeat the process of "press keybind -> look at UI, see the number of player -> increment that number by 1 and press it" every time I want to heal. That is probably subjective and a minor inconvenience, but the one I'd rather not have if it can be helped.

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Rodril » 19 Oct 2023, 00:02

Mercs wrote: 16 Oct 2023, 11:42 One minor inconvenience I have when healing is that, personally, I'd love to use 1,2,3,4,5 after a keybind for heals, where 1 is my own character (just like in single player).
I see the problem, but still can not figure out, how to solve it in optimal way. Having thoughts to share.
Simple idea, i have at the moment, is to display actual keybind of slot, instead of it's number. But it won't help, when middle player goes out of range, making upper player occupy previous slot, thus changing keybind.
Harder would be to assign keybinds directly to players in order of their id (basicaly order of joining the game), thus always keeping same keybind for same player, but it all will break in potential case, when there are more players in game, than keybinds available. Every excess player won't have any keybind and will be only targetable by mouse.

User avatar
Mercs
Peasant
Peasant
Posts: 61
Joined: 19 Sep 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Mercs » 20 Oct 2023, 14:21

MM7, last version + MAW:

1. stoned dwarves (hehe) were duplicated for some players in medusa mines - one player would cure a dwarf, dwarf disappears for them, but other players found exact same dwarves still standing there later
2. also in several different dungeons, gold and items would be duplicated for some players - in a sense player would pick up gold that others wouldn't even see at all, while they themselves have collected their copies of said gold/item, it's like personal loot in wow lol
3. rest issues w/ tavern - can't rest if other players are in the "yellow" outside, since there are monsters nearby. easiest to reproduce in stone city with trogs underground.
4. inventory issue - I had inventory of 100% just bottles, 1 slot each, but ~10 slots remained "restricted" to me - I was able to shuffle items from one slot to another in inventory, but when I tried to place some extra item in those slots or buy smth, even bottles of 1-slot size, game would tell me there is no space
5. dying or going insane from rest is still a thing, I think there is something wrong with calculation of time that have passed for every player individually, maybe has to do with how time syncs when one player passes time on one map and then the others enter that map
6. had a weird glitch where a tree object (impassable) spawned at the entrance inside castle Harmondale, preventing entry
7. bounty hunts even work? am yet to see even a single monster spawn on any location when bounty hunts are triggered in MM7
8. promotions broken - at least pala and sorc, if quest handled by another player other than the player of said class - and there is no later option to "promote classes" at NPCs too, like in MM8 - were only able to fix it by using console commands
9. picking up items dropped by other players would often (very often) crash the game for the one picking
10. unlimited experience spamming priest of the dark promotion
Last edited by Mercs on 20 Oct 2023, 22:01, edited 2 times in total.

Tomsod
Demon
Demon
Posts: 303
Joined: 31 Jul 2020

Re: Multiplayer for MMMerge [beta 23.07.2023/13]

Unread postby Tomsod » 20 Oct 2023, 20:48

Mercs wrote: 20 Oct 2023, 14:21 4. inventory issue - I had inventory of 100% just bottles, 1 slot each, but ~10 slots remained "restricted" to me - I was able to shuffle items from one slot to another in inventory, but when I tried to place some extra item in those slots or buy smth, even bottles of 1-slot size, game would tell me there is no space
Four restricted slots would be normal, this is an original engine quirk, but if you have ten already, maybe it's ghost items again.

Rodril
Swordsman
Swordsman
Posts: 558
Joined: 18 Nov 2016

Re: Multiplayer for MMMerge [beta 23.07.2023/14]

Unread postby Rodril » 21 Oct 2023, 04:45

Mercs wrote: 20 Oct 2023, 14:21 MM7, last version + MAW:
...
2. also in several different dungeons, gold and items would be duplicated for some players - in a sense player would pick up gold that others wouldn't even see at all, while they themselves have collected their copies of said gold/item, it's like personal loot in wow lol
...
9. picking up items dropped by other players would often (very often) crash the game for the one picking
...
Update mod files, please. I've changed objects synchronization method, it is not very efficeient, but I need to know, if it affects the issue or not.
I will comment other points later.
edit: messaged Maliketsu in relation to broken promotion topics

User avatar
Malekitsu
Pixie
Pixie
Posts: 120
Joined: 25 May 2022

Re: Multiplayer for MMMerge [beta 23.07.2023/14]

Unread postby Malekitsu » 22 Oct 2023, 20:52

Rodril wrote: 21 Oct 2023, 04:45
Mercs wrote: 20 Oct 2023, 14:21 MM7, last version + MAW:
...
2. also in several different dungeons, gold and items would be duplicated for some players - in a sense player would pick up gold that others wouldn't even see at all, while they themselves have collected their copies of said gold/item, it's like personal loot in wow lol
...
9. picking up items dropped by other players would often (very often) crash the game for the one picking
...
Update mod files, please. I've changed objects synchronization method, it is not very efficeient, but I need to know, if it affects the issue or not.
I will comment other points later.
edit: messaged Maliketsu in relation to broken promotion topics
While we had no crashes this time, MAW uses charges in item field to extabilish extra enchants.
Dropping an item on the ground would cause charges to change kinda randomly deleting items enchant most of the time.

Beside that everything went smooth and clean!


Return to “Might and Magic”

Who is online

Users browsing this forum: Majestic-12 [Bot] and 11 guests