Exemple #1
0
        private void Update(ASLSettingsReader settings)
        {
            fzzy.values["lastLevel"].Update();
            if (fzzy.values["inLoadingScreen"].Current && !fzzy.values["inLoadingScreen"].Old)
            {
                levelLoadedFromMenu = lastNonLoadLevel == "";
            }

            if (fzzy.values["rightClickTimestamp"].Current != fzzy.values["rightClickTimestamp"].Old ||
                fzzy.values["leftClickTimestamp"].Current != fzzy.values["leftClickTimestamp"].Old)
            {
                var diff = Math.Abs(fzzy.values["rightClickTimestamp"].Current -
                                    fzzy.values["leftClickTimestamp"].Current);

                if (diff < 100)
                {
                    //SetTextComponent("Variation", diff + "ms");
                }
            }

            if (!fzzy.values["inLoadingScreen"].Current)
            {
                lastNonLoadLevel = fzzy.values["currentLevel"].Current;
            }
            if (!fzzy.isLoading)
            {
                return;
            }
            bnrIlPause  = false;
            enc3IlPause = false;
        }
Exemple #2
0
        private void TimerTick(ASLSettingsReader settings)
        {
            if (fzzy.state.CurrentPhase == TimerPhase.NotRunning)
            {
                totalTickCount = 0;
            }

            if (CurrentTickCount != OldTickCount)
            {
                lastTickChangeTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            if (fzzy.state.CurrentPhase == TimerPhase.Running ||
                fzzy.state.CurrentPhase == TimerPhase.Paused)
            {
                fzzy.state.IsGameTimePaused = true;
                if (fzzy.values["currentLevel"].Current != fzzy.values["currentLevel"].Old)
                {
                    ignoreNextTickChange = true;
                }

                if (CurrentTickCount != OldTickCount)
                {
                    if (!ignoreNextTickChange && CurrentTickCount > OldTickCount)
                    {
                        totalTickCount += CurrentTickCount - OldTickCount;
                    }
                    if (ignoreNextTickChange)
                    {
                        ignoreNextTickChange = false;
                    }
                }

                if (!fzzy.isLoading && fzzy.values["paused"].Current > 0)
                {
                    var sinceLastChange = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - lastTickChangeTimestamp;
                    var simulatedTicks  = (int)Math.Floor(sinceLastChange / 50f);
                    totalTickCount          += simulatedTicks;
                    lastTickChangeTimestamp += simulatedTicks * 50;
                }

                if (settings["levelTimer"])
                {
                    fzzy.state.SetGameTime(new TimeSpan(0, 0, 0, 0, 50 * CurrentTickCount));
                }
                else
                {
                    fzzy.state.SetGameTime(new TimeSpan(0, 0, 0, 0, 50 * totalTickCount));
                }
            }
        }
Exemple #3
0
        private bool Start(ASLSettingsReader settings)
        {
            if (settings["flagSplit"] && fzzy.values["flag"].Current == 1 && fzzy.values["flag"].Old == 0)
            {
                return(true);
            }
            if (fzzy.values["tickCount"].Current > fzzy.values["tickCount"].Old &&
                (fzzy.values["tickCount"].Old == 22 || fzzy.values["tickCount"].Old == 23))
            {
                return(true);
            }

            return(false);
        }
Exemple #4
0
        private bool Reset(ASLSettingsReader settings)
        {
            if (fzzy.values["currentLevel"].Current.StartsWith("sp_training") &&
                fzzy.values["tickCount"].Current == 23 && fzzy.values["tickCount"].Old != 23)
            {
                return(true);
            }

            if (settings["loadReset"] && fzzy.values["tickCount"].Current == 23 && fzzy.values["tickCount"].Old != 23)
            {
                return(true);
            }

            return(false);
        }
Exemple #5
0
        private bool IsLoading(ASLSettingsReader settings)
        {
            if (settings["flagSplit"])
            {
                return(fzzy.values["flag"].Current == 0);
            }

            if (fzzy.isLoading)
            {
                bnrIlPause  = false;
                enc3IlPause = false;
            }

            if (settings["BnRpause"])
            {
                if (fzzy.values["inCutscene"].Old == 0 && fzzy.values["inCutscene"].Current == 1 &&
                    fzzy.values["lastLevel"].Current == "sp_sewers1" && fzzy.values["x"].Current > -9000)
                {
                    bnrIlPause = true;
                }
                if (bnrIlPause)
                {
                    return(true);
                }
            }

            if (!settings["enc3pause"])
            {
                return(fzzy.isLoading);
            }
            if (fzzy.values["inCutscene"].Old == 0 && fzzy.values["inCutscene"].Current == 1 &&
                fzzy.values["lastLevel"].Current == "sp_hub_timeshift" &&
                fzzy.values["y"].Current > 4000)
            {
                enc3IlPause = true;
            }
            return(enc3IlPause || fzzy.isLoading);
        }
Exemple #6
0
        private void Split(ASLSettingsReader settings)
        {
            if (settings["flagSplit"] && fzzy.values["flag"].Old == 1 && fzzy.values["flag"].Current == 0)
            {
                fzzy.timer.Split();
            }

            if (settings["frontierWaveSplit"] && fzzy.values["frontierDefenseWaveNumber"].Current - 1 == fzzy.values["frontierDefenseWaveNumber"].Old)
            {
                fzzy.timer.Split();
            }

            bool helmetCollected(int level, int helmet, int helmetPos)
            {
                string levelName = "";

                switch (level)
                {
                case 1:
                    levelName = "bt";
                    break;

                case 2:
                    levelName = "bnr";
                    break;

                case 3:
                    levelName = "ita1";
                    break;

                case 4:
                    levelName = "ita2";
                    break;

                case 5:
                    levelName = "ita3";
                    break;

                case 6:
                    levelName = "enc1";
                    break;

                case 7:
                    levelName = "enc2";
                    break;

                case 8:
                    levelName = "b1";
                    break;

                case 9:
                    levelName = "b2";
                    break;

                case 10:
                    levelName = "tbf";
                    break;

                case 11:
                    levelName = "ark";
                    break;

                case 12:
                    levelName = "fold";
                    break;
                }

                // constructs level and helmet to check and uses bitwise XOR operator to check which bit changes
                return(settings[levelName + "Helmet" + helmet] && (fzzy.values["sp_unlocks_level_" + level].Old ^
                                                                   fzzy.values["sp_unlocks_level_" + level].Current) ==
                       helmetPos);
            }

            void splitOnHelmet(int level, int helmetAmount)
            {
                // loops through every necessary bit that stores helmets and splits on the first bit that changed
                int bit = (int)Math.Pow(2, helmetAmount - 1);

                for (int i = 0; i < helmetAmount; i++)
                {
                    // check helmet bit location for a change and shift over to the right for the next loop
                    if (helmetCollected(level, i + 1, bit))
                    {
                        fzzy.timer.Split();
                    }
                    bit >>= 1;
                }
            }

            for (int i = 0; i <= 12; i++)
            {
                if (settings["helmetSplit"] && fzzy.values["sp_unlocks_level_" + i].Current >
                    fzzy.values["sp_unlocks_level_" + i].Old)
                {
                    // separates helmet splits into every unique helmet
                    if (fzzy.values["lastLevel"].Current == "sp_training" && settings["gauntletHelmetSplit"])
                    {
                        fzzy.timer.Split();
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_crashsite" && settings["btHelmetSplit"])
                    {
                        splitOnHelmet(1, 2);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_sewers1" && settings["bnrHelmetSplit"])
                    {
                        splitOnHelmet(2, 6);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_boomtown_start" && settings["ita1HelmetSplit"])
                    {
                        splitOnHelmet(3, 4);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_boomtown" && settings["ita2HelmetSplit"])
                    {
                        splitOnHelmet(4, 3);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_boomtown_end" && settings["ita3HelmetSplit"])
                    {
                        splitOnHelmet(5, 2);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_hub_timeshift" && settings["enc1HelmetSplit"])
                    {
                        splitOnHelmet(6, 2);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_timeshift_spoke02" && settings["enc2HelmetSplit"])
                    {
                        splitOnHelmet(7, 6);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_beacon" && settings["b1HelmetSplit"])
                    {
                        splitOnHelmet(8, 9);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_beacon_spoke0" && settings["b2HelmetSplit"])
                    {
                        splitOnHelmet(9, 2);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_tday" && settings["tbfHelmetSplit"])
                    {
                        splitOnHelmet(10, 3);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_s2s" && settings["arkHelmetSplit"])
                    {
                        splitOnHelmet(11, 3);
                    }
                    if (fzzy.values["lastLevel"].Current == "sp_skyway_v1" && settings["foldHelmetSplit"])
                    {
                        splitOnHelmet(12, 3);
                    }
                }
            }

            if (fzzy.isLoading)
            {
                lastLoadingTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            }

            var timePassed = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - splitTimerTimestamp;

            splitTimerTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
            if (splitTimer > 0)
            {
                var adjustment = splitTimer - (long)Math.Round(timePassed * fzzy.values["timescale"].Current);
                if (adjustment <= 0)
                {
                    splitTimer = 0;
                    fzzy.timer.Split();
                }
                else
                {
                    splitTimer = adjustment;
                }
            }

            if (btSaveDelay > 0)
            {
                btSaveDelay -= DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - previousTimestamp;
                if (btSaveDelay <= 0)
                {
                    FzzyComponent.RunGameCommand("load fastany1");
                    //fzzy.board.Send(Keyboard.ScanCodeShort.F1);
                    if (settings["tickTimer"])
                    {
                        totalTickCount += 4044;
                    }
                    else
                    {
                        fzzy.state.AdjustedStartTime -= new TimeSpan(0, 0, 3, 22, 217);
                    }
                }

                if (fzzy.isLoading)
                {
                    btSaveDelay = 0;
                }
            }

            previousTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            if (fzzy.Settings.AutoLoad18HourSave && fzzy.values["lastLevel"].Current == "sp_crashsite" &&
                DistanceSquared(68, -21, -12216) < 500 * 500)
            {
                if (fzzy.values["inCutscene"].Current == 1 && fzzy.values["inCutscene"].Old == 0)
                {
                    btSaveDelay = 5050;
                }
            }

            // End of game
            if (fzzy.values["lastLevel"].Current == "sp_skyway_v1" && X < -10000 && Y > 0 &&
                fzzy.values["inCutscene"].Old == 0 && fzzy.values["inCutscene"].Current == 1 && settings["endSplit"])
            {
                DoSingleSplit("runEnd");
            }

            // Level change
            if (fzzy.values["lastLevel"].Current.Length > 0 &&
                fzzy.values["lastLevel"].Current != fzzy.values["lastLevel"].Old && settings["levelChangeSplit"] &&
                fzzy.values["lastLevel"].Current != "sp_training")
            {
                var level = fzzy.values["lastLevel"].Current;
                if (level != "sp_training")
                {
                    if (level == "sp_beacon" || level == "sp_hub_timeshift")
                    {
                        fzzy.timer.Split();
                    }
                    else
                    {
                        DoSingleSplit(level);
                    }
                }
            }

            // BT-7274
            if (fzzy.values["lastLevel"].Current == "sp_crashsite" && settings["btSplits"])
            {
                // Battery 1
                if (settings["btBattery1"])
                {
                    if (DistanceSquared(-4568, -3669) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        DoSingleSplit("btBattery1");
                    }
                }

                // Battery 2
                if (settings["btBattery2"])
                {
                    if (DistanceSquared(-4111, 4583) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        DoSingleSplit("btBattery2");
                    }
                }
            }

            // Blood and Rust
            if (fzzy.values["lastLevel"].Current == "sp_sewers1" && settings["bnrSplits"])
            {
                // Button 1
                if (settings["bnrButton1"])
                {
                    if (fzzy.values["bnrbutton1"].Old == 0 && fzzy.values["bnrbutton1"].Current > 0 && !fzzy.isLoading)
                    {
                        DoSingleSplit("bnrButton1");
                    }
                }

                // Door trigger
                if (settings["bnrDoor"])
                {
                    if (Y <= -226 && X <= -827 && Z > 450 && !fzzy.isLoading)
                    {
                        DoSingleSplit("bnrTrigger");
                    }
                }

                // Button 2
                if (settings["bnrButton2"])
                {
                    if (fzzy.values["bnrbutton2"].Old + 8 == fzzy.values["bnrbutton2"].Current && !fzzy.isLoading)
                    {
                        DoSingleSplit("bnrButton2");
                    }
                }

                // BT embark
                if (settings["bnrEmbark"])
                {
                    if (fzzy.values["embarkCount"].Old == 0 && fzzy.values["embarkCount"].Current == 1)
                    {
                        DoSingleSplit("bnrEmbark");
                    }
                }
            }

            // Embark on ITA3
            if (fzzy.values["lastLevel"].Current == "sp_boomtown_end" && settings["ita3Splits"])
            {
                if (fzzy.values["embarkCount"].Old == 0 && fzzy.values["embarkCount"].Current == 1)
                {
                    DoSingleSplit("ita3Embark");
                }
            }

            // Helmet on E&C1
            if (fzzy.values["lastLevel"].Current == "sp_hub_timeshift" && settings["enc1Splits"])
            {
                if (DistanceSquared(997, -2718) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                    fzzy.values["inCutscene"].Current == 1)
                {
                    DoSingleSplit("enc1Helmet", 1800);
                }
            }

            // E&C 2
            if (fzzy.values["lastLevel"].Current == "sp_timeshift_spoke02" && settings["enc2Splits"])
            {
                if (settings["enc2Dialogue"])
                {
                    if (X > 8755 && X < 9655 && Y < -4528 && Z > 5000)
                    {
                        DoSingleSplit("enc2Dialogue", 3000);
                    }
                }

                // Button 1
                if (settings["enc2Button1"])
                {
                    if (DistanceSquared(2805, -3363) < Math.Pow(200, 2) &&
                        fzzy.values["enc2button1"].Old + 8 == fzzy.values["enc2button1"].Current && !fzzy.isLoading)
                    {
                        DoSingleSplit("enc2Button1");
                    }
                }

                // Button 2
                if (settings["enc2Button2"])
                {
                    if (DistanceSquared(6271, -3552) < Math.Pow(200, 2) &&
                        fzzy.values["enc2button2"].Old + 8 == fzzy.values["enc2button2"].Current && !fzzy.isLoading)
                    {
                        DoSingleSplit("enc2Button2");
                    }
                }

                // Hellroom
                if (settings["enc2Hellroom"])
                {
                    if (DistanceSquared(10708, -2263) < 15000 && !fzzy.isLoading)
                    {
                        DoSingleSplit("enc2Hellroom");
                    }
                }

                // Vents
                if (settings["enc2Vent"])
                {
                    if (fzzy.values["z"].Current < -1200 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        DoSingleSplit("enc2Vent");
                    }
                }
            }

            // Beacon 2
            if (fzzy.values["lastLevel"].Current == "sp_beacon_spoke0" && settings["b2Splits"])
            {
                // Death warp
                if (settings["b2Warp"])
                {
                    var warpX = fzzy.values["x"].Old - X;
                    var warpY = fzzy.values["y"].Old - Y;
                    var warpDistanceSquared = warpX * warpX + warpY * warpY;
                    if (DistanceSquared(4019, 4233) < 500 && warpDistanceSquared > 20000 && !fzzy.wasLoading)
                    {
                        DoSingleSplit("b2Warp");
                    }
                }

                // Button 1
                if (settings["b2Button1"])
                {
                    if (fzzy.values["b2button"].Current != fzzy.values["b2button"].Old)
                    {
                        if (DistanceSquared(2690, 10366) < Math.Pow(200, 2))
                        {
                            DoSingleSplit("b2Button1");
                        }
                    }
                }

                // Heatsink trigger
                if (settings["b2Trigger"])
                {
                    if (fzzy.values["x"].Old > -2113 && X <= -2113 && Y < 11800 && Y > 10100)
                    {
                        DoSingleSplit("b2Trigger");
                    }
                }
            }

            // Beacon 3
            if (fzzy.values["lastLevel"].Current == "sp_beacon" && settings["b3Splits"])
            {
                // Module retrieve
                if (settings["b3Module1"])
                {
                    if (DistanceSquared(-10670, 9523) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        DoSingleSplit("b3Module1", 1900);
                    }
                }

                // Module 2
                if (settings["b3Module2"])
                {
                    if (DistanceSquared(3797, -1905) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        DoSingleSplit("b3Module2", 1850);
                    }
                }

                // Secure beacon objective
                if (settings["b3SecureBeacon"])
                {
                    if (fzzy.values["b3SecureBeaconObjective"].Current != fzzy.values["b3SecureBeaconObjective"].Old &&
                        DistanceSquared(-3098, -1254, 1853) < 1000 * 1000)
                    {
                        DoSingleSplit("b3SecureBeacon");
                    }
                }
            }

            // TBF Elevator
            if (fzzy.values["lastLevel"].Current == "sp_tday")
            {
                if (fzzy.values["pilotYoureWithMe"].Current > fzzy.values["pilotYoureWithMe"].Old &&
                    DistanceSquared(1548, -7332) < 5000 * 5000 &&
                    settings["tbfPilotWithMe"] && !fzzy.isLoading)
                {
                    DoSingleSplit("pilotYoureWithMe");
                }

                if (DistanceSquared(-7867, 2758) < Math.Pow(600, 2) &&
                    fzzy.values["tbfElevator"].Current - 8 == fzzy.values["tbfElevator"].Old && settings["tbfElevator"])
                {
                    DoSingleSplit("tbfElevator");
                }
            }

            // The Ark
            if (fzzy.values["lastLevel"].Current == "sp_s2s" && settings["arkSplits"])
            {
                // Elevator
                if (settings["arkElevator"] &&
                    DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - lastLoadingTimestamp > 5000)
                {
                    if (fzzy.values["arkElevator"].Old > 0 && fzzy.values["arkElevator"].Current == 0)
                    {
                        DoSingleSplit("arkElevator", 1600);
                    }
                }

                // Knife
                if (settings["arkKnife"])
                {
                    if (DistanceSquared(-8021, -4567) < Math.Pow(1500, 2))
                    {
                        if (fzzy.values["inCutscene"].Old == 0 && fzzy.values["inCutscene"].Current == 1)
                        {
                            DoSingleSplit("arkKnife");
                        }
                    }
                }
            }

            // The Fold Weapon
            if (fzzy.values["lastLevel"].Current == "sp_skyway_v1" && settings["foldSplits"])
            {
                // Datacore
                if (settings["foldDataCore"])
                {
                    if (DistanceSquared(5252, -5776) < 25000 && fzzy.values["inCutscene"].Old == 0 &&
                        fzzy.values["inCutscene"].Current == 1)
                    {
                        splitTimer = 7950;
                    }
                }

                // Escape land
                if (settings["foldEscape"])
                {
                    if (DistanceSquared(535, 6549) < 25000 && fzzy.values["inCutscene"].Current == 0 &&
                        fzzy.values["inCutscene"].Old != 0)
                    {
                        DoSingleSplit("escape");
                    }
                }
            }
        }