Jump to content

How to navigate the Drifts in MNOLG II


Makuta Luroka

Recommended Posts

My question here is pretty straight forward. Man, 2001-2003 LEGO really loved those nintendo-hard randomization mazes. I was wondering if there is a specific way you could determine your way through the drifts, because it seems to me that it is endless. I have no idea even how many "rooms" there are in it or what any of the mechanics are, other than that if you keep going straight, you will eventually find either Kantai's hut, the Temple of Peace, or the cliff. In my current instance of the game, Hahli enters from the northern edge of the first room. Heading west leads to the cliff. Heading straight from the first room, continuing in the direction Hahli faces for each room she enters leads to Kantai's hut, after 11 rooms. That is all I know.

bBhcfWO.png

Link to comment
Share on other sites

Last time I played it, I tried to figure it out and played. I did find some patterns by which I reached certain destinations, but the exit was not among them. :P I think it's totally different each time but I don't know by which logic the maze is generated. May be worth a look at the source code.

 

-Gata signoff.png

- Gata

signoffLarge.png

 

Please don't use my avatar or signature without permission, thanks! ^_^

Link to comment
Share on other sites

If you don't want to get lost, just use the flags. It's so much easier in the long run, although gathering the materials may take a little time. But make sure you have a large supply of them, because the snow constantly falls and covers them up. Gosh, LEGO really did have it out for us when we said MNOG I was too easy...

20630367175_89803378cf_m.jpg19614359428_333d55fdd4_m.jpg20062539664_c9b483986a_m.jpg

I have an Instagram page where you can see these pictures and more like them! Just click

HERE!

Link to comment
Share on other sites

If you don't want to get lost, just use the flags. It's so much easier in the long run, although gathering the materials may take a little time. But make sure you have a large supply of them, because the snow constantly falls and covers them up. Gosh, LEGO really did have it out for us when we said MNOG I was too easy...

From my experience, the flags are basically useless as they disappear too fast.

 

-Gata signoff.png

- Gata

signoffLarge.png

 

Please don't use my avatar or signature without permission, thanks! ^_^

Link to comment
Share on other sites

 

If you don't want to get lost, just use the flags. It's so much easier in the long run, although gathering the materials may take a little time. But make sure you have a large supply of them, because the snow constantly falls and covers them up. Gosh, LEGO really did have it out for us when we said MNOG I was too easy...

From my experience, the flags are basically useless as they disappear too fast.

 

-Gata signoff.png

 

I hate that the flags disappear so quickly. Makes it even more nintendo hard. I'm never gonna get the crystal of peace.

bBhcfWO.png

Link to comment
Share on other sites

I just aimlessly trek through the Drifts until I end up at either the hermit's house or the Temple of Peace. You'll get there eventually if you keep at it for long enough. :P I tried using flags once, but they weren't much help at all.

 

It'd be pretty hilarious to see BZP do a playthrough of MNOLG II and get stuck in the Drifts...

Bliss.png
Link to comment
Share on other sites

Here is the function resposible for creating the maze. Yes, it is randomly generated, though the scenes as consistently linked. I haven't tried to reverse-engineer the logic, but it appears that KantaisEntrance is set to the furthest link from the entrance, and KokoroRuinsApproach and KokoroWastesDeadEnd and positioned next to each other in a ramdon location somewhere in the maze.

function createMaze()
{
    connectionsList = [];
    var i = 1;
    while (i < 10)
    {
        connectionsList.push({name: "Scene" + i, direction: "north", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "south", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "east", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "west", link: ""});
        ++i;
    }
    finalResults = [];
    startNode = connectionsList[random(connectionsList.length)];
    startNode.link = {name: "KokoroWastesEntrance"};
    var j = 0;
    while (j < connectionsList.length)
    {
        if (0 != (connectionsList[j].name == startNode.name) & 0 != (connectionsList[j].direction == startNode.direction))
        {
            connectionsList.splice(j, 1);
            --j;
            break;
        }
        ++j;
    }
    finalResults.push(startNode);
    var picking = 1;
    while (picking == 1)
    {
        fromNode = connectionsList[random(connectionsList.length)];
        if (fromNode.name == startNode.name)
        {
            picking = 0;
        }
    }
    safetyCount = 0;
    while (connectionsList.length > 1)
    {
        var toNode = connectionsList[random(connectionsList.length)];
        ++safetyCount;
        if (0 != safetyCount > 10 & 0 != (0 != (toNode.name != fromNode.name) | 0 != (toNode.direction != fromNode.direction)))
        {
            safetyCheck = 1;
        }
        else
        {
            safetyCheck = 0;
        }
        if (0 != (toNode.name != fromNode.name) | 0 != (safetyCheck == 1))
        {
            safetyCount = 0;
            fromNode.link = toNode;
            toNode.link = fromNode;
            finalResults.push(fromNode);
            finalResults.push(toNode);
            var j = 0;
            while (j < connectionsList.length)
            {
                if (0 != (connectionsList[j].name == fromNode.name) & 0 != (connectionsList[j].direction == fromNode.direction))
                {
                    connectionsList.splice(j, 1);
                    --j;
                }
                else if (0 != (connectionsList[j].name == toNode.name) & 0 != (connectionsList[j].direction == toNode.direction))
                {
                    connectionsList.splice(j, 1);
                    --j;
                }
                ++j;
            }
            var picking = 1;
            while (picking == 1)
            {
                fromNode = connectionsList[random(connectionsList.length)];
                if (fromNode.name == toNode.name)
                {
                    picking = 0;
                }
            }
        }
    }
    lastNode = connectionsList[0];
    lastNode.link = {name: "KantaisEntrance"};
    finalResults.push(lastNode);
    selectingNode = 1;
    while (selectingNode == 1)
    {
        secondExitNode = finalResults[random(finalResults.length)];
        if (0 != (secondExitNode.link != "start") & 0 != (secondExitNode.link != "exit"))
        {
            selectingNode = 0;
            thirdExitNode = secondExitNode.link;
            secondExitNode.link = {name: "KokoroRuinsApproach"};
            thirdExitNode.link = {name: "KokoroWastesDeadEnd"};
        }
    }
    _root.KokoroWastesMaze = finalResults;
    _root.KokoroWastesFlags = [];
}


Since the code is mostly JavaScript compliant, here is a JavaScript copy you can use to use if you want to analyze what it's doing, but basically it's creating a bunch of scenes, and asigning links between them:

_root = {};
function random(max)
{
    return Math.floor(Math.random()*max)
}

function createMaze()
{
    connectionsList = [];
    var i = 1;
    while (i < 10)
    {
        connectionsList.push({name: "Scene" + i, direction: "north", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "south", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "east", link: ""});
        connectionsList.push({name: "Scene" + i, direction: "west", link: ""});
        ++i;
    }
    finalResults = [];
    startNode = connectionsList[random(connectionsList.length)];
    startNode.link = {name: "KokoroWastesEntrance"};
    var j = 0;
    while (j < connectionsList.length)
    {
        if (0 != (connectionsList[j].name == startNode.name) & 0 != (connectionsList[j].direction == startNode.direction))
        {
            connectionsList.splice(j, 1);
            --j;
            break;
        }
        ++j;
    }
    finalResults.push(startNode);
    var picking = 1;
    while (picking == 1)
    {
        fromNode = connectionsList[random(connectionsList.length)];
        if (fromNode.name == startNode.name)
        {
            picking = 0;
        }
    }
    safetyCount = 0;
    while (connectionsList.length > 1)
    {
        var toNode = connectionsList[random(connectionsList.length)];
        ++safetyCount;
        if (0 != safetyCount > 10 & 0 != (0 != (toNode.name != fromNode.name) | 0 != (toNode.direction != fromNode.direction)))
        {
            safetyCheck = 1;
        }
        else
        {
            safetyCheck = 0;
        }
        if (0 != (toNode.name != fromNode.name) | 0 != (safetyCheck == 1))
        {
            safetyCount = 0;
            fromNode.link = toNode;
            toNode.link = fromNode;
            finalResults.push(fromNode);
            finalResults.push(toNode);
            var j = 0;
            while (j < connectionsList.length)
            {
                if (0 != (connectionsList[j].name == fromNode.name) & 0 != (connectionsList[j].direction == fromNode.direction))
                {
                    connectionsList.splice(j, 1);
                    --j;
                }
                else if (0 != (connectionsList[j].name == toNode.name) & 0 != (connectionsList[j].direction == toNode.direction))
                {
                    connectionsList.splice(j, 1);
                    --j;
                }
                ++j;
            }
            var picking = 1;
            while (picking == 1)
            {
                fromNode = connectionsList[random(connectionsList.length)];
                if (fromNode.name == toNode.name)
                {
                    picking = 0;
                }
            }
        }
    }
    lastNode = connectionsList[0];
    lastNode.link = {name: "KantaisEntrance"};
    finalResults.push(lastNode);
    selectingNode = 1;
    while (selectingNode == 1)
    {
        secondExitNode = finalResults[random(finalResults.length)];
        if (0 != (secondExitNode.link != "start") & 0 != (secondExitNode.link != "exit"))
        {
            selectingNode = 0;
            thirdExitNode = secondExitNode.link;
            secondExitNode.link = {name: "KokoroRuinsApproach"};
            thirdExitNode.link = {name: "KokoroWastesDeadEnd"};
        }
    }
    _root.KokoroWastesMaze = finalResults;
    _root.KokoroWastesFlags = [];
}
createMaze();
for(var o, i = -1; o = _root.KokoroWastesMaze[++i]
{
console.dir(o);
}
Edited by JrMasterModelBuilder
  • Upvote 1

Are signatures still a thing?

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...