Submission #9306: mohoc's Wii Mario Party 8 "Star Battle Arena" in 23:52.72

Wii
Star Battle Arena
(Submitted: Star Battle Arena)
(Submitted: Mario Party 8 (USA) (Rev 1).iso USA (Rev 1))
Dolphin 5.0
85963 (cycle count 1044447534001)
60
21217
PowerOn
The following Dolphin configurations were used to verify the movie.

Settings
- General
-- Enable Dual Core (speedup): Off
-- Enable Idle Skipping: Off
-- CPU Emulation Engine: JIT Recompiler
- Audio
-- DSP Emulation Engine: DSP HLE
-- Audio Backend: OpenAL
- Wii
-- Insert SD Card: Off

Graphics Configurations
- General
-- Backend: Direct 3D 11
- Enhancements
-- Scaled EFB Copy: On
- Hacks
-- Skip EFB Access from CPU: Off
-- Ignore Format Changes: On
-- Store EFB Copies to Texture Only: On
-- Texture Cache - Accuracy: Safe
-- External Frame Buffer (XFB) - Disable: On
-- Fast Depth Calculation: On
-- Disable Bounding Box: On

Controller Settings
- Wiimote 1: Emulated Wiimote
-- Extension: None
			
Submitted by mohoc on 9/21/2024 1:16 PM
Submission Comments
My first Dolphin submission, with one of my favorite games on the system. I hope you will enjoy the Wario cheating party!

File info

  • Emulator used: Dolphin 5.0 with Lua Core v4.3 by MikeXander (syncs on 5.0 stable)
  • Game version: USA (rev 1)
    • SHA1: 2252edd39961d3de9cf8ce529b721856960b8715
    • MD5: a2feb2d57ec670615ac9f1d13e1db49b
  • Vi frame count: 51357
  • Lag: 106 frames in 30 fps sections and 431 frames in 60 fps sections (10.73s total)
  • RNG manipulation: 178 frames in 30 fps sections and 23 frames in 60 fps sections (6.32s total)
  • RTA timing (from “Start Game” to the last final boss hit): 22:20
  • Detailed input sequence breakdown
  • RNG manipulation recap (see the ”Detailed RNG manipulation recap” subsection beforehand)

Emulator settings

  • Dual Core: off
  • Idle Skipping: off
  • JIT Recompiler
  • DSP HLE emulation
  • Wii aspect ratio: 4:3
  • No GameCube Controller, one Emulated Wiimote

Suggested screenshot(s)

Vi frame 10273
Vi frame 15052
Vi frame 44321

About the game

Released in 2007 Mario Party 8 is the first installment of the series for the Wii. Like several previous titles the game features six boards, a party mode with up to four players competing in a set number of turns, and a story/solo mode where the player faces the AI on multiple boards.

About the run

  • Heavy luck manipulation
  • Heavy resource management
  • Takes intentional damage
  • Genre: Board
  • Genre: Party
The goal is to complete Star Battle Arena, which is the solo mode of the game and leads to the credits upon completion. You face an opponent in a duel on the six game boards, and then defeat Bowser in a final boss fight.
As you might expect, this TAS is heavily focused on board routing and RNG manipulation.

The basics

In Star Battle Arena each confrontation is a duel, which unfolds quite differently than the usual formula. First there is no minigame at the end of each turn. Instead the game introduces versus (VS) spaces which trigger a duel minigame when landing on them. As a result the match takes place on smaller variations of the boards with a rearrangement of the spaces that include VS spaces here and there.

Boards

As I mentioned before, this game has six boards, with the following names and duel win conditions:
  • DK's Treetop Temple: get two stars (20 coins each).
  • Goomba's Booty Boardwalk: get one star (50 coins).
  • King Boo's Haunted Hideaway: get two stars (10 coins each).
  • Shy Guy's Perplex Express: get one star (50 coins).
  • Koopa's Tycoon Town: get four stars (see details below).
  • Bowser's Warped Orbit: bring your opponent to zero stars (see details below).
Below are given the particularities of each duel board.
DK's Treetop Temple
There are five star spawns, which can be referred to as left, top, top-right, middle-right and bottom according to their location. Once you reach the star location, you can get it for 20 coins. Then the star goes to another location. The spawn pattern is a cycle along all five locations. This cycle is determined by RNG during the black fadeout before the board introduction.
Goomba's Booty Boardwalk
This board is a straight line with a few happening spaces that make you move several spaces forward. Captain Goomba awaits you at the end of it. Then if you exchange 50 coins for a star, you win the duel. Otherwise you go back to the start.
King Boo's Haunted Hideaway
This board is a procedurally generated 6 x 4 grid maze following this nonexhaustive list of conditions:
  • it has a starting room and exactly five dead ends: three King Boo rooms and two pitfalls,
  • all rooms are reachable,
  • the starting room has exactly one way out,
  • if two rooms can be connected (i.e. adjacent non-dead ends outside of the starting room), then they will be connected,
  • (to be confirmed) two deadends cannot be adjacent to each other (though they can be diagonal to each other).
When reaching a King Boo room you can exchange 10 coins for a star. Then you are sent back to the start. If the star was bought then this King Boo room becomes a pitfall. Pitfalls just throw you back to the start.
Shy Guy's Perplex Express
This board is a loop between the floor and the roof of a train. You must meet Holly Koopa in the middle of the train floor and exchange 50 coins for a star. Meeting Shy Guy gives you 10 coins.
Koopa's Tycoon Town
This board is a loop with two chords. There are three hotels, which can be referred to as left, top and right according to their location. The goal is to invest coins in the hotels to own the equivalent of four stars. You own a hotel when you are the player that has invested the most coins in it. An opponent must invest strictly more coins in order to steal ownership.
The star value of a hotel is determined by the total number of coins invested in it. Base value is one star. It becomes a two star hotel with 20 to 49 coins. And it turns into a three star hotel with 50 coins or more.
Bowser's Warped Orbit
This board is a loop with two small branching sections with two branches that merge back right after. Several happening spaces can reverse the direction of the loop. This board stands out by its win condition and its pool of available candies.You win when you get your opponent to zero stars. To do so, you have access to two star-stealing candies: Bullet Bill and Bowser. Details about the Bowser one are available in the ”Candies” subsection.

Final boss fight

After completing Bowser's Warped Orbit, the run ends with a final minigame called Superstar Showdown. It is a fairly straightforward boss fight against Bowser with no RNG. There are three phases with projectiles which are (supposedly) increasingly difficult to dodge.
The rest of this section is focused on board components.

Spaces

Like most other Mario Party games the boards are made of spaces which trigger a special effect when landing on them. The common types are the following:
  • Blue: get 3 coins.
  • Red: lose 3 coins.
    • The animation is shorter by 6 frames than with a blue space.
  • Happening (green): triggers a specific event, good or bad.
In duel matches the game adds two exclusive minigame space types:
  • VS (orange): triggers a duel minigame. The winner gets up to 20 coins from their opponent.
  • Challenge (yellow): triggers a solo minigame. If successful, the player gets up to 20 coins.
Finally DK (resp. Bowser) spaces give a board-specific bonus (resp. malus). At first DK spaces are up on the board. When a character lands on a DK space, they all turn into Bowser spaces. Conversely when someone lands on a Bowser space, they all become DK spaces. The effects of these spaces on each board are detailed below.
Board nameDK spaceBowser space
DK's Treetop TempleThrows you directly to the star.Changes the star location.
Goomba's Booty BoardwalkBonus event, can gain up to 20 coins.Malus event, can lose up to 30 coins (possibly 0 with enough skill).
King Boo's Haunted HideawayTurns pitfalls into free star locations.Turns pitfalls into star-losing locations.
Shy Guy's Perplex ExpressLocomotive change: doubles your coins.Locomotive change: halves your coins.
Koopa's Tycoon TownDK invests 20 coins in a hotel in your name.Bowser picks a hotel and steals 10 coins from everyone in it.
Bowser's Warped OrbitGrants you a candy.Makes you lose a star.

Candies

Candies are the items of the game. They can be obtained via drop spots, shops or board-specific events. There are four types:
  • Red candies impact your dice roll.
  • Green candies act before your dice roll.
  • Yellow and blue candies transform the player and apply their effect to each opponent encountered during your movement.
    • Blue candies are more uncommon and have devastating effects on your opponents (like halving their coins or stealing their stars).
Only two red candies and one blue candy are relevant to this TAS: the Twice candy, the Thrice candy and the Bowser candy.
  • Twice candies grant you an extra dice roll. If you get a double 7 you get 30 bonus coins. If you get any other double you get 10 bonus coins.
  • Thrice candies grant you two extra dice rolls. If you get a triple 7 you get 100 bonus coins. If you get any other triple you get 30 bonus coins.
  • Bowser candies are only available in Bowser’s board. You get an extra dice roll and you steal two stars to each opponent encountered during your movement. Note that nothing extra happens if you get a double.
Note that you can only use one candy per turn.

RNG

As expected from a Mario Party game the vast majority of the action is ruled by RNG. One can distinguish between two main kinds of RNG elements.
  • Board generation: candies available in shops, star spawn cycle in DK’s board, maze layout in King Boo’s board and branching door pattern in Bowser’s board.
  • Ingame elements: dice rolls, coin blocks, candy drops, dart wheel stopping speed, COM candy use (notably with red and green candies) and COM action speed (only with positioning dice rolls and dart throws).
From my experience board generation seems to happen during the two black fadeouts before the board introduction. On the contrary ingame RNG elements are decided on the spot. While most of these are rerolled every frame, dice roll results are only changed every other frame.
Note that positioning dice rolls are a notable exception and do not fit either RNG kind: these dice have their result set right before they appear.

Special Bonus

When the player going second ends their turn, the game checks if either player is close to their win condition:
  • DK's Treetop Temple: having one star.
  • Goomba's Booty Boardwalk: having 50 coins.
  • King Boo's Haunted Hideaway: having one star.
  • Shy Guy's Perplex Express: having 50 coins.
  • Koopa's Tycoon Town: having three stars.
  • Bowser's Warped Orbit: having your opponent at one star.
If so, the game triggers a thirty-ish-second cutscene where the second-ranked player has a chance to get a bonus, usually a candy or coins. There are always three outcomes, one being an X which grants no bonus.

(No) character differences

Besides their name length and the pool of opponents they can face, I am not aware of any character difference. I chose Wario out of personal preference. More info is available in the “Technical details” section.

Tricks used

Special Bonus skips

The Special Bonus cutscenes can be skipped by reaching their condition on the same turn as you win the board. This is achievable on every board and faster on all of them except King Boo’s one. Indeed on this board you can only get at most one star per turn, so the only way to skip the Special Bonus is to be tied with your opponent at the end of the first turn by making them get a star too. And this would take at least as long as the Special Bonus cutscene.

Standings

The game tracks your current ranking at any time using the number of stars, and then the number of coins at equal stars. If both players are tied in stars and coins then they are both considered to be first.
Your ranking dramatically changes which candies are available at drop spots and shops, and with which probability. For instance on Goomba’s board there is no shop and a Thrice candy can only be dropped when being ranked second. On the contrary, Twice candies can only be dropped by the first-ranked player on both DK and Koopa’s boards. Being second-ranked also grants you bargains at the candy shops. So manipulating the standings is entirely part of board routing.

RNG manipulation

Although the range of available actions is rather limited and none seem to have a direct impact on RNG, the latter seems to change frequently naturally. This opens up the possibility of “wasting” frames in the hopes of getting the desired results or saving even more time later.
Pausing
With the ‘+’ button one can pause the game at nearly any time during gameplay. During a pause RNG is rerolled every frame. However the pause/unpause animation is relatively long (at least 38 frames) so it should only be used as a last resort. In fact it was only used once in this TAS when setting Message Speed to Fast.
Delaying actions
Waiting before pressing A or shaking the Wiimote for a dice roll allows you to change the outcome of ingame elements. A more indepth analysis is given in the ”Technical details” section.
Note that lag can be modeled as a pseudo-random event. So one can attempt to optimize it in the same manner as RNG events.

Final boss damage boosting

Last but not least getting hit at the beginning of phase 2 is slightly faster than dodging the Bullet Bills. If you stand still then it’s faster by one frame, and if you go a little to the left you can save an extra frame.

Routing

All boards are completed within two or three turns. Only Shy Guy’s board is not completed within its minimum possible number of turns (see the ”Other board strategies considered” subsection).
DK's Treetop Temple
This is the same strategy as in previous TAS attempts. Before entering the board you manipulate a specific star spawn cycle beginning: middle right then bottom. You go first. In turn 1 you roll a 5 or a 7 and drop a Twice candy. Then in turn 2 you roll a double 7, which gives you the coins and the movement necessary to get your two stars in one turn (and thus skip the Special Bonus).
  • Pre-board manipulation.
    • Get a star cycle starting with the middle right spawn and then the bottom spawn.
  • Go first.
  • Set Message Speed to Fast.
  • Turn 1: roll a 5 or a 7 and drop a Twice candy.
    • End on a blue space.
  • COM turn 1: low roll, preferably a 1.
  • Turn 2: use your Twice candy and roll a double 7 (+30 coins).
    • Preferably get a single coin from the coin block for speed.
Goomba's Booty Boardwalk
This is a slight improvement over the strategy used by Mizumaririn by landing on a red space instead of a blue space in turn 1 (6 frames faster). You go first. In turn 1 you roll a 9, get 10 coins from the coin block and land on a red space. Your opponent should roll a 10, get 5 coins from the coin block and land on a blue space. Then you have 17 coins and your opponent has 18 coins. So at the beginning of turn 2 you are barely considered second in the standings, which allows you to drop a Thrice candy. Finally in turn 3 you roll a high triple to get your remaining coins and head straight to the end.
  • Go first.
  • Turn 1: roll a 9 and get 10 coins from the coin block.
    • End on a red space with 17 coins.
  • COM turn 1: they roll a 10 and get 5 coins from the coin block.
    • End on a blue space with 18 coins.
  • Turn 2: roll a 6, a 7 or a 9 and drop a Thrice candy.
    • End on a blue space with 20 coins.
  • COM turn 2: they roll a 4 (landing on the only blue space with no extra candy drop animation).
  • Turn 3: use your Thrice candy and roll a triple 10 (+30 coins).
    • If you rolled a 7 or a 9 in turn 2 then a triple 9 also works.
King Boo's Haunted Hideaway
Since the board layout is procedurally generated, the strategy highly depends on it. Ideally the board must be completed within two turns by going first. Previous attempts required either an extra turn, a red candy used in turn 2 or a DK space to get their second star. To the best of my knowledge this is the first Star Battle Arena TAS with a board layout that has two King Boo rooms less than ten spaces away from the start (and with a coin block on the way). In 291 manually explored layouts, I have only found 8 of them which could be completed in two turns: 7 of them with a DK space, and only 1 with two King Boo rooms accessible in one turn and with a coin block on the way (which was the one used in this TAS). Although this layout was not perfect, it was enough to save at least eight seconds over all previous attempts, sometimes even more. See the ”Known improvements” section for more details about the ideal layout.
Note that this is the only board which lags during gameplay, which makes it all the more important to spend as little time as possible on it.
  • Pre-board manipulation.
    • Get a 2-turn layout, preferably with two King Boo rooms less than 10 spaces away from the start.
  • Go first.
Specific to the obtained layout:
  • Turn 1: roll an 8 (or higher) and get 5 coins from the coin block.
    • Get the first King Boo star, end at the start.
  • COM turn 1: low roll, preferably a 1.
  • Special Bonus: no COM bonus.
  • Turn 1: roll a 7 (or higher) and get 5 coins from the coin block.
    • Get the second King Boo star.
Shy Guy's Perplex Express
This is the same strategy as in the 2018 Nicovideo TAS by 豪華客船乗組員. You go first. In turn 1 you roll an 8 and minimize the time spent on your coin block and your opponent’s turn. In turn 2 you preferably roll a 9 then drop a Thrice candy. Finally in turn 3 you roll a high enough triple to get your remaining coins and reach Holly Koopa.
  • Go first.
  • Turn 1: roll an 8.
    • Preferably get a single coin from the coin block for speed.
    • End on a blue space with 14 coins (or more).
  • COM turn 1: low roll, preferably a 1.
  • Turn 1: roll a 9 and drop a Thrice candy.
    • Meet Shy Guy (+10 coins).
    • End on a red space with 21 coins (or more).
  • COM turn 2: low roll, preferably a 1.
    • A 2 roll only loses a frame here.
  • Turn 3: use your Thrice candy and roll a triple X with X at least equal to 4 (+30 coins).
    • Preferably avoid a triple 7 due to the longer bonus animation.
    • Meet Holly Koopa and exchange 50 coins for a star.
Koopa's Tycoon Town
This is a slight improvement over the strategy used in the 2018 Nicovideo TAS by 豪華客船乗組員 by having one less hotel upgrade animation. You go first. In turn 1 you drop a Twice candy, invest one coin in the left hotel and land on a blue space. Then in turn 2 you roll a double 7 and get 10 coins from the coin block in order to invest 50 coins in the top hotel and complete the board.
Although you spend more time getting coins and investing them in hotels compared to the former strategy, skipping one hotel upgrade animation more than makes up for it.
  • Go first.
  • Turn 1: roll a 4, a 6 or a 10 and drop a Twice candy.
    • Invest 1 coin in the left hotel (+1 star).
    • End on a blue space with 12 coins.
  • COM turn 1: low roll, preferably a 1.
  • Turn 2: use your Twice candy and roll a double 7 (+30 coins).
    • Get 10 coins from the coin block.
    • Invest 50 coins in the top hotel (+3 stars).
Bowser's Warped Orbit
This is the same strategy as in the 2018 Nicovideo TAS by 豪華客船乗組員. You go first. In turn 1 you roll a 4 and drop a Bowser candy. Your opponent must roll a 5 or a 6 and branch to the left. In turn 2 you use your Bowser candy, roll 3 total, branch to the left and land on the DK space. Then your opponent must land on the Bowser space to lose their last star and receive utter humiliation.
  • Go first.
  • Pre-board manipulation.
    • Change the branching door pattern if needed.
  • Turn 1: roll a 4 and drop a Bowser candy.
  • COM turn 1: roll a 5 or a 6, do not drop a blue candy and branch to the left.
  • Turn 2: use a Bowser candy, roll 1/2 or 2/1 and branch to the left.
    • End on the DK space, which turns into a Bowser space.
  • COM turn 2: End on the Bowser space (1 or 2 roll depending on the COM turn 1 roll).

Resources

Past work

  • This 2018 full TAS run by 豪華客船乗組員 on Nicovideo. To the best of my knowledge this was the first publicly available full-game TAS of this game, with a time of roughly 24:41.
  • This 2022 playlist by Truepixel with individual board TAS runs.
  • This 2023 WIP up to King Boo’s board (included) by Mizumaririn. It had the fastest times obtained on the first three boards at the time.

(No) memory watch

I am familiar with Dolphin Memory Engine by aldelaro5 and others, and the basics of memory search. However, given the apparent nature of RNG in this game, I figured that finding its memory address with no further understanding would not help much in manipulating its value. So I decided to tackle this project as a black box optimization problem and see how far I could go in this setting (which, I’m not going to lie, had its own charm).

Candy drop rates

Google spreadsheet by Rain and infinigummy referencing the candy drop rates in Star Battle Arena. Below is a recap with only the candies used in this TAS.
Board & candy 1st place odds 2nd place odds
DK's Treetop Temple, Twice candy 1 in 10 0
Goomba's Booty Boardwalk, Thrice candy 0 1 in 5
Shy Guy's Perplex Express, Thrice candy 1 in 10 1 in 5
Koopa's Tycoon Town, Twice candy 3 in 10 0
Bowser's Warped Orbit, Bowser candy 1 in 5 0

Board guides

Speedrunning guides made by Noops, one per board. DK’s board has a video while all the other boards have a Google doc. The one about King Boo’s board was especially useful in better understanding the rules behind the maze layout generation.

”Identifying Luck”

“Identifying Luck” is a video series by ZoomZike which goes over all the luck-based elements in Mario Party games. The video about Mario Party 8 was the latest one and released in late 2023.

Dolphin Lua Core v4.3

Fork by MikeXander. Unlike the v3.5.1 version by SwareJonge, it supports Wiimote inputs in Lua scripting.

Lua scripting

I made and used this Lua script which I called “Mario Party 8 RNG manipulation helper”. It assists you in exploring input sequences. More info is available in the ”Technical details” section.

Technical details

(Small) character differences

To the best of my knowledge the only differences between characters are their name length and the pool of opponents they can face. Both can slightly change some cutscene timings.
By default textboxes are displayed at Normal speed, which makes you go through the text before you are able to clear it. As such the character name lengths slightly change the time it takes to go through these textboxes. However, when Message Speed is set to Fast, in-board textboxes appear instantly and their timing becomes unaffected by the character names, while pre-board cutscenes remain at Normal speed. Since this is done early in the TAS (in turn 1 of DK’s board) few textboxes are actually affected.
In total there are 23 character name occurrences in Normal speed textboxes, including 18 from the main character in the TAS. In a test run where I picked Boo instead of Wario, I managed to save 3 frames across the four occurrences of the main character name in the pre-DK board cutscene. So it confirmed that the time difference between characters would be negligible.

Input delay/drops

This game tends to delay input effects by one frame, while sometimes even straight up ignoring said inputs. There seems to be some pattern to it, but I have not delved into it. At least from my experience the two most likely patterns are strings of inputs delayed by one frame, or non-delayed frames and input drops happening alternately.
Not only does it take longer to optimally clear each textbox, it also hurts the quality of RNG manipulation.

RNG behavior

From my experience RNG in Mario Party 8 is definitely not frame-based or input-based. Since lag does not seem to impact RNG, I do not think it is CPU-cycle based either. My guess would be something similar to what Super Paper Mario does. There RNG is stored as an integer value, and a function f of the form f(x) = (ax + b) mod m is applied iteratively to it every time RNG is called (notably from onscreen animations and effects). This would fit into the RNG-based RNG category according to the Advanced Luck Manipulation page.
Under this assumption, I am familiar with two “advanced” manipulation techniques: splitting pseudo-random events and grouping waiting spots.

Splitting pseudo-random events

Suppose you need to roll a triple 10 with three 10-sided dice. This is a 1 in 1000 chance, so intuitively after your first attempt you would expect 999 rerolls on average before getting it. However, if you are able to throw each dice individually and lock their result, then the number of expected rerolls can be decreased dramatically. In this example you reroll one dice until you get a 10, lock it then roll another dice, and so on. Now you would expect 9 rerolls per dice, which totals 27 rerolls on average instead of the former 999 ones! This is what I call splitting pseudo-random events.
The reason why this works so effectively is that instead of manipulating several pseudo-random events in parallel, you put them in a sequence and manipulate them one at a time. So individual event expectancies are no longer multiplied, they are added up instead.
In a TAS this can be achieved by planning at least one manipulation spot in between any two pseudo-random events whenever possible. This allows you to lock the results of previous pseudo-random events while still being able to manipulate the next one.

Grouping waiting spots

On the contrary, waiting spots with different effects on the RNG can be grouped in order to greatly increase the number of accessible unique scenarios.
Here is a simple example. Suppose you begin a Mario Party 8 board by going first, and you want a specific dice result. If you set a budget of 10 waiting frames max, the dice result only changes every other frame, so you only have access to at most 6 scenarios (by waiting 0, 2, 4, 6, 8 and 10 frames respectively). However, assuming waiting at the player turn banner has a completely different impact on the RNG, any waiting time at it will lead to a new branch of scenarios with at most 6 of them in it. For example if you wait exactly 2 frames at the player turn banner, you will have access to at most 5 additional scenarios within the same 10-frame budget (by waiting 0, 2, 4, 6 and 8 frames at the dice roll respectively). If you do the math, this leads to at most 6+5+5+4+4+3+3+2+2+1+1 = 36 scenarios total, which makes it much more likely to get your desired result within a small number of waiting frames!
The reason why this works so effectively is the reverse one compared to pseudo-random event splitting. Instead of having your waiting spots one at a time in a sequence, you consider them “in parallel” when assigning your waiting frame budget. This allows you to branch as much as possible within the currently remaining budget at every waiting spot in your group which, even with a small budget, greatly increases the number of explorable scenarios before the next pseudo-random event happens. More details are given in the following hidden paragraphs.
Given a budget of B waiting frames and n grouped waiting spots M1,…,Mn independent from each other, the goal is to determine the number of explorable scenarios. Each scenario can be characterized by its delay sequence (d1,…,dn), which is the number of frames waited right before each waiting spot Mi for 1 ≤ i ≤ n. In turn, by setting dn+1 = B - SUM1 ≤ i ≤ n(di), each sequence (d1,…,dn+1) can be represented as a {top, right} path in a rectangular grid of length n and height B from its bottom left corner to its top right corner. Each waiting spot is associated with a right step while each waiting frame corresponds to a top step.
In the considered paths there are a total of B+n steps with exactly n right steps and B top steps. After numbering the step positions from 1 to B+n, each path can be characterized by the set of B step positions among B+n which are the top steps. And it is clear that the number of such set choices is binomial coefficient “(B+n) choose B”. By the above this is also the number of explorable scenarios on n grouped waiting spots with a budget of B waiting frames.
Knowing this, let us analyze the contribution of both parameters B and n in the number of explorable scenarios. Recall that binomial coefficient “(B+n) choose B” is equal to [(B+n)!]/[n!·B!]. When attempting to increment either parameter, this formula gives us the following key observations:
  • When going from B to B+1, the number of explorable scenarios is multiplied by (B+n+1)/(B+1).
  • When going from n to n+1, the number of explorable scenarios is multiplied by (B+n+1)/(n+1).
First, note that B and n contribute in a symmetric way. This makes sense from the looks of the formula, and also since “(B+n) choose B” is equal to “(B+n) choose n”. Second, the lower the incremented parameter is, the higher the factor is. So when having the choice for which parameter to increment in priority, it is always best to take the smaller one, and its contribution will always be at least a factor of 2 (or very close to it). In short the number of explorable scenarios always has an exponential dependency in the smaller parameter between B and n.
In practice (at least from my experience with Mario Party 8) the number of grouped waiting spots is usually far smaller than the budget of waiting frames. So this explains why increasing the number of grouped waiting spots has such a dramatic effect on the number of explorable scenarios. For example, starting from a budget of 10 waiting frames, there are 11 explorable scenarios with a single waiting spot. With two grouped waiting spots, this is multiplied by (10+1+1)/2 = 6, so 66 explorable scenarios!
Moving from theoretical randomness to pseudo-randomness, it is crucial that the grouped waiting spots have a significantly different impact on RNG. Thus one can group waiting spots into types depending on said impact. In Mario Party 8, with our assumption about RNG behavior, the type of a waiting spot depends on its number of RNG calls per frame. From my experience, I have been able to empirically identify the following types:
  • Player turn banners and the vast majority of textboxes.
  • Dice rolls.
    • (Except the positioning dice rolls at the beginning of each board, where waiting has no impact on their result.)
  • Coin blocks.
  • ’+’ pauses.
Note that waiting spots of the same type can still be attempted to be grouped, especially if there is a pseudo-random event or a black fadeout in between them.
Also note that we are dealing with pseudo-randomness and not perfect randomness, so many branches might actually lead to identical scenarios. For example, suppose player turn banners reroll RNG 3 times per frame while dice rolls induce 5 RNG rerolls per frame. Then waiting 5 frames at the former should produce the same result as waiting 3 frames at the latter, with 15 RNG rerolls total. In practice I have not been able to tell that such a case is happening, at least within a frame budget of 20 or less. This is a good sign that grouping waiting spots has worked as expected for the most part. And, other than increasing the time you are spending on RNG manipulation, I feel that there is no downside in attempting these waiting spot groupings.

Lua script: RNG manipulation helper

I made and used this Lua script which I called “Mario Party 8 RNG manipulation helper”. It plays out input sequences for you. Its creation was motivated by the desire to systematically use the “grouping waiting spots” technique in my RNG manipulation process.
You can specify a range of delay frame amounts for each “key” frame. Then it goes through all combinations of delay amounts in their lexicographic order. For example if you have two key frames with delays amounts [0,1] and [1,3] respectively, it will test delay amount couples (0,1), (0,2), (0,3), (1,1), (1,2) and (1,3) in this order. You can also specify minimum and maximum total delay amounts. More info is available in the comments of the script.
Note that in order to go from one delay combination to the next, I had to load a save state manually every time. So while the RNG manipulation process was partly automated, the number of rerecords was kept relevant. For context this was the best compromise I could find given the black box nature of my optimization phase. Indeed I could not check dice rolls and candy drops by using memory values, so I had to verify them with my own two eyes every time. Thus loading to the next delay combination manually allowed me to take my time exploring each frame sequence and gave me a lot of freedom (notably extra pauses/save states/inputs at will).

Spreading out waiting frames

When there are consecutive waiting spots of the same type, waiting frames can be distributed along them in order to make this waiting time less noticeable. This is mainly an aesthetic choice, but it can also allow you to locally perform some lag reduction (recall that lag does not seem to directly affect RNG in this game). In particular I was able to save 7 lag frames in the cutscene before King Boo’s board.
Still it can make it more difficult to track my RNG manipulation and judge its quality. As such I propose this sheet which references the intentional waiting time on each individual input. You also have this movie file which performed the exact same RNG manipulation but with very little waiting frame spreading (i.e. only when input drops made it necessary).

Detailed RNG manipulation recap

This recap illustrates the pseudo-random event splitting and the waiting spot grouping done on each board. I give two additional metrics to help interpret the quality of my RNG manipulation on each segment.
  • ”#expected segment rerolls” is the expected number of scenarios to explore before getting the desired result on the current segment. This takes into account the splitting of the pseudo-random events.
    • Example 1 (turn 3 of Goomba’s board). When looking for a triple 10, each dice roll can be manipulated successively, with a 1 in 10 chance. So you expect 9 rerolls for each dice roll, which totals 27 expected rerolls.
    • Example 2 (turn 2 of Shy Guy’s board). In contrast when looking for a 9 roll and then a Thrice candy drop with no waiting spot in between, with both being a 1 in 10 chance, you are facing a 1 in 100 chance. This corresponds to 99 expected rerolls.
  • ”Performance ratio” compares the number of waiting frames to the number of expected rerolls on the current segment. The lower the better.
    • More than 1 means worse than average, which is less than ideal.
    • Between 0.5 and 1 is decent.
    • Between 0.25 and 0.5 is good. It means that you are doing at least two times better than average.
    • Lower than 0.25 is great. It means that you are doing at least four times better than average.
Note that in the definition of the performance ratio I did not account for input drops and dice rolls only changing their value every other frame. So the given values could actually be interpreted as harsh upper bounds in some segments.
I also did not distinguish between 60 fps and 30 fps waiting frames for the sake of simplicity. There are few 60 fps waiting frames compared to the 30 fps ones, so the performance ratio values would not have significantly changed anyway. And again they are counted with the same weight as the 30 fps ones, so the given performance ratio values remain upper bounds.
DK's Treetop Temple
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 6 26 0.23
Turn 1 4 58 0.07
Turn 2 10 20 0.5
Board total 20 104 0.19
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
60 Pre-board 6 26 0.23
.dtm starting time -
Low cutscene lag 1 -
Select “Star Battle Arena” 1
Start Game 2
Low cutscene lag 2 1 in 3 (?)
Textboxes before entering the board 0
Star spawn cycle start (middle right then bottom) 1 in 20
30 From ‘+’ skip to positioning dice 3
Go first & fast COM shaking 1 in 6 (?)
Turn 1 4 58 0.07
From positioning dice to "My turn 1" 0
Unpause after setting fast text 2
Dice roll 2
Dice roll (5 or 7) 1 in 5
Candy drop (Twice) 1 in 10
Candy drop textbox 0
COM dice roll (1) 1 in 10
Turn 2 10 20 0.5
My turn 2 3
Select & confirm Twice candy 5
Dice roll 1 0
Dice roll 1 (7) 1 in 10
Dice roll 2 0
Dice roll 2 (7) 1 in 10
Star 1 textboxes 2
Coin block 0
Coin block (1) 1 in 3
Board total 20 104 0.19
Goomba's Booty Boardwalk
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 5 7 0.71
Turn 1 16 98 0.16
Turn 2 11 25 0.45
Turn 3 5 27 0.22
Board total 38 157 0.24
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
30 Pre-board 5 7 0.71
Next 1
60 Low cutscene lag 1 in 3 (?)
Last cutscene textbox 1
30 From ‘+’ skip to positioning dice 3
Go first & fast COM shaking 1 in 6 (?)
Turn 1 16 98 0.16
From positioning dice to "My turn 1" 1
Dice roll 6
Dice roll 1 (9) 1 in 10
Candy drop textbox 4
Coin block 5
Coin block (10) 1 in 3
COM dice roll (10) 1 in 10
COM coin block (5) 1 in 3
Turn 2 11 25 0.45
My turn 2 & select dice 5
Dice roll 6
Dice roll 1 (6, 7 or 9) 3 in 10
Candy drop (Thrice) 1 in 5
Candy drop textbox 0
COM dice roll (4) 1 in 10
Turn 3 5 27 0.22
My turn 3 & confirm Twice candy 1
Dice roll 1 1
Dice roll 1 (10) 1 in 10
Dice roll 1 0
Dice roll 2 (10) 1 in 10
Dice roll 1 4
Dice roll 3 (10) 1 in 10
Board total 40 157 0.26
King Boo's Haunted Hideaway
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 24 106 0.23
Turn 1 9 21 0.42
Turn 2 8 3.5 2.29
Board total 41 131 0.31
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
30 Pre-board 24 106 0.23
End of Goomba's board 8
60 Textboxes before entering the board 16
Layout with two 1-turn King Boo rooms and a coin block 1 in 100 (?)
30 From ‘+’ skip to positioning dice 0
Go first & fast COM shaking 1 in 6 (?)
Turn 1 9 21 0.42
From positioning dice to "My turn 1" 2
Dice roll 0
Dice roll (8+) 3 in 10
Coin block 1
Coin block (5) 1 in 3
King Boo 1 textboxes 4
COM dice roll (1) 1 in 10
Textboxes before the Special Bonus prompt 2
Fast dart wheel 1 in 3 (?)
Special Bonus failure 1 in 3
Turn 2 8 3.5 2.29
My turn 2 5
Dice roll 1
Dice roll (7+) 4 in 10
Coin block 2
Coin block (5) 1 in 3
Board total 46 131 0.35
Shy Guy's Perplex Express
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 9 7 1.29
Turn 1 12 38 0.32
Turn 2 22 103 0.21
Turn 3 4 19 0.21
Board total 43 167 0.26
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
30 Pre-board 9 7 1.29
Next 1
60 Textboxes before entering the board 3
Low cutscene lag 1 in 3 (?)
30 From ‘+’ skip to positioning dice 5
Go first & fast COM shaking 1 in 6 (?)
Turn 1 12 38 0.32
From positioning dice to "My turn 1" 1
Dice roll 6
Dice roll (8) 1 in 10
Holly Koopa 3
Coin block 2
Coin block (1) 1 in 3
COM dice roll (1) 1 in 10
Turn 2 22 103 0.21
My turn 2 0
Dice roll 13
Dice roll (9) 1 in 10
Candy drop (Thrice) 1 in 10
Candy drop textbox 5
Shy Guy textboxes 3
COM dice roll (1 or 2) 1 in 5 (Penalty (2): red space one step too far) 1
Turn 3 4 19 0.21
My turn 3 & confirm Twice candy 0
Dice roll 1 0
Dice roll 1 (X in {4,5,6,8,9,10}) 6 in 10
Dice roll 2 0
Dice roll 2 (X) 1 in 10
Dice roll 3 4
Dice roll 3 (X) 1 in 10
Board total 43 167 0.26
Koopa's Tycoon Town
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 3 5 0.6
Turn 1 6 19 0.31
Turn 2 13 20 0.65
Board total 22 44 0.5
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
30 Pre-board 3 5 0.6
From ‘+’ skip to positioning dice 3
Go first & fast COM shaking 1 in 6 (?)
Turn 1 6 19 0.31
From positioning dice to "My turn 1" 0
Dice roll 3
Dice roll (4, 6 or 10) 3 in 10
Candy drop (Twice) 3 in 10
Confirm left hotel investment 0
Left hotel, last textboxes 3
COM dice roll (1) 1 in 10
Turn 2 13 20 0.65
My turn 2 & confirm Twice candy 2
Dice roll 1 5
Dice roll 1 (7) 1 in 10
Dice roll 2 6
Dice roll 2 (7) 1 in 10
Coin block 0
Coin block (10) 1 in 3
Board total 22 44 0.5
Bowser's Warped Orbit
Segment #waiting frames #expected segment rerolls Performance ratio
Pre-board 3 7 0.43
Turn 1 18 62 0.29
Turn 2 13 42 0.31
Board total 34 111 0.31
TAS total 202 714 0.28
Framerate Segment Pseudo-random event Odds Waiting spot #waiting frames #expected segment rerolls Performance ratio
30 Pre-board 3 7 0.43
Shop in Koopa’s board 1
60 Textboxes before entering the board 0
Low cutscene lag 1 in 3 (?)
30 From ‘+’ skip to positioning dice 2
Go first & fast COM shaking 1 in 6 (?)
Turn 1 18 62 0.29
From positioning dice to "My turn 1" 5
Dice roll 10
Dice roll (4) 1 in 10
Candy drop (Bowser) 1 in 5
Candy drop textbox 3
COM dice roll 1 (5 or 6) 1 in 5
COM branch to the left 1 in 2
COM no Bullet candy drop 7 in 10
Turn 2 13 42 0.31
My turn 2 & confirm Bowser candy 2
Dice roll 1 10
Dice roll 1 (1 or 2) 1 in 5
Dice roll 2 1
Dice roll 2 (3 total) 1 in 10
Branch to the left 1 in 2
DK textboxes 0
COM no candy use 1 in 2 (?)
COM dice roll (land on Bowser space) 1 in 10
Board total 34 111 0.31
TAS total 202 714 0.28

Other board strategies considered

Despite the small number of turns spent in each board, there is a surprisingly rich amount of available strategies. Below are some examples of slower creative strategies.
DK's Treetop Temple
Instead of going first and dropping a Twice candy in turn 1, you can go second and drop a Bitsize candy. After using it in turn 2, it grants you 3 coins for each space crossed during the turn. So in turn 1 you roll a 4 or a 5 and drop a Bitsize candy. And in turn 2 you use the candy and aim for the DK space. Then you will be able to buy a first star at the middle-right spawn and a second star wherever it spawns. To the best of my knowledge this is the most RTA viable way to complete this board in two turns. On top of being one of my favorite strategies in the game, it would have been the opportunity to use a yellow candy in the TAS. Unfortunately the DK space animation was a bit too long and made this strategy slower by a few seconds. See this IL TAS run by Truepixel.
Goomba's Booty Boardwalk
Previous strategies went second in order to drop the Thrice candy in turn 1 and have the COM player roll low numbers each turn. However, the board is just long enough to force a completion in at least three turns. While this “going second” strategy made COM player turns much shorter, it was not enough to compensate for an extra COM player turn. I experimented with the Dolphin event, which moves you twenty spaces further within a relatively short time. But it did not make a significant difference from the base “going second” strategy.
Shy Guy's Perplex Express
It is possible to complete Shy Guy’s board within two turns instead of three by going second. In turn 1 the COM player must roll a 7. This triggers the Kamek event, which moves the cooking car next to the start. This allows you to drop a Thrice candy in turn 1, use it in turn 2 and roll a triple 7 to get 100 bonus coins and reach Holly Koopa directly. Unfortunately the happening cutscene is way too long to make this strategy faster in real time. See this IL TAS run by Truepixel.
Koopa's Tycoon Town
In speedrunning some scenarios allow you to take advantage of the AI’s predictable behavior. In particular if a COM player is able to claim ownership of a hotel, they usually invest all their coins in it. In the best case scenario this allows you to win the board by only investing 13 coins: 1 in the top hotel, 1 in the right hotel and 11 in the left hotel in order to barely beat the 10 coins invested by the AI while upgrading this last hotel. See this IL run by Noops.
Bowser's Warped Orbit
Although it looks difficult to do better than the current board route, it is worth noting that rolling a 5 instead of a 4 in turn 1 still works, though the odds of the corresponding scenario are less favorable. Still, it is a good alternative to keep in mind in case you have trouble manipulating the default board route.

Times per board

Each segment ends at the first frame when the ”C” in “Congratulations!” becomes visible, and starts when the previous segment ends.
Board name TAS Mizumaririn 豪華客船乗組員 RTA IL WR
DK's Treetop Temple 4:13.30 4:13.60 4:21.59 (~4:46 by Noops)
Goomba's Booty Boardwalk 7:27.73 (3:14.43) 7:28.80 (3:15.20) 7:40.14 (3:18.55) (~4:35 by Teddy)
King Boo's Haunted Hideaway 10:56.27 (3:28.54) 11:05.63 (3:36.83) 11:26.62 (3:46.48) (~4:55 by Noops)
Shy Guy's Perplex Express 14:18.30 (3:22.03) / 14:51.42 (3:24.80) (~5:44 by Noops)
Koopa's Tycoon Town 17:18.55 (3:00.25) / 18:01.75 (3:10.33) (~3:43 by GlassCoke)
Bowser's Warped Orbit 21:34.50 (4:15.95) / 22:20.82 (4:19.07) (~4:42 by Noops)
End 23:52.72 (2:18.22) / 24:41.38 (2:20.56) /

Known improvements

Short term there are two improvements to my RNG manipulation route which are easy to implement. The first one is King Boo’s board layout manipulation. I realized late that RNG does not always reroll every frame you wait at the “Next” prompt at the end of Goomba’s board. So if I had to redo this board layout manipulation, I would try to wait at the bonus textboxes of the Thrice candy instead. This would make it more likely to find an ideal board layout, which could be up ten seconds faster with one less coin block animation (4s), two less branches (2 x 1.5s), no shop on the way (1s) and at least one King Boo place two rooms away from the start instead of three (1s). Though keep in mind that the board layout is entirely dictated by RNG, so there is no telling if such a layout could be found within a reasonable time, or if it is obtainable at all. Plus for now the board layout must be checked manually, which is quite time consuming.
The second improvement is better pseudo-random event splitting in Shy Guy’s board. Instead of rolling an 8 in turn 1 you aim for a 5. While you land on a red space instead of a blue one in turn 1, you compensate for it by landing on a blue space in turn 2, which can be done by rolling a 9. Not only do you pair the Thrice candy drop with a coin block result instead of a less likely dice roll result, you also double your Thrice drop rate by being ranked second when reaching the drop spot. So the worst odds of any group of pseudo-random events on this board go from 1 in 100 to 1 in 15. The only downside is that you need a triple 5 or higher in turn 3 instead of a triple 4 or higher.
  • Go first.
  • Turn 1: roll a 5.
    • End on a red space with 7 coins.
  • COM turn 1: low roll, preferably a 1.
  • Turn 1: roll a 9, get a single coin from the coin block and drop a Thrice candy.
    • Meet Shy Guy (+10 coins).
    • End on a blue space with 21 coins.
  • COM turn 2: low roll, preferably a 1.
    • A 2 roll only loses a frame here.
  • Turn 3: use your Thrice candy and roll a triple X with X at least equal to 5 (+30 coins).
    • Preferably avoid a triple 7 due to the longer bonus animation.
    • Meet Holly Koopa and exchange 50 coins for a star.
Segment #expected segment rerolls #expected segment rerolls with the current route
Pre-board 7 7
Turn 1 18 38
Turn 2 27 103
Turn 3 19 19
Board total 71 167
Framerate Segment Pseudo-random event Odds Waiting spot #expected segment rerolls
30 Pre-board 7
Next
60 Textboxes before entering the board
Low cutscene lag 1 in 3 (?)
30 From ‘+’ skip to positioning dice
Go first & fast COM shaking 1 in 6 (?)
Turn 1 18
From positioning dice to "My turn 1"
Dice roll
Dice roll (5) 1 in 10
Shop textbox
COM dice roll (1) 1 in 10
Turn 2 27
My turn 2
Dice roll
Dice roll (9) 1 in 10
Holly Koopa
Coin block
Coin block (1) 1 in 3
Candy drop (Thrice) 1 in 5
Candy drop textbox
Shy Guy textboxes
COM dice roll (1 or 2) 1 in 5
Turn 3 19
My turn 3 & confirm Twice candy
Dice roll 1
Dice roll 1 (X in {5,6,8,9,10}) 5 in 10
Dice roll 2
Dice roll 2 (X) 1 in 10
Dice roll 3
Dice roll 3 (X) 1 in 10
Board total 71
In the long run the best course of action would be to find both the memory address and the formula behind RNG, then deduce how the pseudo-random events are decided from it. This could lead to an RNG predictor script which would allow us to plan RNG manipulation in advance instead of brute-forcing our way locally to the desired outcomes.

Closing

Finally Mario Party 8 “Star Battle Arena” has a TAS with an available movie file. After a lot of time and effort spent on the Kuru Kuru Kururin 100% TAS, I wanted a change of pace with a completely different game and optimization philosophy. So I went back to one of my oldest and dearest projects. Unlike Kuru Kuru Kururin, Mario Party 8 is centered around RNG, resource management and lag reduction. Since I had little to no experience with all these things, I figured that it was a great way to complement my experience with TASing, especially with a game that I know very well. Although the highlight was definitely RNG manipulation, it also served as a nice introduction to resource management and lag reduction.
For the sake of simplicity I decided to tackle this project as a black box optimization problem and see how far I could go. This meant no memory watch and no advanced RNG manipulation shenanigans. I felt that this would be the best way to get familiar with RNG manipulation while still yielding a solid first submission.
My history with the game
I got the game back in 2007, probably close to its release date. Along with Mario Party DS it was my first Mario Party game, so there is definitely a lot of nostalgia involved. This might explain why, after watching 360Chrism speedrun Star Battle Arena in late 2017, I felt like giving it a go and ignoring the absurdity behind such a RNG heavy run. With this game I can say that I had the most passionate and stupidest moments in my 8-year long speedrunning career. After my initial curiosity, what made me stick around were the inherent redeeming qualities of this game mode: a fairly short run which will never feel boring and with plenty of time for on-the-fly strategizing.
After stumbling upon the 2018 full TAS run by 豪華客船乗組員 on Nicovideo in February 2020, I was very curious about how RNG worked in this game. So I did my first experiments on Dolphin, notably about the DK board star spawn cycle and King Boo’s board generation. This was a year after my first Kuru Kuru Kururin publication here. So I was already a bit familiar with TASing, albeit quite inexperienced. After a few days I put the project on hold… only to return to it nearly five years later. (It is becoming a tradition at this point…)
Learning lessons
This has been my first experience with RNG manipulation, and boy was it enlightening. Although I was already familiar with pseudo-random event splitting, I thought about grouping waiting spots of different types only near the end of my first TAS attempt last month. The math nerd in me knew that this additional trick alone would greatly improve the quality of RNG manipulation in my second attempt. Being aware of the explosion it would induce on the number of scenarios to be explored, it also motivated me to learn Lua and write a script that would make performing this technique more enjoyable and less painful for my morale and my hands.
Oh, and I also realized that lag could be modeled as a pseudo-random event. I still cannot decide whether it is a genius or stupid idea, but at least it has changed a little the way I view lag.
Special thanks
  • The speedrunning community of the game for their feedback and route suggestions (especially Noops and PinkSheep).
  • CoolKirby for his positive comments. I was happily surprised by their encouragement! I can say that it gave me extra motivation to finish this TAS project properly.

nymx: Claiming for judging.
nymx: Wow...that was a lot of text to sift through. Out of the entire submission, I saw what I needed to confirm that you have done an extreme amount of studying and work to get the results of this outcome. When I first noticed this submission, I knew that RNG was going to be the primary focus of obtaining the best optimization possible. Even though you have discovered potential improvements, this run is certainly beyond anything ever possible for a human. I too have finished TASes, where new strategies, techniques, and exploits were discovered. So I don't fault you for wanting to submit this, knowing that more can be done. Its painful to have to go back for a game of this length, especially where RNG would completely change all inputs after any improved area.
In regards to your efforts...I've noticed that more and more TASers are turning to the power of BOTing. In this case, your lua script is the perfect tool for this situation. The fact that you have totally destroyed the human record by half (one of my metrics that I see can never be beaten by humans), really says something about your skills in building the tools necessary for this effort. Congratulations! You have certainly caught my attention for any future submission. The only other point I want to bring up, is your comment on lag. I learned a long time ago that lag reduction should certainly be considered and has the power to make notable improvements to a run. I can imagine that lag reduction can complicate your findings on the best RNG. In fact, lag may be the result of any discovered RNG. In any case, it wouldn't matter for my analysis...yet I wanted to say that I'm glad that it caught your attention for optimization.
Gladly accepting and congratulations!
fsvgm777: Processing.
Last Edited by fsvgm777 27 days ago
Page History Latest diff List referrers