Slice through hordes of enemies as you navigate Upupa the hoopoe to battle the powerful monsters lying in wait at the top of an ancient tower. Can you defeat them all and keep evil at bay for another generation?

Upupa Bird Ninja is a fast-paced tough-as-talons adventure about becoming the ultimate swordmaster. Simply beating each level is not enough — in order to progress you’ll have to prove yourself as both a great warrior and brilliant tactician!

How do I progress through the game?

Each door in the game requires you to reach certain goals before it will open. The specifics differ from door to door, but they all revolve around beating rooms, or doing so under a certain time or number of moves. If you’re lost, have a look at the UI that shows up between each attempt.

Note: plays best with mouse or controller. Touch input not fully supported


Join us on Discord

Music: Ethernight Club by Kevin MacLeod. Licensed under CC BY 3.0

StatusPrototype
PlatformsHTML5, Windows
Rating
Rated 4.8 out of 5 stars
(34 total ratings)
AuthorsClockwork Acorn, Francois van Niekerk, My4sthma
GenreAction, Adventure, Platformer
Made withUnity
Tags2D, Action-Adventure, Difficult, Fast-Paced, Ninja, No AI, Speedrun, Tactical
Average sessionA few minutes
LanguagesEnglish

Download

Download NowName your own price

Click download now to get access to the following files:

UpupaBirdNinja_windows.zip 83 MB

Development log

Comments

Log in with itch.io to leave a comment.

Hello Clockwork Acorn,

I really liked the look of Upupa,  and wanted to see if you’d be interested in a small playtest partnered with GameUserResearch. This would be completely free, and we'd collect real gameplay data, feedback, and recorded footage/screenshots/surveys to help refine the experience.

A key focus would be how well players understand the game’s mechanics, whether everything is intuitive, and what could be improved to make the experience clearer and smoother. We’d also analyze engagement, difficulty balance, and overall UX to see if anything could be refined. Additionally, do you have any other games in development that might benefit from structured user testing?

I’d love to help provide early feedback and insights that could shape the game’s direction. Let me know if this sounds useful, I’d be happy to discuss it further!

I recently just completed a playtest if you would like an example!

Hi! To be honest this probably isn't something we're looking for now, but if you drop us an email at info@clockworkacorn.com with more details, we can consider it :)

(+1)

The game was absolutely thrilling and a blast.
It’s awesome when a simple idea is pulled off insanely well
Nice

(+2)

incredible game! i'm having the same issue with the worm fight crash just fyi! i'm playing in browser, firefox on mac other details consistent with what others have said. it's sending me a huge error code when it crashes, here's that in case it's helpful:

An error occurred running the Unity content on this page. See your browser JavaScript console for more info. The error was:

RuntimeError: index out of bounds

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4472]:0x21b54b

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4467]:0x21acb9

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[580]:0xc1de1

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[579]:0xc1d6b

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[15369]:0x674ee5

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[15328]:0x66e0d5

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[15327]:0x66dd47

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[15326]:0x66dc6e

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4438]:0x218bad

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4434]:0x218201

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4433]:0x21813f

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4478]:0x21beb1

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4472]:0x21b5fe

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4467]:0x21acb9

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[8519]:0x375bb3

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[8518]:0x37553a

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[14110]:0x616d2b

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[15289]:0x66c45a

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[73111]:0x16cf65e

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[73110]:0x16cf626

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[73142]:0x16cfe82

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[104659]:0x1e78f21

unityFramework/Module.dynCall_viii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:600100

invoke_viii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:428491

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[44706]:0x108c267

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[104661]:0x1e78f55

unityFramework/Module.dynCall_viiii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:604655

invoke_viiii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:437013

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[53077]:0x1277c38

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[53072]:0x1275855

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[104659]:0x1e78f21

unityFramework/Module.dynCall_viii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:600100

invoke_viii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:428491

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[53068]:0x12735d9

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[44710]:0x108d900

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[65826]:0x1549bfc

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[65844]:0x154af61

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[31393]:0xd9366e

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[104613]:0x1e788b9

unityFramework/Module.dynCall_iiiii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:568165

invoke_iiiii@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:368557

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[102063]:0x1dfedee

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[101313]:0x1dda5cd

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4652]:0x229157

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[4650]:0x228e27

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[12081]:0x509d11

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[11238]:0x48c5a6

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[11219]:0x48917b

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[11217]:0x4887f6

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[11186]:0x487b99

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[10877]:0x461dd2

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[10877]:0x461de7

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[10872]:0x46196c

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[10865]:0x45fab5

@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee line 2 > WebAssembly.instantiate:wasm-function[104639]:0x1e78d31

unityFramework/Module.dynCall_v@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:581916

browserIterationFunc@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:185957

runIter@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:189030

Browser_mainLoop_runner@blob:https://html-classic.itch.zone/3593732e-ff4d-460d-8808-bfe6b47d21ee:2:187492

(+1)

I jumped off the wall the centipede boss comes out of and it crashed

(+1)

Oh no! We're not seeing a crash on our side. Does it happen consistently or only sometimes? Can you please share any more details that might help us diagnose the issue?

consistently i also came across with this issue and it makes the room impossible to complete without crashing

(1 edit)

I think it might happen on the web version when you jump off of the base of the diagonal segments, but I haven't observed the crash enough to be sure. I got through the worm on the web version though, so it certainly doesn't make the fight impossible. Screenshot of final frame:Whatever the crash is, it certainly isn't very consistent for me, and it's probably dependent on device performance.

(+1)

really fun and challenging

(+1)

I keep crashing on the worm boss. It's pretty consistent.

Oh no! We're not seeing a crash on our side. Can you please share any more details that might help us diagnose the issue?

Sure! I'm playing in the browser and the crash seems to occur around my 3rd or 4th attempt at fighting it every time I refresh the page/game. 

(+1)

Muito bom, ainda vou voltar pra terminar!

having a hard time loading it

(1 edit)

Sorry to hear that! Can you share more info? Are you playing on web or the downloadable build? If web, are you playing on a laptop or a phone? If downloadable, can you share your Player.log file? You can find that at (see https://docs.unity3d.com/Manual/log-files.html):

%USERPROFILE%\AppData\LocalLow\CompanyName\ProductName\Player.log

I am playing in web

Are you trying the web build on a computer, or a phone? It probably won't work on a phone. Do you get an error message? Can you open the web console and look for errors there? Can you try the downloadable build? Without a bit more info it's very hard to help you 

(+3)

reminds me of discroom, but i like this one better. great job!

Disc Room is a big inspiration! We plan to go in a bit of a different direction, but there's a lot of great things about Disc Room we can use for inspiration :)

(+2)

Wow this was so fun to play! Really has a unique style and feel to it. took me less than 10 seconds to understand what to do and how to play. Nicely done!

Congrats to FireRuin on a 37m16s any% run. Can anyone else do better? https://www.speedrun.com/UBN/runs/yvnjl8om

(+1)

I love the game and think it has incredible potential! The art, music, and core mechanics are fantastic, but I have a suggestion to enhance the gameplay. Currently, enemies start moving as soon as the level begins and stay in motion regardless of the player’s actions. However, since enemy movement is first triggered when the player aims, it feels like the game is hinting at a more dynamic mechanic.

What if enemies only moved while the player was holding the aim? This would create a deliberate tradeoff where aiming not only sets up the player’s movement but also allows enemies to advance. To complement this, the aiming system could include a two-stage bar, similar to The Pathless:

  • Holding the aim until fully charged would allow the player to fly to the target but lets enemies advance for the full duration, increasing the challenge.
  • Releasing the aim at the 50% mark would still let the player fly to the target but would cut enemy movement time in half, rewarding quick reflexes and precision.

In this system, players must release their aim at these specific windows—either at the 50% mark or when fully charged—for their movement to activate. Releasing at any other point would result in no action, forcing players to carefully time their releases. 

This approach ties movement and combat together seamlessly, encouraging players to balance planning and execution. It could elevate the game to an even more engaging and strategic experience.

Keep up the amazing work—I’m excited to see how the game evolves!

(+1)

Thanks for the suggestions! If I'm understanding, I think there are two suggestions here that could be considered separately:

  1. Enemies don't move/react indefinitely, when the player isn't doing anything.
  2. There is a more nuanced aiming system where the player is rewarded for careful timing (a la The Pathless).

I like the idea of 2, either what you suggested exactly or something like it. It would add some more skill potential and a higher skill ceiling, but (probably) not generally be needed to beat the game (maybe the bosses need you to do it a bit).

I'm a bit unsure of 1. On one hand I can see how it can make the game more strategic and more thinky, but I'm not sure if that's better. I think maybe part of what works is that each attempt is quite quick and you can try again in an instant. If time fully stopped like that, I wonder if it would slow the game down too much? When we tested things like this, we felt like it made the game too "turn based" and a bit less fun.

But... maybe there's a power that does something like 1? Once per attempt you can freeze time until you act again. It would allow you to insert a breather into a run to figure out your next move. I'll give it some more thought! Thanks for the feedback :)

(+1)

AWESOME game. Art, mechanics, MUSIC, everything.

(+1)

This is so much fun! I love this game and I love being Upupa! What a cool bird!!

(+2)

This is such an amazing game with quality design and fun gameplay mechanic

Right!! Totally addicted to it now. 

(+3)

Clockwork Acorn serving extremely unique game design again! Perfect!

Totally!! Love getting slicey!