A full-dialogue run of Earthbound is a playthrough of the Earthbound/MOTHER 2 (1994) in which every normally-accessible line of dialogue appears on-screen. “Normally-accessible” means lines of dialogue that are accessible without the use of glitches, cheats, or hacks. This includes all dialogue spoken by NPCs and displayed by objects (signs, doors, objects, etc.) For simplicity, battle-only text and item descriptions are excluded from the completion checklist.
I have been developing this run since March 2023. This repository includes the route itself (resources\routes\Earthbound Full Dialogue Run - Route.xlsx
), as well as a number of materials and resources I've created to support development and tracking of this long, complex run.
Note: I am developing this route as though it were a speedrun; however, this project is also an exercise in exploring certain ideas I'm interested in around video game writing and unconventional modes play. As such, I am as interested in actually executing the route as I am in analyzing the game and the process of developing this run. A bit of non-technical discussion can be found in the docs\
directory of the repository, and some published posts on the project are available at (https://waysofreading.substack.com/p/full-dialogue-run-revisited).
It is certain that the route, once completed, will contain errors and omissions -- it's also the case that some dialogue is entirely inaccessible through normal play. Validation of a given run is a complex topic, Therefore, Therefore, it may make more sense to title the run "Maximum Dialogue", and to improve coverage in future iterations.
The run itself is being composed in routes\Earthbound Full Dialogue Run - Route.xlsx
in this. The sheet includes one row for each action and event that must occur to fulfill the requirements of run. The primary tab contains all information needed to perform a validated run.
I have uploaded recordings of several segments of the run. Note that these are proof-of-concept recordings and I make use of emulator save states, pausing, and rewinding in order to create a faster, more watchable segment. I do not use these features to exploit glitches or take any action not possible for a skilled player.
As noted in the introduction, this is a long, complex run. It is expected to comprise several thousand steps that must be taken in a fairly precise order, with many cases where steps can be permanently missed due to the way NPC dialogue changes in response to plot events. This creates a challenge both for executing the run, and for validating that the run has accomplished what it claims: visiting all normally-accessible NPC and object dialogue in the game.
In order to address these challenges, I have developed the Text Access Monitor, a LUA script for BizHawk (text-access-monitor\text-access-monitor.lua
). This script exposes game state data to facilitate route development and execution, tracks overall run progress, and outputs a list of byte-level dialogue addresses accessed in a given .bk2
recording of a run (to support validation and run completion calculations). The Text Access Monitor currently includes the following features:
- GAME STATS and PARTY
- Money on hand and stored at the ATM
- Map position
- Emulation details (frame, time, speed, current input)
- Timers for skip sandwich and Dad's "take a break?" phone calls
- Party HP, PP, inventory slots open, and any status effects
- TEXT CALL STACK
- Displays recent dialogue addresses pushed to the text parser registers
- Also writes a list of all bytes and labels accessed to a text file (for run validation)
- ROUTE PROGRESS
- Not fully implemented -- shows which dialogue has been accessed for several kinds of dialogue
- Bytes: byte-level addresses of dialogue in game ROM (~327,680 bytes)
- Labels: labeled sections of dialogue in game ROM (~6,153 labels)
- Items: item descriptions (255 items)
- Presents: trash cans, coffins, and presents with items (or nothing) (174 presents)
- Photos: events where the party has their photo taken (32 photos)
- Hints: hints shared by the Hint Man throughout the game (75 hints)
- Headlines: Newspaper headlines after staying at hotels throughout the game (~93 headlines)
- Not fully implemented -- shows which dialogue has been accessed for several kinds of dialogue
- ROUTE NEXT STEPS
- Uses a CSV version of the route spreadsheet to display a scroll of past and upcoming steps
- Controllable in-game by holding down Y and using Up, Down, Left, Right (+1, -1, +5, -5 steps)
- DIALOGUE HISTORY
- Displays processed plaintexts which (should) correspond to recent dialogue labels accessed by the player
- RNG MONITOR
- Snes9x version by pirohiko, BizHawk version by BrunoValads
- Note: BrunoValads' code (https://pastebin.com/MRix5ZJg) served as the basis for the Text Access Monitor script
It is impossible to reach 100% of all dialogue bytes and labels in Earthbound through normal play. Of the subset of dialogue data which is normally accessible, it's virtually certain that the completed route will include a number of gaps, errors, and oversights. The route spreadsheet supports basic validation and includes tables showing whether and how often each NPC has been visited, as well as checklists for hints and newspaper headlines.
Given the length of a full run, it's also important to be able to automate the calculation of the completion rate ("collection rate") of a given run for progress tracking, as well as to identify gaps in coverage that necessitate revisions to the route. I'm currently thinking of the collection rate in terms of one of two formulae:
- The number of dialogue bytes accessed divided by the total number of bytes in game ROM
- The number of dialogue address labels accessed divided by the total number of addresses in game ROM
The Text Access Monitor includes features for tracking and logging both of these types of access, and can be used to establish how much of the total dialogue in the game was accessed in a run. A subtler question involves determining which addresses are truly unreachable: I will investigate this challenge later, once the initial route is drafted.
- Record routed segments:
- Threed (including Saturn Valley and Belch's Factory)
- Route remaining segments of the run:
- Fourside 1 (Dusty Dunes + Mole Cave)
- Fourside 2 (Paula's kidnapping + Moonside)
- Summers
- Scaraba
- Deep Darkness
- Stonehenge + Lost Underworld
- Magicant
- Onett + Cave of the Past
- Postgame
docs\
Documentation of various processes used for creation of the run and supporting materialsprocess-guide_create-region-images_20230701.txt
Guide to creating image files for Earthbound's individual rooms and overworld regions
resources\
Data, documentation, and materials relating to the rundecompilations\
Decompiled data from the Earthbound game ROM20230106\
A CoilSnake decompilation that is my source for all outputs inventoried here
dialogue\
Text files containing game dialogue in various arrangementsaddresses.txt
A list of all dialogue address labels in game ROMprocess-dialogue_output.json
Output from process-dialogue.py (usesscript-dumper_output.txt
)process-dialogue_output.csv
Flattened from process-dialogue.py (used bytext-access-monitor.lua
)script-dumper_output.txt
Output from Earthbound Script Dumperscript-dumper_output_text-only.txt
Output from Earthbound Script Dumper, plaintext onlyby_npc\
Output from process-dialogue.py, separate text file for each NPCby_npc_working-set\
Output from process-dialogue.py, free to modify for routing purposesccscript_parts\
CCScript files from CoilSnake
labels\
Tables mapping game values to text labelssprite-group-labels.csv/xlsx
Canonical or descriptive names for game sprites (used bytext-access-monitor.lua
)
maps\
Image files for every overworld region and room in Earthbound, with number labels for spritesexport-layers_output
Intermediate output (from antipalindrome,Photoshop-Export-Layers-to-Files-Fast-2.7.1
)export-layers_output_flat
Same as above, with all image files in a single directoryprocess-images_output
Intermediate output (fromprocess-images.py
)- Filename
06144_06016_06400_06144_Dusty Dunes Desert_Monkey Cave_Start_Left_Left-(Hallway)
- x0 (bounding box)
- x1 (bounding box)
- y0 (bounding box)
- y1 (bounding box)
- Area (English label)
- SubArea (English label) ...
- (Note)
- .png
- Filename
regions-trimmed-flat-by-name
Final output, separate image files for each region in the game
ram-watches\
Files used by BizHawk to expose values of game RAMEarthbound (USA).wch
a RAM watch file for Earthbound
recordings\
Emulator and video recordings of full runs and run segmentsbk2\
Bizhawk emulator movie filesvid\
Video recordings for sharing and publication (too large for GitHub, look on YouTube)
routes\
Materials for the Full Dialogue Run routeEarthbound Full Dialogue Run - Route.xlsx
The most recent draft of the route_old\
Old routing filesregions-trimmed-flat
Output from Bulk Rename Utility flatteningprocess-images_output
regions-trimmed-flat_by-name
Coordinates removed so list is sortable by name/hierarchylayers_all-regions-and-rooms.psd
(BIG) all rooms and segmented overworld regions in nested layer structurelayers_overworld-regions-only.psd
Complete overworld regions only in flat layer structuremap-with-npcs_spread_nogrid.png
output from EB Project Editor with NPCs shown (adjusted for visiblity)
saves\
Save states created at various points along the routesave-states_BSNES
For use with BizHawk's SubBSNESv115+ coresram
for use with BizHawk
screenshots\
Screenshots of Earthbound created with BizHawk. Just for fun/reference.tables\
Automatically-generated value lists for game entitiesregions-and-rooms.csv
Names and coordinates for all regions and rooms (output fromprocess-images.py
)npcs.csv
Detailed table of all NPCs (output fromprocess-dialogue.py
)flags.csv
English labels for all numbered game flags (from CataLatas,earthbound-script-dumper
)
text-access-monitor\
Multipurpose LUA script for facilitating run routing and validation. See "Text Access Monitor", above, for more details.utilities\
Scripts, utilities, and tools. Supporting tools created by other authors as annotated below.bizhawk_29\
Technical/TASing/Scripting emulator (https://tasvideos.org/BizHawk)coilsnake\
Earthbound decompilation and modification tool (https://pk-hack.github.io/CoilSnake/)earthbound-script-dumper-main\
Tool for refining dumped script (https://github.com/CataLatas/earthbound-script-dumper)constants\
includes English labels for flags, items, etc.
Photoshop-Export-Layers-to-Files-Fast-2.7.1
Tool to split PSD by layer with options (https://github.com/antipalindrome/Photoshop-Export-Layers-to-Files-Fast)roms\
This run is based on an unmodifiedEarthBound (USA).sfc
(CRC32 =DC9BB451
)
process-images.py
Yields trimmed and renamed versions of images output fromPhotoshop-Export-Layers-to-Files-Fast-2.7.1
process-dialogue.py
. Recursively unrolls dumped script, and yields dialogue files and NPC tables
Additional documentation may be available in the Python source code and elsewhere.