MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

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

Moderator: Moderators

User avatar
Vinevi
Leprechaun
Leprechaun
Posts: 37
Joined: 17 Jul 2017

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby Vinevi » Jun 28 2020, 14:25

For me it turned out that portals are too big of a deal for almost nothing. I mean the performance doesn't seem to drop too badly, probably unless going for a really huge map and automap being revealed right away is alright. So the object mode seems fine as for now. I have made a small sample map using textures from Minecraft as a little showcase:
https://youtu.be/rBuNyAvVqfE
https://imgur.com/a/4WEEUok
The _Invisible_ texture is really helpful for making invisible walls and movement helpers. For example in this map blocks themselves are too high to just step over them so I've used _Invisible_ texture like that:
https://imgur.com/hndpUVz
To make slides to help moving around. Clip texture is used in Quake to achieve similar results.
Last edited by Vinevi on Jun 28 2020, 14:30, edited 4 times in total.

cthscr
Scout
Scout
Posts: 151
Joined: 12 Jan 2020

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby cthscr » Jun 30 2020, 14:45

GrayFace wrote:
cthscr wrote:Oh, I'm already logging them. Problem is two actions 113 are used to quit from subscreen. And I'm unable to do two actions at once [at least yet]. Looks like action 113 supposes to clear actions queue if Param2 is 0. Setting it to something else won't help though.

There's a function for exiting a single house screen: mem.call(mmv(0x4A4AA0, 0x4BD818, 0x4BB3F8), 0) (or Game.ExitHouseScreen() in current version from Github). You can exit all house screens like this:

Code: Select all

while mem.call(mmv(0x4A4AA0, 0x4BD818, 0x4BB3F8), 0) ~= 0 do
end
-- then add action 133 which would close house dialog properly

Also note the ability to call the function that processes actions like this: mem.call(mmv(0x42ADA0, 0x4304D6, 0x42EDD8), 0)

Surprisingly, the easiest method to kick party out of shop was to set this shop ban expiration time into the future (even 2 ticks was enough for me).
MM8, for houses 1 - 52:

Code: Select all

mem.i8[0xB211D4 + 8 * HouseId] = Game.Time + 2

Since I tried to set up ban, I've got exit for free. Found at 0x4431C6.

cthscr
Scout
Scout
Posts: 151
Joined: 12 Jan 2020

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby cthscr » Aug 6 2020, 6:50

GrayFace wrote:

Please take a look at https://gitlab.com/templayer/mmmerge/-/issues/663
There could be a serious flaw in MMExt evt interaction.

User avatar
Vinevi
Leprechaun
Leprechaun
Posts: 37
Joined: 17 Jul 2017

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby Vinevi » Aug 16 2020, 13:01

Is there any way to extend data tables using similar approach as with patch LODs? For example if I were to add a single custom monster I will need to replace the entire tables, which could've been modified prior as well, breaking compatibility with the other mods. By extending I mean creating a separate file with new entries, with some unique prefix. Having something like that will allow making and sharing small scale mods much easier.
Last edited by Vinevi on Aug 16 2020, 13:02, edited 1 time in total.

Rodril
War Dancer
War Dancer
Posts: 353
Joined: 18 Nov 2016

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby Rodril » Aug 16 2020, 14:34

I don't think there is. I'm thinking about it for quiet long time now, but have no idea, how to implement it yet.

User avatar
Vinevi
Leprechaun
Leprechaun
Posts: 37
Joined: 17 Jul 2017

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby Vinevi » Aug 16 2020, 17:56

That will be a really nice addition. In theory it can be done by just appending all extra tables to the main one while the game is loading in a similar way as the bin files are generated, but I know nothing about how the patch works so can't be sure. I remember that the 2D locations are accessed by IDs from the tables so that's probably the most problematic area.
One more idea I had is to have some way for a player to access custom maps. A feature very similar to town mirrors in Swords of Xeen where player is asked for a code word and if it matches something the player will be teleported there. That skips the step where it is necessary to embed a newly created map into the world and is user friendly if made in a form of NPC.
Last edited by Vinevi on Aug 16 2020, 18:01, edited 1 time in total.

User avatar
Anerag
Leprechaun
Leprechaun
Posts: 18
Joined: 20 Jan 2019

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby Anerag » Aug 18 2020, 12:14

After compiling an indoor map in MM6 some double doors break. I believe the merge mod has the same problem. One of the doors opens normally but the other "opens" and leaves an invisible wall. I'd like to know if this will ever get fixed. Are there any workarounds?

Couple of examples I found: first, double door right at the entrance in temple of baa. Second, the very last bit of the abandoned temple, the double doors leading to the room with a chest.

raekuul
Pixie
Pixie
Posts: 136
Joined: 05 Jul 2019

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby raekuul » Aug 18 2020, 18:20

This also happens at the double door in the Lair of the Wolf
You need to install the base mod first, and then install the latest GrayFace patch on top of that.

cthscr
Scout
Scout
Posts: 151
Joined: 12 Jan 2020

Re: MMExtension v2.2 + MMEditor v2.1 Level Editor [June 4, 2019]

Postby cthscr » Sep 9 2020, 15:47

I have an asmpatch:

Code: Select all

   -- Fix Day of the Gods, Deadly Swarm and Flying Fist spell selection for monsters.
   DayGods, DeadlySwarm, FlyingFist = "Day-o-Gods", "Deadly", "Flying"
   mem.asmpatch(0x4524B3, [[
   jnz short @daygods
   push 0x44
   jmp absolute 0x4520EB
   @daygods:
   push ]] .. mem.topointer(DayGods) .. [[;
   push dword ptr [edi+4]
   call absolute 0x4DA920
   test eax, eax
   pop ecx
   pop ecx
   jnz @swarm
   push 0x53
   jmp absolute 0x4520EB
   @swarm:
   push ]] .. mem.topointer(DeadlySwarm) .. [[;
   push dword ptr [edi+4]
   call absolute 0x4DA920
   test eax, eax
   pop ecx
   pop ecx
   jnz @fist
   push 0x25
   jmp absolute 0x452485
   @fist:
   push ]] .. mem.topointer(FlyingFist) .. [[;
   push dword ptr [edi+4]
   call absolute 0x4DA920
   test eax, eax
   pop ecx
   pop ecx
   jnz absolute 0x4524BC
   push 0x4C
   jmp absolute 0x452485
   ]])

If variables were made local, only the pointer to the last one will point to actual ascii data. Should I do it some other way or is it buggy a bit?


Return to “Might and Magic”

Who is online

Users browsing this forum: Google [Bot] and 20 guests