Log In  


PICOhaven is a tactical card-based dungeon crawler / light solo RPG for PICO-8, inspired by the board game Gloomhaven. It adopts a modified & simplified version of the mechanics used in that game, to fit within constraints of the PICO-8 environment (code size, resolution, etc), and to streamline solo play.

The story includes 16 playable scenarios (some are optional side quests), 8 levels of ability upgrade choices, and multiple items that also affect gameplay.

Note: This is just a free, solo-fan-made project and has no affiliation with Gloomhaven. If you like this type of game I recommend checking out Gloomhaven (and its official video game adaptation) for a game with a lot of tactical depth from multi-character cooperative play!

Play PICOhaven here: (desktop or mobile)

Cart #picohaven-40 | 2022-09-01 | Code ▽ | Embed ▽ | No License
25

Quick Gameplay Overview

(for those who like to jump straight in and figure it out as you go)

  • Use the arrow keys and the 🅾️ button ('Z' if using a keyboard) to explore, select cards, and fight.
    • The other button occasionally used is ❎ ('X' on a keyboard) to cancel/undo.
  • Defeat all enemies to advance the story and unlock new scenarios, as well as upgrades to your ability and modifier decks.
  • You are 'exhausted' and fail a scenario if you take too much damage, or if your deck runs out of cards (each time you've played all the cards in your deck you reshuffle them, but a random card is 'burned' and not available for the rest of the scenario).
    • If you would take fatal damage but have cards in hand, you will instead 'burn' a random card to block the damage, but beware: this shrinks your deck so you'll have limited turns left to win the scenario before becoming exhausted.
  • The game should automatically save your progress after each scenario, success or failure, allowing you to come back to it later on the same device (you can retry the same scenario multiple times and earn XP even on failure).
  • If you're not sure what happened in combat because a lot of text scrolled by quickly, at the end of any round you can press ❎ to scroll back through the message log.
  • Let me know what you think, and if you run into any issues or questions...

How-To-Play, with screenshots

PICOhaven is a tactical turn-based dungeon crawler / light RPG. You win each scenario and unlock new ones by defeating all enemies in all rooms (unless otherwise specified) before you are exhausted.

PICOhaven is card-based in that at the beginning of each round, you choose two action cards you'll use. These include Movement, Attacks, and other actions:

After you select your cards, enemies will draw random action cards, and you will see an overview of what each character will do that round (the white numbers indicate the initiative: characters with lower numbers will act earlier).

When it is your turn, you get to play these two actions (in either order)... or instead use either of them as a default "move 2" or "attack 2" action if that's more useful.

At the end of the round, you discard those two action cards, and will have to choose different actions the next turn. When you've played through your entire deck, you will automatically 'short rest': you redraw your discard pile but randomly burn one of those cards, meaning you can no longer use it during this scenario. This means you have a finite number of rounds of play before your deck runs out of cards. Some more powerful cards are burned rather than discarded when you play them, so they can only be used once per scenario.

You become exhausted and lose a scenario if you either run out of health (HP), or if you run out of cards in your deck.

At the end of each scenario (success or failure), you return to town and all of your cards, HP, and items are restored, in preparation for your next adventure-- you can try any scenario as many times as needed. The game should automatically save your progress each time you return to town and allow you to return to it later (on the same device/browser-- data is saved locally).

See the next section for some additional details...

More Details on How-To-Play


You will discover additional details, special cards, powers, items, and rules by playing, but a few other notable rules:

  • You open a door by ending your movement on it. Monsters revealed in the next room will not act until the next round.

  • Your initiative in each round (how early or late you act relative to the monsters) is set by the initiative value of the first of the two cards you selected before the round (shown in a circle in the upper right corner of the card in the card-selection screen):

So even once you know what two cards you want to play this round, by choosing which card you select first in that 'choose cards' view, you can choose whether you will act earlier or later in the round. When your turn comes in the round, you can still choose to play those cards (or the default move 2 / attack 2 actions) in any order.

  • A "burn when used" card is only burned if you actually play it. If you select it as one of your two cards for the round, but when your turn comes you use a default Move 2 / Attack 2 action instead of playing it, that card is only discarded, and you'll have another chance to use it the next time you redraw your hand.

  • You collect treasure or coins by ending the turn on them (or by using certain cards or items). You do not need to collect treasure (and rarely will have enough time to collect all of it without running out of cards and failing a scenario), but it will eventually allow you to buy items that enhance your powers. Note that once you defeat the last enemy in a scenario (or achieve some other special scenario objective) the scenario is over and you return to town, so if you want to pick up treasure you have to do it before completing the scenario... that may not make sense fantasy-dungeon thematically :), but the game's balanced around only being able to afford a few items over the course of the entire campaign.

  • Whenever you attack, you draw a random modifier card from your deck of modifiers which is applied to the damage from your attack card. Most modifiers are -1, +0, or +1, but there are some that are larger, including a "*2" and a "/2". When you first get to town, try "View Profile" to see your current modifier deck. You'll have opportunities to upgrade this deck over the course of the campaign, whether that's by removing negative modifiers or adding additional positive modifier cards.
  • Enemies do not have modifier decks and always do the damage shown on their card for the round.

  • If you would take damage that would reduce you to 0hp, you will instead randomly burn a card from your deck to negate that damage, though this reduces the number of rounds you have until you are exhausted by running out of cards. If you have no cards in your hand (i.e. all of them are already discarded or burned) when you are reduced to 0hp, you cannot burn a card and are exhausted as above.

  • There are a few special conditions that attacks (yours or monsters) can apply, including stun and wound. Stun makes the recipient skip their next turn. Wound makes the recipient lose 1HP at the end of every round (until healed).

  • Some monsters, actions, and items may provide a Shield, which negates the first N points of damage from every attack.

Strategy Tips (minor spoilers)

  • Look at upcoming enemy actions for the turn and try to avoid taking unnecessary damage. While you are a warrior, a few mighty blows can bring you to your knees, and healing is in short supply. Winning many scenarios involves more tactical positioning than 'tanking' damage.

  • Don't be afraid to fail a scenario-- you gain some small amount of XP for the actions you take during a scenario, and you keep any gold you collected even if you fail, and you can try again.

  • Sometimes it's advantageous to choose a slow initiative, to let yourself react to monster actions or let a monster move closer so you can dart in and attack it without getting counterattacked. Remember that you can use the default Attack 2 / Move 2 actions, so you can select a slow-initiative card such as "Loot 1" as your first card, to use its slow initiative... but then when your turn comes, play it as a Move 2 or Attack 2 instead.

  • Using too many "burn when used" cards early in the scenario will reduce the number of turns you have until you are exhausted by running out of cards-- you may want to save them for important moments (by using them as Move 2 / Attack 2 defaults the first time through your deck).

  • Collecting treasure can help you buy items, but is not required-- if you spend too many turns doing that you'll run out of cards before you can complete the scenario...

  • There are 16 playable scenarios, though about one third of them are optional 'side quests'.

  • You do not need to use the 'long rest' action-- you will automatically 'short rest' to redraw cards each round. The 'long rest' can be useful when you critically need healing, an item refresh (for a few specific items), or access to a specific card quickly, but it uses up a turn and burns a card so there's a cost to it...

  • 'Long rest' is the one action you can still perform while stunned.

  • Add your own Q&A in the comments below!

Dev Notes

Releases

  • v0 (July 2021): concept and screen mockups (no code)
  • v0.1 (Aug): first playable prototype of concept
  • v0.2 (Sep): add story, enemies, music, special actions, items, iterate on game
  • v0.9 (Oct 12): feature-and-content complete? release to a few playtesters
  • v1.0 (Oct 20): integrate first feedback, improve enemy pathfinding, first public release on BBS!
  • v1.0b: add more tutorial-related messages, improve hand selection UI
  • v1.0d (Oct 28): based on feedback, add more tutorial-related messages, "undo" for move/attacks before confirmed, screen shake on "*2" modifier, and refactor to free up tokens for these.
  • v1.0f (Dec 9): add a few more tutorial-ish notes during the early levels (initiative + dmg mods)
  • v1.1a (Aug 2022): under-the-hood revisions to free up tokens (PICO8 custom fonts, linting, etc) and add some more tutorial messages during the early levels. mostly a cleanup to prepare for a "Chapter 2" some day...

General Experiences + Learning

  • I've just played around with small games (mostly tweetcarts) in PICO-8 previously, so this was a good opportunity to learn more about the platform and Lua, experiment, and plan something larger out.

  • I ran into platform limits many times and had to step back and simplify or find a more efficient way to structure code and data to free up "just the 100 more tokens I need"... but I found this resource optimization a fun challenge. And frankly, if I hadn't been working within the PICO-8 resource constraints I might never have released anything-- in the absence of external deadlines it's useful to have some constraints that keep scope in check.

  • ipairs(), foreach(), and especially P8SCII were new to me and useful for both saving tokens and making it easier to think about code. Amusingly, I implemented my own subset of P8SCII in a mixed-font-and-sprites print routine, but misunderstood its API so I implemented something that behaves differently. To clean up some day...

  • Using nested calls to split to convert long strings into 2d-4d arrays of key-value game data was essential (I eventually maintained a separate spreadsheet of level/card/enemy/upgrade data that was easier to edit and which compiled all the values together into these long "database strings" which I would copy and paste into the code).

  • I built a simple "dev support cart" using poke+cstore to move some game data (long story text strings) into unused sprite/sfx cart space, even without enough tokens to include data compression routines or use something like PX9.

  • This is the first project I didn't develop primarily in the PICO-8 editor-- I used VScode to edit one monolithic .lua file that was #included in a .p8 cart that held all the sprite/map/sfx data. I usually developed with two editor panes open side by side-- one focused on whatever I was working on, and the other to search/scroll through the code for related functions / variables / context.

  • Debugging unexpected pathfinding behavior (even with the benefit of someone else's A* code, see note below) and figuring out what behavior I wanted when enemies were clustered around chokepoints was delightfully frustrating. This is the one area I ended up building a completely separate test cart I could populate with enemies and obstacles, just to visualize multiple pathfinding approaches.

  • The source code available in the cart above has comments and whitespace stripped because I was running into Compressed Size limits. I have a fully-commented version of the source code I'll plan to clean up and upload somewhere in the future...

  • Like many games, I had to strike a balance between 'building an engine' (which could lead to unnecessary generality and resource use not needed for this game) and hard-coding behaviors that make sense for a specific enemy/item/card. I think I kept it general enough to make a "Chapter 2" some day with new characters/abilities/items/enemies.

Thank You

  • Thanks to SH, SF, and DW for playtesting and feedback.
  • Thanks HB for support and sfx feedback.
  • I adapted morgan3d's A* pathfinding routine for parts of enemy movement
  • I watched some of the LazyDevAcademy "developing a roguelike" videos in the past and they were educational, even if this isn't a roguelike (I used their example of actor.ox/actor.sox + animation timer for animating sprite motions between player input cycles).
  • Thanks @thisismypassport for the "Shrinko-8" minifaction tool, which I used to free up some space for additional tutorial messages and text

25


I got some good 1:1 feedback from playtesters and updated the cart to add more 'tutorial' style messages (these disappear after the first few levels to reduce the volume of messages), as well as other UI updates and undo/confirm options in a few key places.

The game is still not fully self-explanatory due to size limits (unless I can free up some more tokens), especially when it comes to some of the later upgrades... so if you play it and find it confusing, I recommend reading the "how to play" and tips hidden behind spoiler tags in the post above or leaving questions here. Have fun!


fun! I killed the last enemy in the second dungeon (elgin manor) and the game instantly took me back to town without letting me pick up the loot -- is that intended?


Thanks! Ah, that is as designed (to add an element of risk to how much you pick up optional loot vs. ensure you can still defeat the enemies), but I realize that's not explained anywhere so is confusing. I'll look at whether I can add an in-game note about that...


1

I've also now uploaded commented-in-more-detail source code to https://github.com/icegoat9/picohaven, including some notes-to-self I put together during development to remember how the different game states connected, what all the sprite flags meant, what global variables I was using, and so on.

This is partly just for myself to remember in the future since this was my first major PICO-8 project and I learned a lot about what workflow works for me, but I figured I might as well make the repo public in case others learning PICO-8 or working on similar types of games find it useful in the future.


Wow, you did a fantastic job on this. It helps that I already know how GloomHaven works; I suspect someone new to it might need some more explanation for the different systems, but what's here is really impressive and captures the feel of the larger game in a way that's streamlined and quick. Well done.


Thanks, @nephilim! Agreed-- the gloomhaven-style "select 2 cards for a turn" + default actions + discarded vs. burned cards concepts are complicated and take some time to grok if you haven't seen them before (and it takes a while to figure out strategy for how to select cards and initiative).

I wasn't able to fit a full tutorial into the game and had to settle for some screenshot-type how-to outside it, so it's not as accessible as it could be. So I'm happy whenever there are even a small number of players who get it and enjoy it!


1

Well you certainly succeeded with it. I played it all through my lunch hour today, and it was great fun. Indeed, I think I prefer PicoHaven to GloomHaven. Having only one character means no waiting for turns. The maps are nice and small. Plays fast but still feels strategic. No "bookkeeping" to do. Feels zippy. Really enjoying it!


@icegoat, The monster once attacked turned into a treasure and continues to ask for attack cards ?


@dw817 there’s not as much tutorial as there should be— when you defeat a monster it drops treasure. But if there’s a door in the room you have to use cards to go to it (the level ends when you defeat all monsters in all rooms). In an earlier version I had the next door flash during the first level as a tip. Also, if you want to pick up treasure along the way you have to end a turn on it.


1

Hey, got to the end of the campaign. Really great stuff! Very satisfying PICO-8 game. Solid all the way through.


So, the endgame screen implies that this is just "part one". Is there a "part two" coming...?


Maybe some day especially if people are interested :)... I have a new character and loose story sketched out for a Part 2, but I also maxed out token and compressed size limits, so I'd need to take a step back and figure out how to rewrite a chunk of the code or cut some existing features to free up enough space for some new card mechanics.

Maybe rewriting the icon system to use the newer PICO-8 "custom fonts" mode would help, or maybe if I took out all the tutorial style tips/hints and called Part 2 advanced, "play Part 1 first to learn how to play"...


1

Well, I'm interested!


1

I've released a v1.1. Mostly this is under the hood changes (using PICO-8's newer custom font functionality for the multicolor icons to save tokens, a step toward being ready to write a Chapter 2 in the future), but I also added more tutorial prompts and hints about concepts like "initiative" that were confusing-- these just show up during the first few levels.

It's still a complex game that may benefit from either reading the tutorial text in the post or having some familiarity with gloomhaven, though.


Still looking forward to a chapter two!


Thanks for the interest! I have a chapter two started but it's drifted onto the back burner compared to other projects, I hope to pick it back up...


I'm now actively working on "Chapter 2", a sneak peek:

I'm trying to balance keeping the scope modest (keeping the same 'engine' with a focus on new content: story, enemies, abilities, upgrades) vs. adding new types of actions + gameplay that need a lot of new code (which means figuring out how to be more efficient with existing code to free up space), we'll see!


This is fantastic news. Looking forward to the release.


@nephilim If you happen to have any interest in doing some playtesting / getting a sneak peek, I have a work-in-progress cart of the first 1/3 of the sequel here, I'd welcome any feedback and notes:
https://www.lexaloffle.com/bbs/?tid=54345&tkey=nhs7I5GHMIoqsSJR8Rxi

However, the savegame format will get changed for the official release, so you'd need to start the campaign over then.

I think the code is ~95% done in terms of planned functionality (famous last words..), but I still have a long list of level + enemy design, balance, and small UI/gfx/sfx wishlist items that I'm working on before the actual release.


Oh, sweet! Yeah, I'll try to check it out and let you know if I have any suggestions.


Okay, I played through the test campaign. Here's how it ended up (the last level was after I had completed the campaign, though, so I never got to use the upgrades from it):

Overall, it felt a lot like the original, which is a good thing. It felt very familiar and I was able to get up and running quickly. I didn't experience any difficulties or graphical glitches. The story felt engaging and I liked how it branched partway through, which felt like some agency. I got through the test campaign with only one failure at normal difficulty, and I think that was probably an outlier because I was taking more damage than I expected and dealing less.

One thing I did miss from the original was the ability to "grind" on levels. I liked the ability in the first game to always have a "sidequest" style encounter we could have if we wanted to work on getting some gold or XP. I hope you keep that, especially if it can have more variety of maps or random maps, to extend the play time and let you buff up to take on later encounters if you are having trouble.

I am also equally frustrated in PicoHaven as I am in FrostHaven/GloomHaven with the fact that we can't just pick up dropped coins after we defeat enemies. It would be one thing if some scenarios didn't let you because, say, you were trying to escape before something bad happens, but sometimes, the story just describes taking a breather after the battle, which should let you, say, pick up that chest. Not really an indictment of PicoHaven, since you're following those other games' leads. But if you felt so inclined as to let loot be picked up afterwards, I would not complain!

Anyway, it felt solid, and is already a worthy successor to the first outing. I'm excited to see when the full version comes out!

Great work.


Thanks for testing and the feedback! Two more quick questions about your playtest:

  • Did you find yourself in any situations where the jumping move was especially useful / got you out of a jam or past some enemies?
  • Did you ever manage to push an enemy onto a trap (or move to trick an enemy into walking over a trap?)

I initially don't have any replayable/grindable levels in the sequel, just a few one-off side quests later, but it's good to hear you found them worthwhile in the original-- I do have a few levels that aren't story-essential which I could repurpose to make replayable side missions.

I'll think about ways to fit in some light randomization on those for variety (I don't have room to include a fully random level generator, though before I decided to make a sequel I'd thought about making something like "PICOhaven: Tactics" as just a series of endless procedurally generated random missions-- but wasn't sure how to keep that interesting + challenging once you max out character level + upgrades).

And I hear you on the treasure collection-- I agree it doesn't make story sense, but that's probably staying as is for this game-- both to line up with the board game inspiration, and because I do think the out-of-the-way chests does adds a nice optional challenge to each level with a payoff of more items. I suppose an alternate way to provide that would be awarding all the treasure in a level when you beat it, but then adding some very difficult optional side missions that have lots of gold/chests which would become the optional challenge you can face if you want even more items. Hmm.

Or maybe I will take the easier route of tweaking the story to add a bit of urgency for why you need to run on to the next mission and can't wait to pick up treasure, or perhaps thematically there are additional enemies "off screen" who flee with any uncollected treasure once you "win the level" by defeating enough of their allies...

Anyway, thanks for the support, I hope to get this to a release in the next month or two.


> * Did you find yourself in any situations where the jumping move was especially useful / got you out of a jam or past some enemies?

Yes! There was that level in the tavern where there were three skeletons and then a cultist behind the bar. Using a three-move and then a four-jump, I was able to jump behind the bar in the first turn and attack the cultist one-on-one and funnel the skeletons to fight them one-by-one. It was a fun moment because it felt like a fun strategic move.

Other than that, not so much. There was one place where I wanted to jump over a monster to go get a chest, but I had of course lost or discarded my jump cards by then so I wasn't actually able to use it.

> * Did you ever manage to push an enemy onto a trap (or move to trick an enemy into walking over a trap?)

I managed to push an enemy into a trap on (I think?) the first level? It felt pretty serendipitous, though; it didn't seem like something I could reliably plan for, especially if I don't go first in the initiative order. After doing it on that first level, though, no, I didn't manage to use traps to my advantage at all. The situations where that would happen seem kinda scarce, but it is satisfying when it happens. In general, the pushing boon to the attack didn't seem to do much, since enemies (usually) were able to just walk back up to you; the only exception, really, is the zombies when they can only move one, but those are generally easy enough to stay away from anyway. If you're looking to make pushing and shoving more impactful to the strategy, you might consider something like if you push an enemy into a wall, they take damage, and if you push them into another enemy, they both take damage. I'd recommend dealing damage equal to the distance they didn't travel. I.e., if you do a push 2 against an enemy up against a wall, they take 2 damage. If they move one and then hit a wall, they'd only take one damage. If they only move one and hit another enemy, they'd both take 1 damage. Etc.

As for grindable levels, I think what's nice about that is you can extend your play time to whatever you want, and you can grind to get all the buffs, which is kind of fun.Its true that by the time you unlock all the buffs, you're not really in danger of failing those scenarios (of course, runs of bad luck still happen, but generally). But that's fine because even once you get to that statae, you can set yourself some other challenges like seeing how little damage you can take before finishing the level, speedrunning the level, etc. In the first PicoHaven, I burned through the story levels quickly and ended up playing a lot of the "side" levels, just for fun.

One option would be to just let the player keep replaying any level after they beat it. One of the bummer things about story levels in PicoHaven was that you could only play them once; I would have enjoyed the option to go back and re-play levels I'd already played with different strategies or buffs that make it easier or just to have a different map from time to time instead of the same few grindable levels.

As for treasure collection, I wouldn't worry too much about it. It's not a game-breaker or anything. When you're trying to get that next upgrade and you end a level literally surrounded by gold, it's kind of a bummer, but if you add grindable levels, players who have a string of bad luck and can't collect gold won't fall behind because they can always grind a bit to catch back up to where they're expected to be.


> If you're looking to make pushing and shoving more impactful to the strategy, you might consider something like if you push an enemy into a wall, they take damage.

I like that idea! I've been trying to mix in enemy types that play differently and suggest different tactics (e.g. summoners you want to rush to damage early, slow-moving hard-hitters where staying at range is useful), and one type is high-shield enemies where traps and wound are more effective that face to face combat. Push-into-obstacle damage could provide another strategy for those. I'm going to prototype this and test it in some dummy levels and see how it plays...

I could also see a thematic justification for push damage scaling with distance in either way: by "# of squares not moved" or the "# of squares pushed until it hits an obstacle", so let me do some quick tests on the gameplay/power side of this...


Working prototype in gameplay / balance testing now :)

(I technically don't have quite enough tokens and had to comment out another game feature for now, but if it plays well I'll just have to find a place to trim some tokens elsewhere...)


And two years later: the sequel, PICOhaven 2, is released, just in time for Halloween! At least in some time zones...

https://www.lexaloffle.com/bbs/?tid=54850


Wow! So much depth here. Gloom haven is a heavy one to tackle and you crushed it. Really nice rpg to play on a touch screen too, since it's turn based. I was cooked when I beat 4-5 quests and passed up the 8ATK card. Remember to destroy the blue circles!


Thanks for the comments @Huwans, glad you're enjoying it!

And I'll hint that you don't have to kill the ELEMental the first time you meet one, and you will find a quest that better prepares you to face them in the future... I tried to play through the campaign with each possible upgrade choice to ensure it's at least possible (though some certainly make your life harder than others)...



[Please log in to post a comment]