Skip to content

RayCarrot/rayman-ps1-modding

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Rayman PS1 Modding

This project provides an easy way for modding the PS1 version of Rayman 1 using the PSX Modding Toolchain. It includes symbols exported from the game, allowing mods to directly access its functions and data. Currently the NTSC and PAL versions are supported by this project, though not all mods have been updated to work for the PAL version.

Included in here are several mods as well as an example. Feel free to submit your own mods through pull requests!

Debug Menu

Mods

Below is a list of every mod available in this repo, in alphabetical order. In order to apply a mod without using the toolchain you can download the provided xdelta patch file and apply it to the game's first .bin disc file. Note that when using xdelta files you can only apply one mod at a time. Some mods have combined downloads to make this easier.

Image Name Author Description Status Download
Ability Shop fuerchter Provides an all new way to play the game where you now have a goal to collect a certain number of items, an ability shop for unlocking powers and all levels unlocked from the start.

For more info, see the readme.
Crashes on latest version
Blind Race Blind Race RayCarrot Created for the Rayman 1 Blind Community Race in 2023. Adds a cage counter to the worldmap and allows accessing Mr Dark's Dare without collecting all cages.

For more info, see the readme.
Complete NTSC
Crowd Control RayCarrot Created for the Rayman 1 Crowd Control implementation. Allows toggling more advanced effects like Dark Rayman in any level. Can only be used with Crowd Control
Death Counter Death Counter RayCarrot This mod replaces the lives counter with a death counter and also gives you infinite lives. Complete NTSC
Debug Menu Debug Menu RayCarrot Replaces the pause screen with an advanced menu, allowing you to skip between levels, toggle active powers, enable cheats and more.

NOTE: This was mainly made to make it easier testing things in the game and as such is not stable enough to be used normally. Some levels may crash due to the game rendering too much on screen at once.
Unstable NTSC
Distance Counter Distance Counter Robin Tracks the total distance travelled throughout the game and displays it while playing. Complete NTSC
Flipping Jumps Robin Reverses your input directions each time you jump. Complete NTSC
Hello World RayCarrot A simple test mod. Complete
Kaizoman Kaizoman RayCarrot Created for the Kaizoman ROM hack.

For more info, see the readme.
Can only be used with Kaizoman NTSC
Level Effects Level Effects RayCarrot Allows playing the game with different effects which can also be randomized per level.

For more info, see the readme.
Complete NTSC

NTSC (incl. Timer & Death Counter)
Lost Cages RayCarrot Created for the Lost Cages ROM hack. Makes you start the game with all powers unlocked and allows you to get 99 lives by pressing the circle button while paused.

For more info, see the readme.
Complete
Max Percentage Max Percentage RayCarrot Provides progress counters for collecting everything in the game. Complete NTSC
MCM Visibility fuerchter Provides a visualization to help with memory-card manipulations. Complete
Menezis RayCarrot An early test for re-creating the Menezis minigame from Rayman 2.

For more info, see the readme.
Incomplete
Shuffle RayCarrot
Robin
Randomly shuffles the objects in each level. Incomplete
Single-hit Death RayCarrot Forces you to always have 1 hp. Complete NTSC
Skip Splash-screens RayCarrot Skips the splash screens and intro when starting the game and instead loads directly into the main menu.

For more info, see the readme.
Complete NTSC
Sounds Player RayCarrot Replaces the pause screen with a simple menu for playing all of the sounds in the game. Complete
Speedrun Practice Speedrun Practice RayCarrot Various tools to help practice speedrunning the game, including an in-game menu with different cheats, such as no-clip, custom checkpoints, a speed storage visualizer and more.

For more info, see the readme.
Complete NTSC

NTSC (incl. Timer & Skip Splash Screens)
Stop Hitting Yourself Robin Makes you take damage when your fist returns to you, unless it hits something first. Complete NTSC
Timer Timer RayCarrot Providers an in-game timer display, with various settings for it. Complete NTSC
Ting Counter Robin Keeps track of and shows the total number of collected tings. Complete
Zero Patience fuerchter Various changes to speed up playing the game. Complete

Usage

Getting started

  • Download and set up the PSX Modding Toolchain.
  • Clone or download this repo and add it to a new folder under games.

Each mod folder has a MOD.BAT file which allows building the mod and accessing other options from the toolchain.

Symbols

Every mod will include the files under the include folder. For this project this contains the export.h file which is a header file exported from Ghidra. Symbols are named from the Android version of Rayman 1 and from the PSYQ SDK. If a symbol name is not known then it is prefixed with PS1_ to indicate it uses a custom name.

The resources folder includes additional reusable files which can be copied into and modified for your mods. Usually these are re-implementations of game functions which can then be used to more easily rewrite them.

Versions

Currently the NTSC and PAL versions are supported. In the future it is planned to add support for the remaining versions (DemoDemo vol. 3, DemoDemo vol. 6, NTSC-J and Rayman 2 2D prototype). Once they are added they will use separate export.h files and thus any mod that targets them alongside other versions will require conditional compilation based on version. Many functions are however the same across them making it not too difficult to multi-target your mods. In cases were structs are changes many of the fields still remain the same.

Creating a mod

To create a mod the easiest to do is to first run the clean command on an existing mod and then copy its folder. The most important thing to keep in mind is to not make your code too big or else it can overwrite existing code in the game.

Generally the easiest way to hook in your code is to extend an existing function by replacing its return instruction with a jump j. Another easy option is to replace a function call jal with your own one and then have your custom function also call the original function.

Once you've added a hook you also need a place to write your custom code. Generally any unused space in the exe will do. One option used in some examples here is to truncate the FntPrint function and overwrite the remaining part of it with your own code.

Related projects