public void Update(IInvalidator invalidator, LiveSplitState state, float width, float height, LayoutMode mode) { _mem.Hook(); if (!_mem.IsHooked) { return; } if (_model.CurrentState.CurrentSplitIndex == -1) { CheckStart(); return; } if (_mem.GetGameState() != GameState.Playing) { return; } if (_settings.RandomizeSkins && !_playerRandomized) { _mem.RandomizePlayerAppearance(0); _playerRandomized = true; } CheckItemSplits(); // TODO: Generic enemy kill split system // Unspeakable Deep int len = _mem.GetCharCount(); for (int i = 0; i < len; i++) { if (_mem.GetCharType(i) != EnemyType.Leviathon || _mem.GetCharHealth(i) <= 0f || _enemyTrackers.Any(tracker => tracker.CharType == EnemyType.Leviathon)) { continue; } _enemyTrackers.Add(new EnemyHealthTracker(_mem, i)); } CheckCharKills(); if (_model.CurrentState.CurrentSplitIndex == _model.CurrentState.Run.Count - 1 && _mem.IsGameEnding()) { _model.Split(); } }
public static void Main() { using SaltMemory mem = new SaltMemory(); while (!mem.IsHooked) { mem.Hook(); } string anim = mem.GetPlayerAnim(0); while (true) { Thread.Sleep(10); string newAnim = mem.GetPlayerAnim(0); if (anim != newAnim) { anim = newAnim; Console.WriteLine(anim); } } }