Anyone want to have a crack at converting Adafruit's Flying Toasters for TVout?

Adafruit has a tutorial on how to display the classic Flying Toasters screensaver on an OLED display.

I wanted to have a go at converting it to display on a CRT with the TVout library.

So far I have this, but I just get a few blips on the screen. Not sure what to fix. I'm trying to change it to work with the TVout's 128x96 resolution.

I'm using Arduino 1.0.4 or that Robot Controller bug creeps in.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <TVout.h>
#include "bitmaps.h" // Toaster graphics data is in this header file

TVout TV;

#define N_FLYERS   5 // Number of flying things

struct Flyer {       // Array of flying things
  int16_t x, y;      // Top-left position * 16 (for subpixel pos updates)
  int8_t  depth;     // Stacking order is also speed, 12-24 subpixels/frame
  uint8_t frame;     // Animation frame; Toasters cycle 0-3, Toast=255
} 
flyer[N_FLYERS];

uint32_t startTime;

void setup() {

  TV.begin(NTSC, 120, 96);

//randomSeed(analogRead(2));           // Seed random from unused analog input
  randomSeed(100);           // Seed random from unused analog input

  for(uint8_t i=0; i<N_FLYERS; i++) {  // Randomize initial flyer states
    flyer[i].x     = (-16 + random(10)) * 10;
    flyer[i].y     = (-16 + random( 10)) * 10;
    flyer[i].frame = random(3) ? random(4) : 255; // 66% toaster, else toast
    flyer[i].depth = 10 + random(12);             // Speed / stacking order
  }
  qsort(flyer, N_FLYERS, sizeof(struct Flyer), compare); // Sort depths

  startTime = millis();
}

void loop() {
  uint8_t i, f;
  int16_t x, y;
  boolean resort = false;     // By default, don't re-sort depths

  TV.clear_screen();

  for(i=0; i<N_FLYERS; i++) { // For each flyer...

    // First draw each item...
    f = (flyer[i].frame == 255) ? 4 : (flyer[i].frame++ & 3); // Frame #
    x = flyer[i].x / 12;
    y = flyer[i].y / 12;
    TV.bitmap(x, y, (const uint8_t *)pgm_read_word(&mask[f]), 32, 32, BLACK);
    TV.bitmap(x, y, (const uint8_t *)pgm_read_word(&img[ f]), 32, 32, WHITE);

    // Then update position, checking if item moved off screen...
    flyer[i].x -= flyer[i].depth * 2; // Update position based on depth,
    flyer[i].y += flyer[i].depth;     // for a sort of pseudo-parallax effect.
    if((flyer[i].y >= (64*12)) || (flyer[i].x <= (-32*16))) { // Off screen?
      if(random(7) < 5) {         // Pick random edge; 0-4 = top
        flyer[i].x = random(120) * 12;
        flyer[i].y = -32         * 12;
      } 
      else {                    // 5-6 = right
        flyer[i].x = 128         * 12;
        flyer[i].y = random(64)  * 12;
      }
      flyer[i].frame = random(3) ? random(4) : 255; // 66% toaster, else toast
      flyer[i].depth = 10 + random(12);
      resort = true;
    }
  }
}

// Flyer depth comparison function for qsort()
static int compare(const void *a, const void *b) {
  return ((struct Flyer *)a)->depth - ((struct Flyer *)b)->depth;
}

Not sure how to fix

TV.bitmap(x, y, (const uint8_t *)pgm_read_word(&mask[f]), 32, 32, BLACK);
TV.bitmap(x, y, (const uint8_t *)pgm_read_word(&img[ f]), 32, 32, WHITE);

Here's the original code: Code | Animated Flying Toaster OLED Jewelry | Adafruit Learning System