Hacking Gamecube GBA rumble games (and rom hacked rumble)

Baggins

Well-Known Member
OP
Member
Joined
Jan 27, 2017
Messages
280
Trophies
0
Age
44
XP
314
Country
United States
Any chance the last few games with rumble that work on Gameboy Player, to work with the Omega DE or InsideGadgets’ 32MB 256Kbit FRAM Rumble cartridge's Rumble features? So far three awesome patches have been made are available thanks to djedditt.
https://www.romhacking.net/hacks/6065/
Mario & Luigi: Superstar Saga (Cartridge Rumble Patch)
https://www.romhacking.net/hacks/6256/
Pokémon Pinball: Ruby & Sapphire (Cartridge Rumble Patch)
https://www.romhacking.net/hacks/6234/
Super Mario 4 Advance: Super Mario Bros 3.

The last patches that need work are for japanese games (might be good to have rumble patches for the japanese roms for above games as well, or Japanese speaking audiences).

Shikakui Atama o Maruku Suru. Advance - Kanji, Keisan
Shikakui Atama o Maruku Suru. Advance - Kokugo, Sansuu, Shakai, Rika
Summon Night - Craft Sword Monogatari - Hajimari no Ishi

The last of these three I believe has a partial english patch available.
 
Last edited by Baggins,

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,282
Country
United Kingdom
I don't know that it would be any easier than the "find some activator, hook the game and fire the command you paste in" approach given in the guide ( https://gbatemp.net/threads/make-your-own-rumble-game-for-ez-flash-omega-definitive-edition.580909/ ) other than the activators already being there.

If I were to speculate then after the detection
http://problemkaputt.de/gbatek.htm#gbagameboyplayer
then there will be a flag placed somewhere in memory. Everything after that will reference the flag in some manner instead of playing with hardware (not that you can in this if it is boot only detection).
If you are lucky then the game will have its own rumble function that everything calls. You might be able to find them on instruction levels (some branch to some known location or something that is found basically with control and f in a text disassembly)
If you are unlucky you might also have to do a logging session and hit the triggers to get them.

Anyway your job then would be to have the do rumble functions always active (either change all the rumble checks to return positive, or force something to set the "is GB player?" set* flag) and either overwrite the inbuilt rumble command(s) with the EZFlash one (you might need to first figure out what it does) or redirect them to the location you stuck the EZFlash rumble command/"library" into instead.


*if it also messes with the colours in a given game that might be less than ideal (don't know what goes for most of those and unlike the GBA detection of various GBC games then most actually quite like the GB player colours when available). If it is going to be a problem either change every rumble call to do what you need or change the graphics aspect to not respond to the GB player.
 

djedditt

Member
Newcomer
Joined
Jan 15, 2021
Messages
21
Trophies
0
Age
34
XP
280
Country
Netherlands
That is correct. Briefly looked into it earlier, and there is a persistent flag set in memory when the Game Boy Player is detected (that's a funny thing on its own). For example, when I set the flag manually the rumble option is unlocked in Mario & Luigi: Superstar Saga without a GBP.

Haven't spent more time on it but besides setting that flag, patching the rumble routine should suffice. It does not address the rumble on the cartridge itself as the rumble command is transferred over serial instead of writing a bit to GPIO (a small demo written in C can be found on my github). But that's assuming the lucky scenario.

It's low prio for me but a fun search nonetheless.
 
  • Like
Reactions: cearp

Baggins

Well-Known Member
OP
Member
Joined
Jan 27, 2017
Messages
280
Trophies
0
Age
44
XP
314
Country
United States
That is correct. Briefly looked into it earlier, and there is a persistent flag set in memory when the Game Boy Player is detected (that's a funny thing on its own). For example, when I set the flag manually the rumble option is unlocked in Mario & Luigi: Superstar Saga without a GBP.

Haven't spent more time on it but besides setting that flag, patching the rumble routine should suffice. It does not address the rumble on the cartridge itself as the rumble command is transferred over serial instead of writing a bit to GPIO (a small demo written in C can be found on my github). But that's assuming the lucky scenario.

It's low prio for me but a fun search nonetheless.


Additionally I think it would be a matter of having rumble menus activated too on the portable console so that one can turn the rumble off and on from the menus as well.

After testing I discovered that Pokemon Pinball, and Mario & Luigi show the menu on any system, but its greyed out on regular GBA.

While Super Mario Bros 3 hides the menu option in the settings menu (see L & R menu on SMB3 title screen), when played on a regular GBA.

The Shikakui Atama games also hide the '4th' option for rumble from the settings/config options mode when played on a regular GBA. 3 options instead of four.

I could never find where the rumble options are hidden in Summon Knight Swordcraft 3.... SO couldn't figure out how to turn them on, or how rumble affects the game. Or if it hides the option for rumble or not.


I don't know that it would be any easier than the "find some activator, hook the game and fire the command you paste in" approach given in the guide ( https://gbatemp.net/threads/make-your-own-rumble-game-for-ez-flash-omega-definitive-edition.580909/ ) other than the activators already being there.

If I were to speculate then after the detection
http://problemkaputt.de/gbatek.htm#gbagameboyplayer
then there will be a flag placed somewhere in memory. Everything after that will reference the flag in some manner instead of playing with hardware (not that you can in this if it is boot only detection).
If you are lucky then the game will have its own rumble function that everything calls. You might be able to find them on instruction levels (some branch to some known location or something that is found basically with control and f in a text disassembly)
If you are unlucky you might also have to do a logging session and hit the triggers to get them.

Anyway your job then would be to have the do rumble functions always active (either change all the rumble checks to return positive, or force something to set the "is GB player?" set* flag) and either overwrite the inbuilt rumble command(s) with the EZFlash one (you might need to first figure out what it does) or redirect them to the location you stuck the EZFlash rumble command/"library" into instead.


*if it also messes with the colours in a given game that might be less than ideal (don't know what goes for most of those and unlike the GBA detection of various GBC games then most actually quite like the GB player colours when available). If it is going to be a problem either change every rumble call to do what you need or change the graphics aspect to not respond to the GB player.

YA GB player colors modes where they exist are often based on the original ports of the games (SNES etc), rather then lightened/neon/pastel colors used to make things easier to see on GBA darker screens.
 

djedditt

Member
Newcomer
Joined
Jan 15, 2021
Messages
21
Trophies
0
Age
34
XP
280
Country
Netherlands
I just submitted a patch for Mario & Luigi: Superstar Saga to ROMhacking.net that unlocks the rumble feature on GBA and adds cartridge rumble, see https://www.romhacking.net/hacks/6065. Enjoy.

Ended up not forcing the Game Boy Player detected flag because it would load the limited RGB palettes and patching that out again felt silly. I opted for only allowing cartridge rumble when the game is not set to Game Boy Player mode (so just on GBA itself). This is also how Drill Dozer works - the only official game that supports both GBP and cartridge rumble.
 
Last edited by djedditt,

Titney

Well-Known Member
Member
Joined
Feb 1, 2014
Messages
131
Trophies
1
XP
1,675
Country
I just submitted a patch for Mario & Luigi: Superstar Saga to ROMhacking.net that unlocks the rumble feature on GBA and adds cartridge rumble, see romhacking.net/hacks/6065. Enjoy.

Ended up not forcing the Game Boy Player detected flag because it would load the limited RGB palettes and patching that out again felt silly. I opted for only allowing cartridge rumble when the game is not set to Game Boy Player mode (so just on GBA itself). This is also how Drill Dozer works - the only official game that supports both GBP and cartridge rumble.
Amazing, thank you so much!
Do you think you would be able to do Pokemon Pinball as well? I love playing the OG gameboy one with rumble.
 

djedditt

Member
Newcomer
Joined
Jan 15, 2021
Messages
21
Trophies
0
Age
34
XP
280
Country
Netherlands
Amazing, thank you so much!
Do you think you would be able to do Pokemon Pinball as well? I love playing the OG gameboy one with rumble.

You're welcome! Was fun to figure out. Now working on Super Mario Advance 4, maybe I'll do Pokémon Pinball eventually. It's something I work on in my spare time and only when I feel like it, so don't expect anything soon.
 

hartleyshc

Well-Known Member
Member
Joined
Oct 2, 2008
Messages
512
Trophies
2
Age
42
Location
Gainesville, FL
XP
1,418
Country
United States
Just patched it up and tested on the DE. Works great! I'm curious if the other games go this heavy with the rumble. I don't mind it at all, but even during the intro the rumble is going crazy with the castle chaos going on.

Thanks for putting in the work and it will be a nice surprise if/when your next releases come.
 

djedditt

Member
Newcomer
Joined
Jan 15, 2021
Messages
21
Trophies
0
Age
34
XP
280
Country
Netherlands
It depends, Drill Dozer's rumble starts subtle and gets more intense as you switch gears.

It's a fair point though, I wasn't too fond of the high frequency brrr! Played around a bit more and created a "rumble pattern" that feels pretty authentic compared to what the actual Game Cube controller feels like. Have to do some more testing and then propagate the change through the other region patches as well. I'll probably manage to upload the updated version next weekend.
 

Baggins

Well-Known Member
OP
Member
Joined
Jan 27, 2017
Messages
280
Trophies
0
Age
44
XP
314
Country
United States
You're welcome! Was fun to figure out. Now working on Super Mario Advance 4, maybe I'll do Pokémon Pinball eventually. It's something I work on in my spare time and only when I feel like it, so don't expect anything soon.
Incredible, work can't wait to try it out! and glad to hear you are working SUper Mario Advanc 4 too! Will remain patient for each of your releases!
 
  • Like
Reactions: trifalger

ThatBassoonist

New Member
Newbie
Joined
Aug 5, 2021
Messages
4
Trophies
0
Age
33
XP
81
Country
United States
I just submitted a patch for Mario & Luigi: Superstar Saga to ROMhacking.net that unlocks the rumble feature on GBA and adds cartridge rumble, see romhacking.net/hacks/6065. Enjoy.

Ended up not forcing the Game Boy Player detected flag because it would load the limited RGB palettes and patching that out again felt silly. I opted for only allowing cartridge rumble when the game is not set to Game Boy Player mode (so just on GBA itself). This is also how Drill Dozer works - the only official game that supports both GBP and cartridge rumble.
This is so wonderful. Pokémon Pinball R/S is my favorite game, and seeing someone patch games that have GBP rumble features is so exciting to me. I may actually get to finally fully experience some great games.
 
  • Like
Reactions: JamesBlunt

legend80

Well-Known Member
Member
Joined
May 1, 2016
Messages
191
Trophies
0
Age
33
XP
290
Country
United States
Works perfectly! Unreal.

Really hoping you can get Mario Advance 4 working too. All Mario games deserve full preservation. :) And I'm not counting on GB Player support in Dolphin for a while. Good luck mate!
 

JamesBlunt

New Member
Newbie
Joined
Aug 31, 2021
Messages
2
Trophies
0
Age
24
XP
53
Country
United States
This is so wonderful. Pokémon Pinball R/S is my favorite game, and seeing someone patch games that have GBP rumble features is so exciting to me. I may actually get to finally fully experience some great games.
cant agree with u anymore

--------------------- MERGED ---------------------------

It depends, Drill Dozer's rumble starts subtle and gets more intense as you switch gears.

It's a fair point though, I wasn't too fond of the high frequency brrr! Played around a bit more and created a "rumble pattern" that feels pretty authentic compared to what the actual Game Cube controller feels like. Have to do some more testing and then propagate the change through the other region patches as well. I'll probably manage to upload the updated version next weekend.
Pokémon Pinball R/S is my favorite game,please
 

Baggins

Well-Known Member
OP
Member
Joined
Jan 27, 2017
Messages
280
Trophies
0
Age
44
XP
314
Country
United States
You're welcome! Was fun to figure out. Now working on Super Mario Advance 4, maybe I'll do Pokémon Pinball eventually. It's something I work on in my spare time and only when I feel like it, so don't expect anything soon.
Any luck getting Super Mario 3 Advance patch release soon?
 
  • Like
Reactions: Home_Rowed

Phrankles

Active Member
Newcomer
Joined
Sep 22, 2021
Messages
26
Trophies
0
Age
31
XP
94
Country
United States
That is correct. Briefly looked into it earlier, and there is a persistent flag set in memory when the Game Boy Player is detected (that's a funny thing on its own). For example, when I set the flag manually the rumble option is unlocked in Mario & Luigi: Superstar Saga without a GBP.

Haven't spent more time on it but besides setting that flag, patching the rumble routine should suffice. It does not address the rumble on the cartridge itself as the rumble command is transferred over serial instead of writing a bit to GPIO (a small demo written in C can be found on my github). But that's assuming the lucky scenario.

It's low prio for me but a fun search nonetheless.

Could you please provide your debug strategy for locating the GBP flag? I am desperately trying to hack rumble into Pokemon Pinball Ruby & Sapphire and have had no luck locating either this flag or the rumble routine to replace.

Edit: typo
 
  • Like
Reactions: Titney and cearp

Phrankles

Active Member
Newcomer
Joined
Sep 22, 2021
Messages
26
Trophies
0
Age
31
XP
94
Country
United States
Nevermind, I finished the patch and am testing now. Pokemon Pinball Ruby & Sapphire rumble inc shortly.
 

Baggins

Well-Known Member
OP
Member
Joined
Jan 27, 2017
Messages
280
Trophies
0
Age
44
XP
314
Country
United States

djedditt

Member
Newcomer
Joined
Jan 15, 2021
Messages
21
Trophies
0
Age
34
XP
280
Country
Netherlands
Any luck getting Super Mario 3 Advance patch release soon?
Finally managed to squeeze in some time! Just submitted the SMA4 cartridge rumble patch to Romhacking.net for both the European and USA version. There aren't a lot of official rumble events; on death, when thwomps hit the ground, etc. Either way, enjoy!

Download here:
https://www.romhacking.net/hacks/6234/

Could you please provide your debug strategy for locating the GBP flag? I am desperately trying to hack rumble into Pokemon Pinball Ruby & Sapphire and have had no luck locating either this flag or the rumble routine to replace.

Edit: typo

You can set a read breakpoint on the key input register (0x4000130) during the Game Boy Player splash screen, and then override the value to match the Game Boy Player's input. You can trace and step from there to see what happens. Alternatively you can compare RAM/IWRAM with GBP mode enabled/disabled and look for differences in static bytes, and play around with those.

And you beat me to it on releasing a Pokémon Pinball: Ruby & Sapphire rumble patch, good job! My version of a Pokémon Pinball cartridge rumble patch is nearly done as well and looks like this;

- Functional rumble options menu
- No cartridge rumble when the game is inserted in a GBP (like official rumble games)
- Rumble duration matches Game Boy Player rumble events
- Rumble patch does not cause GBP color palettes to be loaded on GBA

Our strategies and implementation differ a bit, so I feel like these patches can coexist. The assembly code that EZ-Flash shared and is in your patch, just sends out a rumble pulse and does not adhere to rumble duration (or strength, but that's a more tricky issue) for example. I wrote my own code to have more control over those kind of things.

This is great!!! Can you make one more improvement to it?

Can you fix the options menu in the hack to add a working 'off-on' option to make work correctly? Someone did that for the Mario & Luigi hack and it really makes things feel more 'complete'.

My patch addresses this as well, so the race is still on! ;)
 

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    straferz @ straferz: Anybody know why this is happening to my ACWW town...