Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
68fe5af
clang autoformat (no code change)
SimplyMinimal Jan 7, 2023
6c8444e
Map key press up to thrusters
SimplyMinimal Jan 7, 2023
5e7e4c7
Press and Hold to continuous fire to reduce wear
SimplyMinimal Jan 7, 2023
81d7a2b
Bugfix: Wrong branch. Keys not registering
SimplyMinimal Jan 7, 2023
d05a980
Reduce max bullets for increased difficulty
SimplyMinimal Jan 7, 2023
a255523
Shorten Bullet TTL, Reorganize defines
SimplyMinimal Jan 7, 2023
c55cde8
Add vibration and red LED on crash
SimplyMinimal Jan 7, 2023
ef4c552
Vibrate on bullets fired. FIRE ZE LAZERS!
SimplyMinimal Jan 7, 2023
12a62a9
New Astroid build
SimplyMinimal Jan 7, 2023
9ea751f
Update ReadMe
SimplyMinimal Jan 7, 2023
d7c8a22
Bugfix: Properly account for lives (from antirez)
SimplyMinimal Jan 7, 2023
6c0a033
Cosmetically show 3 lives on Game Over screen
SimplyMinimal Jan 7, 2023
0beaa3f
update .gitignore and add .editorconfig
SimplyMinimal Jan 8, 2023
deadbf5
Add High Score system
SimplyMinimal Jan 8, 2023
da4cfe0
Add thrusters animation
SimplyMinimal Jan 8, 2023
5829369
Added auto save/load game state to save high score
SimplyMinimal Jan 8, 2023
4a49e04
Prep for automated build system
antirez Jan 7, 2023
fd1b4ed
bugfix: last score display, added new high score
SimplyMinimal Jan 8, 2023
8f0c10c
Hiscore, disable pretty game over anim for clarity
SimplyMinimal Jan 9, 2023
82ec5fd
Update ReadMe to add high score details and credit
SimplyMinimal Jan 9, 2023
73d5625
haptic feedback thrusters
SimplyMinimal Jan 9, 2023
292fadd
Merge branch 'main' of https://github.com/SimplyMinimal/FlipperZero-A…
SimplyMinimal Jan 9, 2023
06f8f55
Update ReadMe
SimplyMinimal Jan 10, 2023
f1ecffb
Autosave on exit, set longpress to exit for safety
SimplyMinimal Jan 17, 2023
0ad2a31
Update readme about long back button press
SimplyMinimal Jan 17, 2023
99ffbfa
first draft of power up system
SimplyMinimal Jan 28, 2023
8d5e78a
Fix power up system
SimplyMinimal Jan 31, 2023
cd76484
Add images, update manifest
SimplyMinimal Feb 1, 2023
912daa6
use image assets, add Lives Power up
SimplyMinimal Feb 1, 2023
29863ad
improved PowerUpTypeFirePower
SimplyMinimal Feb 1, 2023
11bc81e
add PowerUpShieldType
SimplyMinimal Feb 1, 2023
4e1d1cb
Update assets: add nuke and split shield
SimplyMinimal Feb 1, 2023
c88ab5b
improvd firepower asset
SimplyMinimal Feb 1, 2023
6ecb58f
add nuke, fix firepower bug
SimplyMinimal Feb 1, 2023
e52246b
Re-enable random power up
SimplyMinimal Feb 1, 2023
5201787
shield artwork update
SimplyMinimal Feb 1, 2023
44da826
shield artwork
SimplyMinimal Feb 1, 2023
97f0866
flashing powerups when expiring
SimplyMinimal Feb 1, 2023
fb1f116
bugfix towards power up system add/remove
SimplyMinimal Feb 1, 2023
1af018a
bugfix: power up off by one index
SimplyMinimal Feb 2, 2023
45b41b4
Adjust bonus lives to something more reasonable
SimplyMinimal Feb 2, 2023
505aef0
Fix realtime power up status
SimplyMinimal Feb 2, 2023
790ff26
make circle shield a little smaller
SimplyMinimal Feb 2, 2023
8b64ee9
restore asteroids
SimplyMinimal Feb 2, 2023
ce40ee9
Added isPowerUpCollidingWithEachOther
SimplyMinimal Feb 2, 2023
827031c
change power up size to %f, organize code
SimplyMinimal Feb 2, 2023
35a2c6f
Bugfix: Powerup spawn anti-collide, code reorganiz
SimplyMinimal Feb 2, 2023
cccf54c
limit bonus <3, add should_add_powerups, adj spawn
SimplyMinimal Feb 7, 2023
9ed721e
Add basic pause state using back button
SimplyMinimal Feb 7, 2023
eff243b
Add pause screen
SimplyMinimal Feb 7, 2023
6687bf1
minor comment clarification
SimplyMinimal Feb 7, 2023
7633b2b
debugging power ups
SimplyMinimal Feb 8, 2023
f97247e
need more logs
SimplyMinimal Feb 8, 2023
4150a8b
allow immediate collsion with smaller asteroids
SimplyMinimal Feb 8, 2023
48188ec
reverse the for loop for power up status check
SimplyMinimal Feb 8, 2023
9c9eb8f
Update readme to include power up and pause menu
SimplyMinimal Feb 8, 2023
4c0f3ad
disable debug mode
SimplyMinimal Feb 8, 2023
96e7a6b
Add haptic feedback on power up pick up
SimplyMinimal Feb 8, 2023
acc738a
V1 of power up system and pause screen
SimplyMinimal Feb 8, 2023
d8fc8cb
Updated application manifest, new power up system
SimplyMinimal Feb 8, 2023
e50cb64
Update readme for new power up system
SimplyMinimal Feb 8, 2023
12443ab
No time
SimplyMinimal Feb 8, 2023
343e87d
Keep power up on game play area
SimplyMinimal Feb 9, 2023
9bd77bd
Make extra life power up more rare
SimplyMinimal Feb 9, 2023
b46e722
make shield more rare, additional logging
SimplyMinimal Feb 9, 2023
10dcf70
Add rare chance trigger for power ups
SimplyMinimal Feb 9, 2023
048a8dd
ci: Add GitHub Actions workflow for automated FAP building
Jul 16, 2025
e95f817
feat: Add automatic firmware release monitoring to CI/CD workflow
Jul 17, 2025
57fbad9
feat: Add automatic README updates and enhanced release visibility
Jul 17, 2025
872d3b9
Fixed critical rendering bug
Jul 17, 2025
af842db
feat: Add splash screen with developer credits
Jul 17, 2025
cd536bc
feat: Add Drone Buddy power-up with autonomous assistant
Jul 17, 2025
e8af106
Merge splash-screen feature: Add developer credits splash screen
Jul 18, 2025
7d6ca61
Merge drone-buddy feature: Add autonomous drone assistant power-up
Jul 18, 2025
649de14
Update README.md to add Drone Power Up
SimplyMinimal Jul 20, 2025
c2eb6c8
Rename Pause Screen.png to PauseScreen.png
SimplyMinimal Jul 20, 2025
537e0bf
Update README.md (fixed images)
SimplyMinimal Jul 20, 2025
9c74c3c
Update README.md to modernize build instructions
SimplyMinimal Jul 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
root = true

[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8

[*.{cpp,h,c,py,sh}]
indent_style = space
indent_size = 4

[{Makefile,*.mk}]
indent_size = tab
202 changes: 202 additions & 0 deletions .github/workflows/build-fap.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
name: Build Flipper Application Package (FAP)

on:
push:
branches: [ main ]
tags: [ 'v*' ]
pull_request:
branches: [ main ]
schedule:
# Check for new Flipper Zero firmware releases daily at 12:00 UTC
- cron: '0 12 * * *'
workflow_dispatch:
# Allow manual triggering for testing

jobs:
check-firmware:
runs-on: ubuntu-latest
name: Check for New Flipper Zero Firmware
outputs:
new-release: ${{ steps.check.outputs.new-release }}
firmware-version: ${{ steps.check.outputs.firmware-version }}
release-tag: ${{ steps.check.outputs.release-tag }}

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Check for new Flipper Zero firmware release
id: check
run: |
# Get the latest Flipper Zero firmware release
LATEST_FW=$(curl -s https://api.github.com/repos/flipperdevices/flipperzero-firmware/releases/latest | jq -r '.tag_name')
echo "Latest firmware version: $LATEST_FW"

# Check if we already have a release for this firmware version
EXISTING_RELEASE=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases | jq -r --arg fw "$LATEST_FW" '.[] | select(.tag_name | contains($fw)) | .tag_name' | head -1)

if [ -z "$EXISTING_RELEASE" ]; then
echo "New firmware version detected: $LATEST_FW"
echo "new-release=true" >> $GITHUB_OUTPUT
echo "firmware-version=$LATEST_FW" >> $GITHUB_OUTPUT
echo "release-tag=asteroids-$LATEST_FW" >> $GITHUB_OUTPUT
else
echo "Release already exists for firmware $LATEST_FW: $EXISTING_RELEASE"
echo "new-release=false" >> $GITHUB_OUTPUT
fi

build:
runs-on: ubuntu-latest
name: Build Asteroids FAP
needs: check-firmware
if: always() && (github.event_name != 'schedule' || needs.check-firmware.outputs.new-release == 'true')

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: true

- name: Build Flipper Application Package
uses: flipperdevices/flipperzero-ufbt-action@v0.1.3
id: build-fap
with:
app-dir: .

- name: Upload FAP artifact
uses: actions/upload-artifact@v4
with:
name: asteroids-fap-${{ needs.check-firmware.outputs.firmware-version || 'manual' }}
path: |
dist/*.fap
dist/*.fap.debug
retention-days: 30

- name: Create Release for Manual Tags
if: startsWith(github.ref, 'refs/tags/') && github.event_name != 'schedule'
id: manual-release
uses: softprops/action-gh-release@v1
with:
files: |
dist/*.fap
generate_release_notes: true
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create Automatic Release for New Firmware
if: needs.check-firmware.outputs.new-release == 'true' && github.event_name == 'schedule'
id: auto-release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ needs.check-firmware.outputs.release-tag }}
name: "Asteroids for Flipper Zero ${{ needs.check-firmware.outputs.firmware-version }}"
body: |
🎮 **Asteroids Game for Flipper Zero**

This release is automatically built and tested for compatibility with **Flipper Zero firmware ${{ needs.check-firmware.outputs.firmware-version }}**.

## 📦 Installation
1. Download the `asteroids.fap` file from the assets below
2. Copy it to your Flipper Zero's `apps/Games/` folder via qFlipper or SD card
3. Launch the game from Apps → Games → Asteroids

## 🔧 Compatibility
- **Firmware Version**: ${{ needs.check-firmware.outputs.firmware-version }}
- **Build Date**: ${{ github.run_id }}
- **App Version**: Built from commit ${{ github.sha }}

## 🎯 Game Features
- Classic Asteroids gameplay
- Power-ups and special weapons
- High score tracking
- Optimized for Flipper Zero controls

---
*This release was automatically generated when Flipper Zero firmware ${{ needs.check-firmware.outputs.firmware-version }} was detected.*
files: |
dist/*.fap
draft: false
prerelease: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Update README with Latest Release Info
if: steps.manual-release.conclusion == 'success' || steps.auto-release.conclusion == 'success'
run: |
# Set release information based on which type of release was created
if [ "${{ steps.auto-release.conclusion }}" == "success" ]; then
RELEASE_TAG="${{ needs.check-firmware.outputs.release-tag }}"
RELEASE_NAME="Asteroids for Flipper Zero ${{ needs.check-firmware.outputs.firmware-version }}"
FIRMWARE_VERSION="${{ needs.check-firmware.outputs.firmware-version }}"
else
RELEASE_TAG="${{ github.ref_name }}"
RELEASE_NAME="Asteroids ${{ github.ref_name }}"
FIRMWARE_VERSION="Latest"
fi

# Get current date
CURRENT_DATE=$(date -u +"%Y-%m-%d %H:%M UTC")

# Create the latest release section
cat > latest_release_section.md << EOF
<!-- LATEST_RELEASE_START -->
## 🚀 Latest Release

[![Latest Release](https://img.shields.io/github/v/release/SimplyMinimal/FlipperZero-Asteroids?style=for-the-badge&logo=github&color=success)](https://github.com/SimplyMinimal/FlipperZero-Asteroids/releases/latest)
[![Download FAP](https://img.shields.io/badge/Download-asteroids.fap-blue?style=for-the-badge&logo=download)](https://github.com/SimplyMinimal/FlipperZero-Asteroids/releases/latest/download/asteroids.fap)
[![Firmware Compatibility](https://img.shields.io/badge/Firmware-${FIRMWARE_VERSION}-orange?style=for-the-badge&logo=flipboard)](https://github.com/flipperdevices/flipperzero-firmware)

**${RELEASE_NAME}** | *Last updated: ${CURRENT_DATE}*

### 📥 Quick Install
1. **[Download asteroids.fap](https://github.com/SimplyMinimal/FlipperZero-Asteroids/releases/latest/download/asteroids.fap)** ⬅️ *Click here for direct download*
2. Copy to your Flipper Zero: `/ext/apps/Games/asteroids.fap`
3. Launch from: Apps → Games → Asteroids

---
<!-- LATEST_RELEASE_END -->

EOF

# Check if the latest release section already exists
if grep -q "<!-- LATEST_RELEASE_START -->" README.md; then
# Replace existing section
sed -i '/<!-- LATEST_RELEASE_START -->/,/<!-- LATEST_RELEASE_END -->/c\' README.md
sed -i '1r latest_release_section.md' README.md
else
# Add new section at the top
cat latest_release_section.md README.md > temp_readme.md
mv temp_readme.md README.md
fi

# Clean up
rm latest_release_section.md
continue-on-error: true

- name: Commit README Updates
if: steps.manual-release.conclusion == 'success' || steps.auto-release.conclusion == 'success'
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"

if git diff --quiet README.md; then
echo "No changes to README.md"
else
git add README.md
git commit -m "docs: Update README with latest release information

- Add latest release badges and download links
- Update firmware compatibility information
- Add quick install instructions
- Auto-generated from workflow run ${{ github.run_id }}"

git push origin main
fi
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
.vscode/
dist/
.clang-format
docs/
72 changes: 56 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,58 @@
This is an implementation of the classic Asteroids game for the [Flipper Zero](https://flipperzero.one/). Inside you will find a simple 2D engine that can be reused to implement other games.
This is an implementation of the classic Asteroids game for the [Flipper Zero](https://flipperzero.one/). Inside you will find a simple 2D engine that can be reused to implement other games. Note: This one is SimplyMinimal's fork of Antirez's version with several modifications.

Controls:
* Left/Right: rotate ship in the two directions.
* Ok, short press: fire bullets.
* Ok, long press: accelerate towards ship head.
* Down: decelerates.
# What's New
* Auto rapid fire (less wear on the buttons this way too)
* Up button applies thrusters
* Haptic feedback and LED effects
* Power up system
* High Score system
* Automatic save and load of high score
* Ability to Pause
* Some modifications to certain game play elements

## What's coming next
* Settings screen
* Enabling sound effects (configurable on/off option)
* ~~Power Ups~~ Improved power up management

---

This is a screenshot, but the game looks a lot better in the device itself:

![Asteroids for Flipper Zero screenshot](/images/Asteroids.jpg)
![Asteroids for Flipper Zero screenshot](/images/Asteroids-PowerUps.png "In game screenshot")

![Pause Screen](images/PauseScreen.png "Pause screen")

# Controls:
* Left/Right: rotate ship in the two directions.
* Ok, short press: Short burst bullets
* Ok, long press: Auto-fire bullets
* Up: Accelerate
* Down: Decelerate
* Back (Short Press): Pause game
* Back (Long Press): Exit game. It will automatically save the high scoore too.

Your high scores will automatically be saved. Go forth and compete!

---
# Power Ups
* ![](assets/firepower_shifted_9x10.png "Ammunition") - Machine gun fire. Press and hold OK button to fire more than the default 5 bullets
* ![](assets/heart_10x10.png "Lives") - Et tu, Brute? Gives a bonus life up to a maximum of 5 lives
* ![](assets/nuke_10x10.png "Nuke") - Nuke (work in progress). Destroys everything in sight (but keeps the power ups)
* ![](assets/split_shield_10x10.png "Shield") - Use the force! Spins up a shield that can be used as a battering ram. Take zero damage while in use.
* D - A mini drone assist that has your back!

P.S. Don't miss the game over screen.
## More power ups coming soon...

---
## Installing the binary file (no build needed)
### Option 1 (Recommended)
Download from the Flipper Zero App catalog store
https://lab.flipper.net/apps/asteroids

Drop the `asteroids.fap` file you can find in the `binaries` folder into the

### Option 2)
Go to the releases and drop the `asteroids.fap` file into the
following Flipper Zero location:

/ext/apps/Games
Expand All @@ -25,17 +63,19 @@ you can just take out the SD card, insert it in your computer,
copy the fine into `apps/Games`, and that's it.

## Installing the app from source
Step 1) Install `ufbt` cli tool
- **Linux & macOS**: `python3 -m pip install --upgrade ufbt`
- **Windows**: `py -m pip install --upgrade ufbt`

* Download the Flipper Zero dev kit and build it:
Step 2) Clone this repo with `git`
```
mkdir -p ~/flipperZero/official/
cd ~/flipperZero/official/
git clone --recursive https://github.com/flipperdevices/flipperzero-firmware.git ./
./fbt
git clone https://github.com/SimplyMinimal/FlipperZero-Asteroids/
```
* Copy this application folder in `official/application_user`.

Step 3) Launch Asteroids
* `cd FlipperZero-Asteroids`
* Connect your Flipper via USB.
* Build and install with: `./fbt launch_app APPSRC=asteroids`.
* Build and install with: `ufbt launch`.

## License

Expand Down
Loading