Skip to main content

The Shindig: Push for v1

· 4 min read
beho

As part of the PiCoSteveMo game jam I'm building a deck builder game where you host a great party.

The last time (see day 6) I looked at a framework for managing scenes and then had a play with the music system.

There are just two weekends left in November. Today is free and I have a cup of coffee in my hand so today I'd like to push for something that is end to end playable.

2025-11-15 0930 Fun and money

What uses is having money if you don't spend it? In the planning page I have introduced a price for each "card" and the player has a balance for fun and money. Let's wire the two ideas up.

I was able to add sprites for an upgrade and exit option. The code is getting a bit more complex now that some of the items use different currencies. The dollar sign is more skinny than the musical note so that also has special logic.

a planning screen with the upgrade option selected

The update logic for the planning now looks something like this:

function PlanningUpdate()
if btnp(5) then
local option = Options[Cursor + 1]

if (option.name == "exit") then
-- move to party phase
PartyInit()
return
end

if (option.name == "upgrade") then
-- upgrade pricing comes out of money
if (Money >= option.cost) then
Money = Money - option.cost

-- the cost of upgrades goes up each time
option.cost = min(option.cost + 2, 12)
end
else
if (Fun >= option.cost) then
Fun = Fun - option.cost
end
end
end
...

I think eventually I will need a way to highlight which options the user can afford but for now let's focus on getting the game working.

We also need to wire up adding the purchased guest to the guest list.

1100 shuffling

When the player starts a new party we need to be able to create a new ordering for the guests that are about to arrive. Eventually I'd be tempted to shuffle only when the remaining guests run out (like in Dominion), that way you are guaranteed to experience every guest.

Consulting the cheat sheet I see there is a rnd method for random numbers and add and deli for interacting with tables. I should be able to randomly remove elements from the old guest list and add them to a new guest list.

Something like this should do it:

local newGuests = {}
for i = 1, #Guests do
local index = flr(rnd(#Guests))
add(newGuests, deli(Guests, index + 1))
end
Guests = newGuests

OK that seems to be working nicely.

1200 let's get spooky

The key mechanic in the gameplay loop here is "push your luck". As each guest arrives there's a chance that the party will become too spooky. If this happens the player gets no credit for the party so it's sometimes better to play it safe.

To achieve this, I need:

  1. an indication of which guests are spooky;
  2. a screen for when the party got too spooky
  3. and a sign that the party is getting too spooky.

After some playing around, I landed on showing a full moon and some bats. I'd also like to add some spiders that walk around later.

the game interface with a warning message about the spookiness

And then if there are three spooky guests at the party then the party is over.

the game when the party got too spooky, a banner says "way too spooky"

1400 many flavours

The basic elements of the game scoring are now here. Next I'd like to start adding some special properties to some of the guests. For example maybe the yeti can make one of the other guests disappear.

For this I want to add some more ideas:

  1. flavour text for the guest get shown on the planning screen;
  2. guests with actions can be selected on the party scree and
  3. add extra phases to the scoring system.

After a moving pixels around I have the flavour text working. I think this new layout works pretty well.

the planning panel with descriptive text for each guest

I think realistically that's all I have time for today. Pretty close to what I was hoping to achieve.

Thanks for reading!