A browser-based vertical platformer built with vanilla HTML, CSS, and JavaScript — no frameworks, no build step.
Escape a burning building by leaping up collapsing platforms, dodging terrorist enemies, and surviving incoming ballistic missile strikes. Inspired by the classic Icy Tower arcade game.
https://cool-elf-c216bc.netlify.app/
Or open index.html locally in any modern browser — no installation required.
| Start Screen | Gameplay |
|---|---|
![]() |
![]() |
| Missile Wave | Game Over & Leaderboard |
|---|---|
![]() |
![]() |
| Action | Keys |
|---|---|
| Move left | ← Arrow or A |
| Move right | → Arrow or D |
| Jump | Space, ↑ Arrow, or W |
The game runs entirely in the browser — no app install needed.
| Action | How |
|---|---|
| Move left / right | Tilt your phone left or right |
| Jump | Tap anywhere on screen |
| Calibrate tilt | Tap Recalibrate on the start screen |
Tilt calibration: On first launch a 3-step wizard walks you through calibrating the tilt sensitivity for your device. iOS will ask for motion sensor permission — tap Allow when prompted. You can recalibrate at any time from the start screen.
Mobile bonus: All characters are unlocked automatically on touch devices — no need to reach stage milestones.
Climb as high as possible without falling off the bottom of the screen or touching an enemy. The camera drifts upward continuously from floor 12 onward — fall behind and it's game over.
Run into a wall while airborne to trigger a backflip — the player arcs upward and gains extra height. This is the primary way to gain speed and rack up score.
- Chain consecutive wall bounces to build a combo multiplier (up to 3×)
- A fire ember trail appears behind the player during bounces
- Each successful landing while in combo awards bonus score
| Type | Behaviour |
|---|---|
| Normal | Stationary; falls after you stand on it too long |
| Moving | Oscillates up and down |
| Milestone (every 10th floor) | Highlighted; labeled "FLOOR 10", "FLOOR 20", … |
Platforms get narrower and more spaced-out as you climb higher. Standing time before a platform collapses decreases with each stage.
| Enemy | Behaviour |
|---|---|
| Static Terrorist | Stands on its platform — touch it and you die |
| Patrolling Terrorist | Walks back and forth; has a proximity detonator — get too close and it explodes |
| Missile Waves | Every ~20 seconds a wave of ballistic missiles falls with a 5-second siren warning and red reticles marking impact zones |
Touching any enemy or being caught in a blast = instant death, unless Iron Dome is active.
| Power-up | What it does |
|---|---|
| Iron Dome (Star of David) | 10 seconds of full invincibility. Destroy terrorists on contact; interceptors automatically shoot down incoming missiles. |
| Spring (explosive charge) | Single-use mega-jump that launches you extremely high — great for escaping tight spots. |
| Wolt Delivery (Wolt Driver only) | Instantly teleports you ~20 floors higher with a sustained escalator lift. |
Unlock characters by clearing stages. All characters are available from the start on mobile.
| Character | Unlock | Ability | Description |
|---|---|---|---|
| Shower Lady | Default | Wet Floors — slides faster, stronger wall bounces | Caught mid-shower when the alarm went off |
| Tomer | Stage 1 (floor 50) | Background Fame — wall bounce slows enemies and missiles to 35% for 2s | Always in the background of shelter footage |
| Wolt Driver | Stage 2 (floor 120) | Rush Delivery — exclusive Wolt powerup teleports you ~20 floors higher | Always delivers, no matter what |
| IDF Soldier | Stage 3 (floor 200) | Auto Shoot — fires at the nearest enemy every 2 seconds | Miluim servant, always on duty |
| Bibi Netanyahu | Stage 4 (floor 300) | Political Immunity — survives 3 terrorist contacts consequence-free | The PM himself, running from accountability |
| Stage | Name | Target Floor | Missile Interval | Platform Fall Delay |
|---|---|---|---|---|
| 1 | Ground Zero | 50 | None | 6s |
| 2 | Red Alert | 120 | ~20s | 5s |
| 3 | Barrage | 200 | ~10s | 4s |
| 4 | Iron Dome | 300 | ~5s | 3s |
| 5 | Legendary | 450 | ~4s | 2.5s |
| ∞ | Endless | — | ~10s | 4s |
- Height — points for every floor climbed
- Speed bonus — climbing quickly multiplies points per floor
- Wall bounce combo — consecutive bounces build a 1×–3× multiplier applied to all points during the combo
- Your top 10 scores are saved locally and shown on the game over screen
- Vanilla JavaScript ES6+ — ES modules, no bundler
- HTML5 Canvas API — fixed 400×600 canvas
- Web Audio API — background music + procedural sound effects
requestAnimationFramewith a fixed-timestep accumulator game looplocalStoragefor leaderboard persistence- No frameworks, no npm, no build step
Rising/
├── index.html — HTML shell + CSS; loads JS as ES module
├── js/
│ ├── main.js — one-time init (sprites, input, loop, start screen)
│ ├── game-loop.js — rAF loop + fixed-timestep accumulator
│ ├── config/
│ │ └── constants.js — all tunable constants (gravity, timing, etc.)
│ ├── state/
│ │ └── state.js — single shared game state object
│ ├── game/
│ │ ├── lifecycle.js — startGame, triggerDeath, checkDeathAnim
│ │ ├── manager.js — updateWorld(), stage progression
│ │ └── stages.js — stage definitions (pure data)
│ ├── physics/
│ │ ├── physics.js — updateGame() orchestrator
│ │ ├── movement.js — input, friction, wall bounce, gravity
│ │ ├── collision.js — platform landing, enemy hit, fall death
│ │ └── world.js — scroll, camera drift, platform recycling
│ ├── entities/
│ │ ├── player.js — player initial state
│ │ ├── platforms.js — platform generation
│ │ ├── enemies.js — enemy update + draw
│ │ ├── powerups.js — powerup pickup logic
│ │ ├── missiles.js — missile waves, Iron Dome interceptors
│ │ ├── bullets.js — auto-shoot projectiles (IDF Soldier)
│ │ └── explosions.js — explosion particle bursts
│ ├── rendering/
│ │ ├── renderer.js — drawGame() — pure render, no state mutation
│ │ ├── hud.js — score, floor, combo, Iron Dome timer
│ │ └── sprites.js — image loading
│ ├── characters/
│ │ ├── registry.js — character definitions
│ │ ├── abilities.js — per-character special abilities
│ │ └── unlock.js — unlock logic + localStorage versioning
│ ├── ui/
│ │ ├── screens.js — start, game-over, credits screens
│ │ ├── leaderboard.js — top-10 score storage + rendering
│ │ ├── character-select.js — character selection overlay
│ │ ├── calibration.js — tilt calibration wizard
│ │ └── stage-complete.js — stage clear overlay
│ ├── input/
│ │ ├── keyboard.js — keydown/keyup → state.keys[]
│ │ ├── touch.js — tap-to-jump
│ │ ├── tilt.js — accelerometer → velX
│ │ └── hand-tracker.js — desktop camera hand-tracking mode
│ ├── feel/
│ │ ├── particles.js — sparks, dust, ember trail
│ │ ├── effects.js — screen freeze on stage clear
│ │ ├── shake.js — camera shake
│ │ └── squash.js — landing squash-and-stretch
│ ├── audio/
│ │ └── audio.js — Web Audio API: music + SFX
│ ├── utils/
│ │ └── collision.js — AABB overlap helper
│ └── fx/
│ ├── canvas-flames.js — procedural building + death flames
│ └── fire-sphere.js — Three.js fire sphere on start screen
└── assets/
├── catbam.mp4 — background music loop
├── characters/ — sprite sheets (stand / run / jump per character)
│ ├── towel_lady/
│ ├── white_glass_tomer/
│ ├── wolt_driver/
│ ├── soldier/
│ └── bibi/
└── sprites/
└── IronDome.png — Iron Dome battery launcher sprite
Reichman University — Semester 4 Course: From Idea to App Assignment 1, Exercise 2



