├── pkgs ├── matter │ ├── README.md │ ├── examples │ │ ├── index.html │ │ ├── terrain.js │ │ ├── basic.js │ │ ├── drag.js │ │ └── bird.js │ ├── build.js │ └── package.json └── create │ ├── package.json │ └── README.md ├── src-tauri ├── build.rs ├── icons │ ├── 32x32.png │ ├── icon.icns │ ├── icon.ico │ ├── icon.png │ ├── 128x128.png │ ├── 128x128@2x.png │ ├── StoreLogo.png │ ├── Square30x30Logo.png │ ├── Square44x44Logo.png │ ├── Square71x71Logo.png │ ├── Square89x89Logo.png │ ├── Square107x107Logo.png │ ├── Square142x142Logo.png │ ├── Square150x150Logo.png │ ├── Square284x284Logo.png │ └── Square310x310Logo.png ├── .gitignore ├── src │ └── main.rs ├── Cargo.toml └── tauri.conf.json ├── kaboom.png ├── scripts ├── dev.js ├── build.js ├── test.js └── autoinput.js ├── sprites ├── k.png ├── bag.png ├── bean.png ├── bobo.png ├── boom.png ├── coin.png ├── dino.png ├── door.png ├── egg.png ├── gun.png ├── ka.png ├── key.png ├── mark.png ├── meat.png ├── moon.png ├── note.png ├── sun.png ├── apple.png ├── btfly.png ├── cloud.png ├── ghosty.png ├── grape.png ├── grass.png ├── heart.png ├── jumpy.png ├── kaboom.png ├── portal.png ├── spike.png ├── src │ ├── k.ase │ ├── apple.ase │ ├── bag.ase │ ├── bean.ase │ ├── bobo.ase │ ├── btfly.ase │ ├── chill.ase │ ├── cloud.ase │ ├── coin.ase │ ├── dino.ase │ ├── door.ase │ ├── egg.ase │ ├── font.ase │ ├── grape.ase │ ├── grass.ase │ ├── gun.ase │ ├── heart.ase │ ├── jumpy.ase │ ├── key.ase │ ├── mark.ase │ ├── meat.ase │ ├── moon.ase │ ├── note.ase │ ├── spike.ase │ ├── steel.ase │ ├── sun.ase │ ├── sword.ase │ ├── cursor.ase │ ├── ghosty.ase │ ├── kaboom.ase │ ├── portal.ase │ ├── kaboomjs.ase │ ├── lightening.ase │ ├── mushroom.ase │ ├── pineapple.ase │ ├── watermelon.ase │ └── gigagantrum.ase ├── steel.png ├── sword.png ├── egg_crack.png ├── mushroom.png ├── pineapple.png ├── gigagantrum.png ├── lightening.png ├── watermelon.png ├── cursor_default.png └── cursor_pointer.png ├── blog ├── 2000 │ ├── gfx.gif │ ├── atlas.png │ ├── dungeon.png │ ├── fonts.png │ └── invbean.png ├── 2000.1 │ ├── debug.png │ └── transform.gif ├── banners │ ├── 2000.png │ ├── 3000.png │ ├── 2000.1.png │ ├── 3000-perf.png │ ├── burpjam.png │ ├── markjam-3.png │ ├── markjam-4-winners.png │ └── markjam-5-winners.png ├── burp-jam │ └── burpman.png ├── markjam-4-winners │ ├── scary.png │ ├── image_1.gif │ └── image_2.png ├── markjam-5-winners │ ├── snaked.gif │ ├── trophies.png │ ├── marks-food-place.gif │ └── marks-arcade-pacfruit.gif ├── 3000.2.md ├── burp-jam.md ├── markjam-5-winners.md ├── markjam-4-winners.md ├── markjam-3.md └── 3000-perf.md ├── doc ├── intro │ ├── bean.png │ ├── game.png │ ├── hit.gif │ ├── land.png │ ├── tree.png │ ├── comps.png │ ├── empty.png │ ├── inspect.png │ ├── kaboom.png │ ├── assemble.png │ └── humanbean.png ├── setup │ └── replit.png ├── publishing │ ├── itchio-1.png │ ├── itchio-2.png │ └── newgrounds-1.png ├── sections │ ├── Assets.md │ ├── Game Obj.md │ ├── Debug.md │ ├── Events.md │ ├── Draw.md │ └── Components.md ├── dev.md ├── publishing.md ├── comp.md ├── tips.md └── setup.md ├── src ├── assets │ ├── ka.png │ ├── bean.png │ ├── boom.png │ ├── burp.mp3 │ └── index.d.ts ├── texPacker.ts ├── gamepad.json ├── easings.ts └── assets.ts ├── examples ├── fonts │ ├── 4x4.png │ ├── zpix.ttf │ ├── 04b03.ttf │ ├── apl386.ttf │ ├── cga_8x8.png │ ├── 04b03_6x8.png │ ├── sink_6x8.png │ ├── Romantique.ttf │ ├── happy_28x36.png │ ├── proggy_7x13.png │ ├── unscii_8x8.png │ └── FlowerSketches.ttf ├── sounds │ ├── bug.mp3 │ ├── hit.mp3 │ ├── off.mp3 │ ├── bell.mp3 │ ├── blip.mp3 │ ├── burp.mp3 │ ├── danger.mp3 │ ├── dune.mp3 │ ├── error.mp3 │ ├── mystic.mp3 │ ├── notice.mp3 │ ├── portal.mp3 │ ├── robot.mp3 │ ├── score.mp3 │ ├── shoot.mp3 │ ├── signal.mp3 │ ├── spring.mp3 │ ├── weak.mp3 │ ├── wooosh.mp3 │ ├── computer.mp3 │ ├── explode.mp3 │ ├── powerup.mp3 │ ├── kaboom2000.mp3 │ └── OtherworldlyFoe.mp3 ├── sprites │ ├── YOSHI.png │ ├── dino.png │ ├── you.png │ ├── 9slice.png │ ├── dungeon.png │ ├── spritemerge_chest.png │ ├── spritemerge_corpus.png │ ├── you.json │ └── dungeon.json ├── kaboom.js ├── shaders │ ├── invert.frag │ ├── pixelate.frag │ ├── light.frag │ ├── crt.frag │ └── vhs.frag ├── burp.js ├── timer.js ├── examples.json ├── layer.js ├── size.js ├── bench.js ├── slice9.js ├── children.js ├── fadeIn.js ├── multiboom.js ├── largeTexture.js ├── particle.js ├── shader.js ├── fall.js ├── out.js ├── multigamepad.js ├── gamepad.js ├── hover.js ├── movement.js ├── button.js ├── polygon.js ├── pong.js ├── tween.js ├── add.js ├── dialog.js ├── gravity.js ├── flamebar.js ├── egg.js ├── level.js ├── confetti.js ├── audio.js ├── camera.js ├── loader.js ├── drag.js ├── ai.js ├── runner.js ├── component.js ├── sprite.js ├── postEffect.js ├── eatlove.js ├── collision.js ├── flappy.js ├── draw.js ├── text.js ├── scenes.js ├── overlap.js ├── maze.js ├── rpg.js ├── doublejump.js └── pauseMenu.js ├── .gitignore ├── .github ├── workflows │ └── test.yml └── ISSUE_TEMPLATE │ └── config.yml ├── tsconfig.json ├── LICENSE ├── CONTRIBUTING.md ├── .eslintrc.json └── package.json /pkgs/matter/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src-tauri/build.rs: -------------------------------------------------------------------------------- 1 | fn main() { 2 | tauri_build::build() 3 | } 4 | -------------------------------------------------------------------------------- /kaboom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/kaboom.png -------------------------------------------------------------------------------- /scripts/dev.js: -------------------------------------------------------------------------------- 1 | import { dev } from "./lib.js" 2 | 3 | await dev() 4 | -------------------------------------------------------------------------------- /sprites/k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/k.png -------------------------------------------------------------------------------- /sprites/bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/bag.png -------------------------------------------------------------------------------- /sprites/bean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/bean.png -------------------------------------------------------------------------------- /sprites/bobo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/bobo.png -------------------------------------------------------------------------------- /sprites/boom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/boom.png -------------------------------------------------------------------------------- /sprites/coin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/coin.png -------------------------------------------------------------------------------- /sprites/dino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/dino.png -------------------------------------------------------------------------------- /sprites/door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/door.png -------------------------------------------------------------------------------- /sprites/egg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/egg.png -------------------------------------------------------------------------------- /sprites/gun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/gun.png -------------------------------------------------------------------------------- /sprites/ka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/ka.png -------------------------------------------------------------------------------- /sprites/key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/key.png -------------------------------------------------------------------------------- /sprites/mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/mark.png -------------------------------------------------------------------------------- /sprites/meat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/meat.png -------------------------------------------------------------------------------- /sprites/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/moon.png -------------------------------------------------------------------------------- /sprites/note.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/note.png -------------------------------------------------------------------------------- /sprites/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/sun.png -------------------------------------------------------------------------------- /blog/2000/gfx.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000/gfx.gif -------------------------------------------------------------------------------- /doc/intro/bean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/bean.png -------------------------------------------------------------------------------- /doc/intro/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/game.png -------------------------------------------------------------------------------- /doc/intro/hit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/hit.gif -------------------------------------------------------------------------------- /doc/intro/land.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/land.png -------------------------------------------------------------------------------- /doc/intro/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/tree.png -------------------------------------------------------------------------------- /sprites/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/apple.png -------------------------------------------------------------------------------- /sprites/btfly.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/btfly.png -------------------------------------------------------------------------------- /sprites/cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/cloud.png -------------------------------------------------------------------------------- /sprites/ghosty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/ghosty.png -------------------------------------------------------------------------------- /sprites/grape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/grape.png -------------------------------------------------------------------------------- /sprites/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/grass.png -------------------------------------------------------------------------------- /sprites/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/heart.png -------------------------------------------------------------------------------- /sprites/jumpy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/jumpy.png -------------------------------------------------------------------------------- /sprites/kaboom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/kaboom.png -------------------------------------------------------------------------------- /sprites/portal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/portal.png -------------------------------------------------------------------------------- /sprites/spike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/spike.png -------------------------------------------------------------------------------- /sprites/src/k.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/k.ase -------------------------------------------------------------------------------- /sprites/steel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/steel.png -------------------------------------------------------------------------------- /sprites/sword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/sword.png -------------------------------------------------------------------------------- /src/assets/ka.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src/assets/ka.png -------------------------------------------------------------------------------- /blog/2000.1/debug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000.1/debug.png -------------------------------------------------------------------------------- /blog/2000/atlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000/atlas.png -------------------------------------------------------------------------------- /blog/2000/dungeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000/dungeon.png -------------------------------------------------------------------------------- /blog/2000/fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000/fonts.png -------------------------------------------------------------------------------- /blog/2000/invbean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000/invbean.png -------------------------------------------------------------------------------- /blog/banners/2000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/2000.png -------------------------------------------------------------------------------- /blog/banners/3000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/3000.png -------------------------------------------------------------------------------- /doc/intro/comps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/comps.png -------------------------------------------------------------------------------- /doc/intro/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/empty.png -------------------------------------------------------------------------------- /doc/intro/inspect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/inspect.png -------------------------------------------------------------------------------- /doc/intro/kaboom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/kaboom.png -------------------------------------------------------------------------------- /doc/setup/replit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/setup/replit.png -------------------------------------------------------------------------------- /sprites/egg_crack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/egg_crack.png -------------------------------------------------------------------------------- /sprites/mushroom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/mushroom.png -------------------------------------------------------------------------------- /sprites/pineapple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/pineapple.png -------------------------------------------------------------------------------- /sprites/src/apple.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/apple.ase -------------------------------------------------------------------------------- /sprites/src/bag.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/bag.ase -------------------------------------------------------------------------------- /sprites/src/bean.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/bean.ase -------------------------------------------------------------------------------- /sprites/src/bobo.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/bobo.ase -------------------------------------------------------------------------------- /sprites/src/btfly.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/btfly.ase -------------------------------------------------------------------------------- /sprites/src/chill.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/chill.ase -------------------------------------------------------------------------------- /sprites/src/cloud.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/cloud.ase -------------------------------------------------------------------------------- /sprites/src/coin.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/coin.ase -------------------------------------------------------------------------------- /sprites/src/dino.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/dino.ase -------------------------------------------------------------------------------- /sprites/src/door.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/door.ase -------------------------------------------------------------------------------- /sprites/src/egg.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/egg.ase -------------------------------------------------------------------------------- /sprites/src/font.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/font.ase -------------------------------------------------------------------------------- /sprites/src/grape.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/grape.ase -------------------------------------------------------------------------------- /sprites/src/grass.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/grass.ase -------------------------------------------------------------------------------- /sprites/src/gun.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/gun.ase -------------------------------------------------------------------------------- /sprites/src/heart.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/heart.ase -------------------------------------------------------------------------------- /sprites/src/jumpy.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/jumpy.ase -------------------------------------------------------------------------------- /sprites/src/key.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/key.ase -------------------------------------------------------------------------------- /sprites/src/mark.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/mark.ase -------------------------------------------------------------------------------- /sprites/src/meat.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/meat.ase -------------------------------------------------------------------------------- /sprites/src/moon.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/moon.ase -------------------------------------------------------------------------------- /sprites/src/note.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/note.ase -------------------------------------------------------------------------------- /sprites/src/spike.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/spike.ase -------------------------------------------------------------------------------- /sprites/src/steel.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/steel.ase -------------------------------------------------------------------------------- /sprites/src/sun.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/sun.ase -------------------------------------------------------------------------------- /sprites/src/sword.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/sword.ase -------------------------------------------------------------------------------- /src/assets/bean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src/assets/bean.png -------------------------------------------------------------------------------- /src/assets/boom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src/assets/boom.png -------------------------------------------------------------------------------- /src/assets/burp.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src/assets/burp.mp3 -------------------------------------------------------------------------------- /blog/banners/2000.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/2000.1.png -------------------------------------------------------------------------------- /doc/intro/assemble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/assemble.png -------------------------------------------------------------------------------- /doc/intro/humanbean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/intro/humanbean.png -------------------------------------------------------------------------------- /examples/fonts/4x4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/4x4.png -------------------------------------------------------------------------------- /examples/fonts/zpix.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/zpix.ttf -------------------------------------------------------------------------------- /examples/sounds/bug.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/bug.mp3 -------------------------------------------------------------------------------- /examples/sounds/hit.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/hit.mp3 -------------------------------------------------------------------------------- /examples/sounds/off.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/off.mp3 -------------------------------------------------------------------------------- /sprites/gigagantrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/gigagantrum.png -------------------------------------------------------------------------------- /sprites/lightening.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/lightening.png -------------------------------------------------------------------------------- /sprites/src/cursor.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/cursor.ase -------------------------------------------------------------------------------- /sprites/src/ghosty.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/ghosty.ase -------------------------------------------------------------------------------- /sprites/src/kaboom.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/kaboom.ase -------------------------------------------------------------------------------- /sprites/src/portal.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/portal.ase -------------------------------------------------------------------------------- /sprites/watermelon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/watermelon.png -------------------------------------------------------------------------------- /blog/2000.1/transform.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/2000.1/transform.gif -------------------------------------------------------------------------------- /blog/banners/3000-perf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/3000-perf.png -------------------------------------------------------------------------------- /blog/banners/burpjam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/burpjam.png -------------------------------------------------------------------------------- /blog/banners/markjam-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/markjam-3.png -------------------------------------------------------------------------------- /blog/burp-jam/burpman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/burp-jam/burpman.png -------------------------------------------------------------------------------- /examples/fonts/04b03.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/04b03.ttf -------------------------------------------------------------------------------- /examples/fonts/apl386.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/apl386.ttf -------------------------------------------------------------------------------- /examples/fonts/cga_8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/cga_8x8.png -------------------------------------------------------------------------------- /examples/sounds/bell.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/bell.mp3 -------------------------------------------------------------------------------- /examples/sounds/blip.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/blip.mp3 -------------------------------------------------------------------------------- /examples/sounds/burp.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/burp.mp3 -------------------------------------------------------------------------------- /examples/sounds/danger.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/danger.mp3 -------------------------------------------------------------------------------- /examples/sounds/dune.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/dune.mp3 -------------------------------------------------------------------------------- /examples/sounds/error.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/error.mp3 -------------------------------------------------------------------------------- /examples/sounds/mystic.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/mystic.mp3 -------------------------------------------------------------------------------- /examples/sounds/notice.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/notice.mp3 -------------------------------------------------------------------------------- /examples/sounds/portal.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/portal.mp3 -------------------------------------------------------------------------------- /examples/sounds/robot.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/robot.mp3 -------------------------------------------------------------------------------- /examples/sounds/score.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/score.mp3 -------------------------------------------------------------------------------- /examples/sounds/shoot.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/shoot.mp3 -------------------------------------------------------------------------------- /examples/sounds/signal.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/signal.mp3 -------------------------------------------------------------------------------- /examples/sounds/spring.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/spring.mp3 -------------------------------------------------------------------------------- /examples/sounds/weak.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/weak.mp3 -------------------------------------------------------------------------------- /examples/sounds/wooosh.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/wooosh.mp3 -------------------------------------------------------------------------------- /examples/sprites/YOSHI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/YOSHI.png -------------------------------------------------------------------------------- /examples/sprites/dino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/dino.png -------------------------------------------------------------------------------- /examples/sprites/you.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/you.png -------------------------------------------------------------------------------- /scripts/build.js: -------------------------------------------------------------------------------- 1 | import { build, genDTS } from "./lib.js" 2 | 3 | await build() 4 | await genDTS() 5 | -------------------------------------------------------------------------------- /sprites/cursor_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/cursor_default.png -------------------------------------------------------------------------------- /sprites/cursor_pointer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/cursor_pointer.png -------------------------------------------------------------------------------- /sprites/src/kaboomjs.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/kaboomjs.ase -------------------------------------------------------------------------------- /sprites/src/lightening.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/lightening.ase -------------------------------------------------------------------------------- /sprites/src/mushroom.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/mushroom.ase -------------------------------------------------------------------------------- /sprites/src/pineapple.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/pineapple.ase -------------------------------------------------------------------------------- /sprites/src/watermelon.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/watermelon.ase -------------------------------------------------------------------------------- /src-tauri/icons/32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/32x32.png -------------------------------------------------------------------------------- /src-tauri/icons/icon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/icon.icns -------------------------------------------------------------------------------- /src-tauri/icons/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/icon.ico -------------------------------------------------------------------------------- /src-tauri/icons/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/icon.png -------------------------------------------------------------------------------- /doc/publishing/itchio-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/publishing/itchio-1.png -------------------------------------------------------------------------------- /doc/publishing/itchio-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/publishing/itchio-2.png -------------------------------------------------------------------------------- /examples/fonts/04b03_6x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/04b03_6x8.png -------------------------------------------------------------------------------- /examples/fonts/sink_6x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/sink_6x8.png -------------------------------------------------------------------------------- /examples/sounds/computer.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/computer.mp3 -------------------------------------------------------------------------------- /examples/sounds/explode.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/explode.mp3 -------------------------------------------------------------------------------- /examples/sounds/powerup.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/powerup.mp3 -------------------------------------------------------------------------------- /examples/sprites/9slice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/9slice.png -------------------------------------------------------------------------------- /examples/sprites/dungeon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/dungeon.png -------------------------------------------------------------------------------- /sprites/src/gigagantrum.ase: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/sprites/src/gigagantrum.ase -------------------------------------------------------------------------------- /src-tauri/.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | -------------------------------------------------------------------------------- /src-tauri/icons/128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/128x128.png -------------------------------------------------------------------------------- /doc/publishing/newgrounds-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/doc/publishing/newgrounds-1.png -------------------------------------------------------------------------------- /examples/fonts/Romantique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/Romantique.ttf -------------------------------------------------------------------------------- /examples/fonts/happy_28x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/happy_28x36.png -------------------------------------------------------------------------------- /examples/fonts/proggy_7x13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/proggy_7x13.png -------------------------------------------------------------------------------- /examples/fonts/unscii_8x8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/unscii_8x8.png -------------------------------------------------------------------------------- /examples/sounds/kaboom2000.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/kaboom2000.mp3 -------------------------------------------------------------------------------- /src-tauri/icons/128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/128x128@2x.png -------------------------------------------------------------------------------- /src-tauri/icons/StoreLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/StoreLogo.png -------------------------------------------------------------------------------- /blog/markjam-4-winners/scary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-4-winners/scary.png -------------------------------------------------------------------------------- /blog/markjam-5-winners/snaked.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-5-winners/snaked.gif -------------------------------------------------------------------------------- /examples/fonts/FlowerSketches.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/fonts/FlowerSketches.ttf -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | dist/ 3 | node_modules/ 4 | .idea/ 5 | desktop/ 6 | .env 7 | .vscode 8 | src-tauri/target/ 9 | -------------------------------------------------------------------------------- /blog/banners/markjam-4-winners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/markjam-4-winners.png -------------------------------------------------------------------------------- /blog/banners/markjam-5-winners.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/banners/markjam-5-winners.png -------------------------------------------------------------------------------- /blog/markjam-4-winners/image_1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-4-winners/image_1.gif -------------------------------------------------------------------------------- /blog/markjam-4-winners/image_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-4-winners/image_2.png -------------------------------------------------------------------------------- /blog/markjam-5-winners/trophies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-5-winners/trophies.png -------------------------------------------------------------------------------- /examples/sounds/OtherworldlyFoe.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sounds/OtherworldlyFoe.mp3 -------------------------------------------------------------------------------- /src-tauri/icons/Square30x30Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square30x30Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square44x44Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square44x44Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square71x71Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square71x71Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square89x89Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square89x89Logo.png -------------------------------------------------------------------------------- /examples/sprites/spritemerge_chest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/spritemerge_chest.png -------------------------------------------------------------------------------- /src-tauri/icons/Square107x107Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square107x107Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square142x142Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square142x142Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square150x150Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square150x150Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square284x284Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square284x284Logo.png -------------------------------------------------------------------------------- /src-tauri/icons/Square310x310Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/src-tauri/icons/Square310x310Logo.png -------------------------------------------------------------------------------- /examples/sprites/spritemerge_corpus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/examples/sprites/spritemerge_corpus.png -------------------------------------------------------------------------------- /blog/markjam-5-winners/marks-food-place.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-5-winners/marks-food-place.gif -------------------------------------------------------------------------------- /blog/markjam-5-winners/marks-arcade-pacfruit.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/replit/kaboom/master/blog/markjam-5-winners/marks-arcade-pacfruit.gif -------------------------------------------------------------------------------- /examples/kaboom.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | addKaboom(center()) 3 | onKeyPress(() => addKaboom(mousePos())) 4 | onMouseMove(() => addKaboom(mousePos())) 5 | -------------------------------------------------------------------------------- /doc/sections/Assets.md: -------------------------------------------------------------------------------- 1 | Every function with the `load` prefix is an async function that loads something into the asset manager, and should return a promise that resolves upon load complete. 2 | -------------------------------------------------------------------------------- /src/assets/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.mp3" { 2 | const value: Uint8Array 3 | export default value 4 | } 5 | 6 | declare module "*.png" { 7 | const value: string 8 | export default value 9 | } 10 | -------------------------------------------------------------------------------- /examples/shaders/invert.frag: -------------------------------------------------------------------------------- 1 | uniform float u_invert; 2 | 3 | vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) { 4 | vec4 c = def_frag(); 5 | return mix(c, vec4(1.0 - c.r, 1.0 - c.g, 1.0 - c.b, c.a), u_invert); 6 | } 7 | -------------------------------------------------------------------------------- /examples/burp.js: -------------------------------------------------------------------------------- 1 | // Start the game in burp mode 2 | kaboom({ 3 | burp: true, 4 | }) 5 | 6 | // "b" triggers a burp in burp mode 7 | add([ 8 | text("press b"), 9 | ]) 10 | 11 | // burp() on click / tap for our friends on mobile 12 | onClick(burp) 13 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | 3 | on: [ push ] 4 | 5 | jobs: 6 | test: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - run: npm install 11 | - run: npm run check 12 | - run: npm run lint 13 | - run: npm run test 14 | -------------------------------------------------------------------------------- /src-tauri/src/main.rs: -------------------------------------------------------------------------------- 1 | #![cfg_attr( 2 | all(not(debug_assertions), target_os = "windows"), 3 | windows_subsystem = "windows" 4 | )] 5 | 6 | fn main() { 7 | tauri::Builder::default() 8 | .run(tauri::generate_context!()) 9 | .expect("error while running tauri application"); 10 | } 11 | -------------------------------------------------------------------------------- /pkgs/matter/examples/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /doc/sections/Game Obj.md: -------------------------------------------------------------------------------- 1 | Game Object is the basic unit of entity in a kaboom world. Everything is a game object, the player, a butterfly, a tree, or even a piece of text. 2 | 3 | This section contains functions to add, remove, and access game objects. To actually make them do stuff, check out the [Components](#Components) section. 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "noEmit": true, 4 | "allowJs": true, 5 | "esModuleInterop": true, 6 | "target": "esnext", 7 | "moduleResolution": "node", 8 | "noImplicitThis": true, 9 | "resolveJsonModule": true 10 | }, 11 | "include": [ 12 | "src/**/*", 13 | "scripts/**/*" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | contact_links: 2 | - name: Help 3 | url: https://github.com/replit/kaboom/discussions/new?category=q-a 4 | about: How to use certain Kaboom feature, or how to achieve something with Kaboom 5 | - name: Suggestion 6 | url: https://github.com/replit/kaboom/discussions/new?category=ideas 7 | about: Features you'd like Kaboom to have 8 | -------------------------------------------------------------------------------- /examples/timer.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | 3 | loadSprite("bean", "/sprites/bean.png") 4 | 5 | // Execute something after every 0.5 seconds. 6 | loop(0.5, () => { 7 | 8 | const bean = add([ 9 | sprite("bean"), 10 | pos(rand(vec2(0), vec2(width(), height()))), 11 | ]) 12 | 13 | // Execute something after 3 seconds. 14 | wait(3, () => { 15 | destroy(bean) 16 | }) 17 | 18 | }) 19 | -------------------------------------------------------------------------------- /pkgs/create/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "create-kaboom", 3 | "description": "Start a kaboom project in no time", 4 | "version": "2.6.0", 5 | "license": "MIT", 6 | "homepage": "https://kaboomjs.com/", 7 | "repository": "github:replit/kaboom", 8 | "author": "tga ", 9 | "type": "module", 10 | "bin": "create.js", 11 | "files": [ 12 | "create.js", 13 | "README.md" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /examples/examples.json: -------------------------------------------------------------------------------- 1 | { 2 | "order": [ 3 | "add", 4 | "movement", 5 | "collision", 6 | "gravity", 7 | "sprite", 8 | "fadeIn", 9 | "text", 10 | "audio", 11 | "level", 12 | "scenes", 13 | "timer", 14 | "component", 15 | "layer", 16 | "camera", 17 | "ai", 18 | "button", 19 | "dialog", 20 | "draw", 21 | "confetti", 22 | "particle", 23 | "shader", 24 | "burp" 25 | ], 26 | "hidden": [ 27 | "fall", 28 | "bench" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /examples/layer.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | 3 | loadSprite("bean", "/sprites/bean.png") 4 | 5 | // Create a parent node that won't be affected by camera (fixed) and will be drawn on top (z of 100) 6 | const ui = add([ 7 | fixed(), 8 | z(100), 9 | ]) 10 | 11 | // This will be on top, because the parent node has z(100) 12 | ui.add([ 13 | sprite("bean"), 14 | scale(5), 15 | color(0, 0, 255), 16 | ]) 17 | 18 | add([ 19 | sprite("bean"), 20 | pos(100, 100), 21 | scale(5), 22 | ]) 23 | -------------------------------------------------------------------------------- /doc/sections/Debug.md: -------------------------------------------------------------------------------- 1 | By default kaboom starts in debug mode, which enables key bindings that calls out various debug utilities: 2 | 3 | - `f1` to toggle inspect mode 4 | - `f2` to clear debug console 5 | - `f7` to slow down 6 | - `f8` to pause / resume 7 | - `f9` to speed up 8 | - `f10` to skip frame 9 | 10 | Some of these can be also controlled with stuff under the `debug` object. 11 | 12 | If you want to turn debug mode off when releasing you game, set `debug` option to false in `kaboom()` 13 | -------------------------------------------------------------------------------- /examples/shaders/pixelate.frag: -------------------------------------------------------------------------------- 1 | uniform float u_size; 2 | uniform vec2 u_resolution; 3 | 4 | // TODO: this is causing some extra pixels to appear at screen edge 5 | vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) { 6 | if (u_size <= 0.0) return def_frag(); 7 | vec2 nsize = vec2(u_size / u_resolution.x, u_size / u_resolution.y); 8 | float x = floor(uv.x / nsize.x + 0.5); 9 | float y = floor(uv.y / nsize.y + 0.5); 10 | vec4 c = texture2D(tex, vec2(x, y) * nsize); 11 | return c * color; 12 | } 13 | -------------------------------------------------------------------------------- /examples/shaders/light.frag: -------------------------------------------------------------------------------- 1 | uniform float u_radius; 2 | uniform float u_blur; 3 | uniform vec2 u_resolution; 4 | uniform vec2 u_mouse; 5 | 6 | vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) { 7 | if (u_radius <= 0.0) return def_frag(); 8 | vec2 center = u_mouse / u_resolution * vec2(1, -1) + vec2(0, 1); 9 | float dist = distance(uv * u_resolution, center * u_resolution); 10 | float alpha = smoothstep(max((dist - u_radius) / u_blur, 0.0), 0.0, 1.0); 11 | return mix(vec4(0, 0, 0, 1), def_frag(), 1.0 - alpha); 12 | } 13 | -------------------------------------------------------------------------------- /examples/size.js: -------------------------------------------------------------------------------- 1 | kaboom({ 2 | // without specifying "width" and "height", kaboom will size to the container (document.body by default) 3 | width: 200, 4 | height: 100, 5 | // "stretch" stretches the defined width and height to fullscreen 6 | // stretch: true, 7 | // "letterbox" makes stretching keeps aspect ratio (leaves black bars on empty spaces), have no effect without "stretch" 8 | letterbox: true, 9 | }) 10 | 11 | loadBean() 12 | 13 | add([ 14 | sprite("bean"), 15 | ]) 16 | 17 | onClick(() => addKaboom(mousePos())) 18 | -------------------------------------------------------------------------------- /examples/bench.js: -------------------------------------------------------------------------------- 1 | // bench marking sprite rendering performance 2 | 3 | kaboom() 4 | 5 | loadSprite("bean", "sprites/bean.png") 6 | loadSprite("bag", "sprites/bag.png") 7 | 8 | for (let i = 0; i < 5000; i++) { 9 | add([ 10 | sprite(i % 2 === 0 ? "bean" : "bag"), 11 | pos(rand(0, width()), rand(0, height())), 12 | anchor("center"), 13 | ]) 14 | } 15 | 16 | onDraw(() => { 17 | drawText({ 18 | text: debug.fps(), 19 | pos: vec2(width() / 2, height() / 2), 20 | anchor: "center", 21 | color: rgb(255, 127, 255), 22 | }) 23 | }) 24 | -------------------------------------------------------------------------------- /examples/slice9.js: -------------------------------------------------------------------------------- 1 | // 9 slice sprite scaling 2 | 3 | kaboom() 4 | 5 | // Load a sprite that's made for 9 slice scaling 6 | loadSprite("9slice", "/examples/sprites/9slice.png", { 7 | // Define the slice by the margins of 4 sides 8 | slice9: { 9 | left: 32, 10 | right: 32, 11 | top: 32, 12 | bottom: 32, 13 | }, 14 | }) 15 | 16 | const g = add([ 17 | sprite("9slice"), 18 | ]) 19 | 20 | onMouseMove(() => { 21 | const mpos = mousePos() 22 | // Scaling the image will keep the aspect ratio of the sliced frames 23 | g.width = mpos.x 24 | g.height = mpos.y 25 | }) 26 | -------------------------------------------------------------------------------- /examples/children.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | 3 | loadSprite("bean", "/sprites/bean.png") 4 | loadSprite("ghosty", "/sprites/ghosty.png") 5 | 6 | const nucleus = add([ 7 | sprite("ghosty"), 8 | pos(center()), 9 | anchor("center"), 10 | ]) 11 | 12 | // Add children 13 | for (let i = 12; i < 24; i++) { 14 | 15 | nucleus.add([ 16 | sprite("bean"), 17 | rotate(0), 18 | anchor(vec2(i).scale(0.25)), 19 | { 20 | speed: i * 8, 21 | }, 22 | ]) 23 | 24 | } 25 | 26 | nucleus.onUpdate(() => { 27 | 28 | nucleus.pos = mousePos() 29 | 30 | // update children 31 | nucleus.children.forEach((child) => { 32 | child.angle += child.speed * dt() 33 | }) 34 | 35 | }) 36 | -------------------------------------------------------------------------------- /examples/shaders/crt.frag: -------------------------------------------------------------------------------- 1 | uniform float u_flatness; 2 | uniform float u_scanline_height; 3 | uniform float u_screen_height; 4 | 5 | vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) { 6 | vec2 center = vec2(0.5, 0.5); 7 | vec2 off_center = uv - center; 8 | off_center *= 1.0 + pow(abs(off_center.yx), vec2(u_flatness)); 9 | vec2 uv2 = center + off_center; 10 | if (uv2.x > 1.0 || uv2.x < 0.0 || uv2.y > 1.0 || uv2.y < 0.0) { 11 | return vec4(0.0, 0.0, 0.0, 1.0); 12 | } else { 13 | vec4 c = vec4(texture2D(tex, uv2).rgb, 1.0); 14 | float fv = fract(uv2.y * 120.0); 15 | fv = min(1.0, 0.8 + 0.5 * min(fv, 1.0 - fv)); 16 | c.rgb *= fv; 17 | return c; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /examples/fadeIn.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | loadBean() 3 | 4 | // spawn a bean that takes a second to fade in 5 | const bean = add([ 6 | sprite("bean"), 7 | pos(120, 80), 8 | opacity(), // opacity() component gives it opacity which is required for fadeIn 9 | fadeIn(), // fadeIn() component makes it fade in 10 | ]) 11 | 12 | // spawn another bean that takes 5 seconds to fade in halfway 13 | // SPOOKY! 14 | let spookyBean = add([ 15 | sprite("bean"), 16 | pos(240, 80), 17 | opacity(0.5), // opacity() component gives it opacity which is required for fadeIn (set to 0.5 so it will be half transparent) 18 | fadeIn(5), // fadeIn() component makes it fade in (set to 5 so that it takes 5 seconds to fade in) 19 | ]) -------------------------------------------------------------------------------- /examples/multiboom.js: -------------------------------------------------------------------------------- 1 | // multiple kaboom contexts in one page 2 | 3 | const backgrounds = [ 4 | [255, 0, 255], 5 | [0, 0, 255], 6 | ] 7 | 8 | for (let i = 0; i < 2; i++) { 9 | 10 | const k = kaboom({ 11 | background: backgrounds[i], 12 | global: false, 13 | width: 320, 14 | height: 320, 15 | }) 16 | 17 | k.loadBean() 18 | 19 | // custom spin component 20 | function spin() { 21 | return { 22 | id: "spin", 23 | update() { 24 | this.scale = Math.sin(k.time() + i) * 9 25 | this.angle = k.time() * 60 26 | }, 27 | } 28 | } 29 | 30 | k.add([ 31 | k.sprite("bean"), 32 | k.pos(k.width() / 2, k.height() / 2), 33 | k.scale(6), 34 | k.rotate(0), 35 | spin(), 36 | k.anchor("center"), 37 | ]) 38 | 39 | k.add([ 40 | k.text(`#${i}`), 41 | ]) 42 | 43 | } 44 | -------------------------------------------------------------------------------- /doc/sections/Events.md: -------------------------------------------------------------------------------- 1 | Kaboom uses events extensively for a flat and declarative code style. 2 | 3 | For example, it's most common for a game to have something run every frame which can be achieved by adding an `onUpdate()` event 4 | 5 | ```js 6 | // Make something always move to the right 7 | onUpdate(() => { 8 | banana.move(320, 0) 9 | }) 10 | ``` 11 | 12 | Events are also used for input handlers. 13 | 14 | ```js 15 | onKeyPress("space", () => { 16 | player.jump() 17 | }) 18 | ``` 19 | 20 | Every function with the `on` prefix is an event register function that takes a callback function as the last argument, and should return a function that cancels the event listener. 21 | 22 | Note that you should never nest one event handler function inside another or it might cause severe performance punishment. 23 | -------------------------------------------------------------------------------- /examples/largeTexture.js: -------------------------------------------------------------------------------- 1 | kaboom() 2 | 3 | let cameraPosition = camPos() 4 | let cameraScale = 1 5 | 6 | // Loads a random 2500px image 7 | loadSprite("bigyoshi", "/examples/sprites/YOSHI.png") 8 | 9 | add([ 10 | sprite("bigyoshi"), 11 | ]) 12 | 13 | // Adds a label 14 | const label = make([ 15 | text("Click and drag the mouse, scroll the wheel"), 16 | ]) 17 | 18 | add([ 19 | rect(label.width, label.height), 20 | color(0, 0, 0), 21 | ]) 22 | 23 | add(label) 24 | 25 | // Mouse handling 26 | onUpdate(() => { 27 | if(isMouseDown("left") && isMouseMoved()) { 28 | cameraPosition = cameraPosition.sub(mouseDeltaPos().scale(1 / cameraScale)) 29 | camPos(cameraPosition) 30 | } 31 | }) 32 | 33 | onScroll((delta)=>{ 34 | cameraScale = cameraScale * (1 - 0.1 * Math.sign(delta.y)) 35 | camScale(cameraScale) 36 | }) 37 | -------------------------------------------------------------------------------- /doc/sections/Draw.md: -------------------------------------------------------------------------------- 1 | Kaboom exposes all of the drawing interfaces it uses in the render components like `sprite()`, and you can use these drawing functions to build your own richer render components. 2 | 3 | Also note that you have to put `drawXXX()` functions inside an `onDraw()` event or the `draw()` hook in component definitions which runs every frame (after the `update` events), or it'll be immediately cleared next frame and won't persist. 4 | 5 | ```js 6 | onDraw(() => { 7 | 8 | drawSprite({ 9 | sprite: "froggy", 10 | pos: vec2(120, 160), 11 | angle: 90, 12 | }) 13 | 14 | drawLine({ 15 | p1: vec2(0), 16 | p2: mousePos(), 17 | width: 4, 18 | color: rgb(0, 0, 255), 19 | }) 20 | 21 | }) 22 | ``` 23 | 24 | There's also the option to use Kaboom purely as a rendering library. Check out the [draw](/play?demo=draw) demo. 25 | -------------------------------------------------------------------------------- /examples/particle.js: -------------------------------------------------------------------------------- 1 | // Particle spawning 2 | 3 | kaboom() 4 | 5 | const sprites = [ 6 | "apple", 7 | "heart", 8 | "coin", 9 | "meat", 10 | "lightening", 11 | ] 12 | 13 | sprites.forEach((spr) => { 14 | loadSprite(spr, `/sprites/${spr}.png`) 15 | }) 16 | 17 | setGravity(800) 18 | 19 | // Spawn one particle every 0.1 second 20 | loop(0.1, () => { 21 | 22 | // TODO: they are resolving collision with each other for some reason 23 | // Compose particle properties with components 24 | const item = add([ 25 | pos(mousePos()), 26 | sprite(choose(sprites)), 27 | anchor("center"), 28 | scale(rand(0.5, 1)), 29 | area({ collisionIgnore: ["particle"] }), 30 | body(), 31 | lifespan(1, { fade: 0.5 }), 32 | opacity(1), 33 | move(choose([LEFT, RIGHT]), rand(60, 240)), 34 | "particle", 35 | ]) 36 | 37 | item.jump(rand(320, 640)) 38 | 39 | }) 40 | -------------------------------------------------------------------------------- /blog/3000.2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kaboom v3000.2 3 | author: tga 4 | date: 12/31/2023 5 | description: Record mode, pretty texts, new events and more in this new version! 6 | image: 2000.1.png 7 | hidden: true 8 | --- 9 | 10 | # Kaboom v3000.2 11 | 12 | > tga, 12/31/2023 13 | 14 | ## Stream Audio 15 | 16 | Audio files are often the biggest file you load in Kaboom if you have long background music. Previously you can only use `loadSound()` which would loads the entire file before the game starts and blocks the loading screen. 17 | 18 | The new `loadMusic()` will load an audio file without blocking loading 19 | 20 | ```js 21 | loadMusic("background", "/assets/music/background.mp3") 22 | // note that browser requires user input before audio can be played! 23 | play("background") 24 | ``` 25 | 26 | ## Canvas 27 | 28 | Kaboom adds the ability to use offscreen canvas! 29 | 30 | ```js 31 | const canvas = canvas() 32 | ``` 33 | -------------------------------------------------------------------------------- /examples/shader.js: -------------------------------------------------------------------------------- 1 | // TODO: shader documentation in doc/ 2 | 3 | // Custom shader 4 | kaboom() 5 | 6 | loadSprite("bean", "/sprites/bean.png") 7 | 8 | // Load a shader with custom fragment shader code 9 | // The fragment shader should define a function "frag", which returns a color and receives the vertex position, texture coodinate, vertex color, and texture as arguments 10 | // There's also the def_frag() function which returns the default fragment color 11 | loadShader("invert", null, ` 12 | uniform float u_time; 13 | 14 | vec4 frag(vec2 pos, vec2 uv, vec4 color, sampler2D tex) { 15 | vec4 c = def_frag(); 16 | float t = (sin(u_time * 4.0) + 1.0) / 2.0; 17 | return mix(c, vec4(1.0 - c.r, 1.0 - c.g, 1.0 - c.b, c.a), t); 18 | } 19 | `) 20 | 21 | add([ 22 | sprite("bean"), 23 | pos(80, 40), 24 | scale(8), 25 | // Use the shader with shader() component and pass uniforms 26 | shader("invert", () => ({ 27 | "u_time": time(), 28 | })), 29 | ]) 30 | -------------------------------------------------------------------------------- /src-tauri/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "app" 3 | version = "0.1.0" 4 | description = "A Tauri App" 5 | authors = ["you"] 6 | license = "" 7 | repository = "" 8 | default-run = "app" 9 | edition = "2021" 10 | rust-version = "1.59" 11 | 12 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html 13 | 14 | [build-dependencies] 15 | tauri-build = { version = "1.2.1", features = [] } 16 | 17 | [dependencies] 18 | serde_json = "1.0" 19 | serde = { version = "1.0", features = ["derive"] } 20 | tauri = { version = "1.2.5", features = [] } 21 | 22 | [features] 23 | # by default Tauri runs in production mode 24 | # when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL 25 | default = [ "custom-protocol" ] 26 | # this feature is used for production builds where `devPath` points to the filesystem 27 | # DO NOT remove this 28 | custom-protocol = [ "tauri/custom-protocol" ] 29 | -------------------------------------------------------------------------------- /pkgs/matter/examples/terrain.js: -------------------------------------------------------------------------------- 1 | const k = kaboom() 2 | const { marea, mbody } = kmatter(k) 3 | 4 | const me = k.add([ 5 | k.pos(60, 48), 6 | k.rect(48, 24), 7 | marea(), 8 | k.rotate(45), 9 | k.anchor("center"), 10 | // mbody(), 11 | ]) 12 | 13 | k.add([ 14 | k.pos(90, 120), 15 | k.rect(48, 24), 16 | marea(), 17 | k.rotate(45), 18 | k.anchor("center"), 19 | // mbody(), 20 | ]) 21 | 22 | k.add([ 23 | k.pos(40, 160), 24 | k.rect(240, 24), 25 | marea(), 26 | k.anchor("center"), 27 | // mbody({ isStatic: true }), 28 | ]) 29 | 30 | k.onKeyDown("left", () => { 31 | // .move() is provided by pos() component, move by pixels per second 32 | me.move(-320, 0) 33 | }) 34 | 35 | k.onKeyDown("right", () => { 36 | me.move(320, 0) 37 | }) 38 | 39 | k.onKeyPress("space", () => { 40 | me.applyForce(mousePos(), vec2(0, -0.02)) 41 | }) 42 | 43 | k.onKeyPress("r", () => { 44 | me.angle = 90 45 | }) 46 | 47 | k.debug.inspect = true 48 | k.canvas.focus() 49 | -------------------------------------------------------------------------------- /blog/burp-jam.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Burp Jam 3 | author: danie & tga 4 | date: 10/10/22 5 | description: The new jam of Kaboom, about burps! 6 | image: burpjam.png 7 | --- 8 | 9 | # Burp Jam 10 | > danie & tga, 10/10/2022 11 | 12 | Kaboom new jam! Burp Jam, a jam where the goal is to upload the best burp sound ever, and we will implement it in `burp()` 13 | 14 | A long time ago we have been thinking about renewing the `burp()` sound of the library, since we want to give it a new look for the next version, so we have decided to create this competition to be able to get amazing burp sounds. 15 | 16 | The jam will take place on Itch.io, users can upload a project which has a downloadable audio file with a burp sound of themselves, a friend, a family member, or even your pet! 17 | 18 | From **10/17/22** to **10/17/22**, yes, only one day!!! 19 | 20 | [Join now!](https://itch.io/jam/burp) 21 | 22 | ## Introducing burp man 23 | Here is burpman. 24 | 25 | **burp** 26 | 27 | ![](burp-jam/burpman.png) -------------------------------------------------------------------------------- /pkgs/matter/build.js: -------------------------------------------------------------------------------- 1 | import esbuild from "esbuild" 2 | 3 | const dev = process.env.NODE_ENV === "development" 4 | const srcDir = "src" 5 | const distDir = "dist" 6 | 7 | const fmts = [ 8 | { 9 | format: "iife", 10 | ext: "js", 11 | config: { 12 | footer: { 13 | js: "window.kmatter = kmatter.default;", 14 | }, 15 | }, 16 | }, 17 | ...(dev ? [] : [ 18 | { format: "cjs", ext: "cjs" }, 19 | { format: "esm", ext: "mjs" }, 20 | ]), 21 | ] 22 | 23 | fmts.forEach((fmt) => { 24 | 25 | const srcPath = `${srcDir}/kmatter.ts` 26 | const distPath = `${distDir}/kmatter.${fmt.ext}` 27 | const log = () => console.log(`-> ${distPath}`) 28 | 29 | esbuild.build({ 30 | bundle: true, 31 | sourcemap: true, 32 | minify: !dev, 33 | keepNames: true, 34 | watch: dev ? { onRebuild: log } : false, 35 | entryPoints: [ srcPath ], 36 | globalName: "kmatter", 37 | format: fmt.format, 38 | outfile: distPath, 39 | ...(fmt.config ?? {}), 40 | }).then(log) 41 | 42 | }) 43 | -------------------------------------------------------------------------------- /examples/fall.js: -------------------------------------------------------------------------------- 1 | // Build levels with addLevel() 2 | 3 | // Start game 4 | kaboom() 5 | 6 | // Load assets 7 | loadSprite("coin", "/sprites/coin.png") 8 | loadSprite("grass", "/sprites/grass.png") 9 | 10 | setGravity(2400) 11 | 12 | addLevel([ 13 | // Design the level layout with symbols 14 | " ", 15 | " ", 16 | " ", 17 | " ", 18 | "=======", 19 | ], { 20 | // The size of each grid 21 | tileWidth: 64, 22 | tileHeight: 64, 23 | // The position of the top left block 24 | pos: vec2(100), 25 | // Define what each symbol means (in components) 26 | tiles: { 27 | "=": () => [ 28 | sprite("grass"), 29 | area(), 30 | body({ isStatic: true }), 31 | ], 32 | }, 33 | }) 34 | 35 | loop(0.2, () => { 36 | const coin = add([ 37 | pos(rand(100, 400), 0), 38 | sprite("coin"), 39 | area(), 40 | body(), 41 | "coin", 42 | ]) 43 | wait(3, () => coin.destroy()) 44 | }) 45 | 46 | debug.paused = true 47 | 48 | onKeyPressRepeat("space", () => { 49 | debug.stepFrame() 50 | }) 51 | -------------------------------------------------------------------------------- /pkgs/create/README.md: -------------------------------------------------------------------------------- 1 | # create-kaboom 2 | 3 | a script to help you start a kaboom project in no time 4 | 5 | ``` 6 | USAGE 7 | 8 | $ create-kaboom [OPTIONS] 9 | 10 | or 11 | 12 | $ npm init kaboom -- [OPTIONS] 13 | 14 | OPTIONS 15 | 16 | -h, --help Print this message 17 | -t, --typescript Use TypeScript 18 | -d, --desktop Enable packaging for desktop release (uses tauri and requires rust to be installed) 19 | -e, --example Start from a example listed on kaboomjs.com/play 20 | --spaces Use spaces instead of tabs for generated files 21 | -v, --version