Speedrun timer with autosplitter for fxpak/sd2snes

Related tags

Utilities annelid
Overview

About

Action Shot Menu Settings Editor

This is a simple barebones re-imagining of LiveSplit + autosplitter for SNES (sd2snes/fxpak + qusb2snes or SNI). It's named for the phylum of segmented worms, because segments.

It currently only supports Super Metroid, but other SNES games could be easily added. The Super Metroid support is based on SuperMetroid.asl.

It's written in Rust using egui. This means it should work on Windows, macOS, and Linux. However, I've only tested it on Linux.

Dependencies

You will need qusb2snes or SNI so that the autosplitter can read the SNES memory (console or emulator). Beyond that, it should build and run on Windows, macOS, and Linux.

Getting Started

The easiest way to get Annelid is to download a release build for your OS: Releases

Once you have Annelid running, you can right-click to import a layout and splits from LiveSplit. Then use the Autosplitter editor to create an autosplitter logic that matches your splits.

Building

You'll need to install Rust. I recommend using rustup. Once you have the rust toolchain installed, clone this repository, and then type:

cargo build --release

If the build is successful, you can run it with:

cargo run --release

If you see the message:

Error: "No devices present"

That means you need to turn on your SNES and make sure that qusb2snes is connected to it.

TODO

  • Settings editor. A tree view with checkboxes should work pretty well for configuring autosplit behavior.
  • Named settings that can be saved/loaded
  • Right-click menu for:
    • Settings editor
    • Save/Load splits and settings
    • Way to select your usb2snes server
    • Toggle for latency display
  • Keybindings for skipping a split, undo, pausing, and stopping. Whatever livesplit supports.
  • Make sure the logic for starting a new run starts from a fresh snes state
  • Implement comparisons
  • Fix the horizontal sizing, currently hard coded
  • Allow it to start up without a connection and stay running when the connection dies
  • Do something to avoid refiring splits in the case of reset or death mid run.

Cross compiling

For Windows

sudo xbps-install -Su cross-x86_64-w64-mingw32
rustup target add x86_64-pc-windows-gnu
cargo build --target x86_64-pc-windows-gnu
wine ./target/x86_64-pc-windows-gnu/debug/annelid.exe

For macOS

This fails because it needs all the Apple frameworks and there is currently no way to test it from linux. So cross compiling to macOS effectively doesn't work yet.

However, it may still be useful to list the target in case those things change.

rustup target add x86_64-apple-darwin
cargo build --target x86_64-apple-darwin
You might also like...
RTIC monotonic implementation using the RP2040's Timer peripheral

rp2040-monotonic RTIC monotonic implementation using the RP2040's Timer peripheral. Documentation License Licensed under either of Apache License, Ver

A timer based on a multi-time wheel structure

wheel-timer2 A timer based on a multi-time wheel structure This library uses a multi-layered time wheel structure. When a task is added to the wheel,

TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker
TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker

TimeKnight is a neat little TUI-based timer app I use in conjunction with a task tracker. It's kind of a secret sauce for productivity (particularly if you have ADHD or have a ridiculously overactive brain).

A clock app in terminal written in Rust, supports local clock, timer and stopwatch.
A clock app in terminal written in Rust, supports local clock, timer and stopwatch.

clock-tui (tclock) A clock app in terminal. It support the following modes: Clock Timer Stopwatch Countdown Usage Install Install excutable by cargo:

Comments
Releases(2022-11-06-6149add)
Owner
Jason Dagit
Jason Dagit
Simple pomodoro timer with notifications

omo Simple pomodoro timer with notifications Installation

Guy Edwards 22 Dec 21, 2022
RTIC monotonic implementation using the RP2040's Timer peripheral

rp2040-monotonic RTIC monotonic implementation using the RP2040's Timer peripheral. Documentation License Licensed under either of Apache License, Ver

Emil Fresk 6 Nov 24, 2022
A timer based on a multi-time wheel structure

wheel-timer2 A timer based on a multi-time wheel structure This library uses a multi-layered time wheel structure. When a task is added to the wheel,

orange soeur 1 Jan 25, 2022
A timer toolkit that is generic over the underlying timer implementation.

timer-kit A timer toolkit that is generic over the underlying timer implementation. This crate does not implement any platform-specific timer but uses

null 4 Mar 4, 2023
Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

null 294 Dec 23, 2022
VVVVVV autosplitter for macOS and Linux

Vitellary Vitellary is a work-in-progress autosplitter for VVVVVV v2.3.6 on macOS and Linux systems. More notes here soon when it’s done. Thanks / See

iliana etaoin 5 Mar 6, 2023
Simple timer for your terminal

consoleTimer Simple timer that allows you to initiate countdown from N seconds. Usage: consoletimer [time in seconds] consoletimer [time in minutes]m

Arthur 20 Apr 4, 2022
Simple profiler scopes for wgpu using timer queries

wgpu-profiler Simple profiler scopes for wgpu using timer queries Features Easy to use profiler scopes Allows nesting! Can be disabled by runtime flag

null 41 Dec 5, 2022
A simple CLI pomodoro timer written in Rust.

Pomodoro A simple CLI pomodoro timer written in Rust. Based on the Pomodoro Technique. Works on any platform that supports desktop notifications. Exam

null 6 Nov 26, 2021
Simple pomodoro timer with notifications

omo Simple pomodoro timer with notifications Installation

Guy Edwards 22 Dec 21, 2022