Explosion of an Aeroplane

From GameBrew

Explosion of an Aeroplane
Last Updated2007/05/10

Explosion of an Aeroplane is a game of Biplane Dogfight in Multilayer early 20th century settings. Multiplayer via dswifilib. This game is in its early stages, currently you can play against other players, collide and destroy the level graphics, and shoot down other planes. It was previously called Wright Flight.

The in-game graphics are created using the 3D hardware (even the particles are small alpha blended 3D triangles and rectangles). The game runs in full 60fps. The sound engine supports 4-8 channel MODs, and the remaining channels (of the total 16) can be used for sound effects.

The network code has been proven to work with five simultaneous players , and if you have a wireless router supporting local broadcasting to Wifi, then you are in for a treat.

User guide

Wifi connection

Compile and run the server (under explosionOfAnAeroplaneServer directory).

  • Configure your DS to connect to your favourite AP (perhaps using Mario Kart, and edit the first settings, settings number 1).
  • Now start all Explosion of an Aeroplane clients.
  • Go to the NET menu page, and type in the server's IP.
  • Go to the PLAY menu page, then select the game mode (and go and change your plane, if you want to).
  • Press CONNECT! once to connect to the AP, and the game server.
  • Now at this point all clients must be connected to the server.
  • Now press READY! in all clients to begin a match. When you've recieved VICTORY! or DEFEAT notice, press END! to disconnect from the server.
  • Now you can start another game by pressing CONNECT! and READY! like before.

The clients use port 8888, and the server resides at the port 8889, so remember to have these opened in your Wifi router.


If you press down L+R in less than 0.5s after your plane has started to explode, it will shoot (with 50% chance per bullet) some of the special weapon bullets into random directions.

Note that changing layers eats the plane's battery, but fortunately it gets recharged quite quickly.


This is the default key mapping, you can change it from the key configuration menu page.

L - Switch layers

B - Slow acceleration (faster turning)

A - Fast acceleration (slower turning)

Left/Right - Turn left/right

X - Machine gun

Y - Special weapon (shown on the HUD)

R - Change the special weapon

Up - Quick turn

Start - Toggle pause

Select+Start - Reset the DS to GBA slot (using libcartreset)

L+R (while the game boots) - Skip the loading of the saved configuration

A+B - Super turbo


explosionofaeroplane.png explosionofaeroplane2.png

explosionofaeroplane4.png explosionofaeroplane5.png


It is advised to use No$gba v2.3c+ to play Explosion of an Aeroplane, or better yet, use the real hardware as no emulator so far emulates the Wifi connection.


v0.2.6 2007/05/09

  • Updated to inflateTT-DS v1.2, so the data files are compressed a little better.
  • Found a couple of places where C99 style variable allocation was used, and cleaned them up.
  • When a player disconnects from a match all the bullets owned by him are deleted, so they don't appear as ghost bullets any more.
  • Made the interrupts use even less stack.
  • If the game server doesn't respond to a join message in 1.5 seconds, NO RESPONSE will be shown on the game screen.
  • The player's plane starts from an airfield when changing the level, not from the current location.
  • Gas is now blue.
  • Collectables don't spawn so close to the walls any more.
  • Remade the machinegun boost icon.
  • Added collectable icons for mines, bombs, missiles, heat seeking missiles, cluster bombs and invulnerability, and collecting a weapon icon will grant the player three shots.
  • Increased the collision distance for the collectables.
  • Increased the rate at which the airports refuel the planes.
  • The planes cannot crash to the airports any more.
  • Airports don't attract the planes if they are turbo boosting.
  • Decreased the amount of ammo the planes have when they spawn.
  • Added priority to collectable allocation, so that if there is no free space in the collectables array and we need to spawn e.g., stars, we can overwrite less important collectables.
  • Added quick turning.
  • The player doesn't lose lives if he isn't engaged in a network match.
  • Added a new level: Rome.
  • Increased the maximum number of particles.
  • Cleaned up MUSTIKKA's level graphics.
  • Optimized collision checks.
  • It's possible to collect nine bullets to each special weapon.

v0.2.5 2007/04/19

  • The game screen now displays the changes in the connection to the server (CONNECTED, DISCONNECTED or SERVER TIMEOUT).
  • Optimized HUD, bullet, collectable and particle drawing by using those geometry commands that reuse the previous Z.
  • Redrew the HUD. The new one is more compact and takes less screen space. Also redrew the mines.
  • Fixed scaling bugs in the HUD items.
  • Exploding planes don't collect collectables.
  • Collectables appear and disappear with a burst of particles.
  • Cleaned up CHANGELOG.
  • The gas and health meters in the HUD display the actual values with a small delay.
  • Added brightness adjustment to the game configuration menu screen.
  • The boot screen changes to credits screen when the first level has been loaded.
  • Bombs, mines and missiles are activated a little later after being fired.
  • Background layer airplanes aren't drawn on top of the front layer any more.
  • Collectables are now drawn on top of the particles.
  • Added a new multiplayer mode: collect stars (whoever collects all eight stars wins).
  • It's not possible to change the menu screen while the boot screen is visible.
  • Rewrote the code that checked who won and who lost in a network match.
  • Made the red dot on the map a little brighter, so it should work better on the original DS.
  • Added airports.
  • Added cluster bombs.
  • Incorporated dswifilib bugfixes (12-Apr-2007), and removed C99 style variable allocation from dswifilib.
  • Recreated the planes using Blender, and now we have two versions of the planes: ingame planes with 55-65 triangles, and plane selection screen planes with 200-400 triangles each.
  • Reprogrammed data sharing between ARM7 and ARM9.
  • Y and A keys change the plane in the plane selection menu screen. Also adjusted the initial zooming and rotation values.
  • The network match settings (level, game mode, all bullets do holes, gas, battery and the flight model) are now synchronized between the clients.
  • When low on gas, the gas bar blinks, and when low on health the health bar blinks.
  • If changing the plane model while the plane was exploding would make the plane remain as a fireball.
  • Code cleanups: even less C99 style variable allocation from the stack, and made the interrupts use less stack.

v0.2.4 2007/04/03

  • Key presses don't affect the plane while the player is configuring the keys.
  • Made the mines larger, and now it's possible to shoot the mines.
  • Added initial radar/map screen.
  • Halved the damage in plane-to-plane collisions.
  • Normal missiles do bigger holes.
  • Once again shrunk the plane graphics, enlarged the level graphics to make the levels appear larger.
  • Slowed down the heat seeking missiles a little, made them less agile, and added more random to their turning.
  • The planes consume much less gas than before.
  • Press L+R while the game boots to skip the loading of the saved configuration.
  • Machine gun makes smaller holes.
  • Added collectable items (machine gun boost, health and gas) that respawn.
  • It's possible to boost the machine gun two times, from normal to heavy cannon, and from heavy cannon to laser gun by collecting the machine gun boost icons.
  • By pressing down the both acceleration keys, the plane does super turbo (and consumes even more gas).
  • Special weapon auto selection (when ammo runs out) can be toggled on and off in the game configuration menu screen.
  • Random number generator is reseeded every time a level is reset.
  • Pause works only while the client is not connected to a server.
  • If a client timed out while connected to a server, but no game had been started, the client couldn't reconnect.
  • Clients drop the connection when server timeouts (and the user can configure the server timeout threshold in the client).
  • Gravity now affects the planes more, when turned on.
  • The planes accelerate slower in space flight mode.
  • Decreased the stack usage.
  • Optimized bullet drawing (less overhead on the 3D hardware).
  • Gravity is now calculated using the weights of the planes.

v0.2.3 2007/03/04

  • Starting a network match doesn't reset the planes any more.
  • A suicide is worth one minus point.
  • The missile turrets don't target invulnerable planes any more.
  • Changing layers eats now batteries, and the batteries are recharged over time.
  • Shrunk the plane graphics, and made the planes a little more agile to make the levels appear larger.
  • Added layer check to bullet vs AI bot collision checks.

v0.2.2 2007/02/20

  • The project has a new name: "Explosion of an Aeroplane".
  • Incorporated the dswifilib bugfixes (DSLite related) done on 11-Jan-2007.
  • When the current special weapon runs out of ammo, the next one with ammo is automatically selected.
  • Added third flight model: OUTER SPACE.
  • It's possible to select the base color for the plane in the plane selection screen.
  • Redrew the missile sprite, and flying missiles now emit smoke particles. The missile sprites are also rotated correctly.
  • When out of gas, the turbo boost works as the normal acceleration.
  • Added a template banner (icon) to the ROM, though it seems that M3 cannot show it. DS-X shows it correclty.
  • Added support for delayed particle spawns (very easy to create a lot of particles that appear later).
  • Added heat seeking missiles.
  • It's possible to destroy the AI turrets with missiles and bombs.
  • If you press L+R in less than 0.5s after your plane has started to explode, it fires some (50% chance per bullet) of the remaining special weapon bullets into random directions.
  • Made the zooming zoom more away from the playfield.
  • The bombs get the plane's initial Y speed.
  • Added enemy missile launchers.
  • If you press the name of the level in the PLAY menu screen, the level will be reset.
  • It's possible to zoom out and in into the plane in PLANE SELECTION menu screen using X and B, and corrected the Z-scaling.
  • The plane selection and the plane colors are saved in SRAM.
  • After respawning the plane is invulnerable during the first frame of the new life as well.
  • Changing layers uses only 50% of a gas tank, not 100%.
  • The level is reset when a multiplayer match begins.

v0.2.1 2007/01/14

  • Added IMA ADPCM compression and playback for the sound effects. Currently only the explosions are IMA ADPCM compressed.
  • Added Deflate-like compression to the toolchain, and Inflate-like into the game (didn't follow the RFCs 100%).
  • It's possible to shoot holes into the background graphics with the machine gun by enabling the "ALL BULLETS DO HOLES" option.
  • PAUSE status flag isn't saved into SRAM any more along with the other status flags.
  • Added small explosions to plane collisions.
  • Added water drop particles that collide with the backgrounds, and with each other.
  • Fixed and optimized background collision data calculation.
  • The plane attribute values in the plane selection screen were shown in wrong order.
  • The plane attribute values are now used (minus weight). You can expect that the default values will go through a lot of tweaking.
  • Decreased stack usage (especially the ARM7 side of dswifilib was eating lots of stack).
  • The special weapon selection remains when the player dies.
  • On the network configuration menu page, it's possible to choose the number of the access point configuration in firmware (1-3) that the game uses.

v0.2.0 2006/12/13

  • Added another multiplayer mode: 40 seconds (with a timer in the HUD).
  • When a multiplayer match begins, "GO!" is displayed on the screen.
  • Moved "VICTORY!", "DEFEAT", "GO!" and "PAUSE" a little up so that they don't cover the plane.
  • After pressing "CONNECT!", "READY!" or "END!", the user cannot select anything in the menus for one second. This is to prevent accidental double clicking.
  • Bombs and mines didn't score kills, fixed that.

v0.1.9 2006/12/10

  • The machine gun bullets have as good collision checks as the missiles.
  • Made the menus look nicer.
  • The mines get activated when there are no planes near them.
  • You can collide with your own mines.
  • Added auto rotation to the plane selection screen.
  • All bullets and particles that occupy only one pixel on the screen are now rendered.
  • Reorgazined the play menu screen.
  • Added two new multiplayer modes: deathmatch and 10 kills.
  • The HUD shows now 0 if you are out of ammo.
  • When in plane selection screen, or while the game is paused, the master volume is 50% of the normal.
  • Added "VICTORY!" and "DEFEAT" messages to the network play (and DEFEAT replaces the old GAME OVER).
  • Cleaned up the HUD (and redrew "PAUSE").
  • You cannot pause the game during a network match anymore.
  • Added bombs.
  • Added free EWRAM, and the free ARM7 time to the hidden debug screen.
  • The plane selection view is now in perspective.
  • The HUD shows again the number of the remaining lives (if they are relevant for the current game mode).
  • Added line-of-sight to the AI bots, and the turrets now fire at the closest plane that is firing that they can see.
  • Added a little random to the AI turrets' targetting.

v0.1.8 2006/12/03

  • All the players are shown as online when they login to the server, not only after a match begins.
  • After respawning, and at the start of a network match, the plane is invulnerable for five seconds, unless the player starts firing.
  • The plane doesn't move after respawning until the camera has reached it.
  • If a player timeouts, but manages to recieve the timeout notice, his plane doesn't vanish.
  • Changed the button configuration: Now there are two weapon buttons, one for the machine gun and one for the special weapon.The third weapon button now changes the special weapon.
  • Adjusted the gravity, made turbo boost faster, made turning faster while turbo boosting, turbo boost eats 50% more gas.
  • Plane to plane collisions do now less damage.
  • Dropped the initial network send frameskip to 3, the optimizations seem to allow this (or is it my new ZyXEL P660HW-D1 ADSL2+ router?).
  • Once again the bullets are reset when a network match begins.
  • Added hidden debug menu screen (press spot X on the credits screen).
  • When starting the server you must specify the client timeout.
  • Each plane has now its own collision region.
  • Added new HUD graphics. Also the selected special weapon and the remaining bullets are displayed on the HUD.

v0.1.7 2006/11/24

  • Updated libcartreset to v0.72.
  • Removed -ansi from the server makefile's gcc options.
  • Made turbo boost a little slower.
  • Halved the damage the planes take from colliding with each other.
  • The network I/O is now also handled in the plane selection screen. Before it wasn't and would lead to a timeout.
  • All planes have white base color. Before each player would have its own base color, but most colors just didn't work well.
  • Made the gravity 25% stronger.
  • If the player changes the plane while connected to the server (but no game is on), the plane selection is sent to the server automatically.
  • The online status of the other players is also shown on the play menu screen.
  • Added sparkle and dark smoke particles.
  • When a plane is low on energy, it'll start emitting dark smoke and sparkles.
  • The weapons do now 33% less damage than before.
  • Compressed network update packets.

v0.1.6 2006/11/20

  • Optimized collision checks.
  • Added preliminary AI turrets. The AI is distributed evenly over the connected clients.
  • Increased the default network send frameskip to 5.
  • Client timeouts and exits are handled nicer now.

v0.1.5 2006/11/18

  • Added random variation to particle rotations.
  • Optimized collision checks.
  • Optimized bullet and particle managers.
  • The planes can now collide with each other.
  • Changing the levels cleared the network match player list.
  • Added support for static particle emitters.
  • You'll recieve damage for being near an exploding plane.
  • Added third plane.
  • The server doesn't send updates to clients that have disconnected from a match.
  • The server autopings the clients once a second, and if a client fails to respond in three seconds, it's declared dead.

v0.1.4 2006/11/13

  • Added texture manager for the plane textures, and now you can mix different planes in network play.
  • When changing planes while PAUSE is on, the plane is now correclty centered.
  • Increased collision accuracy for the bullets (not for machine gun bullets, they are handled simpler).
  • Brought the two level layers closer to each other, and made the zooming less aggressive.
  • Background destroying wasn't distributed correctly between the players.
  • The layer base color affects the planes, bullets and particles correctly.
  • The front layer became darker after changing the layers for the first time.
  • The player can choose the plane he wants to follow in the network play.
  • Changed the network play logic a little. Now the client doesn't disconnect from the server after the player has died. Disconnecting must be done manually.

v0.1.3 2006/11/10

  • Integrated libfat and libcartreset (press SELECT+ START to reset to GBA slot).
  • The player plane doesn't zoom with the layers, when changing layers.
  • Added machine gun sound.
  • Machine gun bullets are now gray.
  • The planes are now positioned nicer in the plane selection menu screen.
  • The plane selection menu screen shows the plane stats (not yet in use, though).
  • Animated the mines.
  • You cannot change the level or the plane model when a network game is on.
  • When changing the level, the plane model selection remains.
  • If you get "CANNOT CONNECT" from dswifilib, it's possible to try again.
  • Kill statistics are now saved on the server side.
  • The player can scroll through these statistics on the PLAY STATISTICS menu page, if there is a connection to the server.
  • Redrew the test levels KUUSIKKO and AARRELAIVA.

v0.1.2 2006/11/04

  • Removed TCP code from dswifilib, and changed the two framehdr[] arrays that were allocated from stack to be larger and allocated from heap apparently fixing the network play as it works again. Also rewrote memcpy() and strncpy() so that no libg is needed for them by dswifilib.
  • Bullets don't collide with planes that are exploding.

v0.1.1 2006/11/02

  • Made the planes faster, and easier to kill.
  • The gravity works a bit differently now.
  • Adjusted the way the plane moves.
  • Made the sounds louder (master volume was at 50%).
  • Made the camera move faster.
  • When not accelerating, the plane slows down slower.
  • When accelerating the frequency of the plane's motor becomes higher.
  • Fixed a stupid bug in the RLE decompressor.
  • All explosions that created holes in the background create now bigger holes.
  • Added title screen.
  • When the level is changed, bullets and planes are now reset.
  • Added kill statistics.
  • It's not possible to start a network match with just one logged player.
  • Changing the server's IP address after connecting to an AP should work now.
  • The hardware divider unit is now more often used.
  • Added support for single layer 1024x512 and 512x1024 pixel levels, plus added two test levels.
  • Adjusted the default settings to be more useful.
  • Optimized bullet drawing.
  • Mines got new graphics.
  • Added 25-Oct-2006 dswifilib UDP bugfixes.
  • Added preliminary plane selection screen.
  • The background layer doesn't clip the plane any more.

v0.1.0 2006/10/25

  • When the player has died three times, GAME OVER is displayed.
  • Added manual zooming to game settings. If not enabled, the game uses auto zooming.
  • When out of gas, machine gun shoots bullets less often.
  • Missiles create bigger explosions.
  • Enlarged big explosions.
  • Added mines.
  • Mines and missiles have limited supply (currently five per plane).
  • Added support for creating circular holes in the background graphics (previously only rectangles were supported).
  • When the player's plane explodes, a circular area of pixels is removed from the background graphics.
  • Increased max gravity by 50%.
  • Added some preliminary sound effects.
  • Sound FX and the music can be turned off in the game configuration menu page.
  • The planes are now 3D!
  • Gravity is taken into account when dead reckoning the opponent planes.

v0.0.9 2006/10/18

  • It's possible to shoot holes into the background layers with missiles.
  • Fixed two nasty bugs in the collision detection code.
  • The settings are now saved when changing the menu page, but only if the user has changed some of the values that go into the save file (to limit the SRAM access).
  • Added new explosion and smoke graphics.
  • When a bullet hits anything, a small explosion is created.
  • When a plane crashes, lots of explosions are created, and the plane isn't drawn.
  • Made all explosions bigger.
  • Made the smoke grow bigger and vanish faster.
  • Turbo boost consumes 50% less gas than before.
  • All particles are now drawn on top of the layers.

v0.0.8 2006/10/14

  • When the game is paused, PAUSE is written on the screen.
  • Added third gun (currently second machine gun).
  • It was possible to use the normal acceleration and turbo boost at the same time.
  • Gas bar is drawn only if gas is enabled in the game configuration menu screen.
  • Changed the way gravity works.
  • Added a new menu page: PLAY, and compressed the tabs.
  • Moved network play to PLAY menu page.
  • Added animated menu hotspots (to show the user what he can really click).
  • The menu screen scrolls up at the startup.
  • The names and ready statuses of the players are displayed on the PLAY menu page.
  • Added level selection to PLAY menu page, and the second test level to the game.

v0.0.7 2006/10/08

  • Turbo acceleration eats twice as much gas as before.
  • The gas bar is now divided into four sections, for clarity (as changing layers eats one section).
  • Made the multiplayer game logic a bit clearer.
  • Added lives.
  • It's possible to disconnect from the game server during a match.
  • It's possible to end a match on the server, and start a new one (no need to restart it anymore).

v0.0.6 2006/10/07

  • Added version number into the save data. Only the latest save format will be supported in the coming releases.
  • The client's IP will be reloaded from dswifilib after making a connection to an AP.
  • Key input reading on the ARM7 side is done from the very first frame.
  • Started to work on the game configuration menu screen (added gas and gravity).
  • Keeping the layer change button pressed doesn't make your plane to change the layers more than once.
  • When changing layers the front layer grows bigger before becoming the back layer.
  • Added gas (meter and functionality).
  • Changing layers eats gasoline.
  • Now the player doesn't collide with the layer graphics while changing the layers.
  • Made the camera independent (so the screen isn't centered on the player all the time anymore).
  • Touching layer graphics will kill the player.
  • Added respawning.

v0.0.5 2006/10/06

  • New menu logic.
  • Reworked the network configuration menu screen.
  • Added key configuration menu screen.
  • The client's IP is shown correctly.
  • Removed alpha blending from the fading background layers, because it made layer jumping a bit confuzing.
  • The settings are now saved in SRAM when changing the menu page.
  • Some UDP packets can go and vanish, and this made some bullets to never die thus shrinking the bullet buffers until free space ran out.
  • Fast acceleration is now even faster.

v0.0.4 2006/10/02

  • Updated to dswifilib 0.3b fixing the bugs that made it previously unusable.
  • Added secondary (test) weapon.
  • Lots of new network code.
  • Lots of code cleanups.
  • Added credits menu screen.
  • Added network configuration menu screen.

v0.0.3 2006/09/13

  • Dropped the front (i.e., the third) layer for clarity.
  • Adjusted the layer darkening.
  • Enhanced the layer changing procedure.
  • Acceleration A has lower maximum value than acceleration B.
  • Enhanced layer test graphics.

v0.0.2 2006/09/10

  • Added particle engine with test smoke particles.
  • Added skeleton for the HUD.
  • Added pause.

v0.0.1 2006/09/08

  • The first demo release. Not much action inside the ROM file.



  • Initial design, initial SFX, and the title screen - Lauri Konttori.
  • Design - Koopa Troopers (the whole team).
  • Lead programmer - Ville Helin.
  • 2D & 3D Graphics - Ville Helin.
  • Additional programming, and level editor - Markus Eräpolku.
  • Level 1 (MUSTIKKA) - Jaakko Iisalo.
  • Level 2 (EKYPTI) - Juha Impivaara.
  • Level 3 (ROME) - Ville Helin (100% ripped from photographs).
  • Sound FX - Ilmari Hakkola.

Thanks to:

  • The DevKitPRO guys.
  • Stephen Stair for DSWifi.
  • All the folks contributing to those fine DS hardware documents.
  • Chishm for libfat.
  • Lick for libcartreset.
  • Tuomo Lehtinen and Tuomas Erikoinen for good ideas.
  • Aaron Rogers for taking some screenshots.

External links