For the VS COM Expert mode, I have recently taken a look into the different initial monster placement patterns that Toad aswell as Toad's opponents can start out with (neglecting differences between 2 any patterns that solely come from the monster sprites being different while arrangement/constellation and colour distribution is the same) by going through different RNG values that I fixed to check what pattern would be produced and went through them in order case by case using SNES9X's ''cheat'' tool, and it looks like the patterns that I found should be all that exist (though I didn't check all 256 different RNG value cases generally). With ''pattern'' in the following, I refer to these, which doesn't necessarily include fairy/crow position sequences during rounds aswell as the positions and colours of dropped or otherwise spawned objects, aswell as the opponent's sequence of actions.
Right after a round ends (before a new round or end of match occurs), the RNG increments by 1 continuously for every frame without any jumps anymore that seem only to be induced during rounds.
Quick overview of opponents in order of appearance:
Katsini (Easy starts here)
Galrog
Harley Q
SamSpook (Normal starts here)
Sven
Parrotor
Mssr Boo (Hard starts here)
Aqualea
Razor
Tad Rock
Thak
Lizardon
Sarissa
Mangylox
Dedar
Carlton
Harry H
Wario
- - -
Expert mode Toad patterns for VS COM:
Against Katsini & Galrog:
Against Harley Q & SamSpook:
Against Sven:
Against Parrotor & Mssr Boo:
Against Aqualea & Razor:
Against Tad Rock:
Against Thak:
Against Lizardon & Sarissa & Mangylox:
Against Dedar & Carlton:
Against Harry H & Wario:
- - -
Expert mode opponent patterns for VS COM:
Generally there is 16 patterns, but for Aqualea apparently only 8 exist and for Sven only 10.
Katsini & Galrog patterns:
Harley Q & SamSpook & Parrotor & Mssr Boo & Tad Rock & Thak & Mangylox & Carlton & Wario patterns:
For Harley Q, Parrotor, Mssr Boo, Tad Rock, Mangylox, Carlton, and Wario, the same RNG values appear to cause the same patterns, but for Thak and SamSpook it is different (but for those two, the same RNG value causes the same pattern, apparently).
Sven patterns:
Aqualea patterns:
Razor & Lizardon & Sarissa & Dedar & Harry H patterns:
The same RNG value appears to causes the same Razor & Lizardon patterns, but not Sarissa, Dedar, and Harry H patterns (but for Sarissa & Dedar & Harry H, the same RNG apparently causes the same pattern).
- - - - -
Toad-pattern-to-RNG-value correspondence (for VS COM, Expert mode):
For each scheme below, the numbers 1 to 16 in the left coloumn refer and correspond to Toad-side patterns from the above Toad-pattern overview images for a given opponent, in such a way that ''1'' refers to the Toad-side pattern in the top left corner (within an overview image, consisting of 2 rows with each covering 8 unique patterns, except for Sven there is only 1 row), then ''2'' refers to the pattern to the right of what ''1'' refers to, and so on up to the top right corner being pattern ''8'', followed by the patterns ''9'' to ''16'' from the left to the right in the 2nd row. So it is like this:
------------------------------
| 1, 2, 3, 4, 5 ,5, 6, 7, 8 |
| 9,10,11,12,13,14,15,16|
--------------------------------
Since the sets of RNG values that produce a same pattern seem to be constant over all opponents, not all Toad-pattern-to-RNG-value correspondences have been explicitly tested.
An example to understand the following scheme: Mssr Boo beneath is listed to the right of the ''|'' separator, so e.g. the RNG value 04 causes Mssr Boo's pattern 6 (and for example B7 also causes that pattern).
Vertical pairs of asterisks ''*'', and horizontal circle ''°'' pairs highlight RNG values that only differ by 1
---
Katsini | Galrog:
Harley Q | SamSpook:
Parrotor | Mssr Boo:
Tad Rock | :
Thak | :
1|6: (04, *12, 20, *37, 3B, *57, 66, *72, 80, *97, 9B, *B7, C6, *D2, E0, *F7)
2|10: (0A, 17, 29, 32, 49, 4E, 69, 77, 89, 92, A9, AE, C9, D7, E9, F2)
3|7: (05, *11, 1F, *36, 48, *56, 67, *71, 7F, *96, A8, *B6, C7, *D1, DF, *F6)
4|12: (0C, 24, 38, 3F, 51, 5D, 6C, 84, 98, 9F, B1, BD, CC, E4, F8, FD)
5|11: (00, 1A, 1C, 2C, 45, 5A, 60, 7A, 7C, 8C, A5, BA, C0, DA, DC, EC)
6|1: (0B, 23, 3A, 3E, 50, 63, 6B, 83, 9A, 9E, B0, C3, CB, E3, °FA, °FB)
7|3: (03, 18, 2A, 33, 4A, 4F, 6A, 78, 8A, 93, AA, AF, CA, D8, EA, F3)
8|15: (06, 16, 28, 31, 43, 4D, 68, 76, 88, 91, A3, AD, C8, D6, E8, F1)
9|13: (02, 14, 27, 2F, 42, 4B, 5B, 74, 87, 8F, A2, AB, BB, D4, E7, EF)
10|2: (09, 10, 1E, 35, 47, 55, 62, 70, 7E, 95, A7, B5, C2, D0, DE, F5)
11|5: (15, 26, 30, 41, 4C, 5C, 75, 86, 90, A1, AC, BC, D5, E6, F0, FC)
12|4: (13, 21, 2D, 3C, 58, 64, 73, 81, 8D, 9C, B8, C4, D3, E1, ED, FE)
13|9: (08, 0E, 1B, 2B, 44, 53, 5F, 6E, 7B, 8B, A4, B3, BF, CE, DB, EB)
14|16: (19, 22, 2E, 3D, 59, 65, 79, 82, 8E, 9D, B9, C5, D9, E2, EE, FF)
15|8: (01, 0F, 1D, 34, 46, 54, 61, 6F, 7D, 94, A6, B4, C1, CF, DD, F4)
16|14: (07, 0D, 25, 39, 40, 52, 5E, 6D, 85, 99, A0, B2, BE, CD, E5, F9)
---
Sven: (Here, there exist only 8 different Toad-patterns, generated by pairing/merging RNG-sets that originally determined the 16 patterns)
1,6: (04, *12, 20, *37, 3B, *57, 66, *72, 80, *97, 9B, *B7, C6, *D2, E0, *F7) (0B, 23, 3A, 3E, 50, 63, 6B, 83, 9A, 9E, B0, C3, CB, E3, °FA, °FB)
2,10: (0A, 17, 29, 32, 49, 4E, 69, 77, 89, 92, A9, AE, C9, D7, E9, F2) (09, 10, 1E, 35, 47, 55, 62, 70, 7E, 95, A7, B5, C2, D0, DE, F5)
3,7: (05, *11, 1F, *36, 48, *56, 67, *71, 7F, *96, A8, *B6, C7, *D1, DF, *F6) (03, 18, 2A, 33, 4A, 4F, 6A, 78, 8A, 93, AA, AF, CA, D8, EA, F3)
4,12: (0C, 24, 38, 3F, 51, 5D, 6C, 84, 98, 9F, B1, BD, CC, E4, F8, FD) (13, 21, 2D, 3C, 58, 64, 73, 81, 8D, 9C, B8, C4, D3, E1, ED, FE)
5,11: (00, 1A, 1C, 2C, 45, 5A, 60, 7A, 7C, 8C, A5, BA, C0, DA, DC, EC) (15, 26, 30, 41, 4C, 5C, 75, 86, 90, A1, AC, BC, D5, E6, F0, FC)
8,15: (06, 16, 28, 31, 43, 4D, 68, 76, 88, 91, A3, AD, C8, D6, E8, F1) (01, 0F, 1D, 34, 46, 54, 61, 6F, 7D, 94, A6, B4, C1, CF, DD, F4)
9,13: (02, 14, 27, 2F, 42, 4B, 5B, 74, 87, 8F, A2, AB, BB, D4, E7, EF) (08, 0E, 1B, 2B, 44, 53, 5F, 6E, 7B, 8B, A4, B3, BF, CE, DB, EB)
14,16: (19, 22, 2E, 3D, 59, 65, 79, 82, 8E, 9D, B9, C5, D9, E2, EE, FF) (07, 0D, 25, 39, 40, 52, 5E, 6D, 85, 99, A0, B2, BE, CD, E5, F9)
---
Aqualea | Razor:
Lizardon, Sarissa | Mangylox:
Dedar | Carlton:
Harry H | Wario:
1|1: (04, *12, 20, *37, 3B, *57, 66, *72, 80, *97, 9B, *B7, C6, *D2, E0, *F7)
2|2: (0A, 17, 29, 32, 49, 4E, 69, 77, 89, 92, A9, AE, C9, D7, E9, F2)
3|3: (05, *11, 1F, *36, 48, *56, 67, *71, 7F, *96, A8, *B6, C7, *D1, DF, *F6)
4|4: (0C, 24, 38, 3F, 51, 5D, 6C, 84, 98, 9F, B1, BD, CC, E4, F8, FD)
5|5: (00, 1A, 1C, 2C, 45, 5A, 60, 7A, 7C, 8C, A5, BA, C0, DA, DC, EC)
6|6: (0B, 23, 3A, 3E, 50, 63, 6B, 83, 9A, 9E, B0, C3, CB, E3, °FA, °FB)
7|7: (03, 18, 2A, 33, 4A, 4F, 6A, 78, 8A, 93, AA, AF, CA, D8, EA, F3)
8|8: (06, 16, 28, 31, 43, 4D, 68, 76, 88, 91, A3, AD, C8, D6, E8, F1)
9|9: (02, 14, 27, 2F, 42, 4B, 5B, 74, 87, 8F, A2, AB, BB, D4, E7, EF)
10|10: (09, 10, 1E, 35, 47, 55, 62, 70, 7E, 95, A7, B5, C2, D0, DE, F5)
11|11: (15, 26, 30, 41, 4C, 5C, 75, 86, 90, A1, AC, BC, D5, E6, F0, FC)
12|12: (13, 21, 2D, 3C, 58, 64, 73, 81, 8D, 9C, B8, C4, D3, E1, ED, FE)
13|13: (08, 0E, 1B, 2B, 44, 53, 5F, 6E, 7B, 8B, A4, B3, BF, CE, DB, EB)
14|14: (19, 22, 2E, 3D, 59, 65, 79, 82, 8E, 9D, B9, C5, D9, E2, EE, FF)
15|15: (01, 0F, 1D, 34, 46, 54, 61, 6F, 7D, 94, A6, B4, C1, CF, DD, F4)
16|16: (07, 0D, 25, 39, 40, 52, 5E, 6D, 85, 99, A0, B2, BE, CD, E5, F9)
(For opponent-side patterns, the opponent-pattern-to-RNG-value correspondence might be very similar, but remains to be looked into.)
---
Further information on the RNG, by droodjerky:
[quote droodjerky]
droodjerky - 11/02/2017
I'm not sure how widely it is know at this point. So, I'll post here. The bomb RNG in Wario's Woods (SNES) is fully figured out. There is a very short method to figure out your RNG and I can use that to output RNG lists for all the monster layouts. It is also possible to easily change your current RNG.
How the game chooses which monster layout to use is also figure out. This is all VS COM.
Manipulating that is pretty much TAS only.
THE RNG STRING:
At 83B138, in the rom, there exists a list of values that is 256 items long.
Each of these items is between 0 and 255.
Here is an actual snippet from that list: [73, FF, 04, AC]
These are Hexadecimal numbers.
THE RNG OFFSET:
The game uses the value stored at s000068 to determine where to grab items from the list.
This is Static RAM and is not cleared on console reset.
This value goes up by 64 every round.
There are 3 rounds per stage, assuming you win each round.
64 * 4 = 256, so the RNG will loop around to the initial value every 4 rounds.
If it starts at 1 it goes 1 -> 65 -> 129 -> 193 -> 1.
This value also goes up by 1 for every bomb dropped on the demo screen.
More may affect this, I haven't checked beyond VS COM and the demo.
BOMB CHOICES:
The choices for colors of bombs are stored at 7E0A5C.
It's always in this order, [green,red,white,pink,blue,yellow,black,cyan]
If a color is missing from the round, the one to the right on the list is shifted left.
So, a round with red, pink, yellow, cyan, would be [red,pink,yellow,cyan]
At 7E0A5B the value for how many colors are on the board is kept.
STARTING A ROUND:
The game starts, the offset is whatever it was when last the game was played.
Any difficulty is chosen in VS COM.
The game "slices" a list from the RNG list, starting at the offset.
If the offset is 0, you get [73,FF,04,AC,...]
This list is then loaded into memory at 7E0AAC to 7E0A6D.
That means it is loaded reverse into memory.
THE BOMB IS CHOSEN:
When a bomb is to be dropped, the next value in the RNG slice is loaded.
This number is divided by 15 and the remainder is taken.
This number is then compared to the number of colors left on the board.
The number of colors is then subtracted, again, and again, until this value is less than the number of colors.
It has to be less because arrays start from 0.
An array of [red,pink,yellow,cyan] is 4 long, but the last address is 3. 0,1,2,3.
It then uses the value that is left to pick a color from the bomb choices address.
THE EXAMPLE:
Game turns on, the bomb RNG is the same as it was when the game was turned off.
We get offset 0.
We load a round, and get the colors [red,pink,yellow,cyan]
We get a list of RNG starting from position 0.
All the values load into memory.
We are about to get a bomb drop.
We get value 73(hex) from the RNG slice.
We have 5 colors on the board.
73 / 15 gives us 13 remaining.
13 - 5 - 5 = 3
The game loads position 3 from the bomb choices array.
We get cyan.
THE UPSHOT:
Once your offset is found, the entire list of possible bomb drops (assuming no colors have been removed from in the round) can be created.
This should allow players to plan the later stages of the game out, since this seems to be where a lot of time is lost.
There is probably a really nice offset that will give good RNG in the last few stages most of the time.
Since I am terrible at the game I haven't gotten to this part.
You offset can be found by loading the first stage on hard and comparing your bomb drops against the full list of RNG.
You will probably need to drop 15-20 bombs to be sure of your offset.
Since the bomb list is stored in reverse in memory, you will NEED TO GO BACKWARDS THROUGH THE FULL RNG LIST TO FIND YOUR OFFSET.
If you get a bomb that matches offset 255, then you check against position 254 for the next bomb. Then 253, etc...
There will probably be 2 or 3 places in the list that match your bomb pattern for quite a few bombs. Drop 20, on the high end, to be sure.
[/quote]
And a ZIP file that was provided by droodjerky:
https://cdn.discordapp.com/attachments/111326680978579456/376072968297644032/First_Stagehard_Layouts_With_FULL_RNG_STRING.rar
- - - - -
Further resources, information, aswell as questions that one can look into:
By pressing Up, one can get onto a pile of objects, and by pressing L or R, one can immediately turn and kick to the Left or Right. By pressing Select and Start at the same time, one comes back to the main menu. If one kicks and holds the button, then Toad will stay in the kicking sprite, and the same holds for laying an object onto something (high or low, for different sprites) or grabbing an object when there is none.
Apparently, there is a (rare) Lose condition where the action of grabbing an object (to carry it over Toad's or the opponent's head) while only 1 air tile is remaining (above Toad or the opponent, respectively) just at the right time when the fairy or crow tries to place an object at the same spot makes the game think the space is completely filled, and causes Toad or respectively the opponent to lose the round.
An old graphical ''phantom stack'' glitch during lessons mode:
https://www.youtube.com/watch?v=g35RZpBzZ4Q
An old glitch during lessons mode where a moving object due to a kick appears in the next lesson if the current lesson is cancelled while it moves:
https://www.youtube.com/watch?v=uRB0M_Dfegc
''In the Lessons Mode, under Chain Reactions #8, right next to Toad there is a green bomb next to two green Fuzzes in a row. According to the rules of Wario's Woods, the green bomb should clear the row of green things. But, when you start the lesson, the bomb doesn't explode! When you press X to start the chain reaction, the green bomb Toad was holding drops, and the row of green stuff is finally cleared.''
At the beginning, the RNG behaves in a straight-forward way where it increments by 1 every (non-lag) frame and loops from 256 (FF) back to 0, and It looks like TAS files don't desynchronize if one adds any multiple of 256 blank frames at the beginning (so that the RNG loops around more times).
For any opponent, it seems to hold that from the screen where they talk to Toad up to the end of the last round against them, the patterns on both sides for all (3) rounds cannot be influenced anymore (including the behavior of the opponent (for a given fixed Toad behavior) and its fairy with positions and bomb colours staying the same as long as one doesn't influence the opponent's playing field e.g. by lowering their ceiling, including where on Toad's side an opponent spawns piles of monsters from chain explosions staying the same while the pile's colour depends on time), so that RNG manipulation seems to only be applicable (by waiting) before the 1st opponent or during Toad-victory screens over a current opponent (each time for the next 3-round-patterns determining RNG). However, the opponents' behavior would still depend on how Toad influences their playing field.
Between any 2 opponent matches, on the Toad-victory screen, it seems to not matter for the first few (around as long as the opponent holds down to make bombs fall faster) fairy positions (which possibly are a fixed remnant from the last round against the previous opponent) on Toad's and the next opponent's side for the 1st round how long one waits for changing the RNG. Other than this, it seems that the behavior of Toad's fairy (and probably crow) is only influenced by occupying spawn slots at the ceiling with Toad and/or monsters/bombs to make the fairy appear elsewhere; but holding down doesn't seem to change the fairy's bomb colours nor positioning sequence and just speeds it up.
If the number of frames (outside of lag frames, possibly) that have passed (compared to some initial reference frame) already determine the pattern that one gets for the 3 rounds against any opponent, so that it doesn't matter if one finishes some quick 3-round patterns and then waits up to some frame until one chooses the RNG that determines the next 3 rounds, or if one instead finishes some 3-round patterns slower and has to wait less to get to the same RNG value that provides the same 3-round patterns for the next opponent, then this means that some 3-round patterns may not have to be optimized fully for a TAS, provided that the fastest possible TAS has to wait some frames between the matches against the opponents (so that a small variety of other slower 3-round patterns could still make it in time and just wait a little less due to having less of a buffer time).
After every fairy-raven cycle, the fall speed increases by 1(?)
The own rock can be pushed up either with 4 objects destroyed in a row or with 3 if they are placed diagonally(?)
A chain where initially 5 monsters are destroyed in 1 explosion, and 5 new monsters exploding as consequence of that later generates only 1 gem(?)
The general structure of Toad- and opponent-patterns can be characterized and checked for properties they might have that could be useful to know about (like e.g. symmetry, cyclic arrangement, 2x2 block structure, shifts of monsters row- or coloumn-wise,...).
Correlations between patterns: Are there different Toad- or opponent-patterns that are (partially or completely) the same (for different opponents) or isomorphic (i.e. the same except of a colour permutation), or similar to or constructed from another pattern in some way?
What are the numbers of monsters and different colours (and monsters per colour) per pattern?
What is the fall speeds of dropped objects on Toad's or an opponent's side, for all opponents.
Does the opponent's RNG and movement/behavior depend on Toad's side in case one doesn't directly influence the opponent's side?
Which different 3-round pattern sequences exist generally?
- - - - -
I went through VS COM Expert mode runs from the speedrun leaderboard for Warios Woods and wrote down the patterns (with same number referencing as above) that occured on both sides of the screen for the individual videos and individual opponents in an attempt to make out patterns:
Mssr Boo:
(1,2)>...
(13,15)>...
(13,15)>(4,14)>(6,6)
(15,3)>(7,8)>(6,7)
(7,8)>(2,7)>(8,15)
(6,3)>(1,8)>(14,7)
(16,12)>(4,13)>(6,3)
''(15,3)>(7,8)>(6,7) & (7,8)>(2,7)>(8,15)'' shows that it is not just 1 pattern-sequence that the RNG just runs through for both sides at the same time, since (6,7) or (2,7) could follow after the same pattern (7,8).
---
Aqualea:
(2,4)>(8,3)>(3,7)
(14,1)>(12,5)>(6,2)
(3,7)>(1,6)>(14,1)
(5,4)>(14,3)>(12,7)
(4,7)>(1,8)>(3,6)
---
Razor:
(11,4)>(16,14)>(4,6)
(3,8)>(1,7)>(14,14)
(13,13)>(7,12)>(2,15)
(6,2)>(14,12)>(12,13)
(7,14)>(2,6)>(3,2)
---
Tad Rock:
(15,15)>(13,11)>(16,10)[>(4,1)]
(10,7)>(15,15)>(5,11)
(14,12)>(12,13)>(1,3)
(5,11)>(13,10)>(5,1)
(6,2)>(10,1)>(15,10)
---
Thak:
(7,2)>(2,12)>(8,15)
(16,10)>(4,3)>(1,8)
(7,2)>(2,12)>(8,15)
(11,11)>(9,10)>(7,1)
(6,6)>(7,2)>(2,12)
---
Lizardon:
(2,4)>(8,3)>(11,8)[>(9,7)]
(16,7)>(4,15)>(1,11)
(2,4)>(8,3)>(3,8)
(6,16)>(6,15)>(16,11)
(10,16)>(15,15)>(13,11)
''(6,16)>(6,15)>(16,11)'' shows that the same Toad-pattern can occur at least twice (but maybe even 3 times) in a row (in this case pattern 6 twice in a row), which may be important to know for TASing the VS COM Expert mode, if some Toad-pattern is just generally more favourable compared to others (among a given set of at most 15 alternatives). Additionally, it seems odd that (4,15), (6,15), and (15,15) as 2nd rounds all use pattern 15 on Lizardon's side (given that above are just some more or less random 5 samples and that one would expect any of the 16 patterns to be possible if they are somewhat uniformly distributed), aswell as that (1,11), (16,11), and (13,11) as their afterwards following 3rd rounds all have pattern 11. (For the Sarissa cases beneath, something similar can be observed.)
---
Sarissa:
(9,13)>(5,12)>(14,15)
(13,8)>(16,7)>(4,14)
(7,11)>(2,7)>(8,14)
(8,12)>(11,13)>(9,3)
(4,5)>(6,9)>(14,4)
---
Mangylox:
(16,10)>(4,1)>(6,5)
(9,16)>(11,4)>(16,14)
(6,2)>(10,1)>(15,10)
(1,3)>(3,8)>(10,7)
(13,13)>(7,12)>(2,15)
---
Dedar:
(4,6)>(11,2)>(9,13)
(14,6)>(7,2)>(2,13)
(10,10)>(15,3)>(5,8)
(7,1)>(2,5)>(3,9)
(16,10)>(4,6)>(11,2)
''(4,6)>(11,2)>(9,13)'' & ''(16,10)>(4,6)>(11,2)'' shows the sequence (4,6)>(11,2) appearing twice among 5 samples, which I'd find unlikely, so this might be an indicator that there actually wouldn't be that many ways in which new patterns can follow other patterns.
---
Carlton:
(14,14)>(12,6)>(5,2)
(16,10)>(4,1)>(6,5)[>[7,9)]
(5,2)>(13,13)>(7,12)
(3,10)>(10,7)>(15,3)
(3,8)>(10,7)>(15,15)[>(5,11)]
And above we have 2 different patterns leading into the same with (3,10)>(10,7) & (3,8)>(10,7).
---
Harry H:
(12,5)[>(6,9)>(10,14)>(15,7)>(5,3)]
(2,12)>(8,15)>(11,11)
(4,12)>(6,9)>(14,4)
(15,3)>(5,8)>(13,7)
(8,15)>(3,11)>(1,10)
---
Wario:
(14,12)>(12,13)>(1,3)
(11,4)>(16,14)>(4,6)
(8,11)>(9,16)>(11,4)
(6,8)>(16,7)>(4,15)
(11,4)>(16,14)>(4,6)