California Games is a sport game for the Sega Master System. There are a total of 5 sport events: Half Pipe, Foot Bag, Surfing, Skating, BMX and Flying Disk.

Game objectives

  • Emulator used: BizHawk 2.5.2
  • Do all the events as fast as possible (“Complete in all events”)
  • Beat the high score for each event

Comments

For each event, the player has 3 tries, except for Surfing (5 tries) and Foot Bag (time limit). The goal here for each event is to get the minimum high score (if possible) and fail the other tries quickly.
High Scores:
  • Half Pipe: score > 10000
  • Foot Bag: score > 35000
  • Surfing: score > 5.5
  • Skating: score > 1010
  • BMX: score > 15000
  • Flying Disk: score > 777
Before the beginning of the first event, the player has to enter a name and choose a team, it doesn’t have any impact on the game except for 3 specifics name listed here: https://gamefaqs.gamespot.com/sms/588043-california-games/cheats Just for fun, I choose “TASBOT” as a name and “Santa Cruz” for the team, so it will be displayed as “TASBOT SAN” at the top of the screen at each event.
Links:

Stage by stage comments

Half Pipe

Going up and down across the half pipe, the goal is to do skateboard tricks with the right timing: hand plant, turns and aerial turns. The Skateboarder speed increases by pressing down while the skater is going down and pressing up while the skater is going up.
Addr Name Details
0x0078 Speed max at 180
0x0076 X position between 22 and 234
0x0075 Y position from -3 (252) to 169 (flat bottom)
The highest aerial turn gives 999 points (max), it’s only possible after reaching the highest speed (180). Despite the big number of points, it’s also not super fast: min 140 frames between two big aerial turns. The hand plant gives max 700 points but it has the great advantage to increase the skateboard speed faster and there are 96 frames between 2 hand plants.
Fastest would be only hand plants, but with 700 points per trick, 15 hand plants are needed to reach 10 000+ points, overall it’s not faster. The strategy here is to do 5 hand plants to reach the max speed (180), then alternate between hand plants and big aerial turns to get the 999 while keeping a good speed. For the last trick, a smaller aerial turn will save some frames and reach a score just above 10 000.
After that, we just need to fail the 2 other tries quickly by doing a too long right turn as soon as possible, holding down while going down will save some frame

Foot Bag

This event is about doing stunts with a bag (or a ball). There are 11 stunts in total, plus extra points for hitting the seagull and extra points for catching the ball after throwing it out of the screen. At the end, there are bonus points for the number of stunts, for instance 4 stunts will give 10 000 bonus points and 11 stunts (all) will give 66 000 bonus points.
This is the only event with a game over only after the time is up… which is boring for a speedrun. That’s where it’s fun to see all the possible stunts without letting the ball touch the ground.
Looks like there is some sort of RNG for the travel distance of the ball. When kicking the ball from one side, it goes up to the other side. the distance of where the ball will land would be different depending on the previous event (half pipe) and the inputs will be desynchronized.

Surfing

With 5 tries, surfing is about getting points by 3 types of tricks: turns, jumps and stays in the tube. Additional points will be given for staying on wave long, in order to get the maximum point, the surfer has to stay until the time is up. The player can only control going up (pressing left) or going down (pressing right)
This is the only event where the score is only shown at the end of the event. I was able to figure out the point system and display the final score in real time with a LUA script.
The following table describes how the final score is calculated from the different tricks. Each trick has a point counter that will be converted to a score format: “[0-9].[0, 2, 4, 6, 8]”, for instance “2.4” or “5.8”
Name Addr Count inc Point calculation
Jump 0x00A3 every landing jump and depending on the angle (+2, +3, …) count/10
Tube0x00A5every 128 frames while in the tube IF count < 3 THEN count*0.6 ELSE 1.6 + (count-3) * 0.2
Turn0x00A6every 8 frames while turning IF count < 160 THEN floor(count/32)*0.4 ELSE 1.8 + (floor(count/32)-5)*0.2)
Stay 0x00A2 every 201 frames [4-7] → 0.1 ; [8-11] → 0.3 ; [12-15] → 0.6 ; [16-19] → 0.7 ; [20-21] → 1.0
At the end of the event, if the score decimal is odd, an extra 0.1 will be added to the final score. In order to get a score of 5.6 fast, we need 22 jumps points (2.4) + 4 tube points (1.8) + 96 turn points (1.2) + 4 stay points (0.1) = 5.5 (+0.1) = 5.6
Addr Name Detail
0x0063 State 8 states (see table below)
0x006D Angle 16 angles: from 0 (horizontal right) to 8 (horizontal left) counter clockwise
0x0070 Speed starts at 128, min 64, max 192 (2 bytes fixed point)
0X006B Y position inside wave from 50 to 174
Surfer State:
0 paddling
1 take off
2 in wave
3 leaving bottom
4 jumping
5 hit by waves
6 bad jump landing
7 out of screen
Starting by getting the tube points is best because the surfer has small enough speed to stay in the tube long enough. A full loop will put the surfer very quick inside the tube and doing some quick up and down help to control the speed to stay in the tube long enough and get all the turns points.
About the speed, looking at 0x070 as an unsigned 2 byte value, it increases by 1 every frame on a horizontal angle, -12 when going up and +4 when going down. Depending on the angles when going up or down, we can have control of the speed.
For the jumps, doing small angles jumps is the fastest (angle 1 & 15), it’s faster as the speed is smaller.

Skating

Skating is about reaching the finish line while avoiding all the different obstacles (trashes, sand, cracks, ...). By rapidly pressing up and down, the skater will gain more speed, she can also spin if the player presses left and jumps with the button 2. You get points for every obstacle passed (10, 20 or 30 points), jumping over will give 2x the points and a jump spin will give 4x the points.
Addr Name Detail
0x006A Speed Start at 512, max = 952 (2 byte unsigned)
0X0090 Y position in track between 136 and 184
0X1F00 Collision flag 1 when hit obstacle
Doing 5 frames up and 5 frames down (or other way around) is faster. After each jump, the speed decreases, the up and down inputs can be started 2 frames before landing. The strategy here is to do a spin jump for all obstacles and make sure to have enough up & down between jumps to keep enough speed. Only one obstacle doesn’t have a jump because the next obstacle is too close, it’s not worst to slow down. After reaching 1010, we just need to fall and get 20 points at the same time.
The only RNG in this event is the ball bouncing around the track. This ball luck can be changed by pressing the button 1 (or 2) one frame later on the event intro screen.

BMX

Similar to skating: BMX is about reaching the end line while avoiding obstacles (tree trunk, barrel, rock). There are different size of bumps along the track for the biker to do different jumps & tricks. The points would depend on how big is the jump or how long the key is hold for the tricks:
Trick Min points Max points
Wheeling (holding + left) 100 200
Regular jump 200 400
Table top (jump + up) 500 1000
360 turn (jump + down) 1000 2000
Back flip (jump + left) 1500 3000
Front flip (jump + right) 3000 6000
The biggest trick, the front flip, can only be done when the bump is big, so the right key can be held long enough to get the 6000 points. There are 2 big bumps pretty early at the beginning of the event where the front flip is possible, before those 2 bumps we just need to get 3100 points.
At the starting line, it’s possible to jump at the top of the ramp, we can then do a 360 turn to get 2000 points. When jumping on a flat surface, we have enough time for a small table top, 2 of them give 1000 points. For the 100 points remaining, we can do a wheeling right after landing the first front flip by holding the left key for 5 frames.
After the 2nd front flip, we can do a back flip (or front) on a flat surface to get an instant game over (crash on the head).

Flying disk

The last event and also the most difficult one is about throwing a disk and then catching it. One part is to choose the speed & angle of the disk, the other part is to control a catcher by running left or right and diving if necessary. Once passing the difficulty of figuring out how to throw the disk, it’s a different story to catch the disk! Depending on which direction the catcher runs or dives, the disk has to be at the right height of the catch’s hand.
Addr Name Values
0x0078 Disk Y Position initial position at 139
0x0079 Disk Speed from 160 to 960 (2 bytes)
0x007B Disk move up time count increase every 2 frames, from 110 to 271, when reach 256, set angle flag to 0
0x007C Disk angle flag 255 go up & 0 go down
0X006E Catcher X position initial position at 1824 (2 bytes)
0X006A Catcher state 0 = stop; 1 = run; 2 = dive; 5 = catch
The Highest possible score is 490 in one try, which means minimum 2 tries are required to reach a score above 777. For this event we want the disk and the catcher to meet as early as possible, when the disk flies right and the catcher runs left.
When the catcher is running left, her speed is 3 px/frame and while diving (state = 2) her speed is 4 px/frame. For the disk, we need the fastest speed (960) with the lowest angle possible. If the disk move up time count (let’s simply call it angle) is above 218, the disk cannot be catched. I’ve tried 3 different speed while getting the lowest angle possible:
Speed Angle Frame #
928 197 0
960 (bigger) 197 +9
880 (smaller) 200 (smaller) +3
For the 3rd try, we can just throw the disk on the ground by pressing Left then right as fast as possible.

High Score Bonus

After beating an event’s highscore, the player has the chance to get an bonus after obtaining 3 identical cards:
  • 3 x Foot Bag Cards = Faster hackey-sack reflexes, ball and time go slower
  • 3 x Surfer Cards = New surfboard, faster speed
  • 3 x BMX Cards = New Bike, jump higher
None of those bonuses make the run faster so we need to lose the bonus game as fast as possible.

arkiandruski: Judging..
arkiandruski: Replacing the file with one that removes 57 frames of input at the end.
arkiandruski: The judges have had a discussion and we decided as laid out in Samsara's post that we don't want to accept a run that fails every event as fast as possible, and high scores are the next objective goal above that, so this run is acceptable as a fastest completion. With that in mind, I am accepting this run to Vault.
EZGames69: Processing
feos: Removing the branch, because this has been agreed to be the standard goal of this game. It's a situation when the any% flag and blank label both fit.
feos: Set rerecord count to a more accurate estimate provided by the author.