Update 0.65 is out!

Update 0.65 is out!

Hello folks!

Took some time, but it is here, the update 0.65 for Boss Golf closed alpha!

newholetester.png

Changelist for this version includes:

  • Fixed issue where golfers couldn’t acquire an open hole if the number of open holes was less than the number of available holes.
  • Added a radar display for overview of the golfer abilities.
  • Separated golfers into rankings: Casual, Recreational, Serious, Competitive, Professional, and Legend. Rankings determine the starting ability of the golfers. After a lot of play, once their attributes increase, they may achieve a higher rank. This system will tie in with the “perks” system that I described some time ago.
  • Added proper calculations for draw, fade, hook, push, pull, and pure. Now when golfers hit the ball, based on their attributes, there’s a chance for either of these forces to be added to the golfer. Includes your own golfer! (Right now no way to increase it, so bear with it)
  • Added golfer dominant hand, now you’ll see golfers taking a stance according to their main hand.
  • Increased variety of golfer thoughts and improved the display of the thoughts in the character panel. Added more thoughts for analyzing the results of a hole playthrough.
  • Improved calculations for stroke generation to give golfers better/more realistic options. There’s still some issues with some edge cases, since we can’t set OB areas yet. Once that’s in, it should be more accurate.
  • Added a display for the state of the hole (open or closed).
  • Added a panel showcasing the statistics of the hole (average score, number of plays etc).
  • Added a panel showing a history of plays on that hole with the ability to see the shots. Simply click the play you’d like to see, and it will be shown. Golfers also keep a memory of their playthrough at any given hole.
  • Added shot evaluation buttons based on golfer ranking. In the Edit panel of the Hole panel, you can click on the button for each golfer ranking, and see more or less the average path they will take. Works with multiple tees as well.
  • Closing a hole will now make the AI abandon the current hole, if they are queuing for it or playing it. May lead to bad thoughts 😉 (The player will never be booted)
  • Fixed issue with golfers roaming outside the resort grounds.
  • Tweaked the graphics of the terrain by adding some better boundary effects. Still heavily work in progress.
  • Increased the size of the character collider to make it easier to click them.
  • Added snapping option for decorations. On the decoration selection, you’ll see a little magnet button that you can toggle to snap the decoration. It’ll snap on a 1 meter grid.
  • Tweaked speeds for detecting when the ball successfully enters the hole.

Phew! That’s it for 0.65. Now onwards to 0.66. And also might have some bigger news to share soon!

Enjoy!

Smarter Golfing for the AI

Smarter Golfing for the AI

Hello folks!

I’ve finished implementing the next stage of the AI golfing in Boss Golf!

Until now, it would just take the straight line to the hole, and hit as close as it could. It didn’t matter if it would land in a bunker or not, as long as it was closer to the hole, it was fine.

Now, though, it’ll actually take a good hard look at the golf course based on its own stats, generate a couple of alternative shots, grade them, and then take the one that is most desirable.

To start off, we have a Vision attribute for the AI golfers. This attribute governs how much the AI will try to “think outside the course”. It dictates the field of view that the AI has when thinking about a hole. Higher vision means being able to explore areas well outside the straight path to the hole. Lower vision means trying to hit as forward as they can, and fail to notice other better areas of the course.

Let’s take the hole below for an example:

AIExample

It’s a pretty straightforward hole. There’s some trees to the side and a massive waste bunker all around the area.

Now let’s draw some potential fields of view:

hit_all

In the above image, we have three different fields of view:

  • Red is a golfer with high vision
  • Yellow is a golfer with medium vision
  • Cyan is a golfer with low vision

The red circle is the position where this shot is being taken, and the green circle is the location of the hole.

As said before, the Vision designates the search space for the AI to find a good shot. It’ll then iterate possible flight paths of the ball based in this search space, trying to get as close to the hole as possible, while also evaluating the terrain under it. The AI has come up with the following options:

hit_locations

These are the 6 best ideas that the AI has come up with. It’ll then score them based on how good a shot it is and how difficult a shot it is. Difficulty is calculated based on the club needed to reach that distance (1 Iron is god tier difficulty), as well as the terrain that it has to traverse, like below:

desirability

Red shows problematic terrain, such as the bunker or tall grass.

Green shows good terrain, such as the fairway and the green.

Now it isn’t as simple as choosing the shot with the lowest difficulty to “payoff” ratio. Or it would be too easy!

This is the point where the AI Confidence attribute can interfere with the AI’s thought process. The AI has a good idea about how difficult the shots are, and how high the payoff is. Next it’ll query its own confidence in order to help it choose. If it’s feeling particularly cocky, it may go for the high payoff, high difficulty shot. If it’s feeling not so confident, it may instead choose the lower payoff, easy to hit shot.

After choosing, the AI will then take the shot. But before it does, we add some fuzzy logic to its shot, to add the regular accuracy/power deviation that every player has.

And then it waits until the ball stops traveling and lands.

Once the ball comes to a shot, the AI will then reevaluate its choice, to see if the gamble paid off or not. If it projected to land on the fairway close to the hole, and it does, its confidence will rise a bit. If it instead landed straight on the bunker, AI confidence will lower, which can have other more significant impacts down the line!

Now this hole was very straightforward, and there would be very little variation between what a pro would do and what a beginner would do.

Imagine however that that little strip of fairway to the left of the main waste bunker actually had a clear shot to the green, like below:

pro_hit

This could give golfers with higher Vision an edge, as they would be the only ways able to see that kind of shot happening. It would also be a challenging shot, which would appeal to golfers that prefer challenging courses. With this one simple change, you could increase the challenge rating of the hole, and please more types of golfers!

So that’s it for now! Golfers are quite a bit smarter now, and their playstyles have just become a lot more varied if compared to before! So once 0.5 hits, you’ll be able to see golfers acting quite differently from each other, depending on your hole of course!

Next up is basically making sure things are working, and adding a better “idle” routine so that the AI wanders around in a more realistic manner. 0.5 should be available soon!

Thanks for reading!

Going Clubbing!

Going Clubbing!

Hello folks!

For today’s update to Boss Golf, I wanna talk about clubs!

So I’ve implemented a system that now makes use of proper golf clubs when playing the game. Until now, the AI had access to “infinite” clubs; it would decide how to shoot based on the maximum distance it could achieve, and how close it was to the hole. Based on this, and information regarding maximum/minimum angles/distances for each club type, a trajectory would be generated and that would be that.

This meant that even if the AI was in a bunker, it could still use an Iron to drive out of it in massive distances.

That’s not very likely in real life!

So I finally went ahead and implemented clubs. Now we have clubs divided into basic categories, representing the main club types (wood, iron, hybrid, putter, wedge), all further categorized into their respective numbers and/or types (1 Iron, 2 Wood, Sand Wedge etc).

Each club also has a difficulty rating (cause lord knows not even god himself can hit a 1 Iron!), which will be factored into the decision making process.

Further, each AI will have a limited number of clubs in their little AI golf bag. No more infinity clubs; they’ll have their 14 clubs and that’s that. Makers will be implemented later, giving slight deviation to angles and maximum ranges, adding even more variation to an AI’s arsenal (and other income avenues for your club with a pro shop!).

For now, these are being generated semi-randomly at the start of the game. Later on, when the AI generation becomes based on the database, these will be recorded and AI will routinely change their arsenal.

Now I’m onto implementing these new clubs into the shooting decision making. I’ve created a new “GolferBrain” class, which will be used by the AI to determine their “best” option for their current shot. Basically, it’ll generate a handful of potential shots, grade their likelihood of success, difficulty, payoff, and use the golfer’s confidence to decide on which one to take. And then shoot it! And hope for the best! And watch as their perfectly thought out strike lands in the bunker, or the fire hazard!

After this is implemented for the AI, I’ll roll it out to the Player as well. You’ll also start with a right now randomized bag of clubs, and later on you’ll be able to change your collection to better suit your playstyle.

That’s all for now folks! Stay tuned for more AI updates!

Needs, Moods, Confidence

Needs, Moods, Confidence

Hello folks!

Today I’ll expand upon the basic system driving the golfer’s state in Boss Golf!

It is very common for tycoon type games to have a sort of happiness/needs meter for the guests to your park/hospital/zoo/dinosaurland. This is one of the main aspects of gameplay in those games, and you as the tycoon have the sole objective to fulfill their needs while extracting the money out of them.

But in most of the games, guests are reactive actors. They go on rides, get their share of adrenaline, eat some food, drink some drink, spend some money, and go home. Most of their actions are reacting to their needs at any given point.

With Boss Golf, that wouldn’t work as well: we also have to factor in the activity of playing golf, the main driver of the AI’s state in the game.

Therefore, for Boss Golf, I’m implementing a system based on 3 “meters” of sorts: Confidence, Mood, Need.

Confidence

The confidence meter affects and is affected by the golf gameplay of the AI. However, instead of being a universal boon/curse, it is a double edged sword. Being too confident can lead to complacency; lacking confidence may lead to lucky breaks if your confident opponents get complacent.

In terms of affecting the gameplay, it works basically like this:

  • Higher confidence means attempting more difficult/risky shots if the AI thinks the payout is worth it
  • Higher confidence can also mean going on autopilot since the adversaries aren’t playing as great as the AI, so they think they can relax
  • Lower confidence means playing more safe/easy shots
  • Lower confidence can also lead to more consistency over the holes, as safe shots tend to land better than risky shots

In terms of being affected by gameplay, it works roughly like this:

  • Landing a good stroke, with little deviation, will increase your confidence
  • Landing in a lucky position will increase your confidence
  • Slicing/Hooking your shot will decrease your confidence
  • Landing in the wrong place will decrease your confidence

Other “passive” factors can also affect confidence, such as rivals playing badly/godly, external life events, divine inspiration…

And the increase/reduction isn’t on a simple scale. There are diminishing returns for increasing confidence depending on your current confidence level; there are also increasing returns for decreasing confidence depending on your current confidence level. Overconfidence and hit the bunker on an easy shot? Your confidence will shoot down. Unsure and hit a successful shot? Your confidence will increase well, as you played exactly the way you wanted. If it was a lucky shot, your confidence could remain the same or even diminish, as you wouldn’t believe it would happen again.

Mood

Mood is the overall happiness of the golfer as he’s visiting your course and playing the golf.

It can be affected by quality of play, by the environment, by special events, and mainly by the fulfillment of the golfer’s needs.

In Boss Golf, however, each golfer’s mood over the day is like a tiny “Hero’s Journey“. It isn’t important just to have a “good” experience on the course: golfers want a meaningful experience. And they each have their own idea of what their meaningful experience is, affected by their own personality traits and whatnot.

Basically, over the course of the day, each golfer has their mood map built. This is done by taking snapshots of the golfer’s mood every ingame half hour or so, and whenever a special event happens. This little mood map is available for the player to look at on the character’s panel in the form of a nifty graph. This graph will also show the “ideal” values that this golfer has for his meaningful experience.

So at the end of the day, the golfer mood map is compared to his threshold for a meaningful experience, and a rating is assigned to it, ranging from F to S. (S being Super Meaningful) (This is a good thing). Good ratings means satisfied golfers; satisfied golfers mean $$$!

This microgameloop will revolve around hitting as many of those beats as possible for the highest number of golfers. The more meaningful experiences your golfers have, the more likely they are to become members, make donations, spread the popularity of your course. Of course, you can’t please them all, so you’ll have to be careful when you build your golf course experience.

Need

Needs are the most basic and simplest feature to explain. These are the basic requirements that the golfer has to be an actual functioning boss person walking around your golf course. It is divided into 5 categories:

  • Social: contact with other golfers, with your character, with staff.
  • Food: golf is a sport, and practicing sports requires energy, and food gives you that. Can also poison you, though!
  • Drink: keeping hydrated is important, and the proper drink can give you an edge. Or take the edge off.
  • Energy: golfers are people too! And energy is required for performing actions. If your golf course is large, you’ll want to have carts available to help save some energy. If your golf course is small, you may want other activities so that the golfers can expend their energy.
  • Environment: no golfer likes a dirty, ugly, unsightly golf course. They want beautiful vistas, peaceful views, and consistency. You’ll need to wear your boss landscaper hat to fulfill their dreams.

Satisfied needs will increase the golfer’s mood. Unsatisfied needs will decrease your golfer’s mood. Other events can also happen depending on the level of each need’s fulfillment. You may end up with drunk golfers falling all over the course, passed out golfers, golfers who are depressed because they feel alone in your course…

And that’s about it for now. I’ve begun implementing this system this week, so this will be featured in 0.5, and your boss golfers will become more human. Or simmish. Each mood, need, confidence, will have an impact on the golfer’s thoughts, and you’ll have a direct window to each golfer’s mind. Kind of like Being John Malkovich.

Who knows, maybe I’ll even implement a feature that puts you inside the golfer’s mind, seeing things from their point of view!

Hope you enjoyed this writeup!

-Gus

Golfer AI Sketching: Actions

Golfer AI Sketching: Actions

Hello folks!

So far, we’ve described the state machine used for keeping track and modifying the behavior of the AI, and the utility function that is used to select what course of action the AI should take.

And now it’s time to talk about the other piece of the AI puzzle: Actions!

Put simply, these are the functions that the AI executes to perform an action in game; things like moving, idling, shooting etc. All of those actions are self contained in their own methods, take a parameter or three, and execute until the action is successful or fails.

Of special interest to Boss Golf is the shooting action. In golf, there are countless ways that you can hit your golf ball. You can add some backspin, you can give it some fade, you can try to go straight, you can go for a higher angle, you can go full force etc. Your success with that action, however, depends on myriad factors like your skill level, your confidence, your performance, the weather…

Therefore, for Boss Golf, when it comes to the shooting action, I’ll implement another subsystem that is based on intention, that is, the AI will tell the gameplay system what sort of shooting action it plans on executing, and the gameplay system will take all of the aforementioned factors and calculate the outcome for the AI. This will give more “human” results to the actions of the AI, as they would never be able to hit the same shot exactly the same way twice. There will always be deviations.

Breaking the system down:

  • The AI would come up with a handful of potential shooting actions for a given situation; it would think of a route by hammering it over the pond, another route by cutting through the trees, and another route by just hitting the fairway.
  • It would then parse those actions through the utility system, to see what action would be the one with the best potential reward/utility for the AI
  • After it found the best course of action, it would communicate the intention to the gameplay system, telling it it wants to:
    • Hit ball with club X
    • Hit ball with strength Y
    • Aim shot at square Z
    • Add X amount of backspin
  • The gameplay system would then modify these attributes based on the environmental factors surrounding the AI
    • If the AI is lacking confidence, add some uncertainty to the aiming
    • If the AI is behind in the championship, add some extra strength due to nerves
    • If the AI doesn’t have great skill, add way more backspin than the AI intended
    • If the AI has a lucky modifier, alter the shot slightly so that it lands in a slightly better position
  • The action is executed, the AI hits the ball with the modified intention, and analyzes the result

Of course, this is a higher level breakdown of what is going on behind the scenes, to better illustrate to you the capability of the AI. There will be a myriad other factors that can potential add a modifier to the AI’s decision. Our friend Jumper made a very nice write-up on our discord channel,  giving his take as a sports psychologist on the mind of the players and the many factors that can affect their performance on the pitch.

Now we know how to manage behavior, how to make decisions, and how to act with intention. There’s one more piece of the puzzle missing: Memory! As golfers go around the course, we want them to remember the way they tackled a hole before, so that they can try and improve on it or follow their old steps. I’ll break this feature down on my next post!

That’s it for today’s update, folks!

As an addendum, I’ve been hard at work implementing the AI, and also redoing part of the terrain system as it’s grown to be too bloated and not smart enough for the AI to work with. I’ll be done with that by the next weekend, and hopefully have some AI gameplay to show as well. Such is the nature of game development: the best ideas always come after you’ve implemented a system. This new structure will make it easy for the AI to evaluate the shots, as well as to place decorations and other structures on the course.

So stay tuned for it!

Golfer AI Sketching: Utility

Golfer AI Sketching: Utility

Hello folks!

Today I’ll be talking about another part of the AI of Boss Golf: Utility

Simply put, Utility is a value that determines how useful an action is for the AI to take at a specific moment in time. For example:

Take an enemy AI that has a health value and an ammo value. And it has only three possible actions:

 

  • Use Healthpack
  • Reload
  • Shoot

At the start of a conflict with a player, if the AI is at full health and full ammo, then the utility value of the first two action is pretty much zero: Shooting would be a much more useful action in that specific moment.

As the AI engages in combat with player, things get more murky. If the ammo is approaching zero, then the utility of the reload action increases; the act of reloading becomes more important than shooting as you need bullets in order to shoot. At the same time, as the health of the AI decreases, the utility factor of the use healthpack action increases, as the AI needs health otherwise it will die.

The way this calculation is done depends a lot on the factors and data that the AI has access to. If it knows that the player is at low health, then reloading first instead of healing might be a better option. If it’s a particularly coward enemy, it will give priority to heal itself instead.

And this is just with three possible actions; add in more actions, such as running, finding cover, dodging etc, and you get much more variety of behavior.

The same thing will happen in Boss Golf, specifically when it comes to deciding the type of shot to take along a hole. Let’s use a sample hole to illustrate how it would work:

tricky_hole
A tricky Par 3.

In the Par 3 above, hitting the green from the start seems like a solid choice. The hole is well within the 150 yard range, which is achievable by most golfers that take to the course. But even pros make mistake; and there’s a couple of factors that can affect the success of a stroke:

  • Wind
  • Confidence
  • Performance so far

Wind can drastically affect a stroke, making your ball go lower than expected, slower than expected, veer laterally.

Confidence can affect the quality of your stroke. Lower confidence can lead to slice/hook, lack of power, reduce your accuracy, among other things.

Performance so far. If the golfer has been having a great day, he’ll be more likely to take risks; If he’s playing his ultimate best, he might be more risk-averse in order to keep his good handicap; if he’s having a bad day, he’ll take even less chances in order to try and recover.

All of those attributes (and more) would affect the calculation for utility of the shot. For Boss Golf, the golfers would always calculate a specific number of shot (based on their attributes), calculate the utility for them, and make the choice.

Below I’ve simulated some potential shots and their results, to give you an idea of what could happen:

tricky_hole_results

Some golfers would try and keep to the straight brown shot, getting very close to the hole. Others might go the blue route since they’re lacking the confidence they’d be able to hit the ball across the lake in one go. Some might overshoot it into the green following the pink line because they believe they needed more power. The guy in the green line may have messed up his first shot due to lack of confidence. And the poor fella on the white line just sent it straight into the water hazard.

After taking the shot, the result would also affect his current attributes, affecting his next shooting decisions as a result. So if the shot landed where the golfer wanted or better, his confidence will increase, so he’ll be more prone to taking a risky shot next; by the same token, if the shot ended up going badly, his confidence could decrease, leading him to be more risk averse on his next shot.

And that’s about it. Now we know how the AI will be controlled (via State Machines) and we know how he’ll decide which action to take (via Utility).

But we’re still missing one key piece of the puzzle: the Actions themselves.

Boss Golf features an action system that limits the possibility/quality of actions by the attributes/ability of the golfer. A pro-level AI golfer will have more tools (read: shots) at his disposal than a first-timer out in the tee. He’ll know when to pull, when to push, when to chip, when to approach, and be able to use these actions when out in the green, whereas a first-timer will be limited to less imaginative and simpler shots. As they grow in skill, they’ll be able to add more shots to their arsenal.

All of that will have to be factored in by the player when designing the course. If it’s catered mainly to beginners, it makes little sense to have very difficult courses; if it’s catered to professionals, it would make little sense to have too many easy holes. This balance will be vital in the development of your golf course.

I’ll make a write-up about the actions on my next post this week. Writing about the systems like this has been very helpful in aiding me with visualizing how the system works and building it!

So expect AI integration by the end of this month, bringing life to your course!

That’s all for today folks!

Golfer AI Sketching: State Machines

Golfer AI Sketching: State Machines

Hello folks!

To break the silence today, I’ll talk about the sketching of the AI of the golfers in Boss Golf, something that I’ve been working on over the past week!

I have a great interest in AI, being an AI programmer professionally, so for Boss Golf I want to create some very interesting things with AI, to reinforce the living feeling of the NPCs, as well as give rise to the unpredictable events in the game.

To start off, I’ll describe the main backbone of the AI in Boss Golf: State Machines.

State Machines are basically a set of nodes that determine the current state of the AI (sleeping, idling etc), and how they transition into each other based on set instructions. How/when these transitions happen are decided by the programmer.

For Boss Golf, since gameplay is very segmented, state machines will be used to determine the basic state that the AI is in. Some of these states include, but are not limited to; teeing, putting, approaching, idling, waiting, interacting, resting, moving. The more expanded the state machine is, the more different and interesting behaviors we can get out of the AI.

For example: why separate the act of playing golf into three separate states? (Teeing, Approaching, Puttting) They could easily be condensed into one “playing” state since the actions that the AI will perform are very similar. (moving and hitting the ball)

The answer is that by adding this degree of separation to the behavior, we can have the AI interact and respond differently to events that happen at different points of play, in a more neat or organized way. If rain interrupts play during teeing off, it’ll have less impact on a golfer’s mentality than if he was putting; the stakes are different. Instead of having to keep track of how many strokes he has and how close he is to the hole, we can simply query the current state, and make the AI react accordingly.

And that’s just on one particular possible event. When you combine with other events, and add layers of actions and behaviors, you end up with a more interesting AI rather than one that simple goes around hitting the ball.

We can even add some variety to the transitions based on randomness or the attributes of the AI character. A golfer with poor health/lower stamina may have a bigger chance of switching to the rest state after a hole than a golfer in better health; a golfer with more aggressiveness maybhave a bigger chance of switching to a raging state after a failed easy shot than a calmer golfer.

And that’s the basics of it. I’ve sketched out some basic states that need to be in the game, and am in the process of implementing them. With state machines, we can also add new states at any point in time since they are self contained, so expanding the AI can be done quite easily.

Next time I’ll talk about another aspect of the AI that requires more difficult work to get it working correctly: Utility Functions.

That’s all for today folks!