Added to the original report on the Bug Tracker and into the Issue on GitLab.raekuul wrote:Just a quick note on the blasters thing: in 6 and 7, Blaster Skill only affected your To-Hit chance. Damage was based entirely on if it was a Blaster Pistol or a Blaster Rifle.
Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 05.11.2023]
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
MMMerge Tracker (= Info + Paint Tracker + Missing Features + Suggestions):
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Uploading the base merge to my server.
MMMerge Tracker (= Info + Paint Tracker + Missing Features + Suggestions):
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
- LadySoulCrystal
- Leprechaun
- Posts: 13
- Joined: 11 Feb 2020
- Location: Luminous stone
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Per BugTracker:
"Reported by: Piottor » Mar 10 2019, 1:53
Side note: After completing Tomb of Varn, going inside of Control Room, then outside sky textures in many cities started to be...distroted of sorts...usually helped to just sleep in an inn and they gone away...first time I encountered "buggy" graphics so far...idk if it is even related to the VARN or ConRoom..."
Just wanted to let you all know i experienced this skybox glitch after completing Castle Darkmoor and getting the Memory Crystal as well as destroying the Book of Liches. Could just be issues with the game pulling the skybox texture after the player has been in a dungeon for so long. I had to save and exit before my skybox would fix itself (tried saving and reloading but the texture was still skewed).
EDIT:
Unrelated, went to go boot up my game this morning and was hit with this script and then an infinite death cutscene. Earlier save loaded fine, wasn't sure if this needed to be reported as i can't make too much of the script. Looks like something is out of bounds, but what?
"Reported by: Piottor » Mar 10 2019, 1:53
Side note: After completing Tomb of Varn, going inside of Control Room, then outside sky textures in many cities started to be...distroted of sorts...usually helped to just sleep in an inn and they gone away...first time I encountered "buggy" graphics so far...idk if it is even related to the VARN or ConRoom..."
Just wanted to let you all know i experienced this skybox glitch after completing Castle Darkmoor and getting the Memory Crystal as well as destroying the Book of Liches. Could just be issues with the game pulling the skybox texture after the player has been in a dungeon for so long. I had to save and exit before my skybox would fix itself (tried saving and reloading but the texture was still skewed).
EDIT:
Unrelated, went to go boot up my game this morning and was hit with this script and then an infinite death cutscene. Earlier save loaded fine, wasn't sure if this needed to be reported as i can't make too much of the script. Looks like something is out of bounds, but what?
Code: Select all
Scripts/Core/RSMem.lua:1383: array index (0) out of bounds [0, -1]
stack traceback:
[C]: in function 'error'
Scripts/Core/RSMem.lua:1342: in function '__index'
Scripts/Core/RSMem.lua:1383: in function '__index'
...mes\Might and Magic 8\Scripts\General\NPCMercenaries.lua:578: in function 'v'
Scripts/Core/EventsList.lua:68: in function <Scripts/Core/EventsList.lua:63>
arguments of '__index':
t = (table: 0x2566f638)
a = 0
v = nil
local variables of '__index':
aorig = 0
a1 = 0
n = 0
upvalues of '__index':
ptr = nil
u4 = (table: 0x057b5e88)
GetPtr = (function: 0x057a1a18)
obj = (table: 0x05a8f958)
o = 12044876
assertnum = (function: 0x05770dc8)
error = (function: 0x0579a080)
type = (function: builtin#3)
SetLen = (function: 0x05a7fde8)
low = 0
GetLen = (function: 0x05a88320)
lenP = 12044896
lenA = (table: 0x057a1ef0)
count = 5
size = 4
_index = nil
_newindex = nil
tonumber = (function: builtin#17)
beyondLen = nil
f = (function: 0x05b0d1b8)
format = (function: builtin#91)
sOutOfBounds = "array index (%s) out of bounds [%s, %s]"
tostring = (function: builtin#18)
tostring2 = (function: 0x0579d8a8)
-----------------------------------------------------------------------------------
>
Last edited by LadySoulCrystal on 12 Feb 2020, 14:24, edited 1 time in total.
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
If by any chance you still have that savegame, can you please share it or give the output of following code running in debug console (output shouldn't be too small):joanthedark wrote:Luckily I had a save just before unmasking the council's traitor (because I like the cutscene), so I loaded it to see if the placeholder text was also there since I don't remember seeing it on my first playthrough:
Code: Select all
local FromFile = {}
local function GetFromFile(fname, n, col, quotes, headRows)
if not FromFile[fname] then
local t = {}
FromFile[fname] = t
for s in Game.LoadTextFileFromLod(fname):gmatch("\r\n"..("[^\t]*\t"):rep(col-1).."([^\t]*)") do
t[#t+1] = (s:sub(1,1) == '"' and s:sub(2, -2) or s)
end
for i = 1, (headRows or 1) - 1 do
t[i] = nil
end
end
local s = FromFile[fname][n]
if s then
return quotes and '"'..s..'"' or s
else
return "not found!"
end
end
for i=1, 1719 do
if Party.QBits[i] == true then
print(i..": "..tostring(Party.QBits[i]).." - "..GetFromFile("quests.txt", i, 3))
end
end
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
I've uploaded it to my website. I hope I got the right files. Anyway:Templayer wrote:I can probably just post it on my server. With direct link access, nonetheless.cthscr wrote:They give bonus to newly registered users that download & install their desktop app.TheAnyKey wrote:Hello. I cannot seem to download the mod. At the Mega.nz link the download stops at about 80% and I'm told "Transfer Quota exceeded". I have also installed the Mega download manager but I can still only download about 80%.
But let's ask @Pol to host it here at CH if possible.
Pol, is it possible to host Merge pack here?Pol wrote:False quote because Templayer says that Shift+2 addressing doesn't work.
Same with a whole new forum for the Merge, if people want that.![]()
If you want me to do it like that, just ask. For the files hosting, I mean.
http://www.templayer.cz/storage/MM678_22.09.2019.zip
http://www.templayer.cz/storage/MM678%2 ... 0.2019.zip
If you cannot enter www.templayer.cz -> use an VPN or a site unlocker - personaly, sometimes I have to use https://proxysite.cc/ for some websites (I do not know why my provider is blocking nexusmods.com for example...)
MMMerge Tracker (= Info + Paint Tracker + Missing Features + Suggestions):
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
https://goo.gl/ui24Bz
Anybody can view or suggest edits.
Dedicated MMMerge Forum (Bug Tracker included): shorturl.at/lryAF
-
- Peasant
- Posts: 76
- Joined: 27 May 2017
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Just in case you meant the savefile before unmasking the traitor, where no placeholder text is visible, here it is:cthscr wrote:If by any chance you still have that savegame, can you please share it
https://www.mediafire.com/file/mvq4rrl5 ... 1.dod/file
I named it 001 just in case you want to compare both savefiles.
Templayer made a backup of the savefile that has the placeholder text in both The Council and The Oracle, although that save focuses more on testing the Blaster damage so it's located in Castle Ironfist, you will have to Town Portal to Free Haven to see it.
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Thank you!joanthedark wrote:Just in case you meant the savefile before unmasking the traitor, where no placeholder text is visible, here it is:cthscr wrote:If by any chance you still have that savegame, can you please share it
Well, skill description indeed says about Attack increase only.joanthedark wrote:Templayer made a backup of the savefile that has the placeholder text in both The Council and The Oracle, although that save focuses more on testing the Blaster damage so it's located in Castle Ironfist, you will have to Town Portal to Free Haven to see it.
-
- Peasant
- Posts: 76
- Joined: 27 May 2017
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
It might still be worth checking out its numbers, because I also did not notice any difference with its chance to hit.cthscr wrote:Well, skill description indeed says about Attack increase only.
-
- Peasant
- Posts: 76
- Joined: 27 May 2017
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Is there any way to choose which place you want to go while changing continents? No matter how many times I reload I cannot seem to be able to teleport to Emerald Island anymore. A console command maybe?
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
1. Has the shooting recovery speed been lowered to 30, same as melee attacks? It was once 0 with GrayFace's mod, then it was lowered to 5. In Merged the shooting recovery seems to be at 30. Can someone confirm that?
2. What does the Peasant class do? Is there some hidden skill set to that class? Is it meant as a challenge?
2. What does the Peasant class do? Is there some hidden skill set to that class? Is it meant as a challenge?
Last edited by TheAnyKey on 13 Feb 2020, 07:05, edited 1 time in total.
- SpectralDragon
- Swordsman
- Posts: 579
- Joined: 15 May 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
"Peasant" is basically a "class" for all standard MM6 and MM7 people you hire where they have no skills at all, not even racial ones (since MM6 and MM7 people you hire don˙t need those skills, as they˙re giving you benfits on their own). It´s meant as a sort of a hardcore challenge and once Peasants reach level 1, then they˙re supposed to get their actual class (via training in MMMerge from my last info) like Knight, Ranger, Thief ...TheAnyKey wrote: 2. What does the Peasant class do? Is there some hidden skill set to that class? Is it meant as a challenge?
Given that Rodril is been missing for so long, I wish you good luck with it. Seriously, kind of like how I need it in order to try my hand in adding different dragons in the default MM8 nowadays, so that Browns, Reds, Golds and Blacks are all selectable. ^^;Templayer wrote:Uploading the base merge to my server.
Yes?
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
joanthedark wrote:Is there any way to choose which place you want to go while changing continents? No matter how many times I reload I cannot seem to be able to teleport to Emerald Island anymore. A console command maybe?
Code: Select all
evt[0].MoveToMap{0,0,0,0,0,0,0,0,"7out01.odm"}
-
- Peasant
- Posts: 76
- Joined: 27 May 2017
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Thank you for the command!cthscr wrote:joanthedark wrote:Is there any way to choose which place you want to go while changing continents? No matter how many times I reload I cannot seem to be able to teleport to Emerald Island anymore. A console command maybe?Note for Templayer: I didn't know that command 5 minutes ago. Manuals are good thing.Code: Select all
evt[0].MoveToMap{0,0,0,0,0,0,0,0,"7out01.odm"}
I believe it is imperative to teleport any parties who started in Enroth or Jadame continents to Emerald Island as soon as they try to Town Portal to Antagarich continent, otherwise you will have stuff like this:

Lord Markham is not in his throne room in Tatalia because we never triggered (or finished) the Emerald Island quest, no idea if it's intentional.
You also miss out on Mr. Malwick's subquest which can only trigger in Emerald Island.
The good thing is that as soon as I entered the command provided by cthscr I got the second MM7 cutscene (Lord Markham speech in Emerald Island's treasure hunt) and all the fetch quests for the hunt were added to my quest log, meaning I can start MM7 as if my first continent choice was Antagarich. Hopefully this also means Lord Markham will be in Tatalia but I'll continue playing later and figure that out.
I would like to know what you guys think about it, should all parties who didn't start in Antagarich be teleported to Emerald Island as soon as they try out any MM7 content? Seems like there will be less headaches this way, otherwise you would be "forced" to always select Antagarich everytime you make a new game or you'll miss out some content.
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
I should just like to point out that there's supposed to be a Map NPC that gives you the Scavenger Hunt Invitation when you go to Erathia-Erathia (in the same vein as the NPC that gives you the Quest To Pick A New Arbiter), but he only shows up on certain days as opposed to when you first enter the map.
Forcing the first TP for a continent to a specific map is a good idea though.
Forcing the first TP for a continent to a specific map is a good idea though.
Last edited by raekuul on 13 Feb 2020, 23:05, edited 1 time in total.
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
of course he cant be in tatalia ... he waits for you to win on emerald island.joanthedark wrote:
Thank you for the command!
I believe it is imperative to teleport any parties who started in Enroth or Jadame continents to Emerald Island as soon as they try to Town Portal to Antagarich continent, otherwise you will have stuff like this:
Lord Markham is not in his throne room in Tatalia because we never triggered (or finished) the Emerald Island quest, no idea if it's intentional.
mm7 vanilla wasnt meant to begin at another location (like townportaling in from somewhere else), so i think its hardcoded somehow.
V2: Compendium of mm6-8 Secrets + Details about the base merge and DaveHer's redone merge (its in english!)
https://www.mightandmagicworld.de/fileb ... index.html
https://www.mightandmagicworld.de/fileb ... index.html
- SpectralDragon
- Swordsman
- Posts: 579
- Joined: 15 May 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Pals, when it comes to Templayer, https://youtu.be/8SzKH5JZIk4
Might take a while for him to show up, so for now, we gotta do what we have.
Might take a while for him to show up, so for now, we gotta do what we have.
Yes?
-
- Pixie
- Posts: 119
- Joined: 20 Jun 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
Why, thank you. Most importantly because I didn't know you had a bugfix-only branchTemplayer wrote: The bug has been fixed by cthscr.
You can either download the Community Branch of the Merge, or the Base Merge branch with fixes.

-
- Pixie
- Posts: 119
- Joined: 20 Jun 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
More on my stupidity(*):
After you finish, put the youknowwhat youknowwhere and you'll find yourself... well, I was in New Sorpigal, at the beginning of the game.
I went to the fountain to see if I could summon Verdant to checkif it was a restart-the-game or there was something new, clicked space, accidentally found myself speaking to a useless NPC that looks just like one from my team.
When I clicked on joined and got a new peasant you could have heard my curses from miles away, it appears that not only you can start with a full team, you also don't need to check gyms to recruit NPCs if you're ok with peasants

(*) ok, technically more like not wasting my time talking to useless NPCs
After you finish, put the youknowwhat youknowwhere and you'll find yourself... well, I was in New Sorpigal, at the beginning of the game.
I went to the fountain to see if I could summon Verdant to checkif it was a restart-the-game or there was something new, clicked space, accidentally found myself speaking to a useless NPC that looks just like one from my team.
When I clicked on joined and got a new peasant you could have heard my curses from miles away, it appears that not only you can start with a full team, you also don't need to check gyms to recruit NPCs if you're ok with peasants



(*) ok, technically more like not wasting my time talking to useless NPCs
-
- Pixie
- Posts: 119
- Joined: 20 Jun 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
And btw, since some bugs seem to rely on having (or not having) some old savegame, a silly script that I've been using for that purpose:
For those with a unix shell (aka not on windows)
For the remaining 99%, save this as "filename.js":
What both of them do is keep a copy of every version every time you save (assuming you don't save more than once every few seconds, or you may miss a few seconds).
The windows version is especially hideous, I'll deny having written it... if anyone wants to write a more decent version be my guest; just please write it in something that requires as little effort as possible for nontechnical people (that's why I avoided powershell or compiled languages).
For those with a unix shell (aka not on windows)
Code: Select all
#! /bin/sh
set -u
# Run under setlock -n or suffer.
printusage() {
echo "Usage: $0 [-aes]"
echo "keep snapshot of mm6/7/8 saves"
echo " -a keeps autosaves"
echo " -e keeps everything (even \"my first.mm6\")"
echo " -s keeps only saveNNN"
}
readonly onlySaveNNN='saveNNN.xyz'
readonly includeAutosave='also autosave'
readonly includeEverything='allofthem'
WANTED="$onlySaveNNN"
while getopts ":aesh" Option ; do # autosave etc
case $Option in
(a) WANTED=$includeAutosave ;;
(e) WANTED=$includeEverything ;;
(s) WANTED=$onlySaveNNN ;;
(h) printusage ; exit 0;;
(*) echo >&2 unknown option "$OPTARG" ; exit 100;;
esac
done
shift $((OPTIND - 1))
test $# -eq 1 || { echo>&2 "Usage: $0 \$Saves -- no autodetect"; exit 100; }
cd "$1" || exit
case "$PWD" in
(*Saves) ;;
(*) echo>&2 "give me the Saves directory..."; exit 100;;
esac
# stat(1) is different on BSD/linux...
if stat --help >/dev/null ; then
timestamp() {
# FIXME NO WAY to specify timestamp format
# %y this one is BAD for windows
# %Y is unreadable (seconds since the epoch)
stat -c '%y' "$@"
}
else
# TODO untested
timestamp() {
# -f %m: print mtime
# -t fmt is like strftime
stat -t '%F_%T' -f '%m' "$@"
}
fi
# Not really needed, I just like reflinks.
if cp --help|grep>/dev/null reflink ; then
copy() {
cp --reflink=auto -p "$@"
}
else
copy() { cp -p "$@" ; }
fi
want() {
local fname="$1"
test $WANTED = $includeEverything && return
case "$fname" in
(autosave.*) test "$WANTED" = "$includeAutosave" ;;
(save[0-9][0-9][0-9].*) true ;;
(*) false ;;
esac
}
snapshot() {
local i # puke
for i in *.mm6 *.mm7 *.dod ; do
test -e "$i" || continue
want "$i" || continue
local dir ts dest
dir=timeline/"$i"
test -d "$dir" || mkdir -p "$dir" || exit
ts="$(timestamp "$i")" || exit
dest="$dir/$ts $i"
test -e "$dest" && continue
echo "bkup $i to $dest"
#logger "bkup $i to $dest"
copy "$i" "$dest" || exit
done
}
trypolling() {
# as of 3.14-8 inotify --help exits FAILURE
#inotifywait --help >/dev/null || return
type inotifywait >/dev/null || return
while : ; do
snapshot
# -t timeout => exit 2, but it's DOCUMENTED to be so :D
inotifywait -q -t 2687 -e modify . && continue
e=$?
test $e -eq 2 && continue
return $e
done
}
justdoit() {
while : ; do
snapshot
sleep 13
done
}
trypolling || justdoit
# mm6 --> mm7 --> dod (of course)
Code: Select all
// mm678 merge => keep a timeline of saves, to report bugs etc.
// to use a different directory, pass it as the only argument, as in:
// cscript this-file.js "C:\path\to\game\Saves"
//
// TODO translate to powershell/jscript/whatever is nice to have on windows for non developers
// TODO on windows don't close the cmd window or something
// powershell -ExecutionPolicy Unrestricted -File nameofthisfile
// also, slow startup => jscript/vbscript?
// omg, the JScript docs are horrible!
function getenv(s) {
var objShell = WScript.CreateObject("WScript.Shell")
// expands "%PATH%" to $PATH, but "%FOO%" stays "%FOO%"!!!
var tmp = "%" + s + "%"
var ret = objShell.ExpandEnvironmentStrings(tmp)
objShell = null
if(ret.localeCompare(tmp) == 0)
return null
return ret
}
if(getenv("PATH") == null) throw "null PATH"
if(getenv("asdf") != null) throw "asdf"
// smart enough to replace echo with popups if not run with cscript;
// good, but it means we keep getting popups if we run by opening the file :D
function echo(msg) {
var silent = true;
if(silent) return
WScript.Echo(msg)
}
// Modify the locations below to match your setup
// (or pass an argument to this script)
function WINEPREFIX() {
// *nix => separate $WINEPREFIX in $HOME for each program
return catfile(getenv("HOME"), "Might & Magic 6+7+8/drive_c/drive_c/Program Files (x86)/3DO/Might and Magic VIII/Saves");
}
function VirtualStore() {
// windows => %LOCALAPPDATA%\VirtualStore
return catfile(getenv("LOCALAPPDATA"), "VirtualStore/Program Files (x86)/3DO/Might and Magic VIII/Saves");
}
function savesDirectory() {
if (getenv("HOME") != null) {
return WINEPREFIX();
}
if (getenv("LOCALAPPDATA") != null) {
return VirtualStore();
}
throw "Saves directory?"
}
function directoryexists(d) {
var fso = WScript.CreateObject("Scripting.FileSystemObject")
return fso.FolderExists(d)
}
function flock(path) {
var fs = WScript.CreateObject("Scripting.FileSystemObject")
if(!fileexists(path)) {
fs.CreateTextFile(path)
}
var f = fs.GetFile(path)
// puke!
var ForReading = 1, ForWriting = 2, ForAppending = 8
var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
// windows locks automagically
// If the lock is already taken, it says "permission denied" TODO catch?
var handle = f.OpenAsTextStream(ForAppending, TristateUseDefault);
return handle
}
function popup(msg) {
var myMsgBox = new ActiveXObject("wscript.shell")
myMsgBox.Popup(msg)
}
function basename(path) {
var fso = WScript.CreateObject("Scripting.FileSystemObject")
// basename("a/b/c.foo") is "c"!
return fso.GetBaseName(path) + "." + fso.GetExtensionName(path)
}
// 10 => 10; 1=>"01"
function t2(t) {
if(t < 10) return "0"+t
if(t>99) throw t
return t
}
function createTimeline() {
var timelinedir = "timeline"
var objFSO = WScript.CreateObject("Scripting.FileSystemObject")
if (! directoryexists(timelinedir)) {
objFSO.CreateFolder(timelinedir) // mkdir -p???
}
var objFolder = objFSO.GetFolder(".")
//for(i = 0; i < files.length; i++) -- stupid javascript...
var files = objFolder.Files // a COLLECTION, not an array...
// Can you guess how many borked docs there are around?
//Create an Enumerator object.
var myCollection = new Enumerator(files);
for (; !myCollection.atEnd(); myCollection.moveNext()) {
var file = myCollection.item() // ABSOLUTE PATH!
var filename = basename(file)
if (! wantbackup(filename)) {
continue
}
if (directoryexists(filename)) {
continue
}
var mydir = catfile(timelinedir, filename)
if (! directoryexists(mydir)) {
objFSO.CreateFolder(mydir)
}
var mtimenumber = objFSO.GetFile(filename).DateLastModified
// DateLastModified PRINTS like a date, but it's just a number...
// give me STRONG TYPING DAMMIT!!! or at least typeof()!!!
var mtime = new Date(mtimenumber)
var year = mtime.getFullYear()
var month = t2(mtime.getMonth())
var day = t2(mtime.getDay())
var hours = t2(mtime.getHours())
var minutes = t2(mtime.getMinutes())
var seconds = t2(mtime.getSeconds())
var stamp = "" + year + month + day + hours + minutes + seconds
// XXX windows has 100ns time resolution, unix usually 1ns, FAT 2 seconds...
var dest = catfile(mydir, stamp + " " + filename);
if (fileexists(dest)) {
continue
}
echo("bkup " + filename + " to " + dest)
copyfile(filename, dest)
// mtime is preserved automagically :D
}
}
function fileexists(filename) {
var fso = WScript.CreateObject("Scripting.FileSystemObject")
return fso.FileExists(filename)
}
function stringEndsWith(s,t) { // don't ask
return s.length >= t.length && s.substr(s.length - t.length).localeCompare(t) == 0
}
if(stringEndsWith("abc", "b")) throw "abc/b"
if(!stringEndsWith("abc", "c")) throw "abc/c"
function stringStartsWith(s,t) { // don't ask
return s.length >= t.length && s.substr(0, t.length).localeCompare(t) == 0
}
if(stringStartsWith("abc", "b")) throw "start"
if(!stringStartsWith("abc", "a")) throw "!start"
// ONLY files named "save012.extension", so that eg "my first savegame" is left as is
function wantbackup(filename) {
var keepAutosaves = true // probably too much - unless debugging
var keepEverything = false // backup even "my first game.dod"
var extensions = ["mm6", "mm7", "dod"] // no "mm8"
for(i = 0; i < extensions.length; i++) {
e = extensions[i]
if(e[0] == '.') {
throw e
}
if (!stringEndsWith(filename, "." + e)) {
continue
}
if (keepEverything) {
return true
}
// regex in JScript???
if (stringStartsWith(filename, "save")) {
return filename.length == ("save001." + e).length
}
if (keepAutosaves && stringStartsWith(filename,"autosave.")) {
return true
}
}
return false
}
function catfile(a, b) {
return a + "\\" + b // XXX
}
function copyfile(orig, bkup) {
var fso = WScript.CreateObject("Scripting.FileSystemObject")
fso.CopyFile(orig, bkup, true)
fso = null
}
function chdir(dir) {
var objShell = WScript.CreateObject ("WScript.Shell")
//WScript.Echo("chdir '" + dir + "'")
objShell.CurrentDirectory = dir
}
function pwd() {
var objShell = WScript.CreateObject ("WScript.Shell")
//WScript.Echo("chdir '" + dir + "'")
return objShell.CurrentDirectory
}
function sleep(sec) {
WScript.Sleep(sec*1000)
}
function main() {
savesdir = savesDirectory();
switch(WScript.arguments.length) {
case 0: break
case 1:
savesdir = WScript.arguments(0);
break
default:
throw "Usage: prog [installationdirectory/Saves]"
}
chdir(savesdir)
if (!stringEndsWith(pwd(), "Saves")) {
throw pwd()
}
// merge vs mm6 vs ... avoid confusion :D
echo(savesdir)
WScript.Echo(pwd())
var fdlock = flock("timeline.lock")
while(true) {
createTimeline()
sleep(13)
}
}
main()
The windows version is especially hideous, I'll deny having written it... if anyone wants to write a more decent version be my guest; just please write it in something that requires as little effort as possible for nontechnical people (that's why I avoided powershell or compiled languages).
-
- Pixie
- Posts: 119
- Joined: 20 Jun 2019
Re: Might and Magic 6, 7, 8 merge based on mm8 engine. [upd. 22.09.2019]
My memory is a bit blurry because I've just played two games starting in Antagarich (dark magic, then light magic), but iirc you immediately get a message scroll telling you to go to Emerald Island, that was good enough for me.joanthedark wrote:Thank you for the command!cthscr wrote:joanthedark wrote:Is there any way to choose which place you want to go while changing continents? No matter how many times I reload I cannot seem to be able to teleport to Emerald Island anymore. A console command maybe?Note for Templayer: I didn't know that command 5 minutes ago. Manuals are good thing.Code: Select all
evt[0].MoveToMap{0,0,0,0,0,0,0,0,"7out01.odm"}
I believe it is imperative to teleport any parties who started in Enroth or Jadame continents to Emerald Island as soon as they try to Town Portal to Antagarich continent, otherwise you will have stuff like this:
(skip image)
Lord Markham is not in his throne room in Tatalia because we never triggered (or finished) the Emerald Island quest, no idea if it's intentional.
You also miss out on Mr. Malwick's subquest which can only trigger in Emerald Island.
The good thing is that as soon as I entered the command provided by cthscr I got the second MM7 cutscene (Lord Markham speech in Emerald Island's treasure hunt) and all the fetch quests for the hunt were added to my quest log, meaning I can start MM7 as if my first continent choice was Antagarich. Hopefully this also means Lord Markham will be in Tatalia but I'll continue playing later and figure that out.
I would like to know what you guys think about it, should all parties who didn't start in Antagarich be teleported to Emerald Island as soon as they try out any MM7 content? Seems like there will be less headaches this way, otherwise you would be "forced" to always select Antagarich everytime you make a new game or you'll miss out some content.
Last edited by eilacomeva on 14 Feb 2020, 18:01, edited 1 time in total.
Who is online
Users browsing this forum: No registered users and 4 guests