Show HN: Kuboble.com – Minimalistic sliding pieces puzzle game (kuboble.com)

437 points by kuboble ↗ HN
Hi,

I wanted to share a simple game I wrote.

It's a sliding pieces puzzle like many others. I have focused a lot on making the experience smooth and minimalistic and the levels being challenging in a way a sudoku or chess puzzles could be.

I had no prior knowledge of game development and while it feels like someone competent could build this game in a week I spent over two years and hundreds of hours to bring this game to life.

My journey went through:

    - thinking it will be a PC game
    - being overwhelmed by the amount of different game frameworks
    - hiring an indie dev to bootstrap the game in Unity for me
    - realize the small levels are actually cool and it might fit on a phone
    - generating levels and playing through thousands of them myself to curate a smaller list
    - realizing the Unity wasn't a good choice
    - rewriting the game in html + js drawing on canvas + React
    - hiring a bunch of fiverr artists and testers to polish it up
I think I am finally satisfied with the result enough to be willing to share it with the world.

If you're a fan of minimalist sliding pieces puzzles I'd be happy if you give it a try!

the game has: - no ads - no tracking of any kind - fully offline after first load

157 comments

[ 3.2 ms ] story [ 254 ms ] thread
I really like these kind of puzzle games. It's always so satisfying building up a kind of "intuition" on how to solve them, learn the patterns etc.

Well done on "finishing" it. Your story is a typical one, myself being guilty of it: Going too grand in the beginning, and never getting anything viable out. Focusing on the core gameplay, even if "only js+canvas" with no fancy 3d graphics etc is the right start.

Congrats, will be playing it today.
Pretty. Keyboard shortcuts would be a nice addition.
Agree. Ideally then you would need a notion of "focus" — which piece is selected (bonus if there is a key to toggle between which piece has focus).
Thanks for killing my productivity! Very nice game.
Nice. Sokoban nostalgia says Hi :)

Some nits and comments if I may.

* Don't count moving stones as an actual move until the stone is released. I am on a PC and if I click-and-hold a stone and then move it back and forth, each move is counted even though I haven't released the mouse button yet. This is somewhat counter-intuitive and unexpected.

* Put the light source at the top. You have it at the bottom and this results in a drop shadow above the stones, which looks more like an unintended blur or ghosting. Also shadows/highlights are a bit inconsistent - base tiles imply that the light source is at the bottom-bottom-left, but the stones are shaded as if it's at the bottom-right.

* Perhaps reduce the size of stones a bit to add some breathing space around them when idle and when moving.

* Add a keyboard nav? There are two stones, so something as literal as awsd for one and arrows for another would work. Or just the arrows with a 'space' to toggle the focus.

* Starring criteria is unclear. Got one level with "optimal" rating, yet it gave 3 stars. This was the one where I had to undo several moves because I was mindlessly moving the stone back and forth without releasing it.

Thanks a lot! I haven't expected more than few people seeing it. I'm absolutely excited that people like it and give great feedback.

* the move is applied automatically the moment the done does stone_width/2 in a free direction. It would be tough to implement what you suggest. Also I did implement move counter the way you recommend - that if you make a move that cancels previous move it reduces the count but the testers were unanimously confused by it so I reverted it.

* there is no light source. It's few simple 2d images.

* I actually like how tight the stones are - like in a goban

* keyboard is on my todo if pepole intend to play on a pc

* starring is 5 for optimal score and 1 less for each extra move. Are you sure you have observed that anomaly?

Nice game.

> the move is applied automatically the moment the done does stone_width/2 in a free direction

Shouldn't a move be complete when the stone bumps into a wall and stops moving? I guess you already have the code to detect that event. You can hook the move counter there.

Keyboard navigation is definitely due on a computer. Select a stone with mouse and move with arrows or awsd. We can play two handed. It's much better on a phone now because we can throw stones to walls with a finger.

Hi, It's that the animation and bumping is executed already when the stone does a short way - on a larger board it looks like this: https://i.gyazo.com/bd780834e5546a4d8f84791b0f619ebb.mp4

But I see how it can be confusing when the path to travel is 1*stone_width. I don't have a good idea how to preserve the behavior on a bigger board and making it less confusing on a smaller one.

* Then, once move is applied disallow moving the stone again without re-engaging it a new tap/click-hold? Or undo the last move silently if the following move is the reverse of the preceding one?

* I meant "implied" light source. My point was that visually it's somewhat messy due to shadows being on top.

Re: the starring thing - I can't reproduce, but 100% saw it. Was on the level 3.

Biggest tip of all is don’t be demoralised by snarky remarks such as this

> Sokoban nostalgia says Hi :)

HN is full of people who have seen it been there done it and like to point it out in the pass agg format such as that.

One of the most difficult barriers to starting a “cool” project for me is the “but X already exists” even worse when someone points it out to me in a snide manner.

Absolutely love your game. Reminds me of the primitive yet challenging games you would find on random floppy disks at a jumble sale. Thank you for making it!

Thank you.

By the way. I didn't get the snarky vibe from the comment at all.

Kuboble is born from Sokoban nostalgia :). I think this exact puzzle mechanic is a subset of many existing games.

I would like to think that my original contribution is mostly the level selection.

I'm grateful for anyone caring enough to post a critical comment.

There was nothing snarky about my comment.

OP's game has a similar setup, mechanics and requires very similar strategies to solve as another very well-known game that many people know. This is obvious.

Mentioning it doesn't denigrate or belittle OP's creation in any way.

I am not really a frontend person, but I don't think it should be too bad to implement a move counter that doesn't happen until you release the stone. Something like an onmouseup / touchend event.
The light source parent meant is rendered into your 2d sprites. The colored stones for example have a shine in the bottom right.
> * there is no light source. It's few simple 2d images.

suggestion: if you turn the images upside down (or turn 180 degrees), the light will come from top.

it's a fun game, thanks for sharing !

[EDIT] one minor remark, there seems to be a small graphical glitch: eg. on level one, the 3 squares on the right side (not the top and bottom one) appear to have wrong perspective.

If you play more you'll realize there are levels with more than 2 stones.
+1 for the keyboard. That would make it more addicting and immediately what I wanted.
Keyboard control with optional highlight of a current piece is available at https://kuboble.com/beta/

it works with mouse or Tab for piece selection. arrows for moves, and backspace for undo

Maybe consider a different color palette. I have a red/green color blindness (like ~8% of the male population), and I can only barely differentiate the colors.
That's a good point I haven't thought about. It's obvious mistake on my part. I will make the colors configurable perhaps. Interesting that none of the reviewers raised this point.
I tried level 1, moved the two stones onto the squares... and nothing happened?

Eventually I realised that the stones need to be placed on different coloured squares - I'm colour blind (red/green), and can't tell any difference at all between the stones. For the squares, I can tell one is a bit darker than the other. You might want to consider using more contrast, or a more colour-blind friendly colour palette.

Reminds me of Sokoban, which I first played more than 30 years ago!

I'm sorry. I will add a color-blind friendly palette.
Or two different shapes, because there are too many different color blindnesses. Board games started marking counters many years ago. Sometimes their colors are so similar even for non color blind people. I couldn't get a black from dark blue counter two nights ago, the light at the table was not great. And yellow looked a pale gray.

Examples for the game: the red stone could have a empty circle mark on the top it, the green one could have a circle with a dot inside. The destination squares would be marked with the empty circle and the dotted circle.

Oh, different shapes would be even better!
Yea, even better: distinct iconography.

A circle and a triangle, for example.

This would be great. It looks like at the top end there might be a third stone. So square, triangle, circle. And where they go on the board marked with the same shape would be very intuitive even with no color at all.
I think square, circle, octagon would make the most sense. Or maybe diamond (rotated square) instead of octagon. That way adjacent stone would always touch.
I have made a very quick-fix for colorblindness at https://kuboble.com/beta/

I'll try to come up with something better in the long term

Thanks, looks much better. Ideally we could choose the two colors from a set of four or five colors.

Another option would be to use different forms, e.g. a round stone combined with a square one.

Anyway, nice game!

The rule of thumb for this sort of thing is to never rely on color alone to convey important information. Shapes and patterns and textures are much preferable to simple color variations.
good call. A triangle and square in the middle of each circle would eliminate the need for color all together.
I also had this experience, thank you for fixing it so quickly. The game is fun!
Looks like you've reverted the changes at some point today. Which is a definite productity win for me!
I have made it configurable in the settings
I had the same experience with Level 1, except I'm not colorblind but I was using a grayscale filter on my phone for other reasons. Thank you for calling this out!
It's really close to "Ricochet Robot" in its principle. https://boardgamegeek.com/boardgame/51/ricochet-robots Really fun game
Oh yes. It has basically identical mechanics.

However - I only started really liking my game when I have realized that you don't need big complex boards to make interesting challenges.

Nice game. Also very similar to my Persuasion puzzle game (https://persuasiongame.codesimple.net/persuasion/) which I created a good few years ago, originally for Android and then ported to the browser.

I like the simplicity of the Kuboble levels. I started like that but then got carried away adding switches and teleports etc. to the later levels.

And similar to Kuboble, mine could do with some keyboard controls. I think both work better with touch screens.

Nice game, and excellent story! Thanks for sharing!
Awesome. What are your thoughts on web assembly?
total people hired? total spent?

what unexpected things occurred hiring people?

great job, played for longer than expected :)

I would say 3 people have contributed significantly.

1) Indie dev - build a first version of the game in Unity. She is responsible for the look&feel of the gameplay 2) Fiver person 1 - who made the very crude js version of the player which I refactored into final version. 3) Fiver person 2 - who helped me with the design of the game menu.

Other than that I have hired some other designers on fiverr, whos designs I didn't end up using, several testers and reviewers.

I also asked all friends and family to try it out and I have observed if they can figure out what the game is about without any hints.

Nothing really unexpected happened in regards to working with people.

Very enjoyable game! Well done, I'm hooked. Is there a meaning behind the name?
Not really.

It's something based on my name Kuba. Should sound like a game name, be short and have a free .com domain.

Congrats, like it, simplistic - will see how my kids do at it after school
Very nice. Maybe hide the undo button when it's 0?

Also, tiny error on desktop: start dragging a piece, move out the window, release, and then either piece will move on mouseover.

I don't see how to pass level 13, it doesn't seem possible
Never-mind, I actually did it by just accidentally dragging them out of frustration - it is possible!
Thinking in the reverse direction helped me.
This is very good - got me spending more time playing than I intended to and I will definitely share - well done. Maybe consider the wordle - one game a day/ share your score with your friends on social media approach - so your users stay hungry and don't waste too much time playing it!
Seconded! If you make it easy/fun to share I (personally) would totally do so :)
I shared it by copy pasting a link to my friends. It really doesn't need to be any easier.
If you’re building puzzle games, I would suggest not starting with the game but instead create a program first that generates challenging puzzles, then build a game around the levels it generates.
No instructions. No idea what the objective is. Gave up after 60 seconds.
Very cool! Very elegant, I like the style, and I like how intuitive it is to play, and yet gets tricky in some of the later levels are.

I'm currently on level 12 with perfect stars.

To me the order of the levels doesn't quite always increase, sometimes a later level is easier. This could just be whatever path I happen to see first, though. If you're collecting data, though, you may be able to use it to re-order your levels.

One small thing that could be nice: the sound of a "click" like a go piece when the pieces collide. A lot of go games have a pleasing click sound, and I think it would be good here. (If you wanted to be fancy it could even be a click when the pieces collide, and a hollow this when it hits the side of the board.)

Thanks :)

I had a click sound, but it turned out that on some devices playing the click via javascript works awfully bad (random delays) and it was more confusing than useful. I intend to work on it a bit once I add some customizations options and it will be possible to enable / disable sounds.

The order of levels is by 1) number of balls, 2) board size, 3) optimal number of moves.

Although not perfectly it's actually quite well correlated with difficulty - all levels above 100 are much more tough than any of the first 20 etc.