VERSION 0.0.8C 06/28/2026
Bug fixes associated with power-ups, such as after an emergency save and then clicking a power-up, not having a game over.
Version 0.0.8b 06/25/2026
Modified left and right edges so that puppies don't catch on the edge of the playpen. I thought about leaving this, which would have meant of the player went all the way left/right, the puppies would kinda bounce out a little. I felt that would be more frustrating than necessary.
Widened the aimline slightly.
Made the aimline on by default for new players.
Version 0.0.8a 06/23/2026
Fixing bugs today. Little things like ensuring all puppies start on the start line in poly mode. The radius ensured they started correctly in bubble mode. Added a polyOffset value to all the puppies to adjust their starting positions, so they all start on the line.
Gave boneradius value in the assets, so can get the powerupBonedrop bone correct for the aimline.
Modified numbers left and right, attempting to get the puppies to go to the edge of the play pen. A few of them have their ears catching the edge right now. Not sure if I want to fix that or call it a feature... decide later.
Modified the " You Win " game screen. Added a congratulations line and added a sponsor line. The sponsor name is in the assets.js file and defaults to "Dana". I'll add a screenshot above for a short while, then move it below with the others later on.
Made a few of the tossup values variables instead of hard-coding. Added a multiplier for ismobile and have the system do the toss up to give it more of a push. Set it to 2 initially.
Version 0.0.8 06/22/2026
Fixed some minor bugs - nothing worth mentioning specifically.
Added universal tokens - player can get universal tokens, which can be used for any powerup. Currently, it saves the values locally and reads those from memory. Right now, "get" just adds the universal token. If the player does not have a specific power-up token, they can use a universal one. Eventually, this will be part of the monetization piece and will have to save things on a server instead of locally to keep cheaters away and ensure payment and such, but for now, this works. I have tested adding and using tokens, and they seem to work. Need to test on iPhone, but do not expect any issues (famous last words!!!).
Made the aimline a better color and a little thicker. I *might* make these user-adjustable in the future. I made them global variables, so it wouldn't be the hardest thing to do in the future if I get the gumption (aimlinecolor, aimlinewidth).
Bug Fix: When aimline is on and the user uses the bone drop, the aimline didn't reset and is a bit off left-to-right. Fixed.
Version 0.0.7a 06/22/2026
Bug fix - worst bug fix ever!! I spent way too long trying to fix what I thought was a disconnect between my scenes, but it turned out to be an absolute minefield of mobile web development. The difference between touchend and click in a mobile browser is a killer due to the 300ms ghost-click variance.
When you use touchend, the DOM element disappears instantly, but the mobile device's hardware driver is still completing its touch lifecycle. 300 milliseconds later, the browser fires a simulated click event at those exact same coordinates. Since the HTML overlay is already gone, that phantom click drops directly onto the raw Phaser canvas underneath, tricking Phaser into thinking a user is perpetually holding down a finger. It worked just fine on the browser, but failed on my phone.
Switching to click forces the browser to consume the entire down-up-tap cycle safely within the HTML container before vaporizing it.
Version 0.0.6 06/17/2026
1. Fixed the first bug from the bug report - reference error, locking the game for the powerup bonedrop. Thanks, Bill!
2. Changed the way difficulty is calculated and works when it comes to spawning puppies.
Dynamic Spawn System Summary
The spawning engine uses a "Funnel and Floor" design. It sets a structural limit on the puppy tier allowed in the playpen, creates a bottleneck for the highest allowed tiers, and leaves a flat, equal baseline for the smaller puppies.
Smaller puppies never drop out of rotation. Instead, the pool stretches to keep them in play.
The system tracks progress using the current level (which increases every time a new puppy is unlocked). The difficulty mode determines the maximum puppy tier allowed in the playpen:
Easy Mode: Capped at the maximum unlocked puppy (maxUnlocked).
Medium Mode: Capped at 1 tier below the maximum unlocked puppy (maxUnlocked - 1).
Hard Mode: Capped at 2 tiers below the maximum unlocked puppy (maxUnlocked - 2).
(Note: Level 1 has a safety floor that allows puppies 0–4 to spawn to initialize the game.)
The algorithm calculates probabilities backward from the current ceiling puppy, splitting the math into two zones:
The Funnel (The Top 3 Tiers): To make the highest allowed puppies rare, spawn rates are throttled. On Hard Mode, the ceiling puppy has a 5% weight, the tier below has 15%, and the tier below that has 30%.
The Floor (Everything Else down to Tier 0): Every remaining lower-tier puppy gets an identical, flat weight of 40%.
Even Distribution Mix: Because all lower-tier puppies share the same baseline weight, the spawn rate for 90% of the roster feels flat ($\approx \frac{1}{\text{total puppies}}$). This guarantees a wide variety of puppies rather than repeating a single tier.
Automatic Scaling: As the roster grows from 5 puppies to 17 puppies, the math self-stabilizes. The weight pool stretches, removing the need to code separate spawn arrays for later levels.
The Endgame Balance: By the final level on Hard Mode, the top tiers are bottlenecked by the funnel. Over 90% of the puppies appearing in the pen will be a flat mix of lower-tier puppies. This tests spatial management and requires players to merge up to the final puppies manually.
3. Players can now set the difficulty in config to easy, medium, or hard
4. Added a submenu in config that contains puppy pile engine configs like difficulty and physics. Leaving sound and a few others in the main config.
Version 0.0.5 06/16/2026
Added Bug Report / Feedback form here: https://docs.google.com/forms/d/e/1FAIpQLSe4AHaxI-nN9DVE_YOIhBCm_8Bqt_ESGv3mrWHA0idjQ5zelg/viewform?usp=publish-editor. It can also be clicked on in-game in the Game Over page - the button called "Feedback."
Updated / Replaced 2 puppies - Frenchie and Labrador. Frenchie is now a white French Bulldog with a flower crown. Labrador is now a Chocolate Lab. I may need to shrink the Lab a little bit.
We now have a "You Win" game over page - if you combine the last two puppies, You Win! New screen just for you - not like anyone will ever achieve this!
I swapped the last two pups... partly because of size, and partly because one of my friends (thanks, Stahn!) said that the original Scooby Doo was a Great Dane, and my house is a Scooby Doo house, and you are a winner if you get him combined!
Added the squirrel 🐿️ powerup!! This was a biggie!
Fixed a bug where if you had previously had game over and then used a powerup, the gameover variable remained true. If you were playing the game and not game over, clicked on the powerups, and then canceled out of the powerups, it would take you to the game end. Oops!
The high scores now have default values. This was Rask's idea. It gives the players something to shoot for.
Added an aim line. It is off by default, but you can turn it on in configs. Stahn asked for this and since he told me about Scooby Doo (see 4 above), I felt he deserved something. :)
Version 0.0.4a 06/13/2026
Moved the assets out of the main index.html file into their own assets.js file with variables in the index.html file referencing them. This was done to shrink the size of the index.html file.
Moved the powerups to their own .js file so I could work on them without messing up my other code (too bad).
For testing purposes, everyone gets 10 powerups. It won't stay that way. Need to figure out how to earn them, or if it will be like Who Wants to Be a Millionaire, and you just have a certain number.
Bug fix - bone getting stuck.
Version 0.0.4, 06/12/2026
STARTING MAJOR UPDATE - POWERUPS
1.1 powerupBoneDrop: Bone drops down and pops the puppies with satisfying barks and points. Other puppies fill in the empty space afterward, and you get your next puppy afterward.
Version 0.0.3, 06/11/2026
Huge bug fix! As with most things, when dealing with your children, most of the problems are in the space between the ears! Our puppies are no exception! Five puppies have big, pointy ears, and even though I have them well mapped (see the image and the green map around them), the space between the ears was not being used. Wow, now it really is a puppy pile!
Modified the physics.matter.positioniterations from 10 to 12 (default is 6). This calculates how much they overlap before being pushed apart.
VelocityIterations and positionIterations dictate how many math "passes" the engine runs on every single collision, every single frame, before updating the screen.
Velocity Iterations (The Bounce & Motion Math)
This setting controls how accurately the engine calculates the forces, speeds, and bounce trajectories immediately following a collision.
What it does: When two puppies collide, the engine looks at their incoming speeds, masses, and bounce settings (restitution). It makes a guess at their new velocities, checks whether that guess violates the laws of physics, refines the guess, and repeats.
Upping it (e.g., from 4 to 10): Gives you incredibly stable, crisp bounce physics. It stops high-speed objects from passing straight through each other like ghosts, and it prevents stacked items from jittering or vibrating randomly.
Lowering it: Saves CPU power but makes collisions feel "mushy." At very low numbers, puppies might hit each other and drop flat instead of bouncing, or energy will randomly disappear from the game.
Position Iterations (The Overlap & Squish Math)
This setting controls how cleanly the engine calculates where objects sit in space, preventing them from overlapping or sinking into each other.
What it does: Because items move by jumping small distances every frame, they will inevitably intersect and overlap for a split second. The engine must calculate how far apart to push them so they touch edge-to-edge. It does this iteratively, so pushing Puppy A away from Puppy B doesn't accidentally shove Puppy B inside Puppy C.
Upping it (e.g., from 6 to 18): This is the ultimate cure for puppies "sinking" into each other. When you pile 10 or 15 puppies into the playpen, the weight of the top puppies pushes down hard on the bottom puppies. High-position iterations force the engine to resolve the structural stress, ensuring every puppy maintains its hard boundary edge.
Lowering it: Causes items to get permanently stuck inside each other. If a heavy puppy lands on a smaller puppy, the small puppy will visibly get squished or clipped halfway inside the floor or the walls because the engine ran out of "passes" to calculate how to push it back out.
Made the fontsets consistent. I did this by switching the 60 or so instances of a font to use a variable (${fontSet}), and then defining it ( let fontSet = "Arial, 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif";). If I want a different font later, it is much easier to change.
Adjusted the title screen - moved the title above Fire Dog, also added a random catch phrase in Fire House Red, and then randomly picked one...
let catchPhrases = [
"Unleash the hounds!",
"No pup left behind!",
"Who let the puppies out? Who? Who?",
"Puppies... assemble!",
"May the paws be ever in your favor.",
"Did we just become best fur-iends?!"
];
let chosenCatchPrhase = Phaser.Math.RND.pick(catchPhrases);
Badge level update now has a progressive color palette: less than 5, less than 10, and 10 and up are 3 different colors.
Music Volume: Balanced the background music levels by cutting the engine's output to $1/3$ (scaledVolume = currentMusicVolume * (1/3)). This permanently reduces the number of racks while keeping the UI menu values unchanged.
Corgis and larger dogs now have a different voice than the Chihuahua through the Boston Terrier.
Version 0.0.2a 06/09/2026
Fixed transition from end game to new game so that it reads the saved config. This fixes config changes during gameover and has them take effect at the start of the next game - like switching from bubbles to non-bubbles.
Fixed a bug where, when you change modes (bubbles to non-bubbles), the invisible side appears immediately. Now, this mode is kept for the current game.
Fixed bug that changing modes didn't take effect until a complete reboot of the game, not just starting a new game.
Fixed a bug where turning off the marquee in future iterations of the game didn't actually prevent it from showing up.
New Feature: Added a background logo to the game. It defaults to the game logo, but can be anything. Set it to a 260px square and set the alpha to 6% so it stays out of the player's way while still being subtly present.
Version 0.0.2 06/09/2026
MAJOR MILESTONES
Fixed some blurriness - particularly on PC monitors.
Redid all the puppies. They are now:
Saved as the size they are rendered in the game. This means the code is no longer changing the size.
Removed the bubbles* (see more on this below with the MAJOR FEATURE CHANGE), which makes them clearer - people were complaining!
MAJOR FEATURE CHANGE: There are now two modes - bubbles and not-bubbles. Bubble mode (at least for most people) is easier and is what you are accustomed to. When playing in this mode, the game puts the bubbles around the puppies, and all geometry and physics are based on nice, round balls. When playing in non-bubble mode, ears and sometimes tongues matter. They will catch on to things, and the puppies will have to physically touch to get them to combine. This also means less space between the puppies. The space the puppy takes up is slightly smaller due to losing the space inside the ball, but not a substantial change. From a radius perspective, this isn't much different, but it is a little different - you have been warned.
Version 0.0.1i 06/08/2026
Graphics changed - I converted all the base64 graphics back to PNGs and resized them from 512x512 px to their in-game radius size. I did this with PowerShell. I copied the {stuff} part of the array into a file, then ran the script, which produced both the PNGs and a text file containing the new base64-encoded images, which I could then paste back into the script. The goal of this was twofold.
Shrink the program's size, which it did. This array went from 65k to 39k.
Make the images render better in the game. I have pasted screenshots of both the old and new versions. I believe the Chihuahua, especially, looks a lot better. I intentionally kept the pug's ears sticking out of the bubble, as this color variation helps distinguish it.
Version 0.0.1g 06/07/2026
BUGFIX: Fixed the top score to show the name of the player instead of "Champion" or "Player."
Getting it set up with GitHub for a repository and Vercel for hosting.
# new file: icon.png
# modified: index.html
# new file: sw.js
Version 0.0.1f 06/05/2026
Due to limitations at the hosting site, I had to reduce the file size. Because I don't want to do external calls to assets, I removed one of the background soundtracks. There are currently only 2 to choose from - Dupi Lupi Puppy (default), and Playful Park.
Version 0.0.1e: 06/04/2026
Added background music with a choice of 3 - Dupi Lupi Puppy (default), Playful Park, and Arcade Retro.
Added a settings page with the following features:
Checkboxes for the boolenas - Green is on, red is off.
A master audio game toggle - if both the barking and the background music is off, then this is off. If you turn this off, both types are disabled.
Changed the sound button on the main game page to be the master value - so overall mute of the game.
Gave the Puppy Barking sound effect (sfx) and background music their own separate checkboxes. If both are set to off, the master game audio is turned off. If the master game audio is off and clicked on, it turns on both the puppy barking and the background music. They can, of course, be controlled separately after that.
Added a chooser for the soundtrack. Clicking it rotates through the options. Currently, there are 3 options as mentioned above.
Added a checkbox for the marquee banner. Turning it off will keep it from showing in future instantiations of the game.
Added a slider for the volume of the background music, with the initial default set to 10%
Ensured that the configuration is saved to the local device and persists for new instantiations of the game
BUG FIX: Fixed high score persistence on mobile devices between instantiations.
BUG FIX: Fixed it so that the puppy about to drop cannot push down or block puppies in the playpen. This fixes bug where the puppy bounces up above the line from below, and either gets blocked or combines with the waiting puppy. It also fixes the bug where the player can push a puppy down (puppies squish naturally, try it sometime!) and keep the game going even though the puppy is getting out of the playpen (crossing the red line). I thought about leaving this as a feature (as a way for the player to get one over on the developer), but it was causing too many crashes.
Version 0.0.1a: 06/02/2026:
Added versioning to the loading page - top right.
Added a marquee that gives instructions. Only plays the first time you load / instantiate the game.
Updated the doghouse to one that looks much better, including a roof shadow.
Adjusted some of the sizes of the circles based on feedback from testers. All puppies after the 4th are now slightly smaller. This should make level 6/7 less of a harsh jump in difficulty.
If you don't put in a name for a high score, it randomly assigns you a puppy-themed name, which persists for that instantiation of the game after that.
Changed the "Next" in the top right of the scoreboard (above the doghouse) to fully show the puppy type instead of just the first few letters.
Original 5/28/2026