Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

50 stages, no ads, no gacha, works offline — my browser roguelite needs breaking

A topic by davidform created 10 days ago Views: 224 Replies: 10
Viewing posts 1 to 6
(1 edit)

Hi everyone,

I've been building GOO BLASTER — a mobile-first survivor-like you play in the

browser. It's out and playable, but only two people have ever played it, and both

of them found problems I never would have found on my own. So I'm here looking for

more people to break it.

Play it here (no download, no signup):

https://davidform.itch.io/goo-blaster

A bit of context on why it is the way it is: I'm building this to be something

kids can play. That decision drove almost every design choice — there is no gacha,

no random paid loot boxes, no timed FOMO counters, no ads, and no data collection.

The whole game is a single HTML file with zero external dependencies, so once the

page loads you can put your phone in airplane mode and keep playing.

What's in it:

- 50 stages across 10 chapters, with a chapter boss every 5 stages

- 3 weapons that each evolve, 16 upgrade cards, 9 chest types

- A permanent upgrade shop between runs, so a bad run still gets you somewhere

- 11 languages (EN / 繁中 / 简中 / 日本語 / 한국어 / DE / FR / ES / IT / PT-BR / RU)

- Touch controls on mobile, WASD/arrows + space on desktop

What the two playtests already caught:

Someone got hard stuck on stage 5. I assumed the boss was too tanky. It wasn't —

the upgrade card pool was so diluted that your main weapon only showed up 18% of

the time, so most players never got it past level 1 and the damage numbers never

worked out. Fixed that, and then the same player told me the boss's bullet pattern

was still unreadable. Turned out I'd accidentally moved the densest attack in the

game onto the first boss players ever meet. That's now 4 bullets per volley

instead of 19.

Two players found two things I'd have shipped without noticing. That's why I'm

posting.

What would actually help me:

1. Which stage did you stop at, and what made you stop — too hard, too repetitive,

   or just bored?

2. Did the touch controls feel right on your device? (Which phone?)

3. Stage 5 is the first real boss. Does it feel fair now, or still unfair?

Even one line is useful. "Quit at stage 3, felt samey" tells me more than silence.

One more thing: I'll be running a closed Android test before this goes to the

Play Store. If you'd like to keep an eye on where it ends up, say so and I'll

put you on the list.

Happy to return the favour — drop a link to yours and I'll play it and write you

something specific back.

Thanks,

David



I have not played it, so I cannot answer any of your three questions and I am not going to guess at them 🎮 What I did instead was go over the page and the metadata, because you said only two people have ever played it, and I think a chunk of that is fixable in about five minutes without touching the game.

Four filter surfaces you are currently opted out of.

itch’s browse sidebar filters on more than tags. It has Input methods, Average session length, Accessibility features and Genre, and each one is driven by a metadata field on your edit page rather than by your tag list. Your info panel currently shows Genre, Platforms and Tags — and nothing else. So:

Input methods is empty. There are Touchscreen and Smartphone checkboxes in that filter, and you have shipped a mobile-first touch game that does not appear under either. That is the single most on-target filter for your game and you are invisible in it.

Accessibility features is empty. Your own description says “one-thumb” and “drag anywhere to move”. There is a One button entry in that filter. Whether that is literally true for you is your call, but right now you are in none of the accessibility filters at all.

Average session length is empty. A survivor-like run is a few minutes, and “A few minutes” is a filter people genuinely use when they want something to play right now in a browser tab.

Languages is empty. You shipped ELEVEN languages, which for a solo browser game is remarkable, and a visitor looking at your page cannot tell. I could not find a language browse filter so I am not going to claim you are losing search traffic — but it is the most impressive fact about the build and the page does not say it anywhere itch renders it.

Your tags themselves are good, by the way — Arcade, Bullet Hell, Casual, html5, mobile, one-button, Roguelite, Survivor-like is an honest, well-chosen set, and you have two free slots. And you are currently #18 on Most Recent for the survivor-like tag. That is real, live visibility, and it is the shelf that expires, so the metadata above is worth doing this week rather than next.

Now two things about the game, from what you described rather than from playing.

The 18% dilution will come back, and a pity rule is what stops it.

You diagnosed that beautifully — the boss was not tanky, the card pool was diluted, so the main weapon never levelled. But you fixed it by fixing the pool, and pool composition is exactly what changes every time you add content. You have over 20 cards now. At 30 you will silently be back where you were, and stage 5 will break again without anyone touching stage 5.

The version that survives content patches is a guarantee rather than a ratio: force the main weapon’s upgrade into the offered set until it reaches level N, or run a pity counter that guarantees it if it has not appeared in the last K level-ups. Then adding cards can never re-break the early game, and you stop having to re-tune the pool every patch.

Airplane mode is a promise your storage may not keep.

A single HTML file with no external dependencies is a genuinely lovely piece of engineering, and it does mean the game keeps running once loaded. But your Candy Shop is meta-progression, which means the thing players actually accumulate lives in browser storage, and browser storage on a phone is not as durable as people assume — iOS in particular will evict script-writable storage for sites that have not been visited in a while, and a game running inside itch’s embed iframe is in a worse position for this than a normal first-party site, not a better one.

The reason this never shows up in testing is that testers play daily. The player who loses everything is the kid who comes back after two weeks, and they will not report a bug, they will just not play again.

Cheap fix, and it is the standard one in browser roguelites: an export/import save code. A blob of text on the results screen that the player can copy somewhere. It costs you a day and it converts a silent, unreportable failure into something a player can recover from.

One last small thing, since you are touch-first and on an embed: make sure the canvas sets touch-action so the itch page underneath cannot scroll or double-tap-zoom while someone is dragging. On a survivor-like where the whole input is a held drag, that one CSS property is the difference between good controls and unusable ones, and it only misbehaves on real phones, never in a desktop emulator.

Genuinely nice to see someone build no-gacha, no-ads, no-FOMO deliberately and say so out loud ⚡

Thank you so much for taking the time to write such a thoughtful and high-value breakdown! This is easily some of the most practical and actionable advice I've received.

Here's what I'm doing based on your feedback:

  1. Page Metadata & Discoverability: You completely opened my eyes to itch.io's sidebar filters. I had no idea I was opting out of so many targeted surfaces. I’m updating the edit page right away to fill in Input Methods (Touchscreen/Smartphone), Accessibility (One-button), Session Length, and highlighting the 11 supported languages.
  2. Pity Rule for Card Pool: Your point about future-proofing card pool dilution hit the nail on the head. Manually tuning the ratio for each content update would have been a maintenance nightmare. I'm going to implement a pity counter / guaranteed upgrade rule for the main weapon to keep early runs consistent regardless of pool size.
  3. Save Durability & Export/Import: The iOS storage eviction caveat is a huge blind spot I missed during testing. Adding an export/import save string on the results screen is such a smart, lightweight solution to prevent silent progress loss.
  4. Touch-action CSS: Double-tap zoom and accidental scrolling have definitely caused friction in mobile iframe embeds. I’ll make sure touch-action: none; (or appropriate handling) is properly set on the canvas container immediately.

Really appreciate the detailed feedback and the kind words about the no-gacha/no-ads design. It means a lot to an indie dev! ⚡

Delighted, and one warning on the export/import save before you build it, because it is the part that usually gets shipped in a form that helps nobody 🎮

Nobody exports a save prophylactically. The player who loses everything is the one who did not think about it, which is by definition the one who never opened your settings menu. If the code lives behind Settings > Export, you will have built a feature that only rescues people who were never going to need rescuing.

So make the game hand it over unprompted, at a moment the player already feels good: finishing a chapter, the first weapon evolution, clearing stage 5. “Here is your save code, keep it somewhere” lands as a reward at a high point and as an ominous chore in a menu, and it is the same string either way. Offering it on a natural beat also means most players will have one before the two-week gap that eats their storage.

Two smaller ones while you are in the edit page:

Only tick One button if it is literally true. Your copy says one-thumb drag, which is a genuinely good accessibility fact, but “One button” in itch’s list means something fairly specific and it is the kind of claim a player checks. If drag-to-move is the whole input, that is arguably closer to Touchscreen plus a note in the description than to the One button entry. Your call, you know the input better than I do — I just would not want you filtered INTO a list by a claim someone disputes.

And on the eleven languages: the metadata field is worth filling in, but the bigger win is one line in the description saying it, because that is the half a visitor actually reads. It is the most unusual thing about the build and the page currently keeps it a secret.

Good luck with the pity counter — that one will quietly save you every content patch from here ⚡

Thanks for flagging this before I shipped it — you called it exactly right. It's live now as a one-time prompt: the first time a player clears stage 5 (the first chapter boss), the results screen shows a short note suggesting they back up their save. Settings still has the manual export/import too, but it's no longer the only way to find it.

On the two smaller ones: agreed on both. "One button" is too specific a claim for drag-to-move, so I'm not going to check it — Touchscreen plus a line in the description covers it honestly. And you're right that 11 supported languages is buried; I'll get it into both the metadata and a line in the description text.

Thanks again — this is exactly the kind of note that's useful before shipping, not after.

1. Which stage did you stop at, and what made you stop — too hard, too repetitive, or just bored?: Stopped on stage 8. I just stopped to continue working on my game

2. Did the touch controls feel right on your device? (Which phone?): Played on computer, so can't answer this question. Computer controls felt right

3. Stage 5 is the first real boss. Does it feel fair now, or still unfair?: It feels fair.  However, on stage ~7, 2 bosses overlapped for a few seconds. 

I would like a popup about the shop with candy coins at the end of each level.  

For future reference, using "50 stages, no ads, no gacha, works offline" for promotion is too general.  The first sentence should basically be the title.

Balancing: Lv2 donut shield is op, the orbit weapon is far underpowered, the goo weapon is overpowered, and heart regen needs a light buff.  Heart chest should give gem overload at full hearts. For the first ~4 stages, damage buffs were almost useless, as every non-boss would be one hitted from the start. Upgrades on main weapon should show the increase in damage. There is no way I could complete stage 20 with the difficulty scaling. 

I also did not use nuke, as I could not reach for it on computer fast enough. Please make a button for the nuke.

"I'm building this to be something kids can play": This is successful at that.

"Happy to return the favour — drop a link to yours and I'll play it and write you something specific back.": I will come back next week for this, as I'm in active development of my next huge update.

Appreciate you actually playing through 8 stages — that's more signal than most feedback I get. A few updates based on this:

The boss overlap around stage 7 was a real bug, not just visual noise — the health bar was getting handed to whichever boss spawned last, even while the first one was still alive. Fixed.

The upgrade card damage numbers were worse than you described — they weren't just missing the increase, they were frozen at level 1 forever regardless of your actual weapon level. Also fixed, and the orbit weapon's card now shows a damage number at all (it didn't before).

Nuke now has a keyboard shortcut (E) for exactly the reason you hit — reaching for a screen button mid-fight on keyboard/mouse doesn't work.

Good note on the store page — leading with the title instead of the feature list makes sense, I'll fix that copy.

On the balance points (donut shield, orbit weapon, goo weapon, heart regen, early-game damage buffs, stage 20) — I'm not dismissing them, but I don't want to retune numbers off one playthrough without a way to A/B test it properly first, so these are noted and queued rather than acted on immediately.

Glad it's landing as something a kid can actually play. Take your time on your own update — I'll take you up on the offer to swap links when you're back.

General thoughts

I like the presentation, overall concept, and direction of the game. The mobile-first approach is clear, the UI is clean, and the progression structure makes sense for this kind of experience.

The biggest issue I ran into was the movement controls. I am not sure if I was misunderstanding how they are supposed to work, but movement felt strange enough that I could not always tell whether I was moving in the direction I intended or somehow steering against it. That made the core gameplay harder to read than I expected.

What I liked

  • Clean, colorful presentation
  • Clear mobile-friendly identity
  • Simple progression concept
  • I like the overall idea of a lightweight survivor-style game without ads, gacha, or unnecessary friction

What I would change

  • I would prioritize making the movement feel immediately intuitive. If the current behavior is intentional, I would communicate it more clearly. If it is not, I would revisit the control feel.
  • Keep the progression and upgrade information as easy to understand as the rest of the presentation.
  • Continue leaning into the simplicity of the concept rather than adding complexity for its own sake.

Overall, I like the ideas and presentation quite a bit. The main thing holding the experience back for me was that I never fully felt comfortable with the movement, and since movement is such a central part of the game, I would probably focus there first.

Please consider giving my game a try, it’s browser based with a tight 2-3 minute game loop: https://barelyplayable.itch.io/blade-baes-brawl

Feedback form submissions preferred: https://forms.gle/fsJrAZDhJtP1CFXX8

Let me know if you’d like an invite to try the invite-only full alpha build :)

(+1)

Thanks for taking the time to play and write this up — controls feedback is exactly what I need at this stage. I dug into it: the movement is a virtual joystick — wherever you first press becomes the center, and dragging away from that point sets your direction (not "tap where you want to go"). I ran real touch-event tests in all four directions plus the edge case where the joystick's anchor re-centers after a long drag, and the direction mapping checks out correctly in every case, so there's no inversion bug on my end.

My best guess is the control model itself might not have been what you expected on first contact — if you were expecting point-and-move rather than press-and-drag-a-direction, that mismatch alone would feel exactly like "steering against" it, even though nothing is actually reversed. The onboarding text already tries to call this out ("Hold anywhere on the screen, then drag your finger to move"), but I'll keep an eye out for more reports like this — if a pattern shows up across more players I'll take a harder look at making the control model itself more forgiving, not just better explained.

Appreciate the offer to trade feedback — will take a look at Blade Baes Brawl.

Glad I could help at least point you in the right direction!

I appreciate you checking out my game too, please definitely submit feedback on the form I am looking forward to your input as well!

One thing before you file that controls report as an expectation mismatch, because I think you may have tested the wrong input path 🎮

Your check was touch events in all four directions plus the anchor re-centre, and it came back clean. I believe it. But Barely Playable Games almost certainly was not on touch. They are posting from a Windows 11 desktop — in another Get Feedback thread this week they reported a repeatable freeze on Chrome under Windows 11 — and nothing in their note here mentions a phone at all. So “no inversion bug on my end” may be perfectly true about a code path they never touched.

That matters because your game has two input models: touch on mobile, WASD and arrows on desktop. If the drag joystick is also live on desktop through pointer events, then a mouse drag plants an anchor wherever the button went down, and press-drag-release with a mouse feels nothing like a thumb resting on glass. The re-centre especially — comfortable with a thumb, disorienting with a cursor that has a visible position of its own. And if both models are available at once and a player is sliding between them without realising, “I could not always tell whether I was moving in the direction I intended” is very close to what that would produce.

So the cheapest next step is not a control change, it is one question back to them: phone or desktop, and mouse-drag or WASD. Until you have that answer the report is unfalsifiable, and you risk retuning something nobody was using.

The other half is worth doing whatever the answer turns out to be. A virtual joystick that draws nothing is invisible. The player has no way to see that an anchor was created under their finger, so they cannot tell press-and-drag-a-direction from tap-where-you-want-to-go by looking at it. Drawing the anchor ring and the stick the moment the press lands teaches the entire model in one frame, before anybody has read anything.

And that argument is stronger for you than for most people, because of the eleven languages. Your onboarding sentence has to be clear and correct in all eleven. It also currently says screen and finger, which a desktop player will read as a mobile instruction that does not apply to them and skip. A drawn joystick needs no translation and no reading at all ⚡

One question: does the drag joystick run on desktop pointer events too, or is desktop strictly WASD and arrows?