~6-8 hours, spread across days 2-5 of week 6. The actual modification work.
Goal: implement the change you scoped in lab 6.1. Save artifacts as you go. Document setbacks. End with a working modified ROM.
Estimated time: 6-8 hours, broken across multiple days
Prerequisites: lab 6.1 complete (you have a written proposal)
Steps
Step 1: Set up your working environment (15 minutes, day 2)
Create a clean workspace for the capstone:
~/spk-101/capstone/
├── original.{nes,gb,sfc} (copy of the unmodified ROM)
├── working.{nes,gb,sfc} (your hack-in-progress)
├── notes.md (your running execution journal)
├── screenshots/
│ ├── before-{scene}.png (unmodified screenshots; take these now)
│ └── (after screenshots come later)
└── attempts/ (where you save snapshot iterations)
Copy your chosen ROM TWICE: once as original.{ext} (you will not touch this; it goes in the final zip), once as working.{ext} (this is what you edit).
Take 2-3 baseline screenshots of the scene(s) you will be modifying. Save these as your "before" images.
Step 2: Identify your target byte(s) (60-120 minutes, day 2)
Apply the strategy you wrote in lab 6.1. Probable steps depending on your change:
- Palette change: search PRG-ROM for the palette byte sequence (lab 4.1 technique)
- Text change: search PRG-ROM for the ASCII byte sequence or tile-index sequence (lab 4.2 technique)
- Tile redesign: calculate CHR-ROM offset for the tile (lab 4.3 / lab 2.2 technique)
- Numeric value: trace RAM → write breakpoint → PRG-ROM constant (lab 4.4 technique)
- Header field (Game Boy / SNES): navigate directly to the header offset (lab 5.1 / 5.2 technique)
Write down in notes.md:
- The byte offset(s) you identified
- The original value(s)
- The proposed new value(s)
- What you tried that did NOT work first
If you cannot find your target after ~2 hours of trying, consider falling back to your plan B from lab 6.1. The capstone grade does not penalize you for switching tactics; it rewards a clearly-documented chain of work.
Step 3: Make the change and verify (60 minutes, day 3)
Open working.{ext} in your hex editor. Make the byte change. Save.
Load working.{ext} in the appropriate emulator (Mesen / SameBoy / bsnes-plus). Navigate to the scene where your change should be visible. Verify.
If the change worked: take 2-3 "after" screenshots. Save them.
If the change did not work as expected:
- Save
working.{ext}toattempts/attempt-1.{ext}(so you have a record) - Try a different byte; iterate
- After 2-3 iterations, you usually find the right byte
Document each iteration in notes.md. The failed attempts are interesting in the write-up.
Step 4: Iterate on quality (60-180 minutes, days 3-5)
Now that the basic change works, you may want to polish:
- For a palette change: try a few color options; pick the one you like best
- For a text change: see if there's a more interesting replacement word
- For a tile redesign: refine the pixel art; iterate on the design
- For a numeric change: try a few values; pick the one with the most interesting gameplay effect
Re-take screenshots if your final version differs from your first working version.
Step 5: Verify gameplay stability (30 minutes, day 5)
Play through your modified ROM. Confirm:
- The game still boots
- The game does not crash partway
- Other scenes (besides the one you modified) still look and play normally
- Your change shows up consistently every time the relevant scene loads
If anything is broken: revert to a working working.{ext} from attempts/. Reduce your change to the minimum that achieves the visible effect. Stability matters more than ambition.
Step 6: Take final screenshots (30 minutes, day 5)
You should end day 5 with:
- 2-3 "before" screenshots (from step 1)
- 2-3 "after" screenshots showing your change clearly
- A few additional in-context shots (e.g., player walking around in the modified palette; full title screen showing modified text)
Pick the single clearest before/after pair. These become before.png and after.png for the capstone zip.
Step 7: Final notes (15 minutes, day 5)
Update notes.md with:
- Final byte offset(s) and value(s) changed
- The chain of attempts (what worked, what didn't)
- Total time spent (rough estimate)
- Any moments where something "clicked"
- Anything you wish you had done differently
This becomes the source material for the lab 6.3 write-up.
Expected output
- A working modified ROM (
working.{ext}, this becomesmodified-rom.{ext}in the final zip) - The unmodified original (still untouched in
~/spk-101/capstone/original.{ext}) - Before/after screenshots (at least 2-3 pairs)
- A detailed
notes.mdexecution journal
Common pitfalls
- Skipping the "always copy first" rule: editing the original is the cardinal mistake. You lose the ability to compare or revert. ALWAYS work on
working.{ext} - Not documenting failures: failed attempts are interesting in the write-up. If you find the right byte on the first try, your write-up has less depth than if you tried three things and the third worked
- Spending day 2 still searching for the byte: by end of day 3 at the latest, you should have a working change. If you are still hunting on day 4, switch to plan B or simplify the change
- Adding bonus changes after the first works: do NOT. One change. Polish that one. Bonus changes belong in a "future work" note in your write-up
Stretch (optional)
If you finished early (the change works by end of day 3):
- Polish the screenshots; ensure they clearly show your modification
- Reread
CAPSTONE.mdfor the write-up requirements; start drafting (do not finalize until lab 6.3) - Compute the SHA-256 of the original ROM now (will speed up lab 6.3 zip packaging)
Lab 6.2 v0.1. The execution lab. The week's main work.