Pindan Devlog for Dropbear Jam


Core concept:

As the jam was hosted by Aussies, and our developer/writer Loressa lives in Australia, we decided to focus on a story set within rural Australia. The core theme of the “ghostly theater” combined with the item of “lamp/lantern” inspired us to depict dissociation and gaslighting - as the bard says, all the world's a stage, and what better way to depict reality feeling fake than by placing the player on a stage? Story, art and code were then used to embody this concept.

Writing: 

The core concept for the game’s story is about exploring growing remoteness as the main character goes through a physical and mental breakdown. We wanted the core cause for this to be an industrial disaster, so we turned to history for inspiration.

Setting:

The setting is a fictional village named Penny Harbour inspired by the mining town of Karratha in rural Western Australia. This remote town on the northwestern Australian coast is part of a region peppered with resource excavations. Mining is the backbone of the economy in this part of the world - company towns were created to house workers as various minerals and metals were discovered, while in modern times many workers are FIFO (fly-in/fly-out) who travel to the mine sites to live and work for weeks in a row.

One of the most infamous incidents in this region was an industrial disaster in the town of Wittenoom - despite knowledge of the dangers of this mineral dating back to the Roman Empire, early warnings about the health effects were ignored

One particularly infamous picture of children covered in asbestos dust as if it were mud starkly illustrates just how extreme exposure was. Asbestos was used everywhere, and virtually everyone living there was repeatedly exposed. The entire township was eventually evacuated and the entire area is now forbidden to visit due to the high levels of contamination even decades later.

The health effects were extreme and horrific, with highly elevated rates of cancer, respiratory disease and premature death. 

References used for setting include a local history book (“Shark Bay Days” by GW Fry), newspapers, Wikipedia, government websites and interviews with people who have lived in Karratha.

Story:

To reduce art needs, we needed a way to keep the player within a small environment. We ran through several ideas, thinking about past media such as Hitchcock’s Rear Window, and realized we could combine the spread of pollution with the reason the player was trapped inside: a dust storm. One particularly striking story related to us during interviews was a memory of riding out a dust storm in a ute on the side of the road, wind howling and sky black - we knew we had to use this! The game’s name, Pindan, comes from the word used for both the red dust of the region and the land in the region itself.

Remoteness isn't just a physical concept, though, and so as we built the world a story began to develop about the life the player was living. Before the region became more built up, mining was basically the only work available in these towns, so we decided to explore things from the perspective of a spouse trapped at home. 

One interviewee who lived in Karratha in the 1980s mentioned how she sometimes felt like “a 1950s housewife” and we leaned into this idea, using oblique storytelling (see code: items section) to illustrate how the player has given up their own goals/dreams. We also included a story choice where the player can specify a more detailed selection (accident/illness/etc) to provide color to a vague incident which has precipitated being isolated in the house. 

These all combine to create a core underlying setup of a marriage on the brink, while the plot itself forces the player to confront this backstory.

Art:

The first goal of the art was to create a tangible setting of a house, but to also change and distort it as the game advanced, ultimately resulting in the house becoming a stage in a theater with furniture as props. Each room was composed of multiple layers, stacked together to create an intricate scene:

To reduce scope, the rooms were limited to three, each with three versions. From here, the artist Space Rabbit worked extensively on palette choice and variations to create a progression of scenes which felt distinctly different, while still cohesive overall within the game.

Palette choices:


With extra time left, we then assessed what would make the biggest impact and decided character portraits for the plot storylet sections would add a big punch. Using some simple changes in expression gave us even more variety with these characters. The palette for these characters was kept very neutral and limited - not only do the hues evoke the colors of a dust storm, they allow us to use them in every stage of the game without visually clashing with the background scenery.

Audio:

Our goal for music was to create creeping, building tension and evoke concepts of industrial horror over time, with the music becoming less organic and more discordant as the game progresses. 

Our initial draft was based on the concept of a music box and dollhouse, to enhance the feeling of the player being trapped in their house. Our musician, Wigg Grant, created a wonderful “whirring” sound to base this around, evoking clockwork mechanisms, but we eventually decided that was too ambient for gameplay - it did, however, make excellent menu music! Our musician titled this track “Drones of Humanity.”

The tracks created for the game focused on stronger musical elements with a core motif which was repeated throughout the story to enhance cohesiveness while making differences and change more stark and disorienting. The motif of clocks was used throughout the tracks, highlighting loneliness and drawing in literary references such as Alice in Wonderland.

During development, our musician explored a variety of different styles and instruments, but we needed some way to create a coherence for the overall soundtrack. We decided to use the same handful of instruments throughout the game, which was a quick, efficient way to create a musical palette. 

Act 1: “Announcement of Permanence” - This track slowly builds uneasiness through subversions of expectation and a feeling of drifting away from the melody. In the middle, it features a downbeat drop into silence; instead of a swell to crescendo, the song whispers and then takes us wandering, creating a “safe” feeling when we finally return to the familiar. As the song nears the end, the howling of the wind becomes more distinct - the storm is approaching.

Act 2:  “Dust Never Settles” - This track draws in inspiration from dirges and begins to build out the “ghostly” and “lamp” (gaslight) themes of the jam, with vocal echoes and a barely-there percussion designed to make the listener question if they are even hearing some elements of the song, effectively playing with the concept of gaslighting in an experiential way. The return to melody in this section is more modern and industrial, while metallic chimes modeled off the noise of rusted tools clanking together draw on the setting of a mining town.

Act 3: “The Stage” - This track drew elements from stageplay and theater - the industrial noises shift into the discordance of an orchestra tuning up, complete with muffled chatter and coughs from the ghostly audience. The overall impression we aimed for was somber uneasiness, with the storm’s winds twining through hints of clockwork to lead to a lonely piano echo of the core melody.

Our musician also created a small video tutorial about looping music:

AusJam.mp4

Code:

The core for this game breaks down into 3 main categories: story, art and UI.

Story code:

Story progression occurs through two methods:

  • Direct plot interludes: popups with plot, dialogue
  • Oblique storytelling: interaction with items, reading magazines

Direct Plot:

We wanted to make the code easily adjustable to reduce or increase scope if needed, so we built a core game skeleton which would pop up plot moments based on player clicks.

The code above is javascript and runs two different “widgets” (Twine internal functions). The first adds a click noise to the buttons, while the second runs a core script to track player progress.

Each click advances a variable called “clickCount” and when that hits 10 (easily adjustable to another value as balance needs), the variable named “toxicity” advances and flags that we need a new “storylet.” 

This function then checks if a storylet need has been flagged. If so, we display a pop-up and include the storylet for the current toxicity level, and then reset those tracking variables. We then include this function on different core pages, such as each room or page of a magazine, and now the player can click around to eventually proc the next segment of story.

Within these storylets, we have branching story arcs, which are just inclusions of different passages based on what choices the player selects. For example, at one point the player can choose to brave the dust storm or stay inside - each choice has different writing and adjusts variables to different values, such as turning on air conditioning or increasing sickness levels, which determines the final ending and potential achievements.

This setup is fairly easy to expand on - toxicity currently ends at 13, with storylet #13 transitioning into the ending, but it would be quite easy to add additional storylets and even levels.

Oblique storytelling:

Storytelling through item interaction is something Loressa has been working on in prior games (See: Succor) and she built on this concept to create a progression of item descriptions as the plot advances. For example, the potted plant in the living room shifts from thriving to parched to dead as the story continues as the player's environment degrades.

This is a Twine passage being used as a script. Instead of writing story here, we instead include the entire passage into the script for button display so the logic adjusts as the game continues:

This setup uses a simple core function to display the items, with the bulk of the work the text inside JavaScript objects. Each item description is tied to the current toxicity level, making this setup fairly easy to expand if additional story were to be added.

Example javascript object:

Art code:

We used a three act structure for plot and art and each “room” in the house has three versions, one for each act. When the act changes, due to the $toxicity counter mentioned above, the passage used for the room will change: living1 for living room in act 1, living2 for living room in act 2 and so on. This code could definitely be optimized into one loop instead of two, but with time crunch it was easier to be a bit messier.

You may notice an issue with this code - what if the player doesn't move rooms and just interacts with items? The scene will never change!

The solution was a quick little hack embedded into the storytelling! We simply navigate the player to the new scene when the storylet pops up:

The rooms themselves are fairly sparse - just a variable for the current room, a background, a check for storylet, a div id for a text box and the bottom bar:

You've probably noticed the background is a bunch of layers instead of a single image - Loressa wanted to explore a CSS concept she played with in an earlier game (See: Arcbow Anthology) called filter:

This CSS allows you to apply effects to only the VISIBLE part of a layer. By adding box shadow, we were able to create an escalating feeling of depth and dimension as the acts progressed. This is intended to increase the concept of dissociation and remoteness. Using z-index allowed us to stack the images in order.

For our characters, we used a pretty simple hack to stretch our character art. Instead of creating different art for each character (2x spouse + mine worker), we simply have the spouse be one portrait and the mine secretary then becomes the other, leftover portrait.

This code could definitely be cleaned up and optimized, such as setting a core portrait image source after the player chooses their spouse’s gender. As is, due to time limits, we just have a separate chunk of code for each place we want to insert an image.

UI Code:

This is one area which could definitely be improved. The UI is passable, but it could be prettier. One thing we want to highlight for other Twine devs is the flexibility of using variables in your CSS!

This allows you to set your colors in one central place! Use var(--variable) to then add a variable into your CSS code. This makes tweaking values very easy. You can create custom properties for more than just colors, as well - at advanced levels, you can even use javascript to adjust them!

Speaking of animations, we included one to emulate the effect of “waking up” when the player leaves the intro and enters the main game. This was based on the elevator door effect from an earlier project of Loressa’s (See: Delve), just turned horizontally. 

Wins:

  • SWOT analysis early on helped us identify areas we were strong and how to best create within the time guidelines.
  • Our production assistant, Feline, helped immensely with organization, pinning useful chats in discord and compiling threads for future reference. This helped quite a lot with wading through long chat histories to find vital information.
  • A chat-free asset dump channel also helped quite a lot with easily obtaining core elements needed to be inserted into the game.
  • We originally considered making a group chat to emulate nextdoor and a website players could “browse” for information, but decided a more vaguely old-fashioned era suited the story better. We had an excellent moment of collaborative brainstorming where we decided magazines would meet the low art requirements (we could create them with CSS and cropped images of existing art) while also providing the interactive information delivery in a nicely-themed way. We then realized the surreal dissociation would be enhanced by having the magazine covers turn into images of the player’s house. 
  • When deciding on how to tackle the art, the question of perspective came up. We considered the idea of a spy cam angle to increase paranoia and also mulled over shifting perspective - the code-based solution to use increasing shadows was a clever timesaver which let us make the style and perspective feel like it was changing without a heavy art burden.

Issues:

  • Time management was a struggle in this jam due to health issues from Loressa. This hindered the overall output - without the game skeleton fleshed out with text, the core concept of the evolving environment isn't expressed very well!
  • UI also suffered from these time issues. The CSS could be cleaned up and improved quite a bit - it's functional, but not the prettiest.
  • Music looping and fading is imperfect. Twine is rather limited in audio manipulation and our musician had to depart for a vacation, so we were unable to do extensive editing on the tracks.
  • Core code could be optimized. There are definitely some “quick and dirty” bits of code.

  • Establishing the core story earlier on would have made art and audio design easier. We had a lot of collaborative brainstorming, and many creative concepts cropped us as coding was being done, but this hindered some aspects of development such as pinning down a time era for the setting and a duration for the gameplay (1 day vs months). It would have also assisted with giving the art more personality if we knew right away who was living in the house.

 

Get Pindan

Leave a comment

Log in with itch.io to leave a comment.