Jump to content

  • Log in with Facebook Log in with Twitter Log In with Google      Sign In   
  • Create Account

Welcome to BZPower!

Hi there, while we hope you enjoy browsing through the site, there's a lot more you can do if you register. The process is easy and you can use your Google, Facebook, or Twitter account to make it even faster. Some perks of joining include:
  • Create your own topics, participate in existing discussions, and vote in polls
  • Show off your creations, stories, art, music, and movies and play member and staff-run games
  • Enter contests to win free LEGO sets and other prizes, and vote to decide the winners
  • Participate in raffles, including exclusive raffles for new members, and win free LEGO sets
  • Send private messages to other members
  • Organize with other members to attend or send your MOCs to LEGO fan events all over the world
  • Much, much more!
Enjoy your visit!

Photo

How to navigate the Drifts in MNOLG II

Drifts MNOLG Wastes

  • Please log in to reply
6 replies to this topic

#1 Offline Makuta Luroka

Makuta Luroka
  • Members
  • Encountering Protodermis

  • 894 posts
  •  

Posted Mar 21 2014 - 11:48 PM

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.


  • 0

--:m::a::k::u::t::a: :l::u::r::m_o::k::a:

card_newmat.png
biofighter_banner_platform.png

Your title has been removed. We will do our best to make sure you do not get a custom member title in the future for any reason to avoid such a situation from happening again.


#2 Offline Gatanui

Gatanui
  • Reporters
  • Senior News Finder

  • 10,968 posts
  •   BZP Reporter

Posted Mar 22 2014 - 06:55 AM

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

  • 0
Please don't use my avatar without permission, thanks ^_^

#3 Offline The Phantom Terror

The Phantom Terror
  • Members
  • Emerging Fluidic Master

  • 1,223 posts
  •  

Posted Mar 22 2014 - 08:08 AM

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...


  • 0

14612551615_f885b55eb5_o.jpg

|+| Flickr |+| MOCpages |+| Facebook |+| YouTube |+|

|+| Rock Raiders United |+| SOLISMagna |+| Tumblr |+| TTV |+|


#4 Offline Gatanui

Gatanui
  • Reporters
  • Senior News Finder

  • 10,968 posts
  •   BZP Reporter

Posted Mar 22 2014 - 08:24 AM

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

  • 0
Please don't use my avatar without permission, thanks ^_^

#5 Offline Makuta Luroka

Makuta Luroka
  • Members
  • Encountering Protodermis

  • 894 posts
  •  

Posted Mar 22 2014 - 12:38 PM

 

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.


  • 0

--:m::a::k::u::t::a: :l::u::r::m_o::k::a:

card_newmat.png
biofighter_banner_platform.png

Your title has been removed. We will do our best to make sure you do not get a custom member title in the future for any reason to avoid such a situation from happening again.


#6 Offline XONAR

XONAR
  • Premier Member
    BioniLUG Member
  • Premier Members
  • Encountering Protodermis

  • 883 posts
  •  

Posted Mar 22 2014 - 02:17 PM

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...


  • 0

#7 Offline JrMasterModelBuilder

JrMasterModelBuilder
  • Outstanding BZPower Citizens
  • Descending into Protodermis

  • 995 posts
  •   Outstanding BZPower Citizen

Posted Mar 22 2014 - 05:37 PM

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, Mar 22 2014 - 05:55 PM.

  • 1

banner.png
{ If you have BIONICLE: The Legend of Mata Nui, PM me . . . NOW! }
I'm well over the age of 13, so if you work for LEGO, you can talk to me. :)





0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users