A game, written in Bash, that is a somewhat retro-a-like shoot 'em up. Hopefully.
You'll need the following dependencies:
coreutils
forstty
joy2key
(optional)lolcat
mpg123
ncurses-bin
procps
vorbis-tools
sudo apt install coreutils lolcat mpg123 ncurses-bin procps vorbis-tools
Or with Nix:
nix shell nixpkgs#lolcat nixpkgs#mpg123 nixpkgs#ncurses nixpkgs#procps nixpkgs#vorbis-tools --command ./aaa.sh
Execute ./aaa.sh
to run the game.
./aaa.sh
This step is optional.
sudo apt install libx11-dev x11-utils
wget -c http://sourceforge.net/projects/joy2key/files/joy2key/1.6.3/joy2key-1.6.3.tar.bz2
wget -c http://sourceforge.net/p/joy2key/patches/_discuss/thread/e73f20a1/33d7/attachment/button_list_segfault.patch
tar xvf joy2key-1.6.3.tar.bz2
patch -p0 -i ../button_list_segfault.patch
cd joy2key-1.6.3
./configure --prefix=/usr/local
make
sudo make install
Player 1 and Player 2 control profiles for sc-controller can be found in the cfg/
directory.
Antsy Alien Attack - P1.sccprofile
Antsy Alien Attack - P2.sccprofile
- Tick
- Hardware interrupt trap to govern the game loop via a subshell.
- Input handler
- Keyboard
- Xbox360 Controller
- Graphics
- Framebuffer
- Sprite engine
- Sprite collision detection
- Sprite overlays
- Starfield
- Performance metrics
- Animators
- Player thrust
- Player roll
- Explosion animations
- Audio
- Sound effects engine
- Music engine
- Disable audio for remote connections
- Title screen engine
- Main screen artwork
- Game over artwork
- Victory artwork
- Enemies
- Fighters
- Hunter Fighter AI
- Sniper Fighter AI
- Boss ships
- Boss ship AI
- Power ups
- Bonus points
- Weapon upgrades
- Shields
- Smartbomb
- Extra life
- Level progression
- Number of enemies rises
- Enemy firepower increases
- Enemy speed increases
- Bonus spawn rate decreases
- Bonus value increases
- Canyon levels, narrow playable area
- Level progression announcements
- Level-up skill points
- 2P
- Local
- Network
- Title screen attract mode
- High score
- Configuration
- Credits
- Install
- Script
- PPA
- Snap
The title graphics are using toilet
and lolcat
via tools/render-titles.sh.
You can preview of all the toilet
font styles using this:
for FONT in /usr/share/figlet/*.tlf; do echo $(basename $FONT) && toilet -t -f $(basename $FONT) --filter border "Antsy Alien Attack!" | lolcat -f -F 0.2; done
I found music and sound effects on Open Game Art. I ended up using Creative Commons licensed music from Patrick de Arteaga and sound effects from Kenney Vleugels and Viktor Hahn.
- https://int10h.org/oldschool-pc-fonts/
- http://www.fixedsysexcelsior.com/
- https://github.com/ansilove/BlockZone
- https://shiroyasha.svbtle.com/escape-sequences-a-quick-guide-1
- Code page 437)
- ASCII table , ascii codes
- http://bruxy.regnet.cz/web/linux/EN/ansi-art-sh-paint/
- http://picoe.ca/products/pablodraw/
- http://tetradraw.sourceforge.net/
- https://sourceforge.net/projects/tundradraw/
- https://sourceforge.net/projects/mysticdraw/
- http://syncdraw.bbsdev.net/
- https://www.gridsagegames.com/rexpaint/index.html
- subshells and traps.
case
is twice as fast asif
,elif
,else
,fi
.echo -e
is faster thantput
andtput
is faster thatprintf
.- Arithmetic comparison are faster than tests
- For example
if ((HUNT_P1 == 1)); then
is faster thanif [ ${HUNT_P1} -eq 1]; then
- For example
- Bash has C style loops
- Like this
for (( FIGHTER_LOOP=0; FIGHTER_LOOP < TOTAL_FIGHTERS; FIGHTER_LOOP++ )); do
- Like this
- I never knew about
((TOTAL_STARS++))
or((TOTAL_STARS+=5))
or((TOTAL_STARS+=MORE_STARS))
- Px437 IBM VGA Regular at 16px is best font.
Slides from a presentation I gave at FOSS Talk Live 2019 as part of the Ubuntu Podcast live show are also available: