Rayman Hoodlums' Revenge speedrunning

Speedrunning news, techniques and events: a place for those who live fast, at least when it comes to Rayman games.

Moderators: English moderators, Speedrunning team

Forum rules
Please keep the forum rules and guidelines in mind when creating or replying to a topic.
Post Reply
arnoldfranklin
Carnivora
Posts: 741
Joined: Wed Aug 18, 2021 1:51 am
Location: Near, far, wherever you are
Contact:
Tings: 12665

Rayman Hoodlums' Revenge speedrunning

Post by arnoldfranklin »

Yes, there is a game that doesn't have a section, yet. It doesn't even have a profile on speedrun.com, yet. There has been a TAS of this game by DaJaWi (YT channel link) but that's about it. This thread is for speedrunning this game or getting started on speedrunning it. If anyone wants to start, here's a thread for when it happens.

See, multiple threads combined make a shirt. Multiple shirts make a forums. Multiple forum sections make a community. :winkgrin:
"I am the greatest hero of all time. I get three Globox stamps." ~ Globox himself
hoodlumsworld
Aurora
Posts: 1168
Joined: Mon Jun 15, 2020 1:12 am
Tings: 15205

Re: Rayman Hoodlums' Revenge speedrunning

Post by hoodlumsworld »

Thanks for the discovery, I also recommend reading DaJaWi's comments on the TAS:
DaJaWi wrote:Rayman: Hoodlums' Revenge

Rayman: Hoodlums' Revenge for the GBA (Hoodlum's Revenge in the USA for some reason, despite this being grammatically incorrect) is a sequel of sorts to Rayman 3. The idea is that after Andre was released from Globox's stomach (spoilers!) he left a bit of himself behind, which is slowly corrupting Globox. At the same time the other Hoodlums are trying to resurrect Reflux - presumably to take over the world somehow.

The game plays as an isometric platformer, and on different levels you can control either Rayman for platforming segments or Globox for more stealth-like segments.

There are a lot of glitches.

About this run:
  • Any%
  • Takes damage to save time
  • Heavy glitch abuse (with Rayman)
  • Heavy luck manipulation (with Globox)
Tricks and Glitches

Rayman:

Punch Hopping - The biggest trick, and the crux of this run. The basic idea is that after every punch, if Rayman is in the air, there is one frame where Rayman can jump and gain extra height. From this he can punch and jump again, meaning he has no need to ever touch the ground. Props to got4n for showing me this was possible. This basic idea can be extended in a lot of ways to completely obliterate the Rayman levels.

This can obviously be used to get over obstacles (most significantly gates which would otherwise need to be opened - about 8 jumps gets you high enough to vault over each gate), but it also maximises Rayman's speed, because punching takes him over his usual maximum speed, and chaining them together so quickly stops the speed from ever dropping. In fact the fastest way of getting around tends to be hopping, punching twice, and then hopping again (essentially bouncing around in the air). There's some extra difficulty when cornering, and if you need to turn sharply you sometimes have to pause between each hop and before the next punch, which loses a little speed but angles you faster.

I wrote some lua macros to help me with the constant punch hopping, and more details of the trick can be found with the script: http://tasvideos.org/userfiles/info/20045914721864875

Water Hopping - On the frame you touch water it is possible to jump off of it again (you do still take damage however). This trick is almost always unnecessary since Rayman tends to punch hop everywhere, but there are certain times when Rayman has a powerup - and he cannot punch hop with a powerup - so this trick gets a couple of uses.

Dialogue Skipping - Almost every dialogue trigger in the game is activated by stepping on the ground in certain places. By punch hopping over the triggers these can be skipped. Also, there's dialogue at the beginning of every level that can be skipped if you jump up and start punch hopping within a 2-frame window.

Globox:

Enemy Manipulation - If Globox is seen by an enemy he starts running away uncontrollably, so to avoid having to slow down it helps to manipulate the enemies so that they won't be looking where you need to go. The enemies always walk a set route though, and the only thing you can do is make them stop and look around occasionally, or jump and look around occasionally - there's no way of making them speed up. This means it isn't always possible to avoid having to wait. The actual manipulation is done just by taking slightly different routes through each area.

Enemies can be killed by drinking plum juice (and Globox's speed also increases while under the influence), but it takes so long to drink that it isn't worth it unless killing the enemy is necessary.

Fleeboosting - The best trick. Globox's top speed is when he is running away madly from enemies, but he always runs backwards through the level so it's rarely helpful. However there are a couple of places where you can intentionally be seen to backtrack more quickly. Because of how erratically he moves when fleeing though, it is infuriating to try and get it to work neatly.

Both Characters:

Button Swapping - On the levels with both Rayman and Globox you often have to switch between them. When you press select the camera slowly moves between them, wasting a bunch of time. Also you tend to have to swap just after you've pressed a button with Rayman to open a gate for Globox to get through, and this has another camera cutscene to show the gate opening. By pressing select on the frame you press the button you can combine both camera movements into one, saving lots of time.

Lag Reduction - This game has a lot of lag. The routes through each level are usually chosen because of them having the least lag. There are a few other small things that can be done to reduce lag, such as avoiding points whenever possible since collecting each one gives a bit of lag. Also, on the subject of score, if possible every level is finished with 0 points because this hugely speeds up the scoreboard at the end of the level by skipping several textboxes.

The Globox levels tend to be more laggy, because you have to follow quite a strict path with many enemies around, and there isn't really much you can do to reduce it. What you can do is whenever you have to kill an enemy, kill them as early as possible (because enemies = lag), and there's also something I can do whenever I have to wait for an enemy. While standing and waiting I look away to some less interesting part of the level where there's less stuff going on, and therefore the game lags less, and I remain looking away until the enemy has gone on their way and I can start waddling on through the level again.

Level Comments

The Hoodlums' Revenge thread in the forums contains more detailed level comments, but I'll just cover the key features of each level here.

Fairy Council (Rayman): You can immediately see just how useful punch hopping is. Certain fences and walls are infinitely high, so Rayman cannot just move directly to the exit, but yeah.. pretty much none of the level is actually seen.

Clearleaf Forest (Rayman): Again, all skipped. Rayman has to jump a lot higher here, getting off the top of the screen, because of how high up the exit gate is (and Rayman needs to be about 8 jumps higher than a gate to vault over it). You can also see how difficult cornering is near the beginning of the level.

Clearleaf Falls (Rayman): The exit is so close to the start on this level that it will always take the same number of hops to get over it. The weird route I take is therefore the one that gets the fewest enemies on the screen and so minimises lag.

Infernal Machine (Rayman): This boss requires collecting the powerup and smashing each machine part. It takes two cycles, and the cannons at the bottom are left for the second cycle for two reasons - firstly they take fewer hits, and secondly the boss fires more plums later in the fight, which causes a lot of lag, so you don't want to be near it at the end of the battle.

Dungeon of Murk (Globox): ...And now you see why more than half the run is Globox. As well as enemy manipulation this level is filled with small optimisations, such as looking at the first gate before pressing the switch to avoid the camera cutscene, and crouching before pressing a lot of other switches so Globox doesn't slide so far (or in some cases to slide further). There are also sequences where enemies have to be killed to open gates, and they are manipulated to be close to the gates so as to skip the camera cutscenes.

Bog of Murk (Globox): This level requires you to drag teensies around, which is annoying for two reasons - firstly they add to the lag, making this the most laggy level, and secondly they run off if you are seen by an enemy, so no fleeboosting :( Again, enemy manipulation is the order of the day here.

Rivers of Murk (Rayman): Boosh.

Begoniax Bayou (Rayman): The quickest way to inflict damage on Begoniax is to keep punching her from up close, but the quicker you keep hitting her, the more madly she jumps around, so the battle ends up looking pretty frenzied! The dialogue trigger I skipped at the start is larger than the end level trigger, so I have to punch hop right up to Globox at the end of the level to avoid triggering the first conversation.

Hoodlum Moor (Both): The first level with both characters. Unfortunately you need both of them at the exit to finish the level. There are a couple of points in this level that I move so quickly through loadzones with Rayman that certain objects don't spawn until I am right up close to them, such as some of the switches. The most important time this happens is for one of the gates, which I get through before it appears, meaning I don't have to jump the requisit 8 times I would normally need to vault over it.

Near the exit with Globox I have three Hoodlums to manipulate in a row, all of which I need to make jump and look around at exactly the precise moment and position to get through in one movement. This might be my proudest achievement in the run. The only other thing to say is that every time I swap characters when not using button swapping I do it while the characters are as close together as possible to minimise camera movement.

Land of the Livid Dead (Both): More can be skipped on this level, because Rayman can use one of the powerups to break a lot of the gates Globox must get through. Also I kill one of the enemies to allow Globox to get through quicker.

Menhirs of Power (Both): This level is the longest when played normally, because you need to collect a bunch of tablets scattered over the level, but again here it is mostly skipped, I just have to open a path for Globox to get near to the finish, and then I vault over the exit gate with Rayman.

Pit of Endless Fire (Both): I'm not really sure what they were thinking with this boss. There are buttons for Globox to press and powerups to collect, but the boss dies in just two punches regardless. There is an interesting trick at the end though - The ending dialogue is on a timer, and I fall onto the starting dialogue trigger (which I skipped at the level start) at the same frame as the end dialogue activates. This has a few effects throughout the rest of the run: All conversations (including this one) are shorter (because it tries to draw the textboxes from the wrong dialogues and runs out) and there is an A in the bottom right corner. Also it really messes up the credits for some reason.

Clouds of Peril (Rayman): Level? What level?

This level is even faster than it would be because you don't even have to vault over the exit gate, you can hop around it. You can even skip most of this level without punch hopping by using a glitch where you jump out of the helicopter powerup (although this is obviously slower).

Heart of the World (Rayman): Surprisingly complex for a level that is completely skipped. The level is a huge maze of insurmountable fences.

Reflux's Fair (Rayman): The (now-shortened) dialogue at the start isn't skipped because the trigger is so big it's impossible not to activate when attacking Reflux. The quickest way to damage him is to get as close as possible, because it reduces the amount your fists fly around.

And now Reflux is defeated, Globox is saved, and both the characters now speak in some eldritch language for the closing cutscene because their minds have been completely destroyed in awe of the speed the game was completed (or really because of the earlier dialogue combine glitch).

Final Comments

Thanks again to got4n for showing me the punch hopping trick, without which this run would look... different. Also thanks to everyone who commented with suggestions or support either in the forums here or on youtube.

Potential Improvements - Ideally there would be some way of speeding up the Globox levels, maybe if a way could be found to clip through gates or keep the plum juice active for longer. Other than that, I'm sure more lag reduction could be done throughout, if a more intelligent way could be found of doing it that just trial and error like I was doing.

Known Improvements - A couple of seconds could be saved if I named my save file 'A' instead of 'DaJaWi'. I guess vanity has its price... :P
This is the code to automate punch hopping:

Code: Select all

-- GBA Rayman: Hoodlums' Revenge
--
-- Macros for the actions used while punch hopping.
-- Hold J, K or L and your desired direction and press the frame advance key.
-- Can work around all lag except on the first frame (wait one frame first in those cases).
--
-- J: Hop and punch next frame (gives speed and height)
-- K: Just punch (best for speed but loses height)
-- L: Hop, wait, and then punch (loses speed, but allows for sharp turning)
--
-- Author: DaJaWi
-- 11th Jan 2015

local function punchhop(hop, wait)
  client.unpause()
  
  -- Get current direction
  local inp = input.get()
  local pad = {Left = inp.Left, Right = inp.Right, Up = inp.Up, Down = inp.Down}
  
  -- Keep track of lag frames
  memory.usememorydomain("EWRAM")
  local startframe = memory.read_u32_le(0x000770)
  local framecount = 0
  
  -- Hop (if J or L)
  if hop then
    pad["A"] = true
    repeat
      joypad.set(pad)
      emu.frameadvance()
      local currentframe = memory.read_u32_le(0x000770)
    until currentframe >= startframe + 1 or currentframe < startframe
    pad["A"] = false
    framecount = framecount + 1
  end
  
  -- Wait (if L)
  if wait then
    repeat
      joypad.set(pad)
      emu.frameadvance()
      local currentframe = memory.read_u32_le(0x000770)
    until currentframe >= startframe + framecount + wait or currentframe < startframe
    framecount = framecount + wait
  end
  
  -- Punch
  pad["B"] = true
  repeat
    joypad.set(pad)
    emu.frameadvance()
    local currentframe = memory.read_u32_le(0x000770)
  until currentframe >= startframe + framecount + 1 or currentframe < startframe
  pad["B"] = false
  framecount = framecount + 1
  
  -- Continue until next critical frame
  repeat
    joypad.set(pad)
    emu.frameadvance()
    local currentframe = memory.read_u32_le(0x000770)
  until currentframe >= startframe + framecount + 16 or currentframe < startframe
  
  client.pause()
end

local function checkinput()
  local inp = input.get()
  if inp.J then
    -- Hop and punch next frame (gives speed and height)
    punchhop(true)
  end
  if inp.K then
    -- Just punch (best for speed but loses height)
    punchhop(false)
  end
  if inp.L then
    -- Hop, wait, and then punch (loses speed, but allows for sharp turning)
    punchhop(true, 10)
  end
end

while true do
  checkinput()
  emu.frameadvance()
end
With additional details here:
DaJaWi wrote:There are three different options available, mapped to the keys J, K, and L (but feel free to remap them to suit your preferences):

J: Standard Punch Hop - Jumps, punches next frame, and waits until the critical frame. Use to get off the ground originally, or when you need more height.
K: Punch Boosting - Punches and waits until the critical frame. Use when you can do it without landing.
L: Delayed Punch Hop - Jumps, waits 10 frames, punches, and then waits until the critical frame. Loses speed so use only for turning sharply.

Using these, the normal strategy around a level is simply: J, J (to get into the air), and then alternating K,J,K,J... with an extra J if you need to gain extra height and L if you ever need to turn sharply.

To use them, hold the direction you want to travel and the necessary key, and press frame advance. The action occurs with a delay of one frame (because it was easier to code that way :P) and as such each macro actually takes you to the frame before the critical one so that they can be strung together.
They will sometimes fail if there was lag on the first frame (although it should work around any other lag). If that happens, go back and wait one frame first before using it.
The 10 frame wait in the delayed punch hop is kind of arbitrary. To really optimise a turn you would need to choose the minimum wait necessary. This would have to be done manually, but I put that macro in just for help with routing.
Hunchman801
Bad Rayman
Posts: 83848
Joined: Thu Aug 07, 2003 6:50 pm
Location: Paris, France
Contact:
Tings: 610019

Re: Rayman Hoodlums' Revenge speedrunning

Post by Hunchman801 »

I had no idea there was such a game-breaking glitch as punch hopping, though it appears to only work in a TAS. Maybe it could have made dr_st's experience more enjoyable. 🙃
Image
Post Reply