HOME RANDO TRACKER CONTACT

Evermizer

The Secret of Evermore Randomizer

This is a community effort to randomize various aspects of the SNES classic "Secret of Evermore" to have a new experience or challenge or something to race friends with. It's in an early stage.

All of the coding is done by one person so far, so don't expect daily updates. We are eager to hear your opinion and accept your help over on the discord. Read Philosophy below for various design choices.

You will need to supply your own vanilla ROM. Check out the Readme below for more details.

Philosophy

  • Open-world Evermore to allow / require more complex routing
  • Keep as much in / stay as close to vanilla as possible
  • Patch the ROM so that randomization only replaces numbers where possible
  • Randomize as much as possible
  • Release source code for linux (and mac) desktop
  • Produce a single EXE for windows desktop
  • Produce a Wasm blob that runs completely in your browser
  • Your ROM will not leave your PC
  • The patcher contains no ROM

Randomizer

Check out the in-browser version here or download the ZIP below and run the EXE (on Windows) or compile the Source (on Linux). Please note that AVs may give false positives and the releases are not signed. When in doubt run the in-browser version.

Download

Latest: evermizer_032.zip [128.2KB]

Previous Versions

Changelog

v032:
  Complete east prison softlock fix
  Fix potential doggomizer softlock in palace grounds
  Include assassin17's bazooka stats and charge fix

More

Readme

HOWTO:
0. ROM has to be NTSC/US and can be a 3MB .SFC file with or without 512B header
1. Make a backup of your rom (just to be safe)
2. Unpack the exe, compile main.c or visit the in-browser version
3. Drag and Drop your rom onto the .exe or in-browser field
4a Should ask you for settings and spit out success or error in a dos window,
   create a file starting with "Evermizer" or "SoE-OpenWorld" in the source
   file's directory and print out the complete filename
4b Should present you checkboxes in your browser and offer the patched ROM as
   "download" or show messages in an alert box.
5. Checksum is wrong, but neither sd2snes nor (most) emulators seem to care
6. You can skip the intro by pressing start (even without a prior save)
7. You have to kill Thraxx or loot gourds/chests to get a weapon that can cut
   grass (or use cheat codes) to get access to the Windwalker.
8. If you have questions/need help continue reading below, check the guide at
   https://github.com/black-sliver/evermizer/blob/master/guide.md
   or join the discord.

CHANGES SO FAR:
  This is in an early but working state.
  Crude user interface to select seed and settings
    Default output filename includes settings and seed number
    Option to save a spoiler log
  Command line interface:
    Allow batch processing
    Allow to specify complete output filename with -o
    Allow to specify output directory with -d
    Run the program without any file/arguments to see possible arguments
    Run the program in UI mode to see possible settings
  Alchemzer: randomize where you get which alchemy and
    Make sure Atlas is obtainable and usable in Easy/+Chaos and Normal/+Chaos
    Make sure Levitate and Revealer is obtainable and usable when required
    Easy will give you one formula with buyable ingredients pre-thraxx
    Newly learned alchemy is now preselected/highlighted for alchemy selection
    (Texts still unchanged)
  Ingredienizer:
    Randomize ingredient requirements
    Scales with difficulty
    Goes crazy with chaos
  Boss dropamizer: randomize what each boss drops and
    Horace will not steal your DEs
    Thraxx will always drop a weapon for now
    Bridges in pyramid won't collapse
    Horace spawn should be fixed (tied to DEs in inventory or DEs lost)
    Horace dialog should correcly indicate how many DEs you have
    Tinker taking away your diamond eyes sets flag to not lock-out Aegis
    If gourdomizer is on as well, you can go back through Big Bug after Thraxx
  Gourdomizer: shuffle gourd/pot/chest drops, no gourds are missable
  Sniffamizer: non-chaos shuffles, chaos randomizes dog-sniff ingredients
  Doggomizer: swap (non-chaos) or randomize (chaos) dogs
    Act1-3 only because toaster evasion sound hardlocks for some music tracks
  Pupdunk: Act0 doggo everywhere!
  Musicmizer: randomize music, in testing stage
  Fix sequence:
    Desolarify: Act1 first rock skip is disabled (Levitation required)
    Desaturnate: require the use of teleporter before final boss hatch is open
    Disable double gauge: don't take away rocket parts until you have them all
  Fix cheats:
    Remove infinite call bead glitch
  All accessible:
    Make sure all checks/areas/bosses can be reached
  Open world: Unlock windwalker in every fire pit (slashing weapon required)
    Grant access to inner volcano
    Grant access to east swamp
    Fix palace cutscenes
    Lock Barrier (Horace inside palace) + gates behind Aegis (instead of WW)
    Make both Act3 towns filled with people
    Moved ticket lady bazooka shells behind dog race (in both towns)
    Fixed lance not appearing. He now appears in ivory as well as ebon keep
      Still not 100%, look into this again, weird camera glitch in Act3 houses
    Locked east draw bridge behind Mungola
    Disabled exit from Naris to chessboard if Mungola is alive
    Fixed reverse Timberdrake
    Disabled exit from castle to Verminator if Verminator is not dead
    Fixed prison sound crash
    Killing Verminator is optional, prison door unlocks when prison is cleared
    Keep dog after Magmar (room change required to make him visible)
    Play Tinker WW cutscene once, regardless of progress
    Landing skip converted to a regular landing
    Act2 dog statue and dialogues moved behind aegis
    Vigor fight won't start if you did not jump down the cliff at blimp
    Act1 Fire Eyes cutscenes play in order (dog naming skip as in vanilla)
    Act1 top-of-volcano guy fixed
    Act3 Mungola HP / fight fixed
    Act1 move Coleoptera behind talking to FE after killing Thraxx
    Aquagoth is accessible once. Oglin cave gourd can't be randomized
    Madrinus will (still) spawn after Aegis is defeated
    Move call bead glitch behind rocket
    Don't despawn North Market rock when Aegis is dead
    Replaced FE Village Windwalker checks with Magmar-dead checks
    Progress Act3 NPCs based on Castle crumbled instead of WW (ongoing effort)
  Vanilla bugs fixed:
    Fix softlock when entering west prison with dead dog
    Fix softlock when opening mosquito cell last (exit will be bottom left cell)
    Fix softlock when you have more than 3 rocket parts
    Fix texts disappearing when you fall down in Ruins NW room
    Removed option to save at Madronius' Brother
    Fix softlock when leaving tiny's lair
  Fix missables:
    Directly reward Queen's Key to inventory
    Make Revealer and Escape still obtainable when Horace is gone
    All rooms with gourds/chests/pots can be re-entered with gourdomizer on
  Some quality of life improvements are always enabled, most notably:
    Preselect the correct spell in alchemy selection screen
    Bazooka charge/energize and stat display fix
  Uses tinymt64 for platform-independend RNG. See tinymt64.h for lincense
  Allow for ROM to grow to 4MB if required
  Allow skipping of intro with no prior save file


STILL TO BE FIXED:
  (with feature set outlined above)
  Show info to the player if market timer is over but vigor won't spawn yet
  Act3 has camera location bugs in houses until blindly talked to Lance
  Lance is still somewhat buggy
  Stop and Lance are missabe
  Put rocket behind mungola / change tinker progression?
  Remove some cutscenes?
  Desaturnate 2.0: make sure *NO* hatches can be skipped
  Remove unnecessary parts of first WW/open world patch


LINUX AND MAC BUILD INSTRUCTIONS:
  run make

WINDOWS BUILD INSTRUCTIONS:
  Run make for mingw, or create a VS project with main.c as (only) source file.
  The github source tree requires you to have python3 in PATH to build gen.h.
  The zip distribution includes a pre-built gen.h.

EMSCRIPTEN BUILD INSTRUCTIONS:
  Make sure emscripten/emcc is configured and in PATH. run make wasm
  You may need to set some env variables, like EM_CONFIG=~/.emscripten

CREDITS:
  Written by black_sliver
  Some patches by assassin17 - http://assassin17.brinkster.net
  Thanks to all people pushing or commenting on the project, providing ideas or
    artwork, testing it, pointing out bugs and looking into SNES/SoE stuff
  ayame li, colin, cyb3r, darkmoon2321, dot, esmo88, flarezenyu, fronk,
  greenambler, metasigma, mirapoix, neagix, nyrambler, queenanne, skarsnikus,
  solarcell007, zheal
  Thanks to vr-interactive for providing the website's new background image
  Special thanks to elwismw for existing. #hereforelwis

LICENSE:
  The source tree and generated binaries are distributed under
  the terms of GPL v3. See LICENSE file.
  The patches found in patches/ directory are in public domain unless
  noted otherwise. See patches/LICENSE file.
  For the patches found in ips/, see the corresponding .txt files.

Tracker

Auto-tracker only. Connects to (Q)Usb2Snes. Download includes Bingo. Download the windows ZIP and run the EXE on Windows, download the linux ZIP and run the binary on recent Linux distros or download the source TAR.XZ and compile it yourself.

Download

Windows: evertracker_013-win32.zip [2.8MB]
Linux 64bit: evertracker_013-linux64.zip [243.7KB]
Source: evertracker_013-src.tar.xz [1.2MB]

Previous Versions

Changelog

v013:
- Added option for 9x9 bingo sheet. Prefix with "XX"
- 16 new bingo squares
- Added support for RetroArch with snes9x core
- Increases QUsbSsnes throughput
- Limit updates to 4 per second

More

Readme

WINDOWS INSTALLATION:
- Just unpack the EXE
- Install (Q)Usb2Snes for auto-tracking

LINUX INSTALLATION:
- Provided binary is 64bit, needs liblzma and libsdl2 (apt install ...)
- Run from terminal or create a launcher/desktop shortcut
- Install (Q)Usb2Snes for auto-tracking
- Tested on Arch Linux and Ubuntu 20.04
- Build from source if you get errors

TRACKER HOWTO:
- Run the EXE / binary
- It will try to connect to (Q)Usb2Snes on ws://localhost:8080
- It only supports auto-tracking for now
- Window background will change with connection status:
    Grey:   starting up
    Red:    no connection to (Q)Usb2Snes service
    Orange: connection to service established, but no console/emu found
    Yellow: connected to console/emu, but no/wrong game/version loaded
    Black:  Evertracker running
- For emulators, QUsb2SNES + a bridge is required
    see https://skarsnik.github.io/QUsb2snes/#usage
    or read https://evermizer.com/rls/evertracker/snes9x-tracker.txt
- If you have issues with the current tracker, please try the previous version

BINGO HOWTO:
- Run the EXE / binary
- Select a seed in bingo by pressing S or clicking on the center logo
- Prefix seed number by X to get 7x7 sheet, XX to get 9x9, by H to get center
- Mark squares with middle mouse button or ctrl/shift + left or right button
- Check/uncheck squares with left/right mouse button

BINGO RULES:
see bingo-rules.txt

TODO:
- Manual tracking for tracker?
- Auto-tracking for bingo?
- Add more/non-required checks?
- Add timer?
- Add "map tracker"?
- A proper Makefile
- Open for ideas, post to discord if you have any

NOTES:
- this program uses images from Fandom, see src/assets/copyright.txt or below
- this program uses SDL2, see src/SDL2/README-SDL.txt or below
- only BMP supported (preferably 32bpp RGBA, no color space information), will
    be xz (lzma) compressed if embedding assets (not using assets/ directory)
    (which are smaller than PNGs, for evermore at least)
- What is notk and notk-helper?
   notk acts as a platform abstraction, similar to SDL
   notk-helper allows us to bring required native functionality in without
     "polluting" notk (i.e. avoids including windows.h)
- Why the heck do we wrap sdl?
   1. we want to abstract away as much as possible from the program logic
      (wrapping moves some implementation details to notk.c/.inc) 
   2. we want to be able to swap out the underlaying backend, for example
      to integrate this into an app written in Qt or any other Tk,
      or to use other or no GUI libraries on some platforms

LINUX BUILD INSTRUCTIONS:
install liblzma-dev and libsdl2-dev
then see first half of or run src/build.sh

WINDOWS BUILD INSTRUCTIONS:
The included websocketpp is patched to allow std::thread with mingw,
  but requires a very recent version of mingw, msvc should just work for it
The included asio is the latest one that works with websocketpp
With mingw you can use the same command line as above
  but get rid of -flto=4 and add -mwindows
With msvc you have to create your own project file and cross fingers
The included libzma.a and libSDL2.a are cross-compiled with 32bit mingw.
If you have a different tool chain, you may want to build them yourself,
  use vendor-supplied versions for your toolchain or link them dynamically

CMAKE INSTRUCTIONS:
I don't use cmake, but if you write a cmake file, you can add SDL2 to it
liblzma (part of xz, see https://tukaani.org/xz/) is still required
...

More

Get in touch

Discord GitHub

Channel #sliver-soe-rando on linked discord, Repos evermizer and evertracker on github

I may also check emails sent to info at this domain