//This is an autosplitter for Bionicle: The Legend of Mata Nui. //Huge thanks to marczeslaw for finding one of the most important addresses here, and for teaching me how pointerscan works. //More things are planned state("LEGO Bionicle") { //int conv_test : "LEGO Bionicle.exe", 0x3B507C; string255 dfarea : "LEGO Bionicle.exe", 0x43AF00; int pickup : "LEGO Bionicle.exe", 0x312D8C; //works yay string4 nareaID : "LEGO Bionicle.exe", 0x347490; int Load : "LEGO Bionicle.exe", 0x309AE8; //actually with the fade to black byte level : "LEGO Bionicle.exe", 0x34748C; //string4 pickupname : "LEGO Bionicle.exe", 0x003032BC, 0x7A0, 0x24, 0x44C, 0x50, 0x3B4; //finally jeez //I don't know why, I don't want to know why, I shouldn't have to wonder why, but for some reason this points to 3b4 in rebuilt and I have to find a new address //string4 pickupname : "LEGO Bionicle.exe", 0x00425B50, 0x3BC, 0x634, 0xF4, 0x7EC, 0x3B4; int load_cin : "LEGO Bionicle.exe", 0x0043AA8C, 0x164, 0x2A8, 0x38, 0x184, 0x84; int conv : "LEGO Bionicle.exe", 0x0043AA84, 0x160, 0x4C, 0x4, 0xCC, 0x68C; int paused : "LEGO Bionicle.exe", 0x3032C4; } init { timer.IsGameTimePaused = false; } startup { settings.Add("sgTiming", false, "Segmented timing (not allowed in runs)"); settings.Add("areaChangeSplit", false, "Split every time you change areas (not recommended)"); settings.Add("levelChangeSplit", true, "Split every time the level changes"); //settings.Add("menuPause", true, "Pause the timer in Front End"); settings.Add("pickUpSplits", true, "Split every time you pick up an item"); //todo: choice -DONE, but broken :( settings.Add("brushmode", false, "Boss rush mode"); //TODO: implement LULW (difficult due to boss health handling) -DONE //LEV1 splits /*settings.Add("l1Splits", false, "Level-1 Onua","pickUpSplits"); settings.Add("hok1Split", true, "Split on picking up the grapple","l1Splits"); settings.Add("ruruSplit", true, "Split on picking up the Ruru","l1Splits"); settings.Add("hunaSplit", true, "Split on picking up the Huna","l1Splits"); settings.Add("gly1Split", true, "Split on picking up the glyph","l1Splits"); settings.Add("stn1Split", false, "Split on picking up the Makoki Stone","l1Splits"); settings.Add("pgl1Split", false, "Split on picking up the printing glyph (Rebuilt-only)","l1Splits"); settings.Add("q1Splits", false, "Splits for quests","l1Splits"); settings.Add("q11sSplit", false, "Split on picking up the miner's pick","q1Splits"); settings.Add("q11eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q1Splits"); settings.Add("q12sSplit", false, "Split on picking up Thali-Whali","q1Splits"); settings.Add("q12eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q1Splits"); settings.Add("q13sSplit", false, "Split on picking up the throwing disk","q1Splits"); settings.Add("q13eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q1Splits"); vars.L1Items = new Dictionary<string, string>() { { "walc", "hok1Split" }, { "vksm", "ruruSplit" }, { "cksm", "hunaSplit" }, { "lylg", "gly1Split" }, { "nots", "stn1Split" }, { "1lgp", "pgl1Split" }, { "1cip", "q11sSplit" }, { "turf", "q11eSplit" }, { "gubb", "q12sSplit" }, { "1urf", "q12eSplit" }, { "csid", "q13sSplit" }, { "0urf", "q13eSplit" } }; settings.Add("l2Splits", false, "Level-2 Gali","pickUpSplits"); settings.Add("hok2Split", true, "Split on picking up the grapple","l2Splits"); settings.Add("ms21Split", true, "Split on picking up the Rau","l2Splits"); //settings.Add("ms22Split", true, "Split on picking up the Kaukau","l2Splits"); //Unavailable - item in water //settings.Add("gly2Split", true, "Split on picking up the glyph","l2Splits"); //Unavailable - item in water settings.Add("stn2Split", false, "Split on picking up the Makoki Stone","l2Splits"); settings.Add("pgl2Split", false, "Split on picking up the printing glyph (Rebuilt-only)","l2Splits"); settings.Add("q2Splits", false, "Splits for quests","l2Splits"); //settings.Add("q21sSplit", false, "Split on picking up the gate stone","q2Splits"); //Unavailable - item in water (Rebuilt-only) settings.Add("q21eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q2Splits"); settings.Add("q22sSplit", false, "Split on picking up the gear","q2Splits"); settings.Add("q22eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q2Splits"); settings.Add("q23sSplit", false, "Split on picking up the throwing disk","q2Splits"); settings.Add("q23eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q2Splits"); vars.L2Items = new Dictionary<string, string>() { { "kooh", "hok2Split" }, { "a9km", "ms21Split" }, //{ "cksm", "ms22Split" }, //water //{ "lylg", "gly2Split" }, //water { "nots", "stn2Split" }, { "2lgp", "pgl2Split" }, //{ "ntsg", "q21sSplit" }, //water (in main it's on land) { "1urf", "q21eSplit" }, { "raeg", "q22sSplit" }, { "0urf", "q22eSplit" }, { "2csd", "q23sSplit" }, { "turf", "q23eSplit" } }; settings.Add("l3Splits", false, "Level-3 Pohatu","pickUpSplits"); settings.Add("hok3Split", true, "Split on picking up the grapple","l3Splits"); settings.Add("ms31Split", true, "Split on picking up the Komau","l3Splits"); settings.Add("ms32Split", true, "Split on picking up the Kakama","l3Splits"); settings.Add("gly3Split", true, "Split on picking up the glyph","l3Splits"); settings.Add("stn3Split", false, "Split on picking up the Makoki Stone","l3Splits"); settings.Add("pgl3Split", false, "Split on picking up the printing glyph (Rebuilt-only)","l3Splits"); settings.Add("q3Splits", false, "Splits for quests","l3Splits"); settings.Add("q31sSplit", false, "Split on picking up the ball","q3Splits"); settings.Add("q31eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q3Splits"); settings.Add("q32sSplit", false, "Split on picking up the hammer","q3Splits"); settings.Add("q32eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q3Splits"); settings.Add("q33sSplit", false, "Split on picking up the throwing disk","q3Splits"); settings.Add("q33eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q3Splits"); vars.L3Items = new Dictionary<string, string>() { { "kooh", "hok3Split" }, { "aksm", "ms31Split" }, { "sksm", "ms32Split" }, { "pylg", "gly3Split" }, { "nots", "stn3Split" }, { "3lgp", "pgl3Split" }, { "llbk", "q31sSplit" }, { "0urf", "q31eSplit" }, { "mmah", "q32sSplit" }, { "turf", "q32eSplit" }, { "3csd", "q33sSplit" }, { "1urf", "q33eSplit" } }; settings.Add("l4Splits", false, "Level-4 Kopaka","pickUpSplits"); settings.Add("hok4Split", true, "Split on picking up the grapple","l4Splits"); settings.Add("ms41Split", true, "Split on picking up the Matatu","l4Splits"); settings.Add("ms42Split", true, "Split on picking up the Akaku","l4Splits"); settings.Add("gly4Split", true, "Split on picking up the glyph","l4Splits"); settings.Add("stn4Split", false, "Split on picking up the Makoki Stone","l4Splits"); settings.Add("pgl4Split", false, "Split on picking up the printing glyph (Rebuilt-only)","l4Splits"); settings.Add("q4Splits", false, "Splits for quests","l4Splits"); settings.Add("q41sSplit", false, "Split on picking up the ice skates","q4Splits"); settings.Add("q41eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q4Splits"); settings.Add("q42sSplit", false, "Split on picking up the element of melting","q4Splits"); settings.Add("q42eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q4Splits"); settings.Add("q43sSplit", false, "Split on picking up the throwing disk","q4Splits"); settings.Add("q43eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q4Splits"); vars.L4Items = new Dictionary<string, string>() { { "drws", "hok4Split" }, { "letm", "ms41Split" }, { "vksm", "ms42Split" }, { "aylg", "gly4Split" }, { "nots", "stn4Split" }, { "4lgp", "pgl4Split" }, { "stks", "q41sSplit" }, { "1urf", "q41eSplit" }, { "tsrc", "q42sSplit" }, { "0urf", "q42eSplit" }, { "csid", "q43sSplit" }, { "turf", "q43eSplit" } }; settings.Add("l5Splits", false, "Level-5 Lewa","pickUpSplits"); settings.Add("hok5Split", true, "Split on picking up the grapple","l5Splits"); settings.Add("ms51Split", true, "Split on picking up the Mahiki","l5Splits"); settings.Add("ms52Split", true, "Split on picking up the Miru","l5Splits"); settings.Add("gly5Split", true, "Split on picking up the glyph","l5Splits"); settings.Add("stn5Split", false, "Split on picking up the Makoki Stone","l5Splits"); settings.Add("pgl5Split", false, "Split on picking up the printing glyph (Rebuilt-only)","l5Splits"); settings.Add("q5Splits", false, "Splits for quests","l5Splits"); settings.Add("q51sSplit", false, "Split on picking up the blue spider","q5Splits"); settings.Add("q51eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q5Splits"); settings.Add("q52sSplit", false, "Split on picking up the Volo Lutu launcher","q5Splits"); settings.Add("q52eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q5Splits"); settings.Add("q53sSplit", false, "Split on picking up the throwing disk","q5Splits"); settings.Add("q53eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q5Splits"); vars.L5Items = new Dictionary<string, string>() { { "1exa", "hok5Split" }, { "iksm", "ms51Split" }, { "ksam", "ms52Split" }, { "pylg", "gly5Split" }, { "nots", "stn5Split" }, { "5lgp", "pgl5Split" }, { "rdps", "q51sSplit" }, { "turf", "q51eSplit" }, { "ulov", "q52sSplit" }, { "0urf", "q52eSplit" }, { "5csd", "q53sSplit" }, { "1urf", "q53eSplit" } }; settings.Add("l6Splits", false, "Level-6 Tahu","pickUpSplits"); settings.Add("hok6Split", true, "Split on picking up the grapple","l6Splits"); settings.Add("ms61Split", true, "Split on picking up the Hau","l6Splits"); settings.Add("ms62Split", true, "Split on picking up the Vahi","l6Splits"); settings.Add("gly6Split", true, "Split on picking up the glyph","l6Splits"); settings.Add("stn6Split", false, "Split on picking up the Makoki Stone","l6Splits"); settings.Add("pgl6Split", false, "Split on picking up the printing glyph","l6Splits"); settings.Add("q6Splits", false, "Splits for quests","l6Splits"); settings.Add("q61sSplit", false, "Split on picking up the Winch Lever","q6Splits"); settings.Add("q61eSplit", false, "Split on picking up the first Amana Volo (Rebuilt-only)","q6Splits"); settings.Add("q62sSplit", false, "Split on picking up the Lava Board","q6Splits"); settings.Add("q62eSplit", false, "Split on picking up the second Amana Volo (Rebuilt-only)","q6Splits"); settings.Add("q63sSplit", false, "Split on picking up the throwing disk","q6Splits"); settings.Add("q63eSplit", false, "Split on picking up the third Amana Volo (Rebuilt-only)","q6Splits"); vars.L6Items = new Dictionary<string, string>() { { "drws", "hok6Split" }, { "a6km", "ms61Split" }, { "a5km", "ms62Split" }, { "pylg", "gly6Split" }, { "nots", "stn6Split" }, { "6lgp", "pgl6Split" }, { "rvel", "q61sSplit" }, { "turf", "q61eSplit" }, { "dels", "q62sSplit" }, { "1urf", "q62eSplit" }, { "6csd", "q63sSplit" }, { "0urf", "q63eSplit" } }; vars.AllItems = new Dictionary<string, string>[] { vars.L1Items, vars.L2Items, vars.L3Items, vars.L4Items, vars.L5Items, vars.L6Items };*/ settings.Add("stoneSplits", false, "Split on picking up the Makoki stone"); settings.Add("actionSplits", false, "Split on special action"); settings.Add("cl1Split", false, "Split on bridge extension in CLF1","actionSplits"); settings.Add("tdaSplit", false, "Split on trapdoor trigger in BUGS","actionSplits"); settings.Add("sCase", true, "Special pickup handling"); settings.Add("kSplit", true, "Split on leaving MWAT (substitute for Kaukau)","sCase"); settings.Add("gSplit", true, "Split on leaving GLY3 (substitute for Glyph)","sCase"); //vars.bossAreas = new string[] {"BOSS", "MUD0", "HYDR", "MDMN", "RKMN", "ICMN", "WDMN", "DRGN"}; vars.bossAreas = new string[] {"ssob", "0dum", "rdyh", "nmdm", "nmkr", "nmci", "nmdw", "ngrd"}; vars.aSplits = new string[] {"tnrf", "????"}; } update { if (current.dfarea.Length != 0) { vars.cArea = current.dfarea.Substring((current.dfarea.Length - 8), 4); } if (old.dfarea.Length != 0) { vars.oArea = old.dfarea.Substring((old.dfarea.Length - 8), 4); } //vars.area = ""; } isLoading { //return (current.Load == 1) || (current.conv_test == 1) || (vars.area == "frnt"); /*if (!settings["menuPause"] && (vars.cArea == "frnt")) { return false; }*/ if (current.nareaID == "????") { return true; } if ((settings["sgTiming"]) && (current.paused == 1)) { return true; } if (settings["brushmode"]) { return (Array.IndexOf(vars.bossAreas, current.nareaID) == -1); } if (settings["menuPause"]) { return ((current.nareaID == "tnrf") || (vars.cArea == "frnt")); } return ((current.load_cin == 1 && current.conv != 1) || (current.Load == 1)); } split { if ((settings["levelChangeSplit"]) && (current.level != old.level) && (old.level != 0) && (vars.cArea != "frnt")) { return true; } if ((settings["areaChangeSplit"]) && (current.nareaID != old.nareaID) && (current.nareaID != "frnt") && (old.nareaID != "frnt") && (old.nareaID != "????")) { return true; } if ((!settings["areaChangeSplit"]) && (current.nareaID != old.nareaID)) { return (((old.nareaID == "tawm") && (settings["kSplit"])) || ((old.nareaID == "3ylg") && (current.level == 2) && (settings["gSplit"]))); } if ((current.pickup == 1) && (old.pickup == 0)) { //vars.appItems = vars.AllItems[(current.level)-1]; //vars.currSet = vars.appItems[current.pickupname]; if (Array.IndexOf(vars.bossAreas, current.nareaID) != -1) { return (settings["stoneSplits"]); } else if (current.nareaID == "1flc") { return (settings["cl1Split"]); } else if (current.nareaID == "sgub") { return settings["tdaSplit"]; } else if (Array.IndexOf(vars.bossAreas, current.nareaID) == -1) { return (settings["pickUpSplits"]); } } } start { if ((current.level != old.level) && (old.level == 0)) { return true; } } exit { timer.IsGameTimePaused = true; }