Inspiration
Since the theme of this Hackathon was "Summer", I thought about what I and most people love to do during the summer. The answer I came to is that most people wanna go on vacation or to a resort. So I thought it'd be fun to let players build their own resort. But what makes a game more fun to me is competition, so I thought "let's give that to the player".
Then I had to decide how I want them to compete. Well, one of my favorite games comes from Yu-Gi-Oh, an anime where people compete against each other using a card game. So I thought about making my game a card game.
Then I had to think about what to name this and the name had to be Summer related. I thought about the games I liked which gave off Summer vibes, and I remembered Wii Sports Resort. So I scraped off the first two words, slapped on "Wacky" and bam, Wacky Resort was born.
What it does
Overview: The program is a game where players use their money and cards to build their own resort to become the richest player in the competition, and along the way they'll also sabotage their rivals!
Below are the instructions/rules of the game:
The number of human and AI players are determined and customized Note: (The customized characters are for future updates plans, they won't show up in current gameplay)
The number of rounds are decided
THE GAME
For now, the turn order will ALWAYS start with the player on the left side of the selection screen and then going right.
Each player starts with: Money : $1000 A Hotel : 0 Guests, 5 Amenities (Air Conditioning, Bathroom, Bed, TV, Wi-Fi) Cards : 5
At the start of a player's turn, they draw an extra card. A player can only hold a maximum of 6 cards at once, even if they draw a card from an effect.
During a player's turn they can:
Buy amenities
Amenities are used to increase a hotel's rating
Play cards
Cards can be used to change several statuses for any player. Some examples include:
- They can be used to add amenities for free
- They can be used to increase your money
- They can be used to remove amenities from an opponent's hotel
Change their hotel price
Hotels have prices that guests are charged for at the end of each round. Setting a price too high could cause less guests to attend your hotel. Setting the price too low may attract a lot more guests, but the overall profit will be very low. The best way to decide a price is to look at your rating and amenities and compare them to your opponent.
Look at another player's hotel
See another player's hotel stats and how many cards they have in their hand (not the card effects themselves)
Review their amenities
After they're done, they end their turn, and move onto the next player. Once the last player in the cycle ends their turn, guests are spawned and decide which hotel they want to move into.
GUESTS
50 guests are spawned.
When a guest is spawned, they decide randomly the following:
- The minimum rating they want a hotel to be (Note: Chosen randomly, but odds are they'd like a rating of at least 2)
- The highest they want to pay for a hotel (Note: Chosen randomly, but odds are most will be cheap)
- The amenities they'd like the hotel to have (Note: Chosen randomly for each amenity)
- How many "points" a hotel has to have for them to join (Note: Chosen randomly, 10 - 20)
Each guest considers all available hotels to determine which hotel they want to join. The method for doing this is a point system. (Note: these points aren't added to the hotels, but are solely for the guests to make a decision)
- If a hotel has a guest's minimum rating or higher, give them a few points
- If a hotel has a price that's equal to or lower than the price a guest wants to pay, give them a few points
- If a hotel has an amenity the guest likes, give them a point
A guest will join the hotel that:
- Has the most points in their list
- Meets the necessary points a hotel needs for them to join
If multiple hotels have a tie, the tie will be broken differently depending on the guest (randomly)
- A guest can break the tie by going with the hotel that has the highest rating
- A guest can break the tie by going with the hotel that has the cheapest price
If there is still a tie for a guest, then they'll choose a hotel randomly to go to out of their final options
If no hotel meets a guest's requirements, then that guest is removed
After each guest makes a decision, money is rewarded to each player:
The # of guests inside of their hotel * The price they charge
After money is distributed, the next round starts. This process repeats until all rounds are complete.
After all rounds are complete, the winner is decided.
How I built it
I wrote out a whole plan trying to make this a minimum value product with Google Docs and then once I had a slight idea of how I wanted guests to work, I started working with Unity.
First I did the UI like the title screen Then I worked character customization Next was starting the game, giving each player a hotel, money, etc., along with making sure that turns and rounds were cycled correctly Next I added options for the players to buy amenities, change their prices and look at other player's screens Then I started coding AI functionality Then I started focusing on how cards would be activated and I drew the card art myself I finished up AI functionality Then I finally got to add code for the guests and reward players for how many guests they had Finally I just focused on touching it up:
- Making sure nothing broke
- Adding a results screen
- Restart button
- A few other minor things
Challenges I ran into
My main issue was determining how guests were going to be programmed in a way that felt fair to all players, wasn't overall TOO random, and made sense. I came up with the idea to just think of guests like how most people would judge a hotel (ignoring stuff like distance, travel costs, etc.). If I saw two hotels that had the same rating but one was cheaper, then I'll go with the cheaper hotel. If I saw one hotel was 5 star and $190 a night, but the other one was 4 stars and $90 a night, I'd probably choose the 4 star hotel, but some people might value rating over pricing. So I had some guests do that.
Programming the cards was somewhat troublesome, specifically for cards that targeted other players. But, that was easily overcome with just a bunch of print statement debugging.
Programming the character customization was somewhat of a headache (which is funny because that ended up doing nothing in the end besides being a set up for something greater in the future.) I got the player models and outfits from the Unity Asset Store for free. Along with it, came code that assigned outfits to each model randomly. But I wanted it so that the player could choose which outfit they got so I tweaked the code for my purposes. HOWEVER, the original way it was programmed was more complicated than it needed to be. So I had to study that code first, simplify it, and THEN implement code so that the player can choose their outfit.
Color scheming and making the UI look good.
Finding sound to use for free, but I ended up getting background music from ZapSplat
Accomplishments I'm proud of
- A full game can be completed (even with only AI)
- AI are programmed well enough that I can conduct an entire game without a human player
- Card arts and effects worked properly
- Character customization (although I didn't get to use it for anything) ended up working correctly and is ready for future usage
What I learned
I learned how difficult making card game apps solo and maybe even part of a team. Adding only a small pool of card art and coding in unique effects was harder to manage than I thought, specifically for cards that targeted other players.
Creating a smart AI to resemble how an actual person would play is hard because I don't want to make the AI hardcoded to always make the best moves possible, but I also don't want it to make moves that don't make any sense.
What's next for Wacky Resort
I have two major future plans for Wacky Resort.
The first one would be adding minigames between rounds that are Summer related like swimming, outdoor volleyball etc. and let players win money, cards, and amenities from those games. I included character customization for that purpose but I ended up deciding for time's sake, I'll instead make it so that each player draws a new card at the start of their turn.
The next major goal is the addition of online multiplayer. This is mostly to allow players to hide their cards from each other, but also online multiplayer in general makes the game easier to play with friends so people don't have to use something like "Parsec".
The rest of the future ideas I have planned are mostly for rebalancing the game to make it more fair and slightly more challenging. These are some I have in mind:
- Showing the actual hotel/resort that's being improved (the size, the amenities being added, etc.)
- Changing the expenses of amenities and how cards function
- Making the AI smarter and less random
- Adding difficulty modes to the AI (easy, normal, hard)
- More cards and letting players build their own deck
- New modes (A minigame mode, a mode where the objective is to reach X money, etc.)
- Add special AI that only go to resorts with specific conditions / amenities (worth more)
- As of now, going last holds a considerable advantage, this'll need to be changed
The end goal for Wacky Resort is to have it published on different apps like Steam, itch.io, etc. after online play is established.
Log in or sign up for Devpost to join the conversation.