Major Revision 1.1

I finally beat all the Hard levels without cheating. The last six or so were extremely hard. I knew the solutions because I designed them, and I tested each section as I designed them to make sure they were possible. Making it through each challenge in one pass without dying proved much harder than I suspected.

I would be very interested in seeing a speedrunnerer try my game. Perhaps Flyboy isn't a great candidate for speedruns because of the random elements to enemy behavior. I doubt anyone could ever beat all 30 hard levels without dying dozens or hundreds of times.

After finishing the game I decided to compile this changelog and upload a new version of Flyboy with fixes for a few small bugs I found along the way. I also changed the order of some of the last hard maps.

A new version of Pygame has been released, but much to my dismay, the CPU usage problem in Debian/Ubuntu/Mint distributions still exists. The game uses far more CPU time on pygame versions > 1.9.1. I am now releasing Linux versions of Flyboy with pygame1.9.1 included.

On a positive note, an SDL2 version of Pygame is on the horizon. Once it gets released I'll be able to add more eyecandy, remove the flicker that sometimes occurs while the map is scrolling, and increase the framerate. Expect bloodier deaths, bigger explosions, cooler transitions, lighting effects, background animations, and LOWER CPU usage for both Linux and Windows versions. Higher bitrate sounds, improved audio mixing, proper button mapping for game controlers, smooth scaling, and seamless resolution/fullscreen changes will be other pleasant additions.

Bug Fixes and Additions

Unrelenting Menus:
A longstanding bug caused the map title dialog to get stuck, refusing to go away unless the player first pressed escape to open the pause menu, then selected resume, restart, or exit from there. I thought I had fixed it some time ago but there was another situation that caused the same problem. The second case was actually introduced by an attempt to reduce the flickering and keep the framerate steady by only calling pygame.clock.tick() once per frame.
The bug occured after a player finished a level and then let the score dialog timeout. The game's clock would have passed 6 seconds during the dialog, which confused the map title dialog that opened up next. The dialog believed it already timed out and entered a state where it ignored button presses and never sent a message to the game logic that it should resume playing.

At first I fixed it by ticking the game clock after the score dialog finished, and that worked fine. In the end I decided to return the menu to operating on its own clock so that it will work independently of the game logic, ensuring that similar bugs won't arise when adding my menu module to future games. This shouldn't adversely effect the game's performance like my sprite animation module did when each sprite had its own clock.

Gamepad Intro Skip
I adjusted the option loading and gamepad initialization to occur before playing the intro. Now any gamepad button will skip intros, outros, and dialogs. Gamepads still need to be enabled in options, but after that you never need to touch the keyboard or mouse again.

One-Sided Conveyer Velocity:
Some of your horizontal velocity is meant to carry over after a moving platform stops while you're standing on it. This causes you to jerk to the side, possibly falling off the plaform. This only occurred when platforms were moving right because of a common comparison error.

'if player.convey_xv < WALK_SPEED' should have been 'if abs(player.convey_xv) < WALK_SPEED'.

I'm not surprised that I forgot to compare the absolute value of the player's x velocity, which every game designer has probably done. I am surprised that it took so long for me to notice the bug.

RoboRATTs Unfreezing Speedup
I recently fixed a bug that made roboTRAK move too fast after unfreezing. After playing through all the Hard levels I noticed that the same problem existed for RoboRATTs so I fixed that one too.

Empty Jetpack Difficulties
Several maps were unnecessarily difficult where players had to fly to a high platform with limited fuel. When the jetpack ran out of fuel and the player's state changed from flying to falling, the players horizontal velocity would reset to 0.

I knew about this for a long time but never bothered fixing it because it made sense that you should try to avoid running out of fuel anyway. It took more time to track down the source of the problem and fix it than I expected, but I think it proved worthwhile.

Stop Reusing
The use button would sometimes get 'stuck' when playing with a gamepad. The most obvious occurance was on a level where you must shoot while climbing a ladder. The character would shoot again after reaching the top, wasting a shot that might be needed elsewhere. I can't remember how I fixed this but I think I did.

Trigger Error
There was a small error in Switched Teleport Hell, one of the last Hard levels. There were two invisible triggers in the buzzsaw room at the top-right corner of the map. Entering either square was supposed to spawn the buzzsaws, but because the trigger mode was set incorrectly, players were able to touch one trigger to activate the buzzsaws, then touch the other trigger to freeze them. The danger is no longer so easy to avoid.

Hidden Mouse
I decided to hide the mouse cursor when playing in fullscreen. It reappears in menu screens and when the game returns to window mode. Note that there may still be some flickering in fullscreen until pygame2.0 is released.

Misaligned Helmet
I fixed some graphical inconsistencies in the standing and pushing animations, most notably the helmet's size and its alignment. These problems were caused by my original walking sprites being the entire height of a grid square. Flyboy is leaning forward in those animations, so when I made him 'stand tall' for the standing animations, he was too tall to fit on the square. My attempt to fix it involved shrinking the helmet. I only recently realized how bad it looked. I think it's much better now.

High CPU usage for some Debian/Ubuntu/Mint users
A known issue with an old sound driver included with some Debian distributions conflicts with recent Pygame releases. It causes the thread that Flyboy is running on to jump up to 100% CPU usage. On the average quad core machine overall CPU usage shows as 25%. Perhaps this is why Linux Mint and other Debian releases include an older Pygame1.9.1 version.

I had hoped this problem would finally be resolved with the recent pygame1.9.6 release but it wasn't. The game should run fine for most users, but users who have updated pygame or are running very new distributions may suffer this performance problem. I could have resolved it by disabling music but I took a different route. I now include pygame 1.9.1 with the linux version of Flyboy.


Flyboy.exe 11 MB
May 07, 2019
Flyboy.tar.gz 8 MB
May 07, 2019 7 MB
May 07, 2019

Get Flyboy

Download NowName your own price

Leave a comment

Log in with to leave a comment.