Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs

[Devlog] Pressure (working title)

A topic by cash4ennui created Jul 14, 2018 Views: 428 Replies: 16
Viewing posts 1 to 17
(+3)

"Four people become trapped in an underwater facility, cut off from the world by a mysterious force.   Can they escape, or will they collapse under the pressure?"  <-  i should be a copywriter 

~~

The overall concept for Pressure came first from my limitations - "how can I create a game without having to really animate anything?" - because I'm more of a programmer and less of an artist.   I landed on board games as an answer.

So Pressure is a board-game inspired strategy game where a cast of characters with varying abilities must work together to escape a dire fate.  The crew must gather resources and keep the facility from collapsing until they can either escape or until they are rescued.  As the turns progress, more and more resources will be cut off by flooding sections.  The crew may also be affected by stress, which may affect their performance.

I will be working on it as an HTML5 web game so it can be hosted directly on itch.io.  I will be using Phaser 3 as my game engine, which I have never used before!

My core features that I want to get done are:

  • A cast of 4 characters with varying stats (Physical Health, Mental Health, Combat, Mechanical, Intuition)
  • A single board on which to play, consisting of multiple zones
  • An escalating events system where different parts of the board may be affected by different events, and characters must act to resolve them, with better chances for a good resolution with better relevant stats
  • A single good ending 

My "stretch goals" are:

  • An items system where items can be used to solve certain events, or to boost character stats
  • Character/crew abilities with cooldowns
  • Procedural board generation
  • Larger crew roster to pick from 
  • Multiple endings / difficulty settings
  • Audio???

What I hope to learn: 

  • Phaser 3!!  I've used Phaser 2 a bit, but Phaser 3 has some important changes.
  • Time management, and learning to be OK with "done is better than perfect"
  • Basic game design principles - learning to tweak until it's fun / challenging enough 
(1 edit) (+3)

Day 1:  

The time zone was a little weird for me so I got a late start.  But today so far I have accomplished getting my development environment set up and creating a basic module for assigning where "rooms" are on the map.  The main interface will be dragging crew members to where you want them assigned, so I got the framework up and running as well as a basic drag-and-snap functionality:


My next goal is to work out the sections of the actual map.  I'm thinking Hydroponics, Power Generator, Oxygen Generator, Med Bay, Central Command, Main Airlock (for escaping), and Dorms to start with.  Is there a word for a hangar but like, for submarines...? 

Day 1 (END):

Woof, so I ended up spending a lot of today on figuring out how to get some ES6 features to play nice with Phaser 3.  A challenge of this so far is that about half the docs are not written yet, so I have to go through the framework source for examples and do some experimenting.  

The work I  got done since the last gif isn't terribly exciting to watch.  The main important thing is now that a crew member can now tell which room they are in among whatever rooms are on the map, and the rooms and crew members are both now extensible, so I just have to instantiate the rest of them: 


I also did a small QoL where the crew member snaps back to its original position when not placed in a valid space.  And I did some less silly art when I got tired of looking at code.  I will kind of miss the dopey face.

Tomorrow I can probably actually get to work on the events system.

Submitted (1 edit) (+1)

Looking good, neat concept!

Base is usually used for submarines, but pen is the word for a base that's covered for protection.

This looks really cool?? I'm keen at the thought of playing this sometime!

(1 edit) (+1)

Thanks y'all!  Keeping this blog and browsing others' has been a great motivator.

Day 2: 

That said, today was just SO beautiful that I didn't get as much done as I wanted, I just had to go outside :) 

I did create a module for event popups which does text wrapping and some basic placement stuff with where to put titles and choices, but it's bare bones so far.   

Here's my text popup.  You can see testing text wrapping, padding, and choice selection, kind of.   It also locks out the rest of the game while it's up.  There's a quirk which I absolutely hate - it looks like the default collision for the text objects in Phaser extend in kind of a weird way upwards off of the actual text, even with that large gap the "cry" text box extends a bit onto the bottom of "panic".  I'm posting this so if I fix later with rectangles it I can compare and be proud of myself, but for now I'm leaving it.


What I would like to do is have events pull from an XML or JSON file but I'm at a point where I really need to plan/nail down the structure of consequences before I go much further on this part of things.    My house is noisy today so it's hard to do much brainstorming.

Day 3:

Not a lot today because I burned the bejesus out of my hands, although they started feeling good enough to type in the afternoon.   I ended up rewriting part of the events popup thingy, because it turns out that you can't add geometric primitives to Phaser's groups, which made it annoying to actually destroy.  So I ended up putting the popup into its own scene and making the background of it a sprite (this makes scaling a little fiddly, but that's a later problem) .  This has the added benefit of a cleaner pause/resume.

I also started writing a bit on event resolution!  This was where I struggled to really nail down any kind of strategy mechanic - however, I came up with something with custom "dice".  :)  Until I have the details hammered out I'm just going to use a basic dice pool system, so I made a little object for that.


Whee!!

(1 edit)

Day 4:

I had wanted to start on my dice-rolling mechanic today, but I had been dragging my feet on finishing the map scene so I figured I'd buckle down and write out the stat blocks for the rest of the rooms and crew members and at least stick them on the board.

When I went to do that, I found I had made an error in doing the dragging/snapping relating to sprite-level events vs. scene-level events.  Fixing that turned out to be harder than I thought because my first solution just ended up unearthing a second problem which I couldn't find any docs for on Phaser's end.  I ended up finding a great solution to both issues by writing my own custom plugin, which I only found out I could do at all while browsing their forums in frustration.

Tomorrow I'll laser in on those event resolution scenes set up.  Then I'll work on the transitions between the board, the event popups, and the event resolution.  I have more of the mechanics details hammered out on paper (literal paper) so I'm excited to work on them! 

And because I promised myself I'd post a gif every day, here's my basic base layout and demonstrating the fix for multi-crew-member-dragging!  Ignore the slightly off-grid room placeholders, I was messing around.  My plan is to later add "airlocks" between the rooms that hook to each other to determine how water fills the areas.


(1 edit) (+1)

Day 5:

Eyyyy, got my main dice object working!  Really glad to have learned about the custom plugins yesterday, made everything really smooth.

Summary:

Dice come in different categories:  Tech, Strength, Intuition.
Dice also come in different qualities:  Novice, Adept, Expert.
The outcome of a regular roll may result in a Failure, a Success, or a Critical Success.
Dice which have higher qualities have more chances to earn success and critical success.
Crew members have different dice pools consisting of dice with varying qualities; each crew member has strengths and weaknesses.

There are also special types of dice!  I haven't implemented these yet but I'd like to once I get more done.

The first special type is a special category:  WILDCARD.  You may spend these on a limited basis to pad out a member's weaknesses, and succeed where you would have otherwise failed - but once they're spent, you can't get them back!  Think of it as the crew member lucking into a solution.

The second special type is a special quality:  DESPERATION.  These die are deployed when a crew member or the base is about to take lethal damage.  They are an extreme last-ditch measure and represent adrenaline pushing the crew above and beyond their normal limitations.  A crew member may die from just a desperation attempt.   But in a DESPERATION state, even if they die, they can succeed at what they set out to accomplish in their last moments.


(The Failure state for my Strength die is under construction)

As a more techy complaint, the example currently up for Phaser 3 that shows you how to tell if an animation is over is potentially out of date?   I couldn't get animation callbacks to work at all, it just didn't seem to be invoking the callback.  But I found on the forums that it seems to all be event-based now, instead of callback-based.  So the example is just plain wrong.  A bit frustrating!


Day 5 (END): 

Yooo, another big leap today.  I've implemented a graph structure for the manager of the map, so now the rooms connect to each other as vertices in a graph.  This will be used for controlling the flow of water, hopefully.   Here's me messing with it.


( fun fact, the algorithm I used to draw  this is O(n^2) because I'm lazy and tired )

Tomorrow is getting the turn structure down.  I have a plan in my head for how I want its architecture to look.  The map is going to do a lot of the heavy lifting, but I'm also going to include an EventManager which queues up Events and dispatches to rooms.  

(3 edits)

DAY 6:

Pfft, I don't know why I thought this would be hard.  Here's turns, leaks, and water flow modelling... I legit thought this would take me a while, for some reason, but it was surprisingly easy.


Blue means the room has water in it, white means the room is fully flooded.  How it works for now is:

If a room has a leak, it gets half-flooded.
If the leak is left alone, it gets fully flooded.
If more water spills into a fully-flooded room, then it floods a room adjacent to itself.
In this gif, you can see I have two leaking rooms that eventually cause the whole base to be filled with water.

There's actually a teeny tiny cheat programmed in.  I'm not sure if it's evident in this gif so much, but my first attempt, while "technically" correct in terms of the rules above and more in line with how water would actually move, resulted in some behaviour that seemed kind of unfair.   I'm not looking to do a sim here, I'm looking to make things predictable for the player, so I fudged it on purpose.  I think it looks "more" correct with the cheat programmed in, go figure.

 I might take it a little easy today and retreat back into planning tomorrow and this weekend so I can use the rest of my time most effectively.  Plus I think my girlfriend misses me :p

I'm actually feeling like the "technically finished a game" line is really close!  

(1 edit) (+1)

Day 7 

I don't think I can manage a .gif today, but I spent a couple hours today finalizing the events system.  Nothing new to SEE, except now I have the following things going on:

- EventManager grabs a JSON config file full of event details and creates events from them
- EventManager looks at what turn it is, and uses some logic to dispatch events to rooms
- CrewMembers can be assigned to events

Right now no script executes on failure or success of the event, but that's coming!

I also ended up adding someone to my team today!  He's doing up some map stuff now so I'm excited for that.  I might do some camera stuff to accommodate a larger map today, but I am just zonked from insomnia.  And really bad with GUIs, which is making me frustrated.

Tomorrow I'm not going to have a lot of time, so mostly what I want to do is get the dice pools for each crew member worked out so I don't waste time putting in dummy code to test the events.

I lied, here is today's gif.


Wow, this looks like it is coming along pretty nicely and I love your concept! I'm going to keep an eye on this.

Host

ahhh i just wanna say it's really awesome that you have a gif of your game's functionality for every post! along with your descriptions it makes your posts and progress a lot easier to follow because some of the descriptions are a bit hard to visualize on their own. the concept of the weighted dice is really interesting--typically i would think of having different thresholds for success but it definitely feels more like an attribute or skill to have different "tiers" for the dice.

i just want to say too it's pretty interesting that youve decided to do a board game styled game digitally--i know quite a few jammers tend to have trouble because they aren't artistically inclined so i think designing a board game but learning something new about programming or dev is a really novel solution!

(3 edits)

Thanks y'all!  I'll try to make it more understandable to actually play, hopefully.

6 DAYS LEFT

I think I'm going to start counting down instead of counting up, given we're past the halfway point!

Yesterday I was out at the beach, so no update.  :) 

Today I got a lot done and I did it pretty efficiently, I didn't spend a lot of time.  It was a nice day.

I redid my main map GUI, so now the board can be arbitrarily sized and it uses a pretty standard click-and-drag navigation.  Here's a test of my camera/GUI system.


I had some trouble at first with event propagation, in that it would still drag if you clicked somewhere in the "INFO" panel and moved your mouse.  The solution I came up with is possibly the hackiest thing I've done yet, but no problems so far!

Also now there are actually consequences for failing an event.  But the event resolution GUI is truly awful, so I'll have to show that off tomorrow I think.

I'm feeling the time crunch a little though.  Not sure if I'll be done!  My plan was to have the "flow" of a game completely playable by EOD Tuesday, but not sure if that'll be a thing.  I've already crossed off a couple things I would have liked to do, gonna see what else I can cut.  :) 

(+1)

Hi! can't reach you in discord. 

want to show some things, other rooms i'll plan finish today


Oh, wow, those ISO rooms look super cool. I kind of wish I had arranged a collab early: I posted for a programmer but didn't get any bites.

Your wiggly map preview is, like, the best thing.

Ok, this is looking really cool! I can't wait to play it.

I don't know what's up with discord!   I had some messages disappear lately, so it might be me... ?  I'll try and get that sorted, really sorry.

Anyway, it's looking like I likely won't be able to finish - I unfortunately had a family situation come up which required me to travel halfway across the country, and I already had a tight schedule after the Jam  ended because I'm moving that week.  However, I will continue to work on this post-Jam once things free up; if anyone is interested, I will create a secondary devlog for later. :)  In the meantime  I'll be trying to figure out what the heck is up with my chat.