(Link to video)
Mario & Luigi: Partners in Time is the second of five games in the Mario & Luigi RPG series. Mario & Luigi work together with their past selves to exterminate the Shroob aliens. The M&L series is known for the ability to do more damage in battle by hitting action commands as well as the ability to dodge or counterattack every attack in the game, which makes it possible, though difficult in real time, to beat the final boss at an arbitrarily low level. Partners in Time is unique among the other games in the series in that there is no mana; instead, all special attacks are consumable items.
This is an improvement over my previous run by 1:28:13.36, or 316697 frames, thanks to glitches found within the past year. Most notably, the requirement of collecting 5 cobalt star shards to enter the final dungeon can now be skipped by clipping through the gate, which alone saves about an hour. This means that the final boss is fought at a very low level (the adults at level 11 and the babies at level 10).

Game objectives

  • Emulator used: DeSmuME 0.9.9
  • Advanced Bus-Level Timing OFF and Dynamic Recompiler OFF
  • Aims for fastest time
  • Heavy luck manipulation
  • Major skip glitch
  • Heavy glitch abuse
  • Takes damage to save time
  • Genre: RPG
Audio commentary:

Version choice

The US version has increased boss health compared to all other versions. In particular, the final boss has 2700 more HP across both forms in US than in other versions. There are a few glitches that only work on the US 1.0 version, but they do not save nearly enough time to account for the difference in boss health, so I avoided the US version. The title screen in JP is one second faster than EU, but I chose EU so that the encode has English text.
Please read #5481: Migu's DS Mario & Luigi: Partners in Time in 3:21:09.92 for detailed a detailed explanation of battle mechanics, including RNG.

Battle by battle comments

Baby Bowser

This fight ends after 4 hits, no matter how much damage is done.

Junior Shrooboid

Lucky hits are disabled in this battle, so the only way to speed up this fight is by hitting every counterattack on the first possible frame.

Shrooblets

The POW upgrade I gave Mario after Junior Shrooboid allowed him to kill the shrooblets in 2 jumps. Lucky hits are again disabled here. Luigi's dodging animation is slow so he gets hit.

3 Shroobs

The shroobs' animation for attacking Luigi is faster, so I take damage in order to manipulate that.

2 Shroobs

Lucky hits are still disabled. It's faster for both babies to jump on the lower enemy because it decreases the length of the green shells.

Bowser's castle tutorial

This is the first battle in which I manipulate a lucky hit. I wait before the battle to get a good seed. This gives Mario a lucky jump on the boo, allowing me to kill it before it attacked for a second time. If you kill the goomba too early, Kamek will spawn another goomba. So, I delay killing the goomba to save time.

Hammer Bros.

Each bro has 90 HP, for a total of 180 HP. 2 flowers will do 150 total damage, so a lucky hit is needed for a quick battle. I also need to throw as few fireballs as possible, since every fireball takes 7 frames. Therefore I make the most of the lucky hit by attacking only the lower bro during the first flower, and then getting a lucky hit on the top hammer bro on the second flower.

Swiggler

Swiggler has 200 HP, so in order to kill him with 2 flowers, I need to get 2 lucky hits, each doing 100 damage with 50 fireballs. Even with the 2 Dr. Shroobs I have to avoid hitting, this is very managable. The default RNG seed was very good - I just needed to advance RNG once by getting hit.

RC Shroober #1

I switched from the babies to the adults at a particular point along the babies' walk in order to get an RNG seed that would give a lucky hit after some demo RNG manipulation. The RC Shroobers are weak to ice flowers, so each fireball does 3 damage (lucky + critical).

RC Shroober #2

This is similar to the first RC Shroober, except it would have taken too long to manipulate a lucky hit, so each each fireball does 2 damage.

Sunnycide

Sunnycide has 480 HP, so 4 flowers are necessary to kill him. All 4 need to be a lucky hit, and the eggs make it so flowers do less damage to Sunnycide. Therefore, I manipulate Sunnycide to throw as many eggs as possible. I waited about 40 frames before the battle for an RNG seed that made Sunnycide throw 4 eggs and had a quick lucky hit. During the second flower I manipulated Sunnycide to throw 1 egg, which is very rare. When there is 1 egg left, he almost always calls down more eggs, which is slow.

2 Soul Bubbles and a Shroob Rex

This is the first of three battles I fight to be prepared for the final bosses. Luigi has the EXP badge equipped, which means that any enemy Luigi kills with a bro item will give 20% (1.2x) more experience. In order for this route to work, every enemy that gives experience must be killed by Luigi, or else the adults will not reach level 11. The Soul Bubbles each have 100 HP, so I can kill them each with one lucky flower even though they are aerial enemies. The Shroob Rex has 200 HP, so one lucky flower is not enough, but one non-lucky and one lucky is enough. So, on the first turn, since it's difficult to manipulate a lucky hit as the first hit, I deal enough damage to the Shroob Rex so that I can kill it later with a lucky hit. This bro flower also inflicts burn, which takes away the Shroob Rex's next turn and deals 8 damage later in the battle. Luigi then kills one of the Soul Bubbles with a lucky bro flower. If a Soul Bubble is attacked and survives, it will either heal or revive an enemy, and I want to avoid this at all costs. On Mario's next turn, it's important to not kill either of the remaining enemies, since we want to kill all enemies with Luigi for the EXP bonus. Therefore he just uses a lucky bro flower to bring the Shroob Rex to low health so that Luigi can finish it off while he kills the last Soul Bubble. Mario's STACHE is so low that the chance of a lucky hit against the Shroob Rex is 1/100, but I got a very good seed for the battle which allowed this to happen without wasting much time at all. I was expecting to equip the space pants on Mario before this battle for the increased STACHE, but I didn't have to do that. Finally, Luigi kills the Shroob Rex and the 2nd Soul Bubble with an ice flower. I used an ice flower because it advances RNG more, since every hit checks whether to apply a debuff to the target. I wanted to advance RNG more in order to get the 100-point pants, a rare (2.25% chance) drop from the Shroob Rex. I got a significantly long string of of RNG values that didn't get the drop, so I had to advance it as much as possible.

Ghoul Guy and Shroob Rex

This battle is fought with the adults, since the babies are already level 10 with 31 POW, and if I fought it with the babies as well there would be unnecessary time taken up by level ups, with no extra damage dealt later. I waited for a seed in which the Ghoul Guy possesses the Shroob Rex, which makes it possible to win the battle on Luigi's first turn. As in the previous battle, I kill it with one non-lucky and one lucky bro flower, while manipulating another 100-point pants drop. Note that the Ghoul Guy gives EXP, but not the bonus EXP.

Shroobsworth

When a Shroobsworth dies, an Intern Shroob spawns. On the Intern Shroob's first turn, it will revive the Shroobsworth, which we want to avoid. So we have to kill the Intern Shroob before it gets a turn. This is done by killing the Shroobsworth with Mario so that Luigi gets the next turn. It is not quite possible for Mario to kill it on his first turn it has 160 HP and a lucky flower can do at most 148 damage, and a first strike and counter can't quite do 12 damage. Not to mention, it would have taken too long to manipulate the first flower to be a lucky hit. So I opt to deal the majority of damage with a lucky flower from Luigi, finishing it with a jump from Mario. Luigi can then kill the Intern Shroob right away with another lucky flower, manipulating the rare drop, supreme slacks. Note that the Intern Shroob is responsible for giving EXP and drops, not the Shroobsworth.

Princess Shroob

I equipped Big-POW badges on the adults, which give a temporary POW boost of 60% (1.6x) after getting a Great rating on a bro item. Luigi has more SPEED than Mario since he is wearing the supreme slacks. First Luigi does a Great copy flower to destroy Princess Shroob's shield and get the POW boost. Then Mario does a bro flower to get his POW boost, deal some damage, and manipulate a fast attack as well as good RNG on the upcoming red shell. Luigi's red shell hit does 6 damage and Mario's does 7, so the red shell takes a long time since she has 1700 HP.

Elder Princess Shroob

Like in the last battle, I first give the bros POW boosts by getting Great bro flowers. I can manipulate the second flower to be a lucky hit. During the second flower, I manipulate the saucer to drop a red shell, since I only got 2 red shells in the Shroob Castle dark room but I want to use 3. I already used one on Princess Shroob, and now I use one to kill the first phase of Elder Princess Shroob, and then on the 2nd phase's foot. It's necessary to kill the foot and then the crown in order to deal more than 1 damage per hit to Elder Princess Shroob. In the previous TAS, I killed the crown with a bro flower, but that was only possible because I had risk badges. I use a copy flower instead, which is not much slower. Finally, I am able to kill Elder Princess Shroob with the last copy flower.

Shrowser

This battle is straightforward. Shrowser's 3-fireballs-from-the-sky attack is pretty long but it took too much time to manipulate him to do it less than twice.

Overworld Techniques and Glitches

Stair Jumping

Mario's speed is decreased when he is on a slope and facing up the slope. By jumping from flat ground up the slope, this is avoided. If the slope is too long to ascend in a single jump, I can jump while facing perpendicular to the slope for one frame to maintain normal walking speed up slopes.

Toad Boost

When entering an NPC's hitbox from above, Mario is boosted out of its hitbox. I use this to save frames in Peach's Castle.

Wall Boost

Normal walking speed is 2 units per frame, or 1.5 units in each direction when walking diagonally. If Mario is touching a wall and moves diagonally against the wall, his speed will be 1.6 along the wall, so it's better to walk along the wall for a speed of 2. However, if Mario less than 1.5 units from a wall and walks diagonally against the wall, his distance from the wall is added to his speed along the wall on the next frame. For example, if he is 1 units from a wall, his speed the next frame will be 2.6 units along the wall.

Ledge Boost

Mario can get a boost when walking off a ledge. The size of the boost depends on the angle of movement relative to the angle of the ledge and the distance to the ledge the frame before walking off it. These boosts tend to be larger than wall boosts but smaller than toad boosts.

Quick Drill

The length of the baby drill entering-the-ground animation depends on the direction faced before pressing Y. It's fastest to face up-left before pressing Y. It's slowest to be facing up because the animation will be 18 frames longer.

Corner Clips

It's not fully known how corner clips work, but here is what I understand. The walls around a convex corner push Mario away from the walls and the corner when he walks along them towards the corner. However, when he walks along the walls away from the corner, they don't work properly. So we can first walk directly into the corner (perpendicular to the walls) and then walk away from the corner along the walls. From here we can walk out of bounds.

Ledge Clips

The game prevents stacking under a ceiling that's too low to fit the stack. However, if Mario is less than 1 pixel under a ledge and Luigi is far enough to the right of Mario and close enough to the ledge, the game will allow them to stack under a ceiling that's too low. Now if they walk or spin upwards, the game will try to move them to a place where they can fit. If there is a floor above them, they will be clipped up to that floor. This technique was first found in Superstar Saga by Mugg, and found/applied in this game by SolidifiedGaming.

Spring Clips

If Baby Mario falls off the left or right side of a spring without being ledge boosted, he can clip inside by immediately going back to the spring. Thus Baby Mario can stand on the ground right under a spring's surface, which is useful for top screen storage.

Top Screen Storage (TSS)

If the babies are in a top screen and the adults enter a bottom screen loading zone, the babies will be forced out of the top screen, in order to prevent a top screen corresponding to a room A being loaded at the same time as room B is loaded. TSS involves getting around this restriction and having a top screen loaded while the wrong bottom screen is loaded. There are a few types of TSS, but only one type is used in this run: spring TSS. If the babies use a spring just as the adults enter a loading zone, with the correct timing, the new bottom screen and the top screen will load at the same time, resulting in TSS. In 99% of cases, entering a loading zone requires having control of the pair that is entering the loading zone, since you need to walk into a loading zone and you can only walk with the pair you have control of. So to make this work, we need to have control of the adults, which means we won't have control of the babies. It is possible to do some actions, notably jumping, with the pair you don't have control of as long at least one of bros that you have control of is not on the ground. If Baby Mario clips into a spring and Baby Luigi jumps onto the spring, then as soon as Baby Mario jumps and lands on the spring, both babies will be on the spring so they will use the spring. This means that the babies can use a spring without having control of the babies. All of this allows spring TSS to be possible. First Luigi jumps so that he is in the air when Baby Mario jumps, so that we can retain control of the adults. Then Baby Mario jumps. 24 frames after Baby Mario jumps, the spring animation begins and we completely lose control of everyone. During this time Mario walks to the loading zone, but if he enters the loading zone too early, the top screen from the spring won't load correctly. So, Mario needs to jump into the loading zone so that the loading zone is delayed until he lands.
This explains how to get spring TSS, but not why it's useful. When the babies leave a hole from the top screen, the camera is locked and a script is run from the current bottom screen's script table. This will often softlock or crash the game depending what script is played. In this run, though, the babies are simply placed at coordinates (0,0) in the bottom screen room which is always out of bounds in the top-left corner.

Money Glitch

When selling all of an item, if you select the next item on the first frame possible, the sell price of the first item is stored on the second item. I use this to sell the starting gear and 8 Smash Eggs for 49 coins per item (the sell price of the salvage badge) and get over 1000 coins.

Ball Displacement and Clips

When entering bros. ball facing right or left, Mario is sent 8 units behind him. This has two uses. First, I always face backwards before using bros. ball so that behind Mario becomes the direction I want to travel in. Second, this displacement can clip through some walls, that are too thin or otherwise coded badly.

Skips used in the run

M&L Block Tutorial Skip

The trigger for the M&L block tutorial is only on the ground and narrow enough to jump over. It is still necessary to hit all of the blocks to advance to the next area, but Stuffwell's text and the camera movement can be skipped.

Bowser's Castle Dark Room Skip

By falling into the spikes right after hitting the shine block, the "hit by spikes" cutscene is delayed until the shine cutscene finishes. This gives a few frames for the babies to stand on the spikes without getting hurt. Baby Mario faces down here so that the end of the trick will work. Since both babies are on the ground, we can switch control to the adults which allows Mario to read the sign. Normally you completely lose control when reading a sign, and after closing the sign text, you regain control, which is exactly what happens here. As long as you advance the text fast enough, after closing the sign text you can regain control of the babies during the hit by spikes cutscene. This cutscene gives the babies a few properties, but the important one is that their height is increasing, so they are flying upwards. This allows Baby Mario to make it to the platform at the end of the dark room. If Baby Mario jumps, he will jump a normal jump height, fall until he reaches the ground, and then continue flying upwards again. I do this twice to avoid Baby Mario flying all the way off screen, which would end the hit by spikes cutscene and respawn him at the start of the dark room. He enters the loading zone when he reaches the ground, after the 2nd jump. During the cutscene, even though he can move, he can't change facing direction, and he needs to be facing down to enter the loading zone - this is why he faces down before Mario reads the sign.

Toadwood Forest Spike Skip

The area before Vim Factory is intended to be completed counter-clockwise, but this trick makes it possible to complete it clockwise, thereby skipping all of the auto-scrolling floating platforms. When Mario lands on the spikes, there is one frame when he is standing on the spikes before the hit by spikes cutscene starts. (Note that this frame only exists for some spike pits - it doesn't exist in Bowser's Castle dark room for instance.) On this frame, if Luigi is also on the ground, we can switch control of the babies. If Luigi is not on the spikes, this cancels the hit by spikes cutscene, so that when we switch back to the adults, Mario can freely walk on the spikes to the next room.

Vim Factory Vent Clip

This is a corner clip that works just as described above. Walking out of bounds is faster than navigating the vents, but more importantly it skips the first hammer tutorial battle.

Vim Factory Ledge Clip

You can do a ledge clip by first stacking under the intended entrance to the top screen with the babies and then holding up. This puts the babies inside the box, and they are stuck until Baby Mario hammers the box. From here Baby Mario can open the entrance to the next room.

Yoshi's Island Cutscene Skips

The Kylie Koopa, Yoob, and Kamek introduction cutscenes and the yoshi cookie cutscene can be skipped with two precise ledge clips. In order to clip up onto the huts, walking isn't enough since in this case it will push you down. They need to spin for just long enough to make it onto the hut roof, which counts as a floor.

Colored Blocks Skip

This skip uses spring TSS just as described above. When the babies leave the top screen corresponding to the lower room while the adults are in the hub room, the babies are spawned out of bounds in the hub room near the top loading zone. They can simply walk to the loading zone and then use the pipe block to proceed to the next area of Yoshi's Island.

Kamek Skip

Again, this uses spring TSS. Since it requires entering the loading zone with solo adults, we first need to open the door, and then we can do the TSS. After spawning out of bounds the babies can skip the Kamek battle by walking around the trigger and into the loading zone. The camera lock persists until halfway through the cutscene in which Yoob eats the bros.

Blue Yoshi Puzzle Skip

This uses a ledge clip to skip opening the door to the blue yoshi. Opening this door requires hitting a long button color combination. Even though it doesn't look like it, there is a floor above the walls that enclose the yoshi that we can ledge clip up to, and then fall off of.

Yoob's Belly Clip

This is another corner clip, but is much more precise than vent clip. There is a 3-pixel range in which the clip can be started, and not all subpixels in that range will work. Also, the adults have to be stacked in order to perform the clip because walking speed is halved while stacked. Before clipping, I position the babies such that the adults can pick them up later while staying out of bounds.

Gate Skip

This is the major breakthrough which led to such a large improvement. The gate to Shroob Castle only opens once you collect 5 cobalt star shards, which requires about an hour and a half of gameplay after the the time hole to Shroob Castle opens after beating Sunnycide. However, we can access the loading zone behind the gate as soon as the time hole opens by ball clipping through the right side of the gate. As with the Yoob's Belly Clip, I first position the babies such that the adults can pick them up without clipping back out of the gate.

Baby Spin Skip

After gate skip was found, it was still necessary to beat Petey Piranha in order to learn baby spin, which was required to get through Shroob Castle. Another ball clip on the first floor of Shroob Castle made it possible to get through Shroob Castle without baby spin, so it is possible to go to the end of the game right after the Shroob Castle time hole opens. This ball clips puts the adults inside a wall and then they are warped up to the floor (similar to a ledge clip). I can again pick up the babies from out of bounds and walk to the loading zone.

Library Skip

The east wing of the second floor is only supposed to be accessed after returning from the basement, since a tall bookshelf divides the library in half. But we can do a ledge clip to reach the floor above the top loading zone, and then ball clip to get out of bounds and roll past the bookshelf.

Theoretical improvements

Elder Princess Shroob Skip

There may be a way to skip the final boss, most likely by using Top Screen Storage to play one of the endgame cutscenes. If this were found, a "final boss skip" branch should be created, since I think the final boss is a very important part of the game and should be included in this game's main movie.

Other theoretical sequence breaks

Toadwood fire skip, End of Yoshi's Island cutscenes early

Routing improvements

There might be a better way to reach level 11 in Shroob Castle (I can't think of one). Additionally, it may be faster overall for the adults to reach level 12 before the final boss. I timed this to be around 10 seconds slower, but with better routing and RNG, it could be made to be slightly faster.

Special thanks to...

SolidifiedGaming, (as well as Really_Tall and GhostKing) for finding the glitches that made this improvement possible.
Jdaster64, for finding a lot of useful info like the RNG formula, attack constants, and stat increase tables which made routing the TAS infinitely easier.
Snoion and GhostKing for being modern runners of Partners in Time and pushing it to its RTA limits.
Anwonu, for putting so much time into this game, even though not much of his routing efforts can't be seen in this run. Still, I would have never been interested in TASing this game if it weren't for him.

Suggested screenshots

I like frame 281068 but it may be too similar to the current publication.
Frame 273515 showcases the main improvement but isn't especially flashy.
Frame 287569 looks a little more interesting on its own and is also part of one of the main improvements.

Noxxa: Judging.
Noxxa: Splendid improvement, and great to see all the skips breaking apart most of the game now. Accepting as an improvement to the published movie.
Spikestuff: Publishing.

TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14879
Location: 127.0.0.1
This topic is for the purpose of discussing #5841: Migu's DS Mario & Luigi: Partners in Time in 1:52:56.29
Memory
She/Her
Site Admin, Skilled player (1523)
Joined: 3/20/2014
Posts: 1762
Location: Dumpster
Saw the stream, really great stuff Migu!
[16:36:31] <Mothrayas> I have to say this argument about robot drug usage is a lot more fun than whatever else we have been doing in the past two+ hours
[16:08:10] <BenLubar> a TAS is just the limit of a segmented speedrun as the segment length approaches zero
Spikestuff
They/Them
Editor, Publisher, Expert player (2292)
Joined: 10/12/2011
Posts: 6337
Location: The land down under.
Tries to figure out his life choices. Really good work and improvements within Migu. To a year of suffering by doing nothing but DS Publications to me! Here's the Yes Vote. Here's my claiming for Publication. Here's my grave. On the bright side it's half the length of the original TAS.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
Player (58)
Joined: 7/7/2008
Posts: 872
Location: Utah
An entire TAS that improves its existing run by more than 1 whole hour... What vote do you think I'll give it???
Skilled player (1706)
Joined: 9/17/2009
Posts: 4952
Location: ̶C̶a̶n̶a̶d̶a̶ "Kanatah"
It's amazing how much time could be saved, yet still be almost 2 hours in length. Would definitely watch it once I'm more free. Do you have any plans to try the other DS M&L games?
Migu
He/Him
Player (120)
Joined: 10/3/2015
Posts: 58
Location: Louisiana
jlun2 wrote:
Do you have any plans to try the other DS M&L games?
Vince1919 has started his Bowser's Inside Story TAS, which I might help a bit with: Link to video
Experienced player (630)
Joined: 11/23/2013
Posts: 2208
Location: Guatemala
This is a pretty great improvement. I don't usually watch long movies, but this one I watch the whole way through. I voted yes.
Here, my YouTube channel: http://www.youtube.com/user/dekutony
Fortranm
He/Him
Editor, Experienced player (780)
Joined: 10/19/2013
Posts: 1115
Finally finished watching this movie. Easy YES vote.
Migu
He/Him
Player (120)
Joined: 10/3/2015
Posts: 58
Location: Louisiana
Thanks for the support! I've added a commentated encode to the submission.
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 14879
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [3791] DS Mario & Luigi: Partners in Time by Migu in 1:52:56.29