Preliminary Information

  • Emulator used: BizHawk v2.10 (Core: Nymashock)
  • BIOS: ps-30a.bin
    • sha1:0555C6FAE8906F3F09BAF5988F00E55F88E9F30B
  • ROM: Putter Golf (USA).cue
    • sha1:D7589DEA

Game Objectives

  • Aims for best possible score
  • Secondary goal: fastest completion

Introduction

I never thought I'd be TASing PSX games, but the start of the first TAS Jam had me interested, and this one turned out to be at least somewhat interesting so there's that. Putter Golf is the American release of Simple 1500 Series Vol. 69: The Putter Golf. The game has two courses: normal and trick. This movie opts to complete the normal course with the minimum amount of strokes in as little time as possible. The branch is labeled as "minimum strokes" rather than simply fastest completion, as my testing proves that it is faster on some holes to land in the water in order to avoid the ball slowly coming to a stop, which allows us to reset faster for the next stroke. As such, I will also be making a fastest completion movie. I plan to eventually tackle the trick course as well.

Things To Consider

This section will detail certain points of consideration when trying to optimize each level. It is worth noting that while the game runs at ~60 FPS, while we are playing the course it only functions at ~30 FPS, ignoring input and presumably running calculations every other frame. Therefore, when I refer to how the game updates in one frame in the following documentation, it can be interpreted as two frames at ~60 FPS.

Aiming Shots

The shot angle is stored as 2 bytes at address: 0x0C6CBE. We will analyze this address as hexadecimal for ease of explanation. For example, the angle could have a value of 0x0048. We can, however, ignore the leftmost digit, as it will only increment when we have turned the character a full 360 degrees, which will result in repeating angles. I will simply refer to the value by the remaining three digits to avoid confusion. Since there are three meaningful digits with 16 possible values each, 16x16x16=4096 which is where we get our 4096 possible angles. However, they are never all accessible on any given stroke, due to how the angle adjustment works. Let me explain:
When we press the D-pad left or right for one frame to adjust the aim, the game adds or subtracts 0x4 from the current angle, which is the finest angle adjustment possible. This means that a quarter of all possible angles are cut out of contention for every stroke, leaving only 1024 remaining. However, there is a small trick we can do to "unlock" another quarter of the angles on certain strokes.
The game has a mechanic where if you press the circle button, it will find the angle that points closest to the hole and snap to it. We can use this to our advantage to shift the rotational cycle. For example, we may be on a cycle where the rightmost digit loops through 0,4,8,C, but when we press circle, it adjusts the angle to 0x052. This will put us on a cycle that loops through 2,6,A,E. However, this only works on opening shots, as follow-up shots already start with the aim pointed at the hole, while the opening shot's angle is hard-coded. With this trick, we can expand our possible angles on certain opening shots to 2048, though on some holes, snapping the angle will still result in the same cycle.

Optimizing Aim Time

Since simply holding down the D-pad buttons to adjust the aim is very slow, there are a few things we can do to minimize time spent aiming.
The first strategy is to use the circle button to snap to the hole. This only helps in certain scenarios where the angle will pass by the hole while aiming or when the target angle is closer to the hole than the starting point, and of course if you needed an angle from the initial cycle this won't help.
The second strategy is to start with coarse adjustment, then fine tune. The game allows us to hold down R1 while aiming to adjust the angle quicker. This results in the game adjusting the angle by 0x10 every frame, rather than 0x4, which is four times faster. Then, once we are close to the desired angle, we can perform fine adjustments to the angle by letting go of R1.

Power Level

Each stroke consists of two X button presses, one to initiate the stroke, and one to determine the power. There are 64 possible power levels for each stroke, ranging from 0x4 to 0x100. On every frame following the initial button press, the power level increments by 0x4 until it reaches 0x100 and then decrements back down to 0 in the same manner. Not much to talk about here.

Optimizing Stroke Time

...ayo
This section is kind of irrelevant I just wanted to put that heading. I will say that it is always fastest to just switch to the orange putter on every shot, even if you're shooting less than the 15 yd mark. It doesn't even take any time to switch cause you can do it while you're aiming. Though I guess using the blue putter would technically give you 32 more power levels that the orange one doesn't have but why would you be hitting soft enough for that to matter anyway? More power = faster ball. Also triangle button to switch putters for anyone who doesn't have the brains to figure that one out.
So that's all good and well. You may be thinking, "Gee fella8, you're starting to get a little rude, but no matter. It's probably just because you're writing this at 3am. But anyways I was just gonna say that with so many possibilities for how to strike the ball, it must be trivial to find one that puts the ball in the hole, righ-" WRONG
Introducing:

Nondeterminism

Otherwise known as RNG.
Hmm yes indubitably. My findings suggest that there is an RNG running every frame that will affect the physics of the ball immediately after it is struck hmm yes. I seriously have no idea what the purpose of this is other than to piss me off.
Basically, from what I can tell, there is an RNG that calculates a new number every frame that will alter some aspect of the ball's movement when a stroke is performed. What this means is that you could have a shot that puts the ball in the hole perfectly, but if you delay it by one measly frame, the ball could end up somewhere completely different, even though the power and angle are the same. My guess is that the game uses the RNG to calculate the ball's initial speed, however I haven't yet found the speed address in RAM, so it's hard to say. I should probably get on that.
This mechanic causes some headache when improvements are found early in the run, as it's basically guaranteed not to sync on the next hole or any recurring holes. Luckily it's a short run. I will admit that it led me to finding big improvements after my draft TAS solely based on randomness, since I improved hole 3 and had to redo all the following holes.
The RNG is semi-helpful for finding shots that put the ball in the hole. Sometimes it seems like there is no combination of power and angle that will work, so you can delay the shot more and more until you find an RNG value that does work. I'm guessing this is why the RNG exists—to exponentially increase the number of possible outcomes—though I fail to see why they couldn't have just used the extra digit and given us more choices of angle, but don't mind me I'm just salty.
Even if you do find a delay that works, it is worth trying even longer delays, as sometimes this will result in the ball dropping into the hole faster (we try to avoid having the ball bounce around a lot).

Level-by-Level Comments

  • Menuing
    • The course start is delayed by 1 frame to select the robot player, because I felt it was fitting for the TAS. All the players have equivalent stats, however. I also delayed 2 additional frames for better RNG on the first hole.
  • Hole 1
    • Due to the 3 frame delay from menuing, the ball drops into the hole faster.
  • Hole 2
    • We go through the rough so that the ball comes to a stop sooner, saving a significant amount of time.
  • Hole 3
    • We land in the bunker for the same reason as hole 2, but try to make sure the ball lands close enough to the edge and the fence to set us up for the next shot.
  • Hole 4
    • N/A
  • Hole 5
    • N/A
  • Hole 6
    • Delay the shot 11 times, which seems like a lot but it's the fastest one I could find.
  • Hole 7
    • Go through the out of bounds to slow down the ball again.
  • Hole 8
    • I was surprised by how high I was able to get the power level and still keep the ball from bouncing away from the hole.
  • Hole 9
    • N/A

RAM Values

These are the memory values I was able to find. The first three define the ball's position in space. Before anyone says anything about how I ordered them, it's the same order they are in RAM so hush.
AddressSizeNoteDescription
0x0F48662 bytesX-PosLateral Position
0x0F486A2 bytesY-PosHeight
0x0F486E2 bytesZ-PosLateral Position
0x0C6D7C2 bytesClubWhich club is selected
0x0C6CBE2 bytesAngleSee above
0x0C6CC42 bytesPowerSee above

Improvements

Although I believe I did a good job optimizing the movie for a first ever submission, (it's nearly 30 seconds faster than the only other TAS I could find), there are surely some improvements to be made. I did my own manual "brute forcing" by hand, but the next step is to run a brute forcing script on the game. Otherwise, I made all the improvements I am aware of.

Lee Carvallo: Ball is in... judging lot.
Darkman425: Branch updated to "Normal course, maximum score" to match how other golf score TASes are labelled.
The analysis on how shot aiming works is pretty helpful and the luck management seems well done. Nice work!
Accepting to Standard.

despoa: Processing...
Darkman425: Setting the submission to Delayed as the author has found and is working on potential improvements.
Darkman425: Input file replaced with a 288 frame improvement by the author, and setting this back to accepted.

despoa: Processing...


TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 16263
Location: 127.0.0.1
Editor, Experienced player (535)
Joined: 11/8/2010
Posts: 4087
I also think the robot is fitting for a TAS. Nice little golf game, and good to see more Simple games.
Spikestuff
They/Them
Editor, Expert player (2938)
Joined: 10/12/2011
Posts: 6538
Location: The land down under.
I guess my only question is there is a slight difference between this and the original release. Did you happen to validate if the original release to see if it can give any sort of advantage over this one (even if it has the slightest of RNG)?
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
fella8
He/Him
Player (124)
Joined: 7/24/2021
Posts: 11
Location: Indiana
Hmm good question. I didn’t bother checking since I just picked the one I can read lol. That’s something I can look into soon though. Thanks for the input!
fella8
He/Him
Player (124)
Joined: 7/24/2021
Posts: 11
Location: Indiana
Okay so, I just checked and the Japanese release loads into the title screen around 200 frames faster. Naturally this causes desyncs due to RNG, but it seems the RNG functions the same way. Is this enough to warrant submitting a whole new movie using that version instead?
Spikestuff
They/Them
Editor, Expert player (2938)
Joined: 10/12/2011
Posts: 6538
Location: The land down under.
Well you wouldn't have to submit a new movie, you can use the userfiles and linking it back here. But it's all up to you if it warrants it, and if it improves it in any way.
WebNations/Sabih wrote:
+fsvgm777 never censoring anything.
Disables Comments and Ratings for the YouTube account. Something better for yourself and also others.
fella8
He/Him
Player (124)
Joined: 7/24/2021
Posts: 11
Location: Indiana
Well, right. I more so was just asking if it’s generally preferred to use a game version with a shorter intro to cut time. But I guess it mostly just depends on the actual gameplay.
Editor, Experienced player (535)
Joined: 11/8/2010
Posts: 4087
Right, the rules say non-gameplay time (e.g. title screen) is not considered, so just the golfing matters here. As you said, the RNG seed has changed in that version, but you've already done a nontrivial amount of RNG manipulation, and a judge would recognize that. Like Spikestuff said, you're not obligated to redo it on Japanese, only if you want to.
fella8
He/Him
Player (124)
Joined: 7/24/2021
Posts: 11
Location: Indiana
Okay, that’s what I thought. I probably will keep working on the other categories then and leave the Japan version till when I figure out brute forcing lol. Thanks!
Post subject: Movie published
TASVideoAgent
They/Them
Moderator
Joined: 8/3/2004
Posts: 16263
Location: 127.0.0.1
This movie has been published. The posts before this message apply to the submission, and posts after this message apply to the published movie. ---- [6588] PSX Putter Golf "Normal course, maximum score" by fella8 in 03:28.85

1749921484