Game objectives
- Emulator used: Bizhawk 2.11.1
- Get the max score for each sport events (regardless the order)
- Manipulate RNG to reach max score
- Skip high score bonus game to avoid boring time
Final Scores
The game doesn’t provide a final score, so I’m calculating by adding up all the scores from each event.
Final Score = 392611
| Event | Score | Summary |
| Half Pipe | 32383 | get the max speed and do max points per cycle |
| Flying Disk | 1530 | Overhead catch with no running |
| BMX | 202550 | do as much jump + trick as possible, especially front flip |
| Skating | 5280 | jump spin every obstacle |
| Surfing | 9.0 | do all the tricks and stay on the wave until the end |
| Foot Bag | 150860 | do all the tricks, grind the biggest point and hit seagull |
Comments
- Used knowledge from California Games All Events TAS, for logic and ram addresses.
- Do “Compete In One Event” to go faster between events, I can do a soft reset to skip the high score bonus game (which is slow and boring). Also allow me to do the events in any order, especially keeping the RNG manip at the end
- use SMSHawk instead of Genplus-gx because the reset input is a proper soft reset (see discord thread)
- only use the bonus for BMX for high jump, other bonus either make things more boring (Foot Bag) or complicated to get max score (Surf)
- Got all the voice audio in the event intro screen, because it’s fun!
- Alternate between button 1 and button 2 when menuing to the next event, it’s faster.
Event by event comments
Half Pipe
- The max 999 points can be reached only after getting enough speed, so I do the hand plant trick until I get this speed.
- Alternating between air turn and hand plant gives the most point in a go and return, the hand plant makes the return faster.
Flying Disk
- The less you run, the more you get points with the disk distance (as the manual says). Funny enough you get the max points per throw (160) by not moving at all.
- Overhead catch gives de most point (350), it’s great for not moving and get all the most points from the disk
- We can also get the max points with max speed and max angle, the distance to run is short enough so we still get 160
- Left diving also gives 350 points but it involves running which is not good for the disk distance points.
- Get the new bike bonus and reset immediately after the flag is set to quickly move to the next event (BMX)
BMX
- There is a time bonus, we get more points if we finish earlier, but we must stop at the end line. So we must pedal as much as possible between jumps
- We want to jump as much as possible and prioritize the following tricks: front flip (6000), back flip (3000), 360 (2000) tabletop (1000).
- Sometimes we skip a jump so we got enough time to a front flip, it would happen if 2 bumps are close to each other.
- Put some wheely in between jumps if cannot jump as soon as possible, it gives between 100 and 200 points
- Break at the last moment to get highest time bonus by holding left and smashing button 1
Skating
- goal is to spin jump every obstacle, so we get 4x points
- obstacles has different points value: 10, 20 or 30
- no need to jump over, simply jump on the same vertical line, 2 obstacles can be jumped at once
- falling on an obstacle or the side of the road brings you back exactly where you fell, so it won’t allow us to redo an obstacle again
- Need to go slower for some obstacles so I can make sure I jump over them properly, especially when they are very close to each others
Surfing
- The manual clarifies about the maximum score of 9: Jumps 2.5 points, Number of turns 2.5 points, Tubes 2.5 points, Time on the Surfboard: 1.0 points & Stay until the end: 0.5.
- Looking at the assembly code I was able to figure how the requirements for max score (see Other Comments section)
- Doing up and down constantly, the game requires this all the time
- The most difficult part is staying in the tube, not sure if anyone can do it casually
- I would have showed case the different animals when we fail (seagull, dolphin, shark) but failing once doesn’t give you the max score
Foot Bag
- Keeping the most RNG event for the event, so I don’t need to resync the other events
- I’m manipulating the RNG to get as many seagull as possible, they give 1000 when hit.
- This is a count base RNG, only soft reset can manipulate it, this is why I got a bit of waiting time
- I start the event much later so I get the first seagull right when the timer starts
- need to do all the stun to get the bonus point of 66k, then I grind doda and reverse doda to get the biggest points (5000)
- Do the jester trick at the last moment because the ball goes too far off to chain other tricks
Other Comments
potential improvements
I'm very confident I got the very max score for skating and surfing, other events might have some slight improvements by doing deeper research, especially if we look at the code itself.
- go faster on BMX to get a better time bonus, maybe there is a better strategy to consider when bumps are close to each other
- Better RNG manipulation for Foot bag to get more seagulls, also I’m wondering if there is a way to get a doda trick faster or if there is a better way to get more points faster.
- For flying disk, if there is a way to trick the game so we can run without without getting a penalty, then we can get more disk distance points.
- There might be a way to do surfing with the new surf board bonus, you cannot stay in the tube long but might be possible by doing full circle. I would be difficult but fun.
Flying Disk
| Address | Notes |
| 0x0079 | disk speed from 160 to 960 (2 bytes) |
| 0x007C | disk direction: 255 go up & 0 go down |
| 0x007B | disk angle increase every 2 frames, from 110 to 271, when reach 256, set angle flag to 0 |
| 0x006E | Catcher X position, used to find the min position to run to |
BMX
| Address | Notes |
| 0x0060 | flag for new bike bonus, used to reset as early as possible and skip the rest of bonus stage |
| 0x0072 | BMX y, used to find the highest jump |
| 0x0066 | BMX speed from 0 to 3, used to time the big jump |
| 0x007A | state, used to start pedaling as soon as possible when it goes from 1 to 0 |
Surfing
I spent some time figuring out how the score works because this is the only event when the score is shown at the very end. To ma
For the score, jumps, turns and stay are calculated using a points table.
| Trick | Address | Points Table | Notes |
| Stay | 0x00A2 | $7003 | increase every 201 frames, from $0 to $15. Index calculated by doing a bit rotation to the right (rra) and mask with $0E (and $0E) |
| Jumps | 0x00A3 | / | from $0 to $19 (2.5 points), points is simply decimal value divide by 10 |
| Turns | 0x00A6 | 0x6DD9 | increase every 8 frames while turning. Index calculated by multiplying by 8 then divide by 255 ($ff), need 640 ($280) to get 2.5 points ($19) |
| Tube | 0x00A5 | 0x6DF1 | increase every 128 frames while in the tube. Index is the value, the max can be reached with $14 (20) |
Turn Points Table
| 0x00A6 value | $20 | $40 | $60 | $80 | $A0 | $C0 | $E0 | $100 | $120 | $140 | $160 | $180 | $1A0 | $1C0 | $1E0 | $200 | $220 | $240 | $260 | $280 | $2A0 | $2C0 | $2E0 |
| points | 0.4 | 0.8 | 1.2 | 1.6 | 1.8 | 2 | 2.2 | 2.2 | 2.2 | 2.2 | 2.2 | 2.3 | 2.3 | 2.3 | 2.3 | 2.4 | 2.4 | 2.4 | 2.4 | 2.5 | 2.5 | 2.5 | 2.5 |
Tube Points Table
| 0x00A5 value | $1 | $2 | $3 | $4 | $5 | $6 | $7 | $8 | $9 | $A | $B | $C | $D | $E | $F | $10 | $11 | $12 | $13 | $14 | $15 | $16 | $17 |
| points | 0.6 | 1.2 | 1.6 | 1.8 | 2.0 | 2.1 | 2.2 | 2.2 | 2.2 | 2.2 | 2.2 | 2.3 | 2.3 | 2.3 | 2.3 | 2.4 | 2.4 | 2.4 | 2.4 | 2.5 | 2.5 | 2.5 | 2.5 |
Stay Points Table
| 0x00A2 value | $1 | $2 | $3 | $4 | $5 | $6 | $7 | $8 | $9 | $A | $B | $C | $D | $E | $F | $10 | $11 | $12 | $13 | $14 | $15 |
| points | 0.0 | 0.0 | 0.0 | 0.1 | 0.1 | 0.1 | 0.1 | 0.2 | 0.2 | 0.2 | 0.2 | 0.4 | 0.4 | 0.4 | 0.4 | 0.7 | 0.7 | 0.7 | 0.7 | 1.0 | 1.0 |
The final score is in 0x1CA0 and 0x1CA1, and gets a bonus 0.5 points at the very end when leaving the wave because it closes completely.
Foot Bag
This is the only event with RNG: 1 for the ball and 1 for the seagulls passing by (george). This RNG is a count type of RNG where the game constantly increases a counter and read/write in some specific places in RAM. It’s basically a seed RNG which is set when doing a soft reset. Player inputs doesn’t impact the values, however it seems that the event announcing voice impacts this RNG, probably doing some updates on those specific RAM addresses.
| Address | Notes |
| 0x0081 to 0x0084 | ball kick logs/history, used by the game to figure tricks depending what the player did |
| 0x0085 to 0x008F | Count for each tricks, we need at least 1 for all of them to get bonus points |
| 0x0079 | Ball X velocity (signed), value is slightly random and can be manipulated by kicking the ball earlier or later. Velocity is negative when kicking for right side and positive when kicking from left |
| 0x0056 | Seagull spawn timer, increase every frames and check for RNG (0x005F) when it’s $00 |
| 0x005F | Seagull RNG value, only spawn a seagull when the value is a multiple of 8 (and $07) |