# Bounce Ball

**URL:** <https://forum.defold.com/t/bounce-ball/80759>\
**Category:** Showcases\
**Created:** [June 20, 2025, 3:55pm UTC](https://forum.defold.com/t/bounce-ball/80759 "2025-06-20T15:55:11Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [June 20, 2025, 3:55pm UTC](https://forum.defold.com/t/bounce-ball/80759/1 "2025-06-20T15:55:11Z")

</div>

Hey everyone!

Sharing my latest game.

> **[BOUNCE BALL - Play Online for Free! | Poki](https://poki.com/en/g/bounce-ball)**
>
> Bounce Ball combines puzzle and merging fun! It challenges you to merge numbered balls to reach higher values. Aim precisely, strategize merges, and watch the numbers grow. Merge your way to victory!

![05222-ezgif.com-resize](https://forum-defold-uploads.b-cdn.net/original/3X/0/3/0357d090404aca9a72a0591f30a3df675110711a.gif)

The game is already fully playable in your browser on Poki, weighs in at **under 3.5-4 MB** , and even runs smoothly on potato. We’re about 80 % of the way to the feature-complete version, but there’s already plenty to enjoy—and I’d love to hear what you think.

* * *

### Heart-felt thanks

Special thanks to **@aglitchman** —his help was priceless. Bounce Ball was built around his high-quality [trail](https://github.com/indiesoftby/defold-hyper-trails) system. When it began throwing errors, he not only repaired the code for the project but also answered an endless stream of my naïve questions, patiently explained how everything works, and delivered powerful feedback. At times it felt like he was doing more of the heavy lifting than I was. I’m immensely grateful.

Many thanks as well to the **Defold community** , especially **@AGulev** and **@BunBunBun**. As an artist, Defold still isn’t the most intuitive toolset for me, but the speed at which the community steps in to help (and the core team rolls out fixes) more than makes up for it. They are the reason this entire build fits in 4 MB yet still feels slick.

Finally, credit to the **Poki team** —none of them will probably read this, but their developer portal, fit-tests, and video tooling allowed us to polish the game’s presentation in ways that simply wouldn’t have been feasible otherwise. Huge respect!

### Behind-the-scenes lessons & tools

- **First-ever shaders.** This project finally pushed me to write custom shaders. Shaders itself wasn’t the hard part—the real challenge was persuading Defold’s material pipeline to accept and wire them up correctly. Harder than expected, but very satisfying once they lit up on screen.
- **The indefatigable testing bot.** I also built an autopilot bot that grinds through Bounce Ball for hours while I’m sleeping, eating, or showering. It records video, logs stats, and tries every combination of options. Its random, rule-oblivious clicks have exposed more bugs than I ever could— and, thankfully, it works for free. Simulating a “typical” player this way has been invaluable, and I’ve grown rather fond of the little QA gremlin.

### What’s next?

- Add the missing **10 power-ups/objects**
- More visual juice (screen shake and better particle bursts)
- Localise

* * *

### How you can help

- **Play the [current build](https://poki.com/en/g/bounce-ball)** (still in soft launch) on Poki and tell me what feels fun—or frustrating.
- Spot a bug? Post it here and I’ll squash it.
- If you enjoy the game, a simple **Like** and small review on Poki is the best thank-you you can give right now.

![image](https://forum-defold-uploads.b-cdn.net/optimized/3X/b/6/b649e93c8237c76eff450b4d19304a4d617b9eed_2_690x65.png)

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [June 20, 2025, 6:25pm UTC](https://forum.defold.com/t/bounce-ball/80759/2 "2025-06-20T18:25:47Z")

</div>

> [@Zarkua](#):
>
> Special thanks to **@aglitchman** —his help was priceless

> [@Zarkua](#):
>
> Many thanks as well to the **Defold community** , especially **@AGulev** and **@BunBunBun**. As an artist, Defold still isn’t the most intuitive toolset for me, but the speed at which the community steps in to help (and the core team rolls out fixes) more than makes up for it.

We have the best community in the world. ❤

> [@Zarkua](#):
>
> **The indefatigable testing bot.** I also built an autopilot bot that grinds through Bounce Ball for hours while I’m sleeping, eating, or showering. It records video, logs stats, and tries every combination of options. Its random, rule-oblivious clicks have exposed more bugs than I ever could— and, thankfully, it works for free. Simulating a “typical” player this way has been invaluable, and I’ve grown rather fond of the little QA gremlin.

I love it! Sounds like you built a really useful tool for yourself!

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [June 21, 2025, 8:42am UTC](https://forum.defold.com/t/bounce-ball/80759/3 "2025-06-21T08:42:22Z")

</div>

> [@britzl](#):
>
> We have the best community in the world. ❤

thanks for building it and thanks for your engine

> [@britzl](#):
>
> I love it! Sounds like you built a really useful tool for yourself!

 ![image](https://forum-defold-uploads.b-cdn.net/original/3X/c/a/ca314fcc070eca600d4f28b55fee8ea5ed6053aa.jpeg)  
it is really helpful when numbers are starting to grow, like after 6-8 hours of playing.

---

<div class="post-metadata">

**Author:** ![Janey](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/janey/32/36448_2.png) [@Janey](https://forum.defold.com/u/Janey)\
**Post date:** [June 21, 2025, 8:07pm UTC](https://forum.defold.com/t/bounce-ball/80759/4 "2025-06-21T20:07:09Z")

</div>

This is a very engaging game. I spent quite some time playing it and even came back later to finish it off 🙂  
I’m not sure if it was intentional, but I really appreciate that the game doesn’t overwhelm the player with closing blocks. instead, it feels quite meditative.  
May I ask how the ball movement is handled? Is it done using built-in physics?

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [June 22, 2025, 6:10am UTC](https://forum.defold.com/t/bounce-ball/80759/5 "2025-06-22T06:10:06Z")

</div>

Thanks for the feedback—that’s pretty much exactly what we were aiming for.  
Yes, we’re using the engine’s built-in physics and no extra libraries. In my experience it’s best not to mess around with physics and just rely on what’s already in the engine; otherwise you can spend ages chasing bottlenecks and bugs and wondering why the game behaves differently from the last update.

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [July 15, 2025, 9:35am UTC](https://forum.defold.com/t/bounce-ball/80759/6 "2025-07-15T09:35:10Z")

</div>

Thank you so much for the initial support, the game got a nice boost thanks to your votes and is feeling good right now, it’s above average poki game in terms of performance.

Came up with the idea to freshen up the boss collection a bit, so introduced combining different bosses into some kind of brainrot monster. The mechanics seem to look organic, hopefully it will appeal to everyone.

P.S. With this update I’ve certainly gotten further away from God, but I hope that the average play time will be higher

---

<div class="post-metadata">

**Author:** ![rene.clavijo](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/rene.clavijo/32/40500_2.png) [@rene.clavijo](https://forum.defold.com/u/rene.clavijo)\
**Post date:** [August 7, 2025, 12:40am UTC](https://forum.defold.com/t/bounce-ball/80759/7 "2025-08-07T00:40:23Z")

</div>

CONGRATS! I’ve been trying to publish a game on Poki for a year now and I never passed the 3 min filters.  
Your game is really nice, great sfx and addictive. Awesome work!

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [August 15, 2025, 11:47am UTC](https://forum.defold.com/t/bounce-ball/80759/8 "2025-08-15T11:47:36Z")

</div>

Thanks a ton for the kind words! Welcome to the Defold community—keep at it and you’ll nail those 3-minute Poki checks soon.

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [August 15, 2025, 11:50am UTC](https://forum.defold.com/t/bounce-ball/80759/9 "2025-08-15T11:50:57Z")

</div>

i`ve made a ton of updates with sfx, animatons bosses etc, but most important - we are checking how event updates can perform in web games.

We are using update for 1 month Obon event with Mega Booster in the end as a reward.

 ![image](https://forum-defold-uploads.b-cdn.net/original/3X/3/e/3e841a8904dbccdfd1e641e96048bea8d5729314.jpeg)

i will post results after _fingers crossed_

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [September 24, 2025, 4:04pm UTC](https://forum.defold.com/t/bounce-ball/80759/10 "2025-09-24T16:04:39Z")

</div>

> [@Zarkua](#):
>
> i will post results after _fingers crossed_

As promised, checking in after the Obon holiday event. 18,000 players finished it — roughly 10× more than we expected, especially given it takes about 5–8 hours to complete.

We’ve also launched on Google Play:

 ![image](https://forum-defold-uploads.b-cdn.net/original/3X/9/b/9b7754ecb94ff67b05eed2d1453da3fd8869d24b.jpeg)

**[Bounce Ball on Google Play](https://play.google.com/store/apps/details?id=com.wedoyouplay.bounceball)**

Right now it’s running on purely organic traffic (no UA spend yet), so we’d really appreciate your ratings and reviews.

To be a bit closer to mobile F2P norms, we’ve added a shop and special boosters. The build is lightweight and runs smoothly even on very old devices.

What’s next

- An update with 50 new mini-bosses (in progress)

- A Halloween update

- Plus 3 additional enemies  
After that, we’ll consider the game about 95% complete.

Results on the web have been very strong — now the goal is to bring that success over to mobile.  
Thanks for playing and for any feedback you can share!

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [October 7, 2025, 10:35am UTC](https://forum.defold.com/t/bounce-ball/80759/11 "2025-10-07T10:35:30Z")

</div>

Quick heads-up: the Halloween event build is finished and currently in review. This is our biggest update so far.

What’s new

- Limited-time Halloween Event + a new Daily Event system

- New boosters, including an exclusive booster unlocked after completing the event

 ![image](https://forum-defold-uploads.b-cdn.net/original/3X/f/0/f0346348c01251e9013bf0b11556047c3371ec9c.png)

- new enemies, including:

- 

- 6 new hybrid boss artworks (e.g., Mummy + Skeleton, etc.)

I’ll share an update as soon as the build is approved. Feedback on balance and difficulty is very welcome!

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [October 15, 2025, 2:02pm UTC](https://forum.defold.com/t/bounce-ball/80759/12 "2025-10-15T14:02:47Z")

</div>

![image](https://forum-defold-uploads.b-cdn.net/original/3X/7/7/77a880cfd4c750fda0660646d38654ac650eaab8.png)

aaaaand done. We got some errors due to some engine bugs, but now everything is fixed and live on android and poki.

---

<div class="post-metadata">

**Author:** ![totebo](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/totebo/32/36087_2.png) [@totebo](https://forum.defold.com/u/totebo)\
**Post date:** [October 16, 2025, 11:40am UTC](https://forum.defold.com/t/bounce-ball/80759/13 "2025-10-16T11:40:34Z")

</div>

This is a really nice an polished game. Some inspiration from Archero and Punball. Love those games. I’ll be playing this a while I imagine.

I’m curious, how does Google play perform as compared to the much younger and much more casual audience on Poki? Did you change the game to be more accessible/easy to play for Poki in some way?

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [October 16, 2025, 12:05pm UTC](https://forum.defold.com/t/bounce-ball/80759/14 "2025-10-16T12:05:29Z")

</div>

Thanks a lot!

On audience: funnily enough, most of the bug reports I got via Poki came straight to my email with photos and company emails - and they were from office workers, managers, even company directors. So I can’t claim I “know” Poki’s audience, but it’s definitely older than I expected.

Google Play vs Poki: GP for me is 100% organic so far, plus this thread (about ~100 clicks), so the numbers are tiny and look like the same kind of players -j ust fewer of them. Poki obviously has way more volume.

Did I make it “easier” for Poki? Not really. The core game is the same. I only polished the onboarding/UX (clearer first minutes, tiny early-game softness, mouse/keyboard niceties). After that, the difficulty curve is the same as GP. Also i have the shop ofcourse.

Marketing: my weak spot! I haven’t run paid UA before, so GP is still pure organic. I do plan to start a proper marketing push soon, just figuring out where to begin - tips welcome.

---

<div class="post-metadata">

**Author:** ![totebo](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/totebo/32/36087_2.png) [@totebo](https://forum.defold.com/u/totebo)\
**Post date:** [October 17, 2025, 7:38am UTC](https://forum.defold.com/t/bounce-ball/80759/15 "2025-10-17T07:38:44Z")

</div>

Poki’s audience must be different from what I thought, or maybe a bit broader at least, not just very young. That’s a good thing.

Google Play said \< 5000, which I suppose is true with a small audience, but I expected it to be in the thousands, which is good for a new game without UA, in my experience.

In your first post you mention a test bot. So cool. How did your record the videos? Just the standard QuickTime on Mac or some screen capture on Windows, or did you actually record video from inside defold?

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [October 17, 2025, 10:51am UTC](https://forum.defold.com/t/bounce-ball/80759/16 "2025-10-17T10:51:13Z")

</div>

> [@totebo](#):
>
> In your first post you mention a test bot. So cool. How did your record the videos? Just the standard QuickTime on Mac or some screen capture on Windows, or did you actually record video from inside defold?

```lua
import collectionsimport datetimeimport globimport osimport randomimport shutilimport signalimport subprocessimport sysimport tempfileimport timefrom typing import Optional

import cv2import numpy as npimport pyautoguiimport pygetwindow as gwimport win32api, win32confrom mss import mss

PRIMARY_BUTTON_IMAGES = [‘revive_btn.png’, ‘claim_btn.png’]SECONDARY_BUTTON_IMAGES = [‘1.png’, ‘2.png’, ‘3.png’, ‘4.png’]SECONDARY_PROBABILITY = 0.50PRIMARY_PAUSE_SEC = 10

WINDOW_TITLE = ‘Bounce Ball’CLICK_INTERVAL_SEC = 0.5

CAPTURE_W, CAPTURE_H = 1200, 700 # зона, которую сравниваем (из окна)CHECK_INTERVAL_SEC = 5 # раз в 5 с берём кадрFREEZE_CHECKS_LIMIT = 10 # подряд «тихих» кадров → фризDIFF_THRESHOLD = 2.0 # среднее |Δ| яркости 0-255

RECORD_FPS = 24BUFFER_SECONDS = 2500VIDEO_BITRATE = ‘6M’VIDEO_CODEC = ‘h264_nvenc’

sct = mss()run_dir: strscreenshot_index: int = 0

def move_and_click(x: int, y: int):win32api.SetCursorPos((x, y))time.sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, x, y, 0, 0)time.sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, x, y, 0, 0)time.sleep(0.05)

def locate_any(images, confidence=0.7):for image_path in images:try:location = pyautogui.locateCenterOnScreen(image_path,confidence=confidence,grayscale=True)except pyautogui.ImageNotFoundException:location = Noneif location is not None:return location, image_pathreturn None, None

def save_screenshot(region):global screenshot_indexscreenshot_index += 1path = os.path.join(run_dir, f"{screenshot_index}.png")pyautogui.screenshot(path, region=region)print(f"[INFO] Сохранён скриншот: {path}")

def start_ffmpeg(x, y, w, h):tmp_dir = tempfile.mkdtemp(prefix=“bb_ffmpeg_”)out_pattern = rf"{tmp_dir}\ring_%02d.mp4" # будет ring_00.mp4

cmd = [
    "ffmpeg", "-loglevel", "error", # или "warning", если нужно больше логов
    "-f", "gdigrab",
    "-framerate", str(RECORD_FPS),
    "-offset_x", str(x),
    "-offset_y", str(y),
    "-video_size", f"{w}x{h}",
    "-draw_mouse", "0",
    "-show_region", "0",
    "-i", "desktop", # если хотите по title: "-i", f"title={WINDOW_TITLE}"
    "-an", # аудио отключено
    "-c:v", VIDEO_CODEC,
    "-preset", "p5" if VIDEO_CODEC.endswith("nvenc") else "ultrafast",
    "-b:v", VIDEO_BITRATE,
    "-pix_fmt", "nv12" if VIDEO_CODEC.endswith("nvenc") else "yuv420p",
    "-f", "segment",
    "-segment_time", str(BUFFER_SECONDS),
    "-segment_wrap", "1",
    "-reset_timestamps", "1",
    out_pattern
]
print("[INFO] FFmpeg cmd:", " ".join(cmd)) # можно закомментировать
try:
    proc = subprocess.Popen(cmd, creationflags=subprocess.CREATE_NEW_PROCESS_GROUP)
except FileNotFoundError:
    sys.exit("FFmpeg не найден. Добавьте ffmpeg.exe в PATH.")
return proc, tmp_dir, out_pattern

def stop_ffmpeg(proc: subprocess.Popen):if proc.poll() is None:proc.send_signal(signal.CTRL_BREAK_EVENT)try:proc.wait(timeout=3)except subprocess.TimeoutExpired:proc.kill()

def grab_frame(x, y, w, h):raw = sct.grab({“top”: y, “left”: x, “width”: w, “height”: h})gray = cv2.cvtColor(np.array(raw)[:, :, :3], cv2.COLOR_BGR2GRAY)return gray

def main_loop():global run_dir

run_dir = os.path.join(os.getcwd(),
                       datetime.datetime.now().strftime("run_%Y-%m-%d_%H-%M-%S"))
os.makedirs(run_dir, exist_ok=True)
print(f"[INFO] Каталог: {run_dir}")

windows = gw.getWindowsWithTitle(WINDOW_TITLE)
if not windows:
    sys.exit(f"[ERROR] Окно «{WINDOW_TITLE}» не найдено")
game_win = windows[0]
try:
    game_win.activate()
except Exception:
    pass

x0, y0, w, h = game_win.left, game_win.top, game_win.width, game_win.height

rx1 = x0 + int(w * 0.10); ry1 = y0 + int(h * 0.30)
rx2 = x0 + int(w * 0.70); ry2 = y0 + int(h * 0.70)

ff_proc, ff_dir, ff_pattern = start_ffmpeg(x0, y0, w, h)

last_frame = grab_frame(x0, y0, CAPTURE_W, CAPTURE_H)
static_hits = 0
next_check_t = time.monotonic() + CHECK_INTERVAL_SEC

print(f"[INFO] Запись {RECORD_FPS} fps. Детектор фриза: "
      f"{FREEZE_CHECKS_LIMIT}×<{DIFF_THRESHOLD} за {CHECK_INTERVAL_SEC}s")
time.sleep(3)

try:
    while True:
        now = time.monotonic()

        
        if now >= next_check_t:
            cur_frame = grab_frame(x0, y0, CAPTURE_W, CAPTURE_H)
            diff = cv2.absdiff(cur_frame, last_frame).mean()
            if diff < DIFF_THRESHOLD:
                static_hits += 1
                print(f"[FREEZE?] Δ={diff:.2f} hit {static_hits}/{FREEZE_CHECKS_LIMIT}")
                if static_hits >= FREEZE_CHECKS_LIMIT:
                    print("[FREEZE] Обнаружен фриз, выходим из цикла.")
                    break
            else:
                static_hits = 0
            last_frame = cur_frame
            next_check_t += CHECK_INTERVAL_SEC

       
        location, img_name = locate_any(PRIMARY_BUTTON_IMAGES)
        if location:
            if os.path.basename(img_name) == 'claim_btn.png':
                save_screenshot((x0, y0, w, h))
            move_and_click(location.x, location.y)
            print(f"[CLICK] {img_name} @({location.x},{location.y})")
            time.sleep(PRIMARY_PAUSE_SEC) # ← Пауза 5 с

        else:
            if random.random() < SECONDARY_PROBABILITY:
                paths = SECONDARY_BUTTON_IMAGES[:]
                random.shuffle(paths)
                sec_location, sec_img = locate_any(paths)
                if sec_location:
                    move_and_click(sec_location.x, sec_location.y)
                    print(f"[CLICK] secondary {sec_img} "
                          f"@({sec_location.x},{sec_location.y})")
                    time.sleep(CLICK_INTERVAL_SEC)
                    continue
            rand_x, rand_y = random.randint(rx1, rx2), random.randint(ry1, ry2)
            move_and_click(rand_x, rand_y)
            print(f"[CLICK] random ({rand_x},{rand_y})")

        time.sleep(CLICK_INTERVAL_SEC)

finally:
    stop_ffmpeg(ff_proc)
    try:
        last_seg = max(glob.glob(os.path.join(ff_dir, "*.mp4")),
                       key=os.path.getmtime)
        shutil.copy2(last_seg, os.path.join(run_dir, "freeze_capture.mp4"))
        print(f"[INFO] Сегмент скопирован → {run_dir}\\freeze_capture.mp4")
    except (ValueError, FileNotFoundError):
        print("[WARN] Видео-файл не найден.")
    shutil.rmtree(ff_dir, ignore_errors=True)

if name == “main”:main_loop()

```

something like that

 ![image](https://forum-defold-uploads.b-cdn.net/original/3X/b/e/be7141466e59f86a3e23d098eed03fc58cd430da.png)

---

<div class="post-metadata">

**Author:** ![totebo](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/totebo/32/36087_2.png) [@totebo](https://forum.defold.com/u/totebo)\
**Post date:** [October 17, 2025, 2:32pm UTC](https://forum.defold.com/t/bounce-ball/80759/17 "2025-10-17T14:32:35Z")

</div>

Holy cow, that’s a tad more advanced than I thought. I can understand why you’re friendly with this bot. 🙂

---

<div class="post-metadata">

**Author:** ![Joe\_LaBringue](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/joe_labringue/32/39124_2.png) [@Joe\_LaBringue](https://forum.defold.com/u/Joe_LaBringue)\
**Post date:** [October 29, 2025, 7:53pm UTC](https://forum.defold.com/t/bounce-ball/80759/18 "2025-10-29T19:53:31Z")

</div>

I saw this game while strolling on Poki. It’s really cool, I especially like the progression curve, it’s smooth and engaging. Can I ask how you managed your balance and progression curve? I always struggle with those, so I’m curious. Thank you in advance!

---

<div class="post-metadata">

**Author:** ![Zarkua](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/zarkua/32/40015_2.png) [@Zarkua](https://forum.defold.com/u/Zarkua)\
**Post date:** [October 29, 2025, 10:20pm UTC](https://forum.defold.com/t/bounce-ball/80759/19 "2025-10-29T22:20:20Z")

</div>

Hi, congrats with first message!

# How block HP gets picked (per row)

- Rows 1–3 are hand-holding:

- Row 4+ uses the live “wall power”:  
For each block on the row we roll a random number in  
[currentPower, currentPower × powerMul] where  
`currentPower = max(1, game.wall_power)` and `powerMul = random(x1..x2)`.  
Super-big numbers are stored in sci-notation internally, but it’s still “that HP”.

- “Downspill” extra lines (when the board has lots of free vertical space) copy a random existing block and set its HP to the source ±10% (clamped to ≥1).

Power progression: you start with `wall_power = d1`, `ball_power = d2`.  
Each round:  
`wall_power += floor((ball_power - wall_power)/8)` → walls steadily catch up to balls without huge spikes.

# What spawns on a row

- Regular rows: 2–5 shapes out of `cube / cilinder / trian`, then some slots get randomly emptied to create gaps.

- Special rows:

# Level types & how often

- Boss: every 20 levels starting at 20, 40, 60, ….

- Key levels: one per each 10-level decade (1–10, 11–20, …), chosen randomly in that decade, never colliding with bonus/boss. On that level one of the existing blocks turns into a rainbow cube with a key.

- Bonus levels: one per decade too, non-overlapping with key/boss. The bonus “style” depends on your progress:

- Everything else:

# Blockers (the nasty tilted cylinders)

- Only considered on normal/extra\_ball levels and after `hat_line = 60`.

- Chance on a given line: `p = (line − (hat_line+1)) mod x3` → smoothly ramps 0% → … → x3%, then resets and repeats every x3+1 lines.  
After a trigger, `hat_line` is internally reset lower (to keep the cadence going).

# Lottery & free reward logic

Here’s the short, practical view:

When do you see a lottery?

- Baseline chance is ~30% after a level.

- Safety net: if you miss the lottery 4 times in a row, the next one is guaranteed.

If there’s no lottery (static claim):

- Roughly:

If there is a lottery:

- Multiple “modes” depending on progress (e.g., “epic” ≥ level 30 when you have no ticket; rarer ones ≥ level 50).

- Payouts are 2–5 items in combos across bomb / plusline / magneto / maxball / ticket (weights depend on the exact mode; generally escalates with level).

Prize button (in-level, ad-based):

- Always gives 2–5 items.

- First it fills missing booster types in your inventory, then adds random goodies among magneto / maxball / bomb / plusline.

Achievements / dailies:

- Feed into the same resource pool — frequent small drops of balls/boosters, sometimes tickets.

My list of readings for this game:

> **[Idle Frontier: A Journey into the Wild West of Idle Gaming](https://blog.kongregate.com/idle-frontier-a-journey-into-the-wild-west-of-idle-gaming/)**
>
> Developed in-house, Idle Frontier took the idle gaming community by storm, launching in 2019, and has been a staple of Kongregate’s idle games portfolio ever since.
> 
> Unlike many idle games at the time, Idle Frontier utilized an immersive camera view...

[![](https://img.youtube.com/vi/EvV3AaZk6wk/maxresdefault.jpg "Clicker Cadences: Limited Time Event Design in Idle Games | Drew Levin") ](https://www.youtube.com/watch?v=EvV3AaZk6wk)

> **[The Math of Idle Games, Part III](https://blog.kongregate.com/the-math-of-idle-games-part-iii/)**
>
> This three-part series is intended to break apart my MIGS 2016 slides
> \[http://www.slideshare.net/AnthonyPecorella/the-rise-and-rise-of-idle-games-68916528\] 
> into what are hopefully detailed but accessible angles on the math and mechanics
> behind idle...

> **[The Rise and Rise of Idle Games](https://blog.kongregate.com/the-rise-and-rise-of-idle-games/)**
>
> These are the slides for Anthony Pecorella's talk on idle games at MIGS 16 so
> that attendees can view them directly.
> 
> The Rise and Rise of Idle Games
> \[//www.slideshare.net/AnthonyPecorella/the-rise-and-rise-of-idle-games-68916528\] 
> from Anthony...

> **[The Math of Idle Games, Part II](https://blog.kongregate.com/the-math-of-idle-games-part-ii/)**
>
> A few weeks ago, in Part I \[https://blog.kongregate.com/the-math-of-idle-games-part-i\] of this
> three-part series, we looked at some of the standard math behind rapid-growth
> idle games, primarily at the relationships between exponential and...

> **[The Math of Idle Games, Part II](https://blog.kongregate.com/the-math-of-idle-games-part-ii/)**
>
> A few weeks ago, in Part I \[https://blog.kongregate.com/the-math-of-idle-games-part-i\] of this
> three-part series, we looked at some of the standard math behind rapid-growth
> idle games, primarily at the relationships between exponential and...

> **[From a Dev: Optimizing Ad Revenue Through Gameplay Experiences](https://blog.kongregate.com/from-a-dev-optimizing-ad-revenue-through-gameplay-experiences/)**
>
> The following article is meant to highlight Ultrabit’s experience with ads and
> how we integrated them into our core gameplay to drive meaningful revenue. I
> will be speaking primarily about our latest title, Pocket Politics...

> **[The Math of Idle Games, Part I](https://blog.kongregate.com/the-math-of-idle-games-part-i/)**
>
> I’ve given a few talks in the past about the appeal and general mechanics of
> idle games, but what if you actually wanted to make one? Theory and patterns are
> nice, but there’s some complicated math running behind it. And how on earth do
> you balance a...

> **[Quest for Progress: Numbers Behind Idle Games](https://blog.kongregate.com/quest-for-progress-the-math-of-idle-games/)**
>
> A more in-depth version of this short post is available at The Math of Idle
> Games, Part I \[https://blog.kongregate.com/the-math-of-idle-games-part-i\].
> 
> At GDC Europe this year I gave a talk that took a deeper look at some of the
> numbers, formulas,...

> **[Idle Chatter: GDC 2016](https://blog.kongregate.com/idle-chatter-gdc-2016/)**
>
> These are the slides from Anthony Pecorella's talk about idle games at GDC this
> year.
> 
> Idle Chatter - GDC 2016
> \[http://www.slideshare.net/AnthonyPecorella/idle-chatter-gdc-2016-59734260\] 
> from Anthony Pecorella...

> **[Idle Games: Mechanics and Monetization of Self-Playing Games](https://blog.kongregate.com/idle-games-mechanics-and-monetization-of-self-playing-games/)**
>
> Anthony Pecorella spoke this week about the exciting, and at times perplexing,
> new genre of idle games. Why do they work? Why are they so compelling? Can
> developers use them to create a sustainable business? Learn about the history,
> mechanics, and...

[![](https://img.youtube.com/vi/Lu-RjxeDpU8/maxresdefault.jpg "Idle Games: The Mechanics and Monetization of Self-Playing Games") ](https://www.youtube.com/watch?v=Lu-RjxeDpU8)

[![](https://img.youtube.com/vi/g-LziX2HynI/maxresdefault.jpg "Idle Games - How Games Scratch Your Multitasking Itch - Extra Credits") ](https://www.youtube.com/watch?v=g-LziX2HynI)

![](https://img.youtube.com/vi/j_nI6G3ZDiE/maxresdefault.jpg)https://www.youtube.com/embed/j_nI6G3ZDiE?feature=oembed&wmode=opaque

also i can recommend [https://machinations.io/](https://machinations.io/) for experiments. I hope this is what you`ve asked for

---

<div class="post-metadata">

**Author:** ![britzl](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/britzl/32/23_2.png) [@britzl](https://forum.defold.com/u/britzl)\
**Post date:** [October 30, 2025, 7:54am UTC](https://forum.defold.com/t/bounce-ball/80759/20 "2025-10-30T07:54:02Z")

</div>

> [@Zarkua](#):
>
> also i can recommend [https://machinations.io/](https://machinations.io/) for experiments

Thank you for sharing this post! I feel like this could be turned into a great blog post. Also, [machniations.io](http://machniations.io) is pretty damn cool!

[Next page](https://forum.defold.com/t/bounce-ball/80759.md?page=2)
