How many games of Hush Hush are there?

This will be a pretty quick blog post that takes a look into how many different paths exist in Hush Hush.  Some assumptions will have to be made, but the final result should be at least the correct order of magnitude (ish).  Let’s get started!

The first thing we need to do is figure out how many choices a user has in an asset.  To figure this out, I’m going to write a little AI that just randomly plays each Hush Hush asset 1,000 times, and compute an average number of decisions the player has to make.  That outputs something like this:

Averaged 11.483 choices in Bonnibel Date 1.csv

Averaged 7.561 choices in Bonnibel Date 2.csv

Averaged 2.252 choices in Bonnibel Date 3.csv

Each choice is generally one of 3 options, so that means that we can translate these numbers to unique paths by taking 3 to the power of the average number of choices.  Note:  This isn’t perfect, because this will just give the number of paths of an average play session.  This is an exponential function, which means we can vary by a lot with each additional choice made in a date.  This would give something like the following for number of unique paths:

Averaged 301,150 unique paths in Bonnibel Date 1.csv

Averaged 4,050 unique paths in Bonnibel Date 2.csv

Averaged 12 unique paths in Bonnibel Date 3.csv

Next, we’ll need to process the action list, which is a list of all of the different things a player can do in the game for each time slot.  We’ll need to calculate the total number of paths possible at each time slot, and then multiply that by the other time slots.

Some time slots are easy.  For example, if a time slot is only a job/skill (typically night or dawn) then we can calculate the paths pretty easily.  A night time slot (when both light and dark karma jobs/skills are available) has 20 different options. A dawn time slot (when only light karma jobs/skills are available) has only 10 different options.

Some time slots are pretty hard, and contain a mixture of mini events, events and phone messages.  I’ve assumed the player will read every phone message, and will also pick a random number of mini events, before picking an actual event at random.

After some number crunching, this results in around 1.34*10^62 unique paths for jobs and skills, another 4.08*10^229 unique paths for events (such as dates, intros and other purple items on the map), and then another 1.28*10^279 unique paths for everything else (phone messages and mini events).  Multiplying these together suggests there are approximately 7*10^570 different paths (that’s 7 followed by 570 zeros).  Assuming the Universe has around 10^82 atoms in it, then there are 7*10^487 times as many paths in Hush Hush as there are atoms in the Universe.

That being said, that doesn’t mean there are 7*10^570 unique outcomes to Hush Hush.  Some paths collapse back together and often the choice you make for a job or skill doesn’t matter too much.  For example, there’s no difference between picking burgers at night and solar tech in the morning, versus solar tech at night and burgers in the morning.  But it does give an interesting insight into the magnitude of numbers in the game.Hopefully you found this interesting, and I hope you enjoy Hush Hush!

~Programmer Panda

How Hush Hush Works

There’s no denying that Hush Hush is a large game, with hundreds of thousands of words of dialogue and thousands of different user choices (leading to a bizarre conclusion that it’s very unlikely for any two people to play the game the exact same way).  To manage this we made heavy use of Google sheets for data entry and automation to verify the game could be played.  This blog post gives a quick tour of what the data in Google sheets looks like, and how Hush Hush turns all of that data into a game you can play!

It all starts with the action list, which is a big list of every event and phone message that you can get at each time slot.  For example, on the morning of July 2 here are the different events and phone messages that may be available to the player:

The game then needs to work out which of these to show to the player, which is what the ‘Trigger’ and ‘State’ columns are for.  Every line of dialogue and action has the possibility of setting a trigger to a particular state.  For example, when you first meet Iro the Iro_HasMet trigger is set to true.  These triggers are what instruct the game to follow certain branching paths or to make certain events available on the map.

For example, if Elle_HasMet is set to false on the morning of July 2 then that means that Elle Intro will be available (it is only available when Elle_HasMet is false), and Bonnibel Greeting random will be unavailable (it if only available when Elle_HastMet is true).  These same types of checks happen for every event, mini event, phone message, etc in a time slot, and allow the map to be populated with the various things the player can do.

When the player clicks on a location on the map the game now has to figure out which asset to load.  The asset name is stored in the ‘Asset’ column.  This name references a full sheet tab.  For example, ‘Elle Intro’ is found in the chapter 1 sheet under the ‘Elle Intro’ tab.

Each of these tabs has all of the information necessary to play the date, including any dialogue, branching, requirements, stat/money/etc updates, and so on.  The game starts at the very top of the file and reads from the top down, kind of like a movie script or book.  Each asset is broken up into different structures, and those structures allow for different behaviour in-game.  For example, the ‘Simple’ structure is just a few lines of dialogue followed by either a link to a new structure, or a list of questions that the user can use to branch to a new structure.  There are also more complicated structures, such as structures that loop until you pick a branching path that points to a new structure, etc.  Here’s an example ‘Simple’ structure from Elle’s Intro:

In this example, the Narrator will begin with the dialogue “(The girl shyly twirls her hair and smiles at you, before blushing and turning her eyes away.)”.  Then the player will be presented with 3 options:

  1. Hey, I’m sort of new to town. Actually I’m visiting for the summer.
  2. Hi. I’m super good at guessing names. Let me guess yours. Is it… Pinecone? 
  3. Hey girl. Your name must be Aerial, because I think we mermaid for each other.

Each of these options has a follow up line of dialogue from Elle, and then they all jump to a structure called ‘Elle_Intro_3’.

You may notice several columns that are empty in this sample structure.  Those columns allow the writer to lock certain paths behind stat/money/trigger checks, or allow the writer to modify stats/money/triggers depending on the path the player picked.

Once all of these assets have been written we need to validate them.  The Hush Hush project includes several tools that automatically process the game data and check for dozens of different types of errors.  For example, we check for triggers that don’t exist, triggers that don’t get changed, triggers that are only changed but never used, dialogue ids that are never used, incorrect or missing next ids, lines of narration that have a character name associated to them, and much more.  These checks happen every time new data is loaded into the game, so we can get a pretty good idea if the game will work before even playing it.

At the end of the day, all of that text in a spreadsheet somewhere turns into this:

I hope you enjoyed taking a look at how Hush Hush works behind the scenes!

– Sad Panda Programmer

Pitching New Characters Part 1

Hey Panda Peeps!

I’m Vintage Panda! I joined the Sad Panda writing team in July, and since then one of my favourite parts of my job has been getting to participate in the creative, collaborative process of coming up with potential new characters for our games Crush Crush and Blush Blush! 

As anyone who’s played either game already knows, we Pandas truly believe love comes in all shapes and sizes. That’s why we strive to offer our players a buffet of beaus and beauties as diverse as they are. So whether you’re into cute catgirls, smouldering sexy doctors, girls/boys next door, or literal bears in lipstick… we want all of our players to find that special someone(s) to fall in love with!

Which is all to say, coming up with new characters is crucial!

So how do we go about it? Well, first and foremost, we listen to you! That’s right, you, our Panda Peeps! These games are for you, after all, so we take your waifu wishlist (hehe) very seriously. Whether it’s specific player requests for a character with a certain body type or background, or just paying attention to commonalities in what characters get lots of love in Vote-A-Flings and LTEs, we’re definitely listening!

We also look to pop culture in anime and beyond for character archetypes we think would make good love interests. What about a dashing spy for Blush Blush, or a scrappy steampunk junkyard mechanic for Crush Crush? Pirates seem to be having a Moment on social media, so what about a sexy swashbuckler? We also follow our own interests: as my name suggests, I love all things vintage, so how about a 1950s sitcom housewife or a prohibition era gangster girl?

All these one line character concepts go onto a spreadsheet we call the Pitch Deck. Building on the seed of the idea, we come up with a clever/appropriate character name, use the ole image search to slot in a few inspirational pictures, then get to work fleshing out the character beyond that initial sketch. 

Here, our archetype is further developed into an “elevator pitch”, aka, what you’d say about them if you lucked into an elevator with a higher-up and wanted to sell them on your idea before they reached their floor. 

On Crush Crush, “Buff warrior princess” thusly becomes Hildr: “A Valkyrie. She’s tall, she’s strong, she’s sexy and feminine but can fight and drink as well as any of the guys. Boisterous, loves battle and glory and weapons and passionate loving.” 

On Blush Blush, “Cultured silver fox/Zaddy” becomes Professor Darcy: “The English professor. He’s a sexy well-spoken gentleman with a poetic streak, a charmingly distracted mind, and leather elbow patches on his tweed coat.”

Now, since both Crush Crush and Blush Blush are dialogue-heavy games, we like to write a few potential sample lines that serve as a quick snapshot of how the character might speak, how they’d flirt, or how they’d make the player laugh. 

To give you a glimpse, here are a couple of potential lines for a Blush Blush pirate:

“I came ashore to pillage that booty! Nah, just kidding… or am I? I will take whatever valuables you have on you, though.”

“Why do people here keep asking me why the rum is gone? How should I know? I don’t have time to be micromanaging the ship’s provisions!”

Or how about that 1950s housewife I pitched for Crush Crush?

“I’m hosting a SupperWare party later. It’d be a gas if you came!”

“Don’t get me wrong, I’m not fast or anythin’, but I sure wouldn’t mind a little backseat bingo with you!”

“Gee! If I knew you were coming I’d have changed into my party apron!”

Finally, we figure out how these new characters might fit into the game. On Crush Crush, that means deciding how the player might CRUSH the character. On Blush Blush, we come up with what hilariously appropriate or delightfully unexpected animal they might be turned into. We also make some notes on what their dynamic might be with the player and how the arc of their relationship might develop over the course of the game. Do they start out adversarial and warm up, or is it more a friends to lovers kind of vibe? Do they come in hot and heavy then their feelings slowly turn more tender, or are they shy at first then gain the confidence to be more open with their heart?

At this point, though, these are just rough ideas to get things started. Because what comes after the Pitch Deck is the Character Brainstorming Session, where all the Pandas get to weigh in and work together to shape these little lumps of character clay into fully formed figures! And much like your favourite reality TV competitions, not all of them make the cut…

But if you want to know which characters make it through to the next round and who faces elimination, you’ll have to tune into my next post!

Until then, we love you so hard!

~Vintage Panda

Tools We Use

At Sad Panda we use many industry standard tools to build our games.  This blog post will go over the different tools used by our programmers, artists and contractors to build the content you see in Crush Crush, Hush Hush and our other games.

The programming team uses the Unity Engine for building the games.  The Unity engine leverages the C# programming language, and we use Visual Studio Code and Visual Studio Mac for most of our code creation.  We also use Xcode on Mac in some situations (usually for our iOS builds).  We use git for versioning control, and we use different applications for managing git.  For example, Programmer Panda uses git extensions.  When necessary, the programming team uses Paint.NET for image manipulation.

The artist team uses the Adobe Creative Suite for creating artwork.  Most of the artwork is vector artwork, made in Adobe Illustrator or Adobe Animate.  This artwork is then converted to flat images and edited in Adobe Photoshop.  Most of the artwork is placed on a network attached storage device and then shared via either Jira or Slack with the programming team for integration into the game.

The writing team uses Google docs, and most of our games have the ability to pull content straight from Google docs directly.

Lastly, the audio team uses Audacity for recording and sound manipulation.

Many of the programs we use are free and/or open source, which is great for a small studio like ours!  However, we do have to pay subscription fees for Unity and Adobe products.  It is worth mentioning that Unity does provide a free license to indie developers who are just getting started.  Hopefully this blog post has given you some insights into what a small studio uses for building games!

~Programmer Panda

The Office Doggos

~Insert theme from “The Office” here~

Hey Panda Peeps!

It’s me, Witchy Panda, and I’m here to brighten your day with a little blog about dogs!

Did you know that the Sad Panda Studios office is dog-friendly? Every day, a handful of puppers and doggos come into work and make the day a million times more fun. And, I mean, let’s be honest – this is a video game company. Working here is already fun. The dogs just really take it to the next level!

So, I thought I would share a little bit of this office-related joy with you by way of introducing the core doggos of Sad Panda Studios.

First up: Ludo

Sometimes you’ll see what looks like a stick-figure drawing of a dog zooming across the office. That’s Ludo, who has no concept of the “Monday Blues.” I think he’s actually MORE chipper at the start of the week, happily greeting each and every Panda as they come through the office door. He loves people and he loves to play. Here are his stats!

  • Birthday: January 31st
  • Hobby: Sprinting & Sleeping
  • Favorite Job: Baker
  • Favorite Food: Chicken or Cucumbers
  • Gift Preference: Blanket
  • Occupation: Assistant Panda’s Assistant
  • Liked Trait: Outgoing

Next up: Chloe

Chloe is known around the office for her magnificent beard. She also has eyelashes for days – and they’re not even falsies! It’s literally not fair. This one’s a woo girl who likes to bork and bow wow at the door from time to time, but she makes up for it by knowing a TON of cool tricks, including how to “stick ‘em up” and “play dead.” I don’t know about you, but I’ve only ever seen dogs do that in movies. Here are Chloe’s stats!

  • Birthday: April 20th
  • Hobby: Eating Paper Towel Tubes
  • Favorite Job: Art
  • Favorite Food: Chicken or Tuna
  • Gift Preference: Tea Set
  • Occupation: Blush Blush Art Supervisor
  • Liked Trait: Buff

The Dynamic Duo: Tessa & Peanut!

If you’re reading this blog, you’re probably familiar with Tessa. After all, she’s the inspiration for the adorable dog-themed Crush Crush girl of the same name! In real life, she’s a gentle giant who loves to visit all the Pandas at their desks before sprawling on the floor in the middle of the office for a long nap. Tessa’s stats are:

  • Birthday: October 10
  • Hobby: Blocking The Path To The Boardroom
  • Favorite Job: Zoo
  • Favorite Food: Peanut Butter & Bananas
  • Gift Preference: Cute Puppy
  • Occupation: Crush Crush Waifu
  • Liked Trait: Motivation

Peanut is the newest of the bunch. She came from a litter of puppies that was rescued from a wildfire last summer! She’s completely precious and basically spends all her time following Tessa around, just like an annoying little sister. When she’s in the office, she loves to wander around getting head pats and looking up at you with soft, curious eyes that seem to say, “Watcha dooooiiing?” Check out little Peanut’s stats!

  • Birthday: April-ish?
  • Hobby: Copying Tessa
  • Favorite Job: Love
  • Favorite Food: Cow Pies
  • Gift Preference: Shell
  • Occupation: Resident Puppy
  • Liked Trait: Funny

Honorary Mention: Irish (Work from Home)

Irish isn’t *technically* an office dog, unless you count the home office, which I do. After all, whenever I’m working from home she’s right there by my side, supervising every word I type. Fun fact: Irish is a chihuahua-pitbull cross. How does that happen? Well, when a male chihuahua is feeling very brave and a female pitbull can’t be bothered… Ahem, anyway. Irish is tough as nails but also super loving and affectionate. Here are her stats:

  • Birthday: June 6
  • Hobby: Roughhousing
  • Favorite Job: Space
  • Favorite Food: Rice
  • Gift Preference: New Car
  • Occupation: Script Supervisor
  • Liked Trait: Tenderness

And those are our office dogs! I hope you liked getting to know them a little bit. And if you did, maybe we can revisit the topic again? Most of us Pandas are pet people – we could do a whole other blog post about our remote-work doggos, not to mention the cats, cows, and chickens we have in our lives!

That’s all for now, peeps.

Signing off,

Witchy Panda