A small 3D chibi shooter that runs in the browser. Made just for fun, with no commitment. 🎀
The game is based on the AI-generated chibi characters that became popular in 2026, such as Fibi Chupi and Gugu Gaga.
The whole game was made with 100% vibe coding.
Pick a cute character, grab a gun and duel one or two bots, hang out in a showcase of all characters, or play 1v1 against a friend online. It works with mouse and keyboard on the computer and with touch controls on phones (landscape).
There is no build step. Serve the folder with any static server and open index.html:
python3 -m http.server 8000
# then open http://localhost:8000An internet connection is needed (three.js and PeerJS are loaded from a CDN).
- 1v1: a deathmatch against a bot, endless or timed (3 or 5 minutes). When a timed match ends, the result screen shows every player's kills, deaths, accuracy, headshots and damage dealt.
- 1v2: the same, against two bots at once. Tap the + slot next to the enemy to add a second one and pick who it is (the ✕ removes it).
- Gun Game: pick it in the match length dialog of a 1v1 or 1v2 (no timer). Everyone starts with the pistol and each kill gives the next weapon (pistol, AK-47, shotgun, AWP, bazooka, sword). Whoever kills with the sword wins. Dying does not cost a level, and weapons cannot be switched by hand.
- Training: every character walks around the map, jumps and dances. Infinite ammo and no deaths, and every hit shows its damage as a floating number, so it is a good place to try things out. The pause menu can turn the bots' emotes off and make them stand still.
- Multiplayer: a 1v1 against a friend over the network.
| Key | Action |
|---|---|
W A S D |
Move |
| Mouse | Aim |
| Left click | Shoot |
| Right click | Aim (small zoom, exact shots; full scope on the AWP) |
1 2 3 4 5 6 |
Switch weapon |
R |
Reload |
Space |
Jump |
H |
Emote |
Hold Alt + mouse |
Look at your own character |
F |
Fullscreen |
Esc |
Pause menu |
On a phone the screen has a joystick and buttons for shooting, aiming, jumping, reloading, emotes and the weapon menu. Their size and position can be changed in Pause > Edit controls.
- Fibi: blonde girl with a wide white hat. Skins: no hat, and a black and red outfit, and the Brazil jersey.
- Guga: girl in a penguin hoodie. Skins: inverted colors (white), Fibi's hat, and the Brazil jersey.
- Nono: sleepy girl with long gray-green hair. Skins: Fibi's outfit, Fibi's hat, and the Brazil jersey.
- Doro: chubby, grumpy mochi girl with pink hair. Skins: black, and the Brazil jersey.
- Mambo: horse girl in a sailor-style outfit, with a periwinkle beret and a tail. Skins: Fibi's hat, and the Brazil jersey.
- Yotsuba: cheerful girl with spiky green hair, a white tee and mustard shorts. Skins: Fibi's hat, and Fibi's colors without a hat, and the Brazil jersey.
- Anya: little girl with short pink hair, black horn hairpieces and a black dress with a gold hem. Skins: navy and wine dresses, and the Brazil jersey.
- Bocchi: shy girl with very long pink hair, cube hairpins and a pink jacket. Skins: all black, sky blue, and the Brazil jersey.
- Miku: singer with long turquoise twin tails, headphones and a teal tie. Skins: pink and night purple outfits, and the Brazil jersey.
Each character has its own emotes with sound (press H).
Characters can have skins: pick one of the round portraits under the character list (also in the multiplayer lobby).
Pistol, AK-47, AWP (sniper), Shotgun, Bazooka and Sword. Each one has its own feel: the shotgun is strong up close,
the AWP is a sniper with a full scope (70 to the body, 100 to the head) and the AK-47 is a reliable automatic.
The pistol, AK-47 and shotgun lose damage with distance. The bazooka holds 3 rockets; its rocket flies slowly, so it
can be dodged, and explodes on impact with area damage (a direct hit does full damage).
The sword only works up close (3 meters), has no ammo and deals 50 damage, so two hits take a fighter down.
Every weapon except the sword can aim for a small zoom, and shots fired while aiming are exact.
All the numbers can be tweaked in js/config.js.
Every map has two red health flasks on opposite sides. Walk over one to get all your health back; it returns 25 seconds later. Bots go for them too when they are badly hurt. There are no flasks in Training.
- Moon: a lunar surface under a starry sky, with the Earth in the distance.
- Arena: a dark red and black arena.
- Forest: a green clearing with rocks, logs and trees.
- Assault: an indoor warehouse with stacked containers.
- Rio: the Copacabana promenade with its black and white waves, palm trees and kiosks, with the Christ the Redeemer on a far hill, Sugarloaf, towers and the sea around.
- Mars: a rust red crater with habitat modules, solar panels and masts, ridges and Olympus Mons far away, and Phobos in the sky.
- Snow: a snowy clearing with ice blocks, cabins under snow roofs, pines and drifts, snowy mountains around and an aurora in the sky.
- Plaza: a bigger town square with a terrace, stairs, a street and houses around it.
- Click Multiplayer and then Create room. Share the code or the link with a friend.
- Your friend opens the link, or types the code and clicks Join.
- Pick your characters and start the match.
Players connect directly to each other with PeerJS. There is no game server. It is made for playing with friends, not for stopping cheaters.
English, Portuguese and Spanish. The language follows your browser and can be switched in the menu.
index.html All screens (menu, lobby, match)
css/ Styles, one file per area (base, home, lobby, game, touch...)
audio/ Mp3 files
js/config.js Every tunable number
js/maps.js Map definitions
js/i18n.js Texts in English, Portuguese and Spanish
js/net.js PeerJS connection
js/characters/ Character models and dances
js/game/ Game logic
js/ui/ Menu, lobby and HUD
See CLAUDE.md for the coding rules used in this project.
Made with plain JavaScript, three.js and PeerJS.
Ideas and bug reports are welcome: please open an issue. Pull requests are not accepted, because I want to keep the direction of the game and the code in one place.
The code is released under the MIT License.
The characters and the emote sounds are viral, AI-generated content from the community. I do not claim them, and they are included as they are, outside the MIT License. If you own rights to any of them and want it removed, open an issue and I will take it down.