LTTPHack

A practice romhack of The Legend of Zelda: A Link to the Past (JP 1.0)

Download

SD2SNES is the only SNES system that supports 256kb SRAM. This makes it possible to have in-game save states. These will not work on emulators, Everdrive etc.

VanillaHUD variants use the HUD from the original game. Counters are turned off by default, but can be turned on if you wish. They will be drawn over some of the hearts, though.

v14 aleph is an SA-1 version that is still in active development. This will need extensive testing, but it should be stable enough for now. Please report any bugs regarding this version to me in #prachack-dev on the ALTTP Speedrunning Discord server.
This version should not be used for room times, as it is currently less laggy than vanilla.

Features

General

  • Using the third filename slot will grant you full equipment when starting a new game.
  • Counters show intermediate values sometimes, like when opening a chest or when text appears.
  • If something weird happens, just reset your console, start a new game and use a preset to get back to where you were.
  • Holding Start and Select during power on will reset all configurations to default.
  • Check out ALttP Room Time Leaderboards for optimal room times.

Cycle Control

Cycle Control is a protocol used for various options that are considered to be core features. This means that they are carefully coded to be extremely efficient and to always take up the same amount of CPU time, regardless of what they are doing each frame, or whether they are enabled or not. Features not under Cycle Control are not accounted for when lag adjustments are made to be in line with vanilla.

Features part of Cycle Control will be marked with this badge: CC.

Notes about lag (link)

  • Lag is not exactly the same as original cart, but it tries to compensate for that.
  • Timers are not real time. Especially during transitions between the underworld↔overworld, it is possible, though rare, for frames, including lag frames, to go completely unaccounted for. Keep this in mind when comparing to emulator frame/lag counts and/or vanilla runs.

Known issues (link)

  • The lit rooms toggle may hide BG1 when switched indoors.
  • Lag from mosaics can be very inaccurate.
  • Thieves' Town Hellway and the Agahnim fights may cause issues with transparency and palettes.
Presets
Built in savestates for various categories
Items
Modify Y-item loadout
Equipment
Modify A-items, combat items, health, and keys
Game state
Modify game progress, status, and mode
Link state
Modify player character attributes
Gameplay
Feature toggles related to gameplay
RNG control
Fix specific RNG calls to specific values
Shortcuts
Modify shortcuts for quick feature access
HUD extras
Toggle features that appear on the HUD
Configuration
Configuration toggles related to meta-operation

Menu controls

Button When Action
R+Start Game play Open practice menu
Start In practice menu Close practice menu
A Submenu option Open submenu
Toggle option Toggle item
List option Next selection
Command option Activate command
X Most options Clear selection
B Main menu Move to top
Submenu Return to previous menu
L R Num field Increment/Decrement by larger amounts; no wrapping.
< > Toggle option Toggle item
List option Previous/Next selection
Num field Increment/Decrement by 1
^ v Practice menu Move cursor

Menu legend

Icon Meaning
Opens a submenu
Runs an immediate command
Toggles an option between YES and NO
Sets from a selection of choices
Sets a numerical value
Loads a preset
Bow
  1. None
  2. Normal
  3. Silver
Boom
  1. None
  2. Blue
  3. Red
Hookshot
On/Off
Bombs
  1. 0
  2. 5
  3. 10
  4. 15
  5. 20
  6. 25
  7. 30
Powder
  1. None
  2. Mushroom
  3. Powder
Fire rod
On/Off
Ice rod
On/Off
Bombos
On/Off
Ether
On/Off
Quake
On/Off
Lantern
On/Off
Hammer
On/Off
Flute
  1. None
  2. Shovel
  3. Inactive flute
  4. Active flute
Net
On/Off
Book
On/Off
Bottles
For each bottle (1–4):
  1. None
  2. Unobtainable shroooom
  3. Empty
  4. Red potion
  5. Green potion
  6. Blue potion
  7. Fairy
  8. Bee
  9. Good bee
Somaria
On/Off
Byrna
On/Off
Cape
On/Off
Mirror
On/Off
Fill magic
Tops off the magic meter
Fill HP
Fully replenishes health
Fill rupees
Grants 999 rupees
Sword
  1. None
  2. Fighter's sword
  3. Master sword
  4. Tempered sword
  5. Butter sword
Shield
  1. None
  2. Fighter's shield
  3. Red shield
  4. Mirror shield
Armor
  1. Green jerkin
  2. Blue mail
  3. Red mail
Gloves
  1. None
  2. Power glove
  3. Titan's mitts
Boots
On/Off
Flippers
On/Off
Moon pearl
On/Off
Half magic
On/Off
Max HP
3–20
Bombs
  1. 0
  2. 5
  3. 10
  4. 15
  5. 20
  6. 25
  7. 30
Arrows
  1. 0
  2. 5
  3. 10
  4. 15
  5. 20
  6. 25
  7. 30
Keys
0–9
Big keys
Toggle big keys for each dungeon.
Skip text
Skips the current text box
Remove sprites
Removes all sprites, overlords, and ancillae from the screen.
Reset current room
Resets the following data of the current room:
  • Quadrants visited
  • Keys collected
  • Chests opened
  • Doors opened
  • Moving walls
  • Water level
  • Boss defeated
  • Heart collected
  • Rupee tiles collected
NOTE: This only affects the data pertaining to that specific room, but not data pertaining to the dungeon as a whole. For example, even though key collection is reset, the key count for that dungeon is left unaltered.
Reset dungeons
Resets every room associated with a specific dungeon (including all non-dungeon rooms as a single group) with the same caveats and restrictions as Reset current room.
Toggle bosses defeated
Modifies the boss defeated room flag for the specific boss's room.
Pendants and crystals
Toggle collection status of each dungeon prize.
Game flags
Toggles miscellaneous SRAM flags:
Uncle dead
Talking to uncle in the secret passage
Sanc priest
Talking to the priest after mastersword
Escaped
Returning Zelda to sanctuary
Uncle left
Uncle leaving the house
Aginah
Aginah discussing book
Fortune cycle
Fortune teller hint selector
World
Switch between Light World and Dark World. Intended for experimenting with fake worlds.
Progress
Game mode selector:
Started
No progress. Game will not save. Always respawned in bed.
Uncle
Sword and shield obtained from uncle. Spawn is somewhere in escape (or Sanctuary with old man rescue).
Zelda
Zelda has been rescued. Spawn is standard selection, or mountain with old man follower.
Agahnim
Agahnim has been defeated. Spawn is standard selection in Light World, Pyramid in Dark World, or mountain with old man follower. Fake Light World from dungeon death no longer possible.
Map indicator
World map marker:
Castle
Zelda rescue mission
Kakariko
Go speak to villagers to learn about the Elders
Sahasrahla
Go speak to Sahasrahla to learn about the Master Sword
Pendants
Light World dungeons
MS
Go collect the master sword
ATower
Go fight Agahnim
Darkness
First Dark World dungeon
Crystals
Remaining Dark World dungeons
GTower
Go fight Ganon
Switch color
Toggle status of pegs and switches in dungeons.
Waterwalk
Control the falling-in-pit address
Unarmed
0; Link's default state
Armed
1; armed as if waterwalk were set up by dashing from a pit
Armed (2)
2; difficult (if not impossible) to obtain intermediate state
Deathholed
3; falling state obtained after a death hole in the underworld
Activate superbunny
Sets Link's general state handler to default ($00). For safety, this will only run when Link's handler is currently set to bunny ($17). If successful, you should hear a poof; otherwise, you will hear a beep.
Activate lonk

Sets Link's general state handler to bunny ($17). For safety, this will only run when Link's handler is at its default value ($00). If successful, you should hear OOF; otherwise, you will hear a beep.

Despite the labels, the Superbunny and Lonk menu options can be used to return to normal Link and normal bunny, respectively.

Finish mirrordoor
Sets the mirror door wait timer to finish after 11 frames. For safety reasons, this will only run when the Triforce door submodule is in effect. If successful, you should hear a VOOMP; otherwise, you will hear a beep.
Statue drag
Toggles the fake statue address.
Anc Index
Set ancilla search index ($03C4); 0–255
Armed EG
Toggle status of armed EG.
Eg strength
  • EG 0
  • Strong
  • Weak
NOTE: this toggle cannot overpower the strength of the current room.
Skip Triforce
Transitioning north from Ganon's Room will behave like a normal screen transition, allowing consistent and reliable room times for the fight.
Sanc heart
Presets will have more health, as if the Sanctuary heart were collected earlier in the run.
Disable beams
The Master Sword and its upgrades will no longer fire sword beams at full health.
Lit rooms
Dark rooms will be at full brightness and visibility. This option will remove the darkness in the current room as well.
Fast walls
Speeds up the moving wall cutscenes.
Visible probes
Search probes used by guards, beamos, etc. will display a graphic.
See bonk items
Shows bonk items on the overworld as stationary sprites.
Disable BG1
Disables SNES background 1 via PPU registers. Has no effect on lag.
Disable BG2
Disables SNES background 2 via PPU registers. Has no effect on lag.
OoB Mode
Turns on the debug OoB mode, which has the following features:
  • Link ignores all collision, and can walk everywhere.
  • The mirror works to go from Light World to Dark World.
Prize packs
Modifies drop percentages. This option only affects prize packs, not other guaranteed drops such as the stun drop or keys. It will, however, affect the 100% prize packs.
Vanilla
Drops behave normally. 50% for most prize packs, and fairy luck works.
Always
All enemies drop their prize packs when possible.
Never
No enemy drops prize packs, ever.
WARNING: toggling this option will reset existing fairy luck.
Frame rule
Forces the frame counter to a specific value on preset or savestate load.
Pokeys
Random, fixed RNG for every combination of UD/LR for each pokey
Agahnim
  1. Random
  2. Yellow
  3. Blue
Helmasaur
  1. Random
  2. No fireball
  3. Fireball
Ganon warps
  1. Random
  2. No warp
  3. Warp
Ganon warp location
  1. Random
  2. Far left
  3. Bottom left
  4. Bottom right
  5. Far right
Eyegore walk
  1. Random
  2. Short
  3. Medium
  4. Long
Arrghus walk
  1. Random
  2. Shortest
  3. Short
  4. Medium
  5. Long
  6. Longest
Turtles walk
Random, 32 fixed RNGs
Lanmola exit
Random, fixed {X,Y} for 0≤X≤7; 0≤Y≤7
Conveyor belt
  1. Random
  2. Right
  3. Left
  4. Up
  5. Down
First Vitty
  1. Random
  2. Slot 5
  3. Slot 6
  4. Slot 7
  5. Slot 8
  6. Slot 9
  7. Slot A
  8. Slot B
  9. Slot C
  10. Slot D
LTTPHack menu
R+Start - Opens the practice hack menu. NOTE: this shortcut cannot be changed.
Load last preset
Loads the last preset used from the preset menu.
Save preset
Save state (SD2SNES only)
Saves current state of the game, similar to emulator savestates. Both custom presets and states operate the same, but the SD2SNES version is implemented differently and is more powerful.
Load saved preset
Load state (SD2SNES only)
Loads custom savestate/preset, similar to emulator savestates. Both custom presets and states operate the same, but the SD2SNES version is implemented differently and is more powerful.
Reset seg timer
Resets the segment timer, which is not automatic like room timer.
Toggle OoB
Turns on out-of-bounds mode.
Skip text
Skips the current text box.
Remove sprites
Removes all sprites, overlords, and ancillae from the screen.
Fill everything
Maxes out equipment, rupees, items, and health.
VRAM repair
Attempts to fix important graphics registers and VRAM data that have been corrupted by door glitches.WARNING: If this shortcut is triggered during a text box, the text box will disappear, but the game will remain in text mode.WARNING: this feature only repairs registers and VRAM; other areas of RAM may result in vanilla game crashes unrelated to this feature, but which are never normally encountered in vanilla.
Show somaria pits
Modifies the upper layer tilemap to mark pits.NOTE: this feature is intended for finding pits created by door glitches, but it will mark all standard pit tiles the same way.
Input displayCC
Visual indication of every button registered each frame.
Off
No input display, but still contributes towards CPU time.
Graphical
Rectangle buttons arranged like a controller.
Classic
Original character display. About 50% laggier than graphical.
Room timeCC
Time spent on the current screen, starting from the beginning of the last transition.
Lag counterCC
Count of lag frames on the current screen, starting from the beginning of the last transition.
Heart lagCC
Animated spinning square that indicates there is heart lag present.
Idle framesCC
Count of frames with no relevant input, starting from the beginning of the last transition.
Segment time
Time spent since the beginning of the last segment timer reset.
CoordinatesCC
Absolute position of Link (X,Y)
QW indicatorCC
Displays an icon on the HUD when the current camera will produce a quickwarp.
RAM watch
Subpixels
Displays current subpixel remainder (Hexadecimal)
Spooky altit
Ancilla height for slot 4
Arc variable
Overlord value used by Armos Knights and Ganon for circles.
Icebreaker
Same as subpixels, but tells you when you're in a door.
Super watch
Ancillae
Ancillae RAM watch geared towards misslotting
UW Glitches
RAM watch geared towards underworld glitches (see this page).WARNING: this feature can be laggy.
Lanmola cycs
Displays a counter for the cycle count of the three Lanmolas individually.
Lagometer
Shows a rough calculation of the amount of lag a frame has. The more the bar is filled, the closer a frame was to producing a lag frame. Lag from one frame does not affect the next, but trends in the lagometer can be used to gauge how laggy an area is.
Enemy HP
Shows the exact health of a single enemy. Attempts to find the most relevant enemy as you play. WARNING: this feature can be laggy.
Rerandomize
When using built-in savestates and presets, this will run the RNG function to create a new value on each load.
Music
Sets the volume of every track in every song to 0. The size of the SPC transfers remains the same, so this feature does not affect lag.
Death reload
Reloads the last preset upon death.
Preset cat
Changes the selection of presets.
HUD font
Change the font used by HUD extras. This will not change the font for the vanilla HUD or for the HP, max HP, and enemy HP displays. Hover over options for larger preview.
  • Classic
  • Normal
  • Italic
  • Mario World
  • DKC (Donkey Kong Country)
  • ZAMN (Zombies Ate My Neighbors)
  • SMT (Shin Megami Tensei)
  • Earthbound
  • FF6 (Final Fantasy VI)
  • Lufia 2
  • Goonies 2
  • Emerald (Pokémon Emerald)
  • Klonoa
  • TI-83
  • Pac-Man (Pac-Man Arrangement)
  • DOOM (GBA version)
  • Undertale
  • Planet X-3
  • Skyroads
  • Yoshi's (Island)
  • S. Metroid (Super Metroid)
  • Tazmani

Changelog

v13.5.0 5 October 2020

  • Lui cannot be stopped

v13.4.0 4 October 2020

  • Lui added low% presets. Can no one stop this mad man?

v13.3.0 24 September 2020

  • Lui added any% RMG presets.
  • Added some cool fonts.
  • Added "fill everything" to equipment menu.

v13.2.0 15 September 2020

  • Link state:
    • Added ancillae search index editor
  • RNG control:
    • Added an option for forcing the frame counter to a specific value for frame rule testing.
    • Removed cannonball and soldier settings in favor of forced frames.
  • HUD extras:
    • Merged misslots- and DG-watch into a single feature under the name "Super Watch".
  • Ancillae watch has been revamped to be more readable and expandable.
  • Bug fixes:
    • The ancillae watch revamp means the quickwarp indicator is no longer overwritten.
    • Menu sound effects no longer cause problems when changing certain options.
    • Fixed mastersword LSD effect.

v13.1.1 23 April 2020

  • More efficient music muting, accomplished by adjust ADSR (sorry Myramong).
  • Fixed invisible timers caused by MVN.

v13.1.0 8 Feb 2020

  • Old versions of the practice hack are no longer archived on GDrive. All future versions will point to the same file, without the version in its name.
  • Added versioning and custom title to the file select screen.
  • Added an explanation of Cycle Control to the site.
  • Input display has been made to be persistent across multiple versions.
  • The input display can now be shut off or changed to the old version. When off, it will still use its normal CPU time, as it is a core feature and part of Cycle Control. The old input display is laggier, and that will not be fixed. Nor can it be.
  • The segment timer has been downgraded to an optional feature and is no longer part of Cycle Control.
  • Added Icebreaker to RAM watch. It's just subpixels with an icon for being in a door.
  • Fill rupees now applies immediately. No more ching cha ching.
  • Experimenting with a background on input display for more visibility in certain places.
  • Lui fixed weird savestate on death behavior.
  • Lui also fixed the dumb bow stuff in AD presets.
  • Fluting now resets the timer.
  • Moved some code so that Vanilla HUD variants can enjoy cleaner menu characters.

v13.0.1 2 Feb 2020

    Bug fixes:
  • Setting health works properly again.
  • Health refills no longer flash the HUD.
  • Fixed Lanmo cycles. Probably
  • Fixed file select E.
  • Fixed segment timer.

v13 22 Jan 2020

  • Several features have been adjusted to persist across practice hack updates (assuming you use the same file name). Please hold Start+Select on power-on the first time you use this update.
  • Cycle Control™ - made a number of features' lag contribution consistent, even when they're disabled.
      The following features have Cycle Control™:
    • Input display
    • Room timer
    • Lag timer
    • Idle frames
    • Segment timer
    • Coordinates
    • Quick warp indicator
  • HUD Extras:
    • New arbitrary RAM watch with the following options:
      • Subpixels
      • Spooky altitude
      • Arc variable
    • Deleted subpixels in favor of the above
    • Heart lag spinner. If it's animated, there's heart lag.
  • RNG control:
    • First Vitreous eyeball charge (slot positions shown in image with the option's description above)
  • Timer improvements
    • The lag counter is now red, to distinguish it from idle frames and to make it scary looking.
    • Fast moving walls will now add in the difference they saved to room times.
      New triggers:
    • Getting keys
    • Bonking
    • Chest appearing
    • Bombing stuff
    • Moving walls start/end
  • Sleek new input display that looks like a controller. Also way more efficient.
  • Digging game and Super Bomb timers are added back, just below the input display.
  • Bonking, etc. no longer leave weird camera offsets after preset loading.
  • Enemy HP display is more efficient in finding enemies, but also less picky.
  • Saved a few cycles on health display.
  • New icons for things in the practice menu.
  • When dealing with number field options, the d-pad now changes all values by 1. L and R can be used to cycle through larger amounts.
  • Removed the debug lag setting, since no one bothered with it.
  • Temporarily removed decimal coordinates.
  • Added SD2SNES debug version to site.

v12.1 26 Oct 2019

  • Updated the Emerald font.
  • Menu improvements
    • Added icons to menu items indicating what they do.
    • You can now use X to clear menu options.
    • Documented all these features on the site.
  • Bug fixes
    • Fixed graphical/memory issue with the Mirror toggle.

v12 24 Oct 2019

  • Gameplay
    • Fast moving walls - thanks Pinkus
  • Link state - New menu
    • Waterwalk
    • Activate superbunny
    • Activate Lonk
    • Finish mirror door
    • Statue drag
    • Armed EG*
    • EG strength*
    • * Will these options ever catch a break? They keep moving around!
  • HUD extras
    • DG watch - fully explained here
  • Configuration
    • HUD font - I probably won't add more than 16
  • Added sound effects to the practice menu to help indicate responsiveness.
  • Updated the Practice menu font a little.
  • Removed the Japanese text for "Pendants" and "Crystals", mostly to make room for new graphics.
  • Removed the red gloves and put boots back.
  • Lag changes:
    • Heart lag compensation has been lowered and may be slightly too little, giving 1 less lag frame than vanilla on occasion. Please help calibrate lag by reporting numbers in places.
    • Crystal cutscenes should no longer be extremely slow, thanks to Pinkus.
    • Slightly optimized input display. Hopefully lag when mashing text is a little closer to vanilla.
    • The floor number indicator on the HUD has had its cycles added back in, matching vanilla perfectly without writing to BG3.
  • Fixed some HUD bugs:
    • Lanmolas cycle toggle no longer messes with graphics.
    • Removed heart refill animation without affecting lag.

v11 12 Oct 2019

  • Under new management. General maintaining of the practice hack has been outsourced to the Americas.
  • A handful of menu items were moved around to keep similar options together.
  • Presets
    • All Dungeons preset (thanks to JoshRTA)
  • Game state
    • Full dungeon room resets
    • World state toggle
    • Crystal switch toggle
    • EG strength - renamed and added EG 0
  • Gameplay
    • Skip Triforce
    • Sanc heart*
    • Disable beams
    • Visible probes
    • Lit rooms* - also improved to work on current room
    • See bonk items
    • Disable BG1
    • Disable BG2
    • OoB Mode
    • * Moved from another menu
  • RNG control
    • Prize packs
  • Shortcuts
    • LTTPHack menu is now set in stone
    • VRAM repair
    • Somaria pits
  • HUD extras - renamed from "Counters"
    • Input display
    • Room time
    • Lag counter
    • Idle frames
    • Segment time
    • Lanmolas cycles
    • Lagometer
    • Enemy HP
    • Misslots RAM watch
    • Option already existed, but was renamed
    • Moved from "Features" menu
  • Renamed "Features" menu to "Configuration"
  • Holding START+SELECT on boot will now reset the practice hack configuration as intended.
  • Various features are now disabled during map screens.
  • Fixed a bug that somehow only prevented the GT Wizzrobes 2 preset from loading.
  • Replaced broken graphics in the item menu with placeholder tiles.
  • General refactoring. Practice hack control should be smoother now.

v10

This version was lost in a time paradox.

v9 - 08.02.2018

  • Presets
    • Added "Bosses" menu at the bottom.
    • Added "Ganon (full magic)" preset.
    • Fixed crystal state for Pokey 1.
    • Misspellings.
  • Item/Equipment
    • Better control over each bottle and its contents.
    • Set which big keys you have.
  • Game state
    • Skip text
    • Remove sprites
    • Boss defeated
    • Pendants and crystals
    • Game flags, Progress, Map indicator
    • Toggle armed/strong EG
  • RNG control
  • Configurable controller shortcuts
  • Features
    • Music
    • Idle frames
    • Lagometer
    • Made it possible to toggle on/off any of the counters.
    • Disabled the "Show enemy HP" by default.
  • Persist some things through console power-off/on, resets or load state.
  • Comes in VanillaHUD and NoSaveState versions.
  • Fixed bug that set game phase to "Agahnim killed" when upgrading sword manually
  • Fixed bug that didn't update frame counters on mirror or underworld warps.
  • Set the SNES header ROM size to 2mb. This fixes an issue where the ROM would not load properly on some platforms (everdrive).
  • Show version in lttphack menu.
  • Instant lttphack menu (no waiting for menu to go up/down).
  • Improved transition detection (triggers on mirror/warp, reset counters when you start a new file)

v8 - 24.10.2016

  • Complete rewrite.
  • Presets.
  • I don't even remember anymore. This is the same version that's been around for a while, I just arbitrarily decided to remove "beta2" from the version.

v7 - 15.12.2015

  • Made save/load state code more robust. Screen should not get messed up anymore by loading during mirror warp.
    Big thanks to total for this fix.
  • Added a toggle for "always lit rooms".

v6 - 09.12.2015

  • Fixed a bug that made the game crash when resetting segment counter.

v5 - 08.12.2015

  • Made Link get full equipment when using 3rd filename slot before starting a game.
  • Added controller inputs for:
    • Upgrading sword, armor and shield.
    • Filling HP, magic, rupees and stuff.
    • Pause game and frame advance.
    • Displaying Link's coordinates.

v4 - 05.12.2015

  • Fixed a bug where saving or loading would add a frame to your attempts in a room.
  • Added a "Full HP indicator".

v3 - 02.12.2015

  • Removed a bunch of lag. Should be less laggy than original ROM now.
  • Added "Quick Warp Indicator".
  • Better enemy detection.
  • Removed per-room Game Time counter.
  • Better B. Thanks, Audity.

v2 - 30.11.2015

  • Fixed issue where parts of segment timer was erased.
  • Fixed issue where counters didn't run during maiden crystal sequence.
  • Added better transition detection for boss victory → overworld.

v1 - 29.11.2015

  • Initial release

Special thanks:

  • MathOnNapkins for making the ALTTP disassembly
  • Acmlm for the save/load technique on SD2SNES; He is #1.
  • Pinkus for the original practice hack
  • Lui for creating poverty savestates and a bunch of presets
  • Myramong for the music muting
  • tewtal for the JavaScript patcher