Midsommer Madness is a Swedish-themed action retro arcade game inspired by Redneck Rampage and the Swedish Midsummer holiday.
Help Sven race against the solar timer to reach the Maypole (midsommarstång) before sundown! If you fail, the solstice is lost, you trigger a meltdown, and you are sacrificed to the Wicker Man.
| Title Screen | Game Over Screen | Victory Screen |
|---|---|---|
![]() |
![]() |
![]() |
The game features ten distinct thematic levels:
- IKEA Warehouse: Battle crowded, flatpack-carrying shoppers who throw box projectiles at you.
- Systembolaget: The state-owned liquor shop crowded with drunk Swedes stumbling and lobbing green beer bottles.
- Lördagsgodis: Sugar rush Saturday! Dodge hyperactive, strung-out Swedish kids throwing sweet candy projectiles.
- The Swedish Pub: Sing along with Frank Zappa fans singing "Bobby Brown" (shouting and firing glowing letters
B,O,B,B,Y). - Volvo Highway: A survival lane-crossing level where boxy blue Volvo station wagons zoom across lanes at high speeds.
- Dalarna Forest: Deep green woods where giant red wooden Dalarna Horses charge at Sven in sudden dash-bursts.
- Allemansrätten: Swedish right to roam! Harvest wild cloudberries while dodging aggressive elk charging and stomping.
- Kvinnafängelset: Escape the Swedish women's prison! Dodging strict guards throwing heavy metal handcuffs.
- Avicii Rave: A dark neon rave under strobe lights. Dance through ravers wearing shades who throw glowing glowsticks.
- ABBA Disco: The final level under glowing purple lights. Chrome ABBA Bots fire multi-directional pink disco laser spreads. Reach the Maypole in the center to save Midsummer!
- Fixed Timestep Loop: Game logic updates at a solid 60Hz timestep, while rendering runs at the browser's maximum frame rate (interpolated) to ensure smooth gameplay.
- Hockey Stick (Melee): Left-click swings the stick in front of Sven towards the cursor, damaging and knocking back enemies. Alternatively, press H as a keyboard shortcut.
- Surströmming Bomb (Ranged): Right-click or Space throws a canned fermented herring that explodes, creating a lingering toxic green gas cloud that damages all enemies inside.
- Swedish Power-Ups:
- Köttbullar (Meatballs): Restores 25 energy.
- Knäckebröd (Crispbread): Grants a 4-second speed boost (+50% speed) and a yellow dotted forcefield shield (blocks 80% of damage).
- Procedural Synthesizer (Web Audio API): All game music and SFX are procedurally synthesized in real-time, adjusting BPM, scales, and motifs depending on the level (e.g. happy chiptunes, acoustic folk, heavy metal, EDM, and disco).
- Screen Shake: Dynamic impact feedback on hits and stomps.
- Start the local server:
Alternatively, run
make dev
npm run dev. - Open your browser and navigate to the port displayed in the console output.
- W, A, S, D or Arrow Keys — Move Sven
- Mouse Movement — Aim
- Left Click or H — Swing Hockey Stick (Melee)
- Right Click or Space — Throw Surströmming Bomb (Ranged)
This project is wrapped in a full-screen, landscape-locked Flutter WebViewWidget that runs the web-based game. It features:
- Mobile Touch Controls: A virtual joystick zones and action buttons on mobile touch layouts.
- Aspect-Ratio Scaling: Automatic resizing of the HTML5 canvas to fit mobile screen resolutions.
- Sticky Full-Screen Immersive Mode: Hides system status bars and navigation menus using Flutter's native window/system chrome configurations.
- Bypassed Audio Gesture Constraints: Autoplay is enabled on the WebView so audio triggers without needing explicit user touch gestures.
- main.dart: Sets up full-screen immersive view, locks orientation to landscape, configures the
WebViewController, and loads assets. - pubspec.yaml: Manages Dart packages and registers game assets (
assets/directory) to compile them into the application bundle. - index.html: Mobile-first touch UI canvas and entry point.
We provide a Makefile to simplify local development, compilation, and logs monitoring:
-
Local Web Development:
make dev
Serves files directly from the assets directory to play in the browser.
-
Compile Android Debug APK:
make build-apk
Runs
flutter build apk --debugto produce a debug APK. -
Install on Connected Device/Emulator:
make install-apk
Installs the compiled build using
flutter install. -
Monitor Device Logs:
make logcat
Views real-time logs using
flutter logs. -
Clean Workspace Caches:
make clean
Cleans the Flutter project build directories and temporary caches.


