1
0
Fork
You've already forked JSRF-ChapterSelect
0
Jet Set Radio Future mod turning tutorial menu into chapter select
  • C++ 85.1%
  • Makefile 9%
  • Linker Script 5.9%
KeybadeBlox 4db7f2a8d3 Remove old licence notice from inject.ld
I probably should add some licence as a formality (even if only to make
good on Codeberg's requirement of code being open), but I haven't
decided on what yet.
If I haven't added a licence yet and someone wants to use this code for
something... I guess consider it GPLv3+ for the moment and I may or may
not relax it to WTFPL in the future.
2026年07月11日 13:17:41 -04:00
include Initial commit 2026年07月10日 21:56:06 -04:00
patches Initial commit 2026年07月10日 21:56:06 -04:00
.gitignore Initial commit 2026年07月10日 21:56:06 -04:00
chapterselect.cpp Fix typo in comment 2026年07月10日 23:40:38 -04:00
inject.ld Remove old licence notice from inject.ld 2026年07月11日 13:17:41 -04:00
Makefile Initial commit 2026年07月10日 21:56:06 -04:00
readme.md Fix another readme typo 2026年07月11日 13:11:14 -04:00

Jet Set Radio Future Chapter Select Mod

XBE mod for Jet Set Radio Future (currently just the North American standalone release) that turns the tutorial menu into a chapter selection screen with the following options:

  • Warp to opening tutorial
  • Warp to chapter 1 (after prologue)
  • Warp to chapter 2
  • Warp to chapter 3
  • Warp to chapter 4
  • Warp to chapter 5
  • Warp to chapter 6
  • Warp to chapter 7
  • Warp to chapter 8
  • Warp to chapter 9
  • Warp to credits
  • Warp to unused Golden Rhino car fight
  • Return to title screen

A demonstration video of the initial release can be seen on YouTube.

Some measures have been taken to ensure that the game functions normally despite the departure from the intended linear format. In particular, while save data is nearly fully retained (unlocked characters, collected graffiti souls, test run records, and so on), tags are unpainted for chapters that depend on them for progression. Other measures are more subtle, such as ensuring that travelling to another chapter while Clutch has all of the player's graffiti souls doesn't lead to said souls being lost forever.

Installation

From Releases

Releases are in the form of VCDIFF files that can be applied to JSRF's default.xbe with e.g. xdelta3:

# Applying VCDIFF to default-original.xbe to create default-modded.xbe
$ xdelta3 -d -s default-original.xbe chapterselect-1.0_northamerica-standalone.vcdiff default-modded.xbe

After the patch is applied, the game can be run from its files in the usual ways (FTP'd to an Xbox, via Cxbx, etc.).

From Source

To compile and apply the mod from source, the following are required:

  • A VCDIFF binary patching utility like xdelta3
  • A Unix-like environment with some common command line utilities (e.g. POSIX-compliant make, xxd)
  • A C++ compiler supporting 32-bit x86 output and the section attribute (GCC and Clang have been tested)

The first step is to apply the appropriate patch for your region from the patches/ directory to your default.xbe. This modifies UI strings and adds a new section table with a new section named INJECT that will house the injected code, and redirects a function responsible for initializing tutorials to the new section. The patched .xbe should be left in the root directory of the repository and named default.xbe.

Simply running make will compile the code to be injected from chapterselect.cpp. Its contents are regular (freestanding) C++ code referencing data and functions in the game as described in the appropriate region's header in the include/ directory (TODO: implement a convenient way of selecting which region's header to include). Linking is performed according to the linker script inject.ld, which ensures correct memory layout.

Finally, running make inject will extract the machine code from the compiled output and copy it into default.xbe, updating the INJECT section's checksum as well. The end result is an .xbe that runs the injected code instead of the regular tutorial handling (and passes all section checksum checks, but not a signature check).