Game review
Ninja vs EVILCORP
8 / 10
- Developer
- Rémi Vansteelandt (remvst)
- Publisher
- Independent
- Released
- 1 January 2020
- Platforms
- Web browser (desktop and mobile)
- Genre
- Platformer / stealth
- Monetisation
- Free, no ads and no in-game purchases
- Players
- Single-player only
The short version
Ninja vs EVILCORP didn't just do well at js13k 2020 — it won outright, first of 200 entries in the Overall category and the Mobile category alongside it, and playing it explains why: rain, parallax city skylines and a neon sign packed into 13 kilobytes, seventeen tightly designed levels with obvious and alternate routes for speedrunners, and four difficulty settings from forgiving to brutal. The touch layer is the real story for this shelf — the whole screen is split into left-quarter, next-quarter and right-half zones feeding directly into the same input state the keyboard uses, confirmed working by actually starting the game and playing through a level on a simulated touchscreen. It isn't flawless on a phone: a console warning shows its touch handler silently failing to block the browser's own default gestures, and the game's own code reserves extra screen height specifically for a mobile layout that this review's testing tools could not fully reconstruct. A genuinely exceptional platformer, honestly caveated.
Biggest strengths
- A genuine, decorated result, not a marketing line — js13kgames.com's own results show it finished 1st of 200 entries in the 2020 Overall category, and it won the Mobile category the same year, with judge comments praising it as "amazingly good" and citing the motion blur and security-camera raycasting specifically
- Touch is a first-class input, not an afterthought: reading the source shows every touch event feeding the identical keyboard input object the game already uses (left third, next third and right half of the screen map to left, right and jump/action), confirmed directly by starting the game and moving into an actual level on a simulated 390x844 touchscreen
- Real replay structure: four selectable difficulties (normal, easy, very easy, nightmare), a per-difficulty best-time record, and seventeen levels built with both an obvious route and a faster alternate route for players who want to speedrun
Biggest weaknesses
- A real, disclosable technical wrinkle: the touch handler calls preventDefault() inside what the browser treats as a passive event listener, which silently fails — confirmed by a console warning fired on every touch in testing. In practice this means a phone's own scroll or pull-to-refresh gesture may fight the game's touch controls, something the code tries to prevent but doesn't actually manage to
- The game reserves 200 extra pixels of canvas height specifically when it detects a mobile user agent, almost certainly for on-screen control graphics or HUD spacing — but this review's testing tools do not send a mobile-style user agent even in phone-emulation mode, so that mobile-specific layout could not be directly verified here. Said plainly rather than quietly assumed to be fine
- On-screen prompts still read "PRESS [SPACE] TO START" and "PRESS [SPACE] TO JUMP" throughout, with no touch-specific instruction anywhere, despite touch being fully wired up under the hood — a phone player has no in-game hint that tapping the screen does anything at all
Who it's for: Precision-platformer fans and speedrunners who want a free, no-nonsense stealth game that happens to run in a browser tab
Our recommendation: One of the strongest games on this shelf on merit alone — worth playing on either device, with eyes open about the rougher edges of its phone-specific layer
8 / 10
Every year, js13kgames asks entrants to build a complete game inside a 13-kilobyte zip file, and most years produce one or two entries serious players keep coming back to after the competition ends. Ninja vs EVILCORP is 2020's version of that: a precision platformer about scaling a corporate tower to steal evil plans, built by a developer with a long js13k track record, and it didn't just place well — it finished first of 200 entries in the Overall category and won the Mobile category outright the same year. Reading the actual results page rather than trusting a GitHub star count, that's not an inflated claim; it's the competition's own scoring.
What the judges saw in 2020 still holds up
The presentation is the first thing that explains the reception. In 13 kilobytes there's a falling-rain effect over a parallax city skyline, a glowing red-and-white neon sign, animated security cameras sweeping raycasted vision cones a player has to dodge, and a ninja sprite with real motion blur on fast movement — one of the original 2020 judge comments calls out that exact detail, and it's still there in 2026. Underneath the presentation is a genuinely well-built platformer: seventeen levels, each one designed with an obvious safe route and a faster, riskier alternate path, four difficulty settings from a forgiving "very easy" up to a punishing "nightmare," and a per-difficulty best-time record that gives the whole thing real structure for anyone who wants to come back and shave seconds off a run. None of that is new to this review — it's what earned the game its wins six years ago — but it's worth confirming it wasn't a one-time impression that faded, because it hasn't.
The part that matters here: touch is real, not decorative
What earns this a look on a shelf built around phone playability is what's in the source code. Every touch event — start, move, end, cancel — feeds into exactly the same input object the keyboard uses, mapped by screen position: the left quarter of the screen sets the same flag as the left arrow key, the next quarter sets the same flag as right, and the entire right half of the screen sets the same flag as space. That's not a separate, bolted-on touch layer running parallel to the "real" keyboard game — it's the same system, fed from a different source. This was confirmed directly rather than taken on faith: a sustained touch on a simulated 390x844 phone screen started the game from its title screen, and the level loaded and ran with a visible timer counting up, exactly as it would from a keyboard. The game also supports a physical gamepad on top of both of those, which is more input coverage than most browser games bother with at any file size.
It isn't a perfectly clean result, and it's worth being precise about where it isn't. A console warning fired on every touch in testing: the game's touch handler calls preventDefault() to stop the browser's own gesture handling, but does so inside what the browser now treats as a passive listener, where that call silently does nothing. In practice, that means a phone's native scroll or pull-to-refresh gesture isn't actually being blocked the way the code intends, which could interfere with play during a fast swipe near the edge of the screen. Separately, the game's own code specifically adds 200 pixels of canvas height when it detects a mobile browser — almost certainly to make room for on-screen controls or HUD elements — and this review's testing tools, even in phone-emulation mode, don't send a mobile-style user agent string, so that mobile-specific layout could not be directly observed here. That's a real limit of this review's own tooling, not a claim that the mobile layout is broken; it's flagged so the gap between "verified" and "probably fine" stays honest. What also doesn't change for touch players: every on-screen prompt still reads "PRESS [SPACE] TO START" or "PRESS [SPACE] TO JUMP," so a phone player gets no in-game hint that tapping does anything, even though it demonstrably does.
The licence situation
There is no licence file anywhere in the repository, confirmed by reading the source directly rather than trusting an API field. That reads as an honest jam-project oversight rather than a deliberate reservation of rights — nothing about the project suggests the author intended to withhold it — and it's hosted here on that basis: credited, linked back to the author's own release, and covered by leetdom's usual same-day takedown offer if that reading is ever wrong.
The verdict
A competition-winning platformer with a genuinely thought-through touch layer underneath a couple of honestly-flagged rough edges is a rare combination on this shelf, and it clears the bar by a comfortable margin. The seventeen levels, the speedrun structure and the sheer craft packed into 13 kilobytes would make this worth recommending on desktop alone; that it also works with a thumb is what puts it here.
Pros and cons
Pros
- A genuine, decorated result, not a marketing line — js13kgames.com's own results show it finished 1st of 200 entries in the 2020 Overall category, and it won the Mobile category the same year, with judge comments praising it as "amazingly good" and citing the motion blur and security-camera raycasting specifically
- Touch is a first-class input, not an afterthought: reading the source shows every touch event feeding the identical keyboard input object the game already uses (left third, next third and right half of the screen map to left, right and jump/action), confirmed directly by starting the game and moving into an actual level on a simulated 390x844 touchscreen
- Real replay structure: four selectable difficulties (normal, easy, very easy, nightmare), a per-difficulty best-time record, and seventeen levels built with both an obvious route and a faster alternate route for players who want to speedrun
- Remarkable presentation for a 13-kilobyte file: a rain effect, a parallax city skyline, a glowing neon sign, security-camera vision cones, and smooth character animation, all running with zero console or page errors across every test in this review beyond one specific warning
- Also supports a physical gamepad alongside keyboard and touch, a level of input coverage most browser games at any size don't bother with
Cons
- A real, disclosable technical wrinkle: the touch handler calls preventDefault() inside what the browser treats as a passive event listener, which silently fails — confirmed by a console warning fired on every touch in testing. In practice this means a phone's own scroll or pull-to-refresh gesture may fight the game's touch controls, something the code tries to prevent but doesn't actually manage to
- The game reserves 200 extra pixels of canvas height specifically when it detects a mobile user agent, almost certainly for on-screen control graphics or HUD spacing — but this review's testing tools do not send a mobile-style user agent even in phone-emulation mode, so that mobile-specific layout could not be directly verified here. Said plainly rather than quietly assumed to be fine
- On-screen prompts still read "PRESS [SPACE] TO START" and "PRESS [SPACE] TO JUMP" throughout, with no touch-specific instruction anywhere, despite touch being fully wired up under the hood — a phone player has no in-game hint that tapping the screen does anything at all
- No stated licence anywhere in the repository — the author never granted one, which this review treats as an honest jam oversight rather than a restriction, but it does mean the game is hosted here on credit alone rather than a real grant of rights