private void LogValues()
        {
            if (lastLogCheck == 0)
            {
                hasLog       = File.Exists(LOGFILE);
                lastLogCheck = 300;
            }
            lastLogCheck--;

            if (hasLog || !Console.IsOutputRedirected)
            {
                if (mem.UIState() == UIState.PLAYING)
                {
                    pdata.UpdateData(mem, WriteLogWithTime);
                }

                string prev = "", curr = "";
                foreach (string key in keys)
                {
                    prev = currentValues[key];

                    switch (key)
                    {
                    case "CurrentSplit": curr = currentSplit.ToString(); break;

                    case "State": curr = state.ToString(); break;

                    case "GameState": curr = mem.GameState().ToString(); break;

                    case "SceneName": curr = mem.SceneName(); break;

                    case "NextSceneName": curr = mem.NextSceneName(); break;

                    case "Charms": curr = mem.CharmCount().ToString(); break;

                    case "MapZone": curr = ((MapZone)mem.PlayerData <int>(Offset.mapZone)).ToString(); break;

                    case "CameraMode": curr = mem.CameraMode().ToString(); break;

                    case "MenuState": curr = mem.MenuState().ToString(); break;

                    case "UIState": curr = mem.UIState().ToString(); break;

                    case "AcceptingInput": curr = mem.AcceptingInput().ToString(); break;

                    case "ActorState": curr = mem.HeroActorState().ToString(); break;

                    default: curr = ""; break;
                    }

                    if (!prev.Equals(curr))
                    {
                        WriteLogWithTime(key + ": ".PadRight(16 - key.Length, ' ') + prev.PadLeft(25, ' ') + " -> " + curr);

                        currentValues[key] = curr;
                    }
                }
            }
        }