Bitdrop

A pachink roguelite game that is inspired by Balatro, Slay the Spire, and Ultrapool, this project was shipping in a ysws hackclub event (stardance)

Stack: C++ / Raylib Compile: WebAssembly (WASM) Status: Shipped

UPDATE #1

Concept

This is the start of my game, BitDrop - a pachinko roguelike that takes inspiration from games like Balatro, Slay the Spire, and Ultrapool.

How It Works

Your ball starts with a starting score - haven't figured out the exact value yet - and gains score as it falls, cashing out at the bottom. The five things on the right are jokers from Balatro but, like, 100% original, totally not jokers, called daemons. There's a target quota score measured in bytes, with the base unit being a kilobyte and scaling up from there.

The Plan

Currently the plan is to have a limited number of balls per turn - dropping multiple at once grants a higher score multiplier, but leftover balls give more money. Pegs and balls should be upgradeable. Baskets will probably stay the same throughout, and daemons will assist with scoring higher.

What I Have So Far

  • Graphics
  • Balls drop and have physics
  • Balls bounce off pegs
  • Everything else not listed is placeholder graphics

But yeaaaaa, that's about it - and the idea for the gameeeeee. Thank youuuuuu.

UPDATE #2

Daemon Classes

Overview

Added a class system for daemons to support implementing a large number of them, including daemon level, color, effects, etc. Made balls bounce on pegs with animation, and added a hover animation on daemons. Also added a value shown on each ball, and when a ball scores, the score value floats upward a bit before disappearing.

Next Steps

Before the next devlog, I'm hoping to have a partly functional daemon system that actually interacts with the game, or at least be able to reorder and sell them.

AI Use

  • Had AI generate the daemon vector graphic

UPDATE #3

The Daemon Backend

Overview

Just worked on backend this update, plus minor graphical changes. You can now click on daemons to move them up and down, as well as sell them.

Fine Details

  • Changed the location of the daemon level indicator
  • Added the graphic for overclocking (a planned future buff past max level)
  • Made it easier to create new daemons

Next Steps

Want to add a sell value to daemons that feeds into an actual credit balance. Animations and making daemons do things is next, then back to pachinko.

UPDATE #4

The Daemon Frontend

Overview

Daemons are now almost fully functional and actually affect the game state. Added a visual so you can see which ball is being affected by which daemon.

Fine Details

  • Accidentally used ^ instead of std::pow in one function - took a while to debug
  • Added text wrapping to daemon descriptions so long text doesn't overflow
  • Added a sell value to daemons, linked to the credits display
  • Lines between daemons and balls fade out
  • Lines now pick a random starting point on the left side of the daemon

Next Steps

Thinking about a "hands" system - choose how many balls to drop at the start, then wait for all of them to score before dropping more. Also want a graphic for empty daemon slots and a shop system that pops up after passing the score threshold and all balls finish scoring.

UPDATE #5

The Shop, Part 1

Summary

Started work on a shop system and item purchases are now working. Added a few new daemons and squashed a few bugs.

Fine Details

  • New daemon "Loyalty Points" - 2x points every 5 pins hit
  • New daemon "Mesh Network" - 1.5x score for every ball in play
  • Somehow the description variables weren't being assigned in the class - took an hour to hunt down
  • Added a shop screen with the ability to buy a daemon
  • Extracted button-drawing logic from multiple places into a single function
  • Increased max score from -9.22 × 1018 to 1.7 × 10308 bytes
  • Extremely large scores now format to scientific notation

Next Steps

Still considering that hands system for later - maybe in 3 devlogs. Want a graphic for empty daemon slots and a "bought" item graphic so you can't buy the same item twice in one shop visit, plus reroll and next-round buttons.

UPDATE #6

The Black Market, Part 2

Summary

Finished the shop system started last devlog. Added rerolls and a next-round button, plus 2 new daemons.

Finer Details

  • New daemon "Schrödinger's Basket" - 50% chance of 2.5x points, 50% chance of 0.5x points
  • New daemon "Dark Web Node" - 5% chance for 15x points on scoring
  • Buying a daemon now marks it sold out instead of having infinite stock
  • Daemons you already own no longer show up in the shop
  • Next button currently returns to the normal game, but should eventually go to a levels screen / map, Slay the Spire-style
  • Credits balance now uses a thousands separator - a space instead of nothing, because a space bar looks cooler than a comma

Next Steps

Want a graphic for empty daemon slots, some form of consumables, an upgrading-daemon system, and the Slay the Spire-style level map. Shop could also use more polish - hovers, icons.

UPDATE #7

The Map

Summary

Made rerolls cost money, added a graphic for empty daemon slots, and started a level map / selector.

Finer Details

  • Built a hacking-style map based on Slay the Spire's level selector
  • Map currently randomly generates nodes and connections
  • Map scrolls with left/right click or the scroll wheel
  • Nodes have random descriptions for now - haven't come up with enemy/boss names yet, thinking NETWATCH from Cyberpunk 2077 would be cool
  • If you can't afford a reroll, the button darkens to signal that

Next Steps

  • Can't sell daemons in the map for some reason
  • Finish map so it links into the game
  • Consumables
  • Shop polish with hovers
  • SFX near the end
  • More animations

UPDATE #8

The Map, Part 2

Summary

Polished the map further and wired it into the gameplay loop, so it sets the quota and adds money. Still no animations for these yet.

Finer Details

  • Levels give money now
  • Levels award a random amount of money that increases as you progress
  • Levels interact with setting rewards and score requirements
  • Quota and reward display on hover
  • Corner brackets appear with an easing in/out size animation on hover
  • Changed the base unit from KB to MB - KB of data felt kinda smol
  • Fixed frame-update bugs where state updated after selection, causing a one-frame visual glitch
  • Faint orange glow on the column of levels you're currently on

Next Steps

  • Can't sell daemons in the map for some reason
  • Map polish for the level node entry point
  • Map path generation sometimes creates a void you can't progress through, and every node connects to every other node
  • Consumables
  • Shop polish with hovers
  • SFX near the end
  • More animations

UPDATE #9

The Map, Part 3

Summary

Added menu transitions and fixed a few bugs.

Finer Details

  • Changed the orange glow on the current column to green
  • Nodes now offset slightly on the x and y axis so the map looks less grid-like
  • Added a glitch menu transition
  • Fixed a bug where you couldn't interact with daemons in the map menu
  • Fixed map generation producing stray nodes
  • Fixed map generation producing incomplete paths
  • Level name now displays in a box on hover
  • A light path shows a route to a future node when hovering it from the current node
  • Nodes no longer mostly connect to every single other node

Next Steps

  • Consumables
  • Shop polish with hovers
  • SFX near the end
  • More animations

UPDATE #10

Graphics

Summary

Added a money-adding animation, 4 new daemons, and a reroll animation.

Finer Details

  • Rerolls now have a glitch animation
  • Scoring money summons energy balls that glitch into the balance - one per remaining ball, plus one for the level's money reward
  • Fixed a bug where you could end up with more than 5 daemons
  • New daemon "Honeypot Trap" - 30% chance to duplicate score
  • New daemon "Firmware Backdoor" - +5MB per node hit
  • New daemon "Proxy Chain" - multiplier scales per daemon owned (1.2x, 1.4x, 1.6x)
  • New daemon "Rootkit Persistence" - every 3rd ball scores 3x

Next Steps

  • Balancing
  • Consumables
  • Shop polish with hovers
  • SFX near the end
  • More animations

UPDATE #11

Graphics

Summary

Added a moving daemon animation and added encrypted nodes to the map - a mystery until you click on them.

Next Steps

  • Balancing
  • Consumables
  • Shop polish with hovers
  • SFX near the end
  • More animations

UPDATE #12

Audio

Summary

Added sound effects and shop polish.

Breakdown

  • Transition sound (my favorite)
  • Bounce sound (need a better one)
  • Hover glitched-node sound
  • Hover daemon sound
  • Hover shop item sound
  • Hoverable shop items for more interactivity

Next Steps

  • Balancing
  • Consumables
  • More SFX
  • More animations

UPDATE #13

Consumables

Summary

Added consumable slot graphics and use/sell buttons that don't do anything yet - mainly ripped from the daemon code, along with basic backend structure for consumables.

  • Also fixed a bug where hover SFX never stopped playing on glitched nodes

Next Steps

  • Balancing
  • Consumable actions
  • More SFX
  • More animations

UPDATE #14

Consumables 2

Summary

Added two consumables, changed the price of rerolls, and did some code restructuring.

Breakdown

  • Added consumable "Flash Sale" - basically Temperance from Balatro, converts the sell value of all your daemons into your balance
  • Added consumable "Decrypt" - decrypts unknown nodes so you know what they are
  • Moved the payout ball/orb logic to a separate file
  • Moved the transitions logic to a separate file
  • Consumables can now be sold, adding to the balance
  • Two types of consumable: one is instant-use, the other requires selecting a target to affect - will use this later on nodes

Next Steps

  • Balancing
  • More consumables
  • More SFX
  • More animations

UPDATE #15

Consumables Shop

Summary

Added consumables to the shop and reduced the number of consumable slots.

Breakdown

  • Consumables can now be bought and rerolled in the shop
  • Reroll animation now rerolls consumables too
  • Consumables use a different shape than daemons in the shop - still need to make the colors more distinct
  • Reduced from four consumable slots to two

Next Steps

Came up with a lot more ideas to implement:

  • Balancing
  • Endless mode
  • Skill tree
  • Overclock shards and daemon leveling
  • Daemon synergies
  • More consumables
  • More SFX
  • More animations

UPDATE #16

Map Graphics Update

Summary

Updated the map nodes to look better with custom icons, and made pathways more distinct from the background.

Breakdown

  • Swirling elements passively animate around each node
  • Glitched nodes have funky movement in their animation - I find it pretty cool
  • Made pathway lines more distinct in color from the background
  • Nodes now use icons instead of text

Next Steps

Plan to spend the next few updates on graphics before returning to these gameplay changes:

  • Balancing
  • Endless mode
  • Skill tree
  • Overclock shards and daemon leveling
  • Daemon synergies
  • More consumables
  • More SFX
  • More animations

UPDATE #17

Shop Graphics, Part 1

Summary

Updated shop graphics and animation.

Breakdown

  • Used AI to generate a shop item slot, then polished it in Microsoft Paint
  • Buttons and the main shop area now play SFX on hover
  • Buttons now have 6 vertices
  • Daemons only get bought on left-click release instead of on click
  • Since shop items now use sprites instead of vector drawing, I hue-shift the sprite to get different colors from a single source sprite - took a while to get right
  • Reduced the shop from 5 items to 4, for balance and to better fit the new graphics

Next Update Plan

  • Update the consumables section of the shop to look better
  • Add buy animations

UPDATE #18

Shop Graphics, Part 2

Summary

Updated shop graphics for consumables and built a custom class for creating custom-shaped polygons.

Breakdown

  • Made consumables look better
  • Consumables now have a full "slot" graphic and a "not enough money" alert
  • Added a background element behind consumables in the shop that looks cool
  • Applied the same hue-shift trick used on daemons to consumables
  • Made the "insufficient funds" indicator for daemons larger and clearer
  • Built a custom class for polygons with an arbitrary number of vertices, replacing the old triangle-fan drawing approach
  • That class also has built-in hover and click detection, making things easier

Next Update Plan

Hoping to keep this one under ~5 hours to maintain a faster devlog pace:

  • Add buy animations
  • Add sell animations
  • Screen shake helper function

UPDATE #19

More Animations

Summary

Added buy and sell animations along with a few bug fixes - went a lot faster than planned since it was mostly repurposing existing code.

Breakdown

  • Added buy animations for daemons and consumables
  • Added sell animations for daemons and consumables
  • Fixed a bug where the shop didn't refresh when re-entering after beating a level
  • Fixed a bug where boss levels had a smaller quota than normal levels
  • Implemented a screen-shake helper function - screenshake(intensity, duration); can now be dropped in anywhere
  • Added a glitch-location helper based on the glitch transition code - TriggerGlitchAt(bounding-box-using-raylib-rectangle, duration); glitches a specific location for a duration

Next Update Plan

Maybe 6 hours for this one:

  • Add more sound effects
  • Expand the consumables system
  • Maybe make daemons look better - though that might be the update after this one

UPDATE #20

More Animations II

Summary

Got sidetracked from the original plan and made daemons look better, plus gave the map velocity that keeps momentum after you stop scrolling.

Breakdown

  • Made daemons look better using a dual-layer system
  • Map now has velocity that decreases in speed after you stop scrolling with mouse drag or the scroll wheel

Dual-Layer Daemon Graphics

I think this is kinda cool: there's an empty daemon slot sprite, and when a slot is empty it just keeps that sprite up with text on top saying "Empty Daemon Slot (number)". When you get a daemon, the same hue-shift function from the shop daemons and consumables is used to hue-shift an overlay with a transparent interior, adding color and detail.

Empty daemon slot:

  1. Empty daemon sprite
  2. Layered text showing the slot number and that it's empty

Occupied daemon slot:

  1. Empty daemon sprite (base)
  2. Occupied daemon overlay with hue shift
  3. Title, description, and level text overlay

Then hover effects and the rest are layered on top of that.

Next Update Plan

  • Add more sound effects
  • Expand the consumables system

UPDATE #21

Consumable Board Editor

Summary

Added new consumables that modify pins on the board to do different things.

Breakdown

  • Added a system where you can select nodes
  • Added a system where you can select multiple things to modify with a consumable
  • Added pin effect "Mitosis" - splits a node into two
  • Added pin effect "Overclock Pin" - makes the pin worth 1.5MB instead of 1MB, probably still changing this, was just a test
  • Added pin effect "Volatile Pin" - adds a random payload of 1–10MB, also just a test, will likely tweak

Next Update Plan

  • Add more sound effects
  • Rename Mitosis to Meiosis and have it split the ball's value in half between the two resulting balls
  • Let a pin hold multiple modifiers, with hover showing what mods it has
  • Make pin modifiers work like Minecraft enchantments - some combinations incompatible, similar to Mending + Infinity or Fortune + Silk Touch

UPDATE #22

Board Editor II

Summary

Made it so you can stack mods on pins, with some mods incompatible with others.

Breakdown

  • You can stack mods of different types on pins
  • Some mods are incompatible with each other
  • Applying an incompatible modifier removes the conflicting one from the pin
  • Red alert text appears on consumables with conflicting modifiers
  • Hovering a pin shows its modifiers

Next Update Plan

  • Stack modifiers of the same type on a pin to level it up
  • More pin modifier types
  • Make stackable pin modifiers visually distinct from each other

UPDATE #23

Escape Menu

Summary

Modularized the code for pin mods, added levels and max levels, and started work on an escape menu for settings.

Breakdown

  • Hovering a node now shows the level of its modifier
  • Clone level 1 splits the payout between the two balls; level 2 no longer splits it
  • Added a menu button next to the balance display
  • Modularized pin modifier code to make future conflicts and features easier to add
  • Esc opens an escape menu - quit run, new run, settings, etc. - same as the menu button
  • The escape menu pauses time, physics, and all in-game interaction until unpaused
  • Fixed reroll text overflowing its box - now it resizes to fit inside the reroll button
  • Node modifiers also split out into a separate file

Next Update Plan

Got sidetracked into the escape menu again, so it's now running in tandem with the modifiers work:

  • Make stackable pin modifiers visually distinct from each other
  • More work on the escape menu

UPDATE #24

Escape Menu II

Summary

Pin mods now show their level along with every other mod on the pin, shown as colors and dots, with hover giving more detail. The escape menu also has buttons now.

Breakdown

  • Escape menu now has buttons, with a differently colored back button
  • Opening the escape menu triggers a glitch effect and sound effect; closing does the same
  • Applying a mod to a pin outlines it in the mod's color, with a dot per level of the mod
  • Multiple mods on one pin split the outline into multiple parts

Next Update Plan

  • Add a stats menu
  • Add a settings menu
  • Add a main menu
  • Maybe add consumables for baskets too, but probably the update after this one

UPDATE #25

Escape Menu III

Summary

Added a settings page and stats page to the escape menu.

Breakdown

  • New stats and settings can now be added to control or display a variable in just one line of code
  • Added a notched game-speed slider
  • Added a volume slider
  • Added a screen-shake toggle
  • Added a bunch of stats to the stats page
  • Moved the back button to the bottom of the menu

Roadmap to Ship

Nearing the phase where I ship this project, so figured I'd share the roadmap:

  • Add a main menu
  • Maybe add consumables for baskets - still undecided
  • Add a tutorial
  • Endless mode
  • Daemon synergies
  • Polish and balance - more content across daemons, consumables, stats, settings, pin mods
  • Music

UPDATE #26

Main Menu

Summary

Built a main menu.

Breakdown

  • Reused the grid background from the map on the main menu
  • Reused the tri-circle spinning animation from the map on the main menu
  • Reused the button class used everywhere else
  • Settings button opens the settings menu already built
  • Stats button currently opens the stats menu - might switch this to a tutorial button
  • Terminate button just pops up "it's a web game silly"

Roadmap, In Order

  • Add a tutorial
  • Endless mode
  • Daemon synergies
  • Maybe add consumables for baskets - still undecided
  • Polish and balance - more content across daemons, consumables, stats, settings, pin mods
  • Music

UPDATE #27

Tutorial

Summary

Built a hint-based tutorial system that triggers whenever you encounter a new mechanic.

Breakdown

  • A new hint for any aspect of the game can now be added in roughly 1–2 lines of code
  • Hints only pop up the first time you encounter a mechanic
  • Hints darken the background and dismiss with a glitch effect and sound effect after clicking "Got it"

Roadmap, In Order

  • Fix some hard-to-explain bugs noted in a personal doc
  • Endless mode
  • Daemon synergies
  • Maybe add consumables for baskets - still undecided
  • Polish and balance - more content across daemons, consumables, stats, settings, pin mods
  • Music

UPDATE #28

Endless Mode

Summary

Added a win screen with a button that leads into endless mode, called "Ascensions."

Breakdown

  • Built endless mode
  • Built a win screen - probably needs to look better
  • Fixed a bug where clicking back in an escape-menu submenu would double-click and exit the escape menu entirely
  • Fixed a bug where you couldn't exit the stats submenu from the main escape menu

Roadmap, In Order

  • Add consumables for baskets to multiply basket multiplier
  • Re-organize code before polish/balance - it's kind of spaghetti right now
  • Polish and balance - more content across daemons, consumables, stats, settings, pin mods
  • Add more screen shakes - only have a few right now
  • Music

UPDATE #29

Polish Polish Polish

Summary

Added a few consumables and added basket mods.

Breakdown

  • Added a consumable that permanently multiplies a basket's multiplier by 1.5x
  • Added a consumable that lowers a level's quota by 25%
  • Added a pin modifier that makes balls gravitate toward it
  • Consumables in the shop can now have weights

Things to Polish Before Shipping

  • Daemons
  • Consumables
  • Pin mods
  • Screen shake
  • More tutorial steps
  • Music / SFX
  • Balancing

UPDATE #30

A Little Bit of Everything

Summary

Added a loss screen, another pin modifier, changed the clone pin graphic, added music, changed the map nodes, and added an overload mechanic.

Breakdown

  • Added a loss screen with a loss sound effect
  • Added another pin mod, "Amplify" - gives 1.5x score on hit
  • Clone pin graphic now shows pull distance, and changes as it levels up
  • Added main menu music and gameplay music
  • Renamed map nodes and adjusted their colors
  • Made the final boss node bigger than before, for emphasis
  • Added an overload mechanic - a multiplier that increases by 0.08x per pin hit, decays by 0.4x per second, and gets added on scoring

Things to Polish Before Shipping

  • Daemons
  • Consumables
  • Balancing
  • SFX

UPDATE #31

Balancing

Summary

It's all coming together, rahhhhh. Added about 10 new daemons, changed icons, balanced prices, and sent the project into the Hack Club Slack for playtesting.

Breakdown

  • Added 10 new daemons
  • Changed the icon for every daemon, since many shared the same icon
  • Balanced prices of consumables and daemons
  • Playtester feedback: some things were confusing, so added more hints
  • Playtester feedback: a shop button felt unintuitive, so reworked it to behave more intuitively
  • Playtester feedback: a bug where a daemon that destroys itself didn't free up its slot

Next update is just sound effects and maybe more Slack feedback, then I ship - yay, getting this done before I sleep.

UPDATE #32

Ship

Summary

Firefox sucks. Anyways - added a bunch of SFX, and a playtester found a bug where the game broke in a goofy way on Firefox, so that got fixed.

Breakdown

  • Map hover SFX
  • Shop buy SFX
  • Cashout SFX
  • Basket score SFX
  • Node pin SFX made louder on playtester request
  • Playtester feedback: the game compiled weird and goofy on Firefox - fixed

It's up on itch.io now, wowie.

BTW THE 261 HRS ON THE CERTIFICATE INCLUDES 101 HRS FROM MY OTHER PROJECT