File: main.c - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")

#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_ttf.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_audio.h>
#include <allegro5/allegro_acodec.h>
#include <allegro5/allegro_primitives.h>
#include <math.h>

#define _RGB al_map_rgb
#define _RGBA al_map_rgba
#define oslSwapBuffers al_flip_display
#define oslWaitVSync al_wait_for_vsync
#define oslDeleteSound al_destroy_sample
#define oslDrawFillRect al_draw_filled_rectangle

#define STALLMAN Stupid_Toe_Cheese_Eater_Hippie
#define GPL Shitty_Confusing_License
#define BSD3CLAUSE Actual_License_Of_This_Program

#define ESPAC_HORIZ 64
#define HAUT_FIELD 138
#define GRAVIT -0.05



typedef struct {
  int rx;
  int ry;
} RESOLUTION;

typedef struct {
  ALLEGRO_SAMPLE *ref;
  ALLEGRO_SAMPLE_INSTANCE *instance;
} OSL_SOUND;

typedef struct {
  ALLEGRO_AUDIO_STREAM *stream;
} OSL_MOD;

typedef struct {
  ALLEGRO_BITMAP *asset;
  float sizeX;
  float sizeY;
  float x;
  float y;
  float stretchX;
  float stretchY;
  float centerX;
  float centerY;
  float angle;

  int R;
  int G;
  int B;

  int trans;
} OSL_IMAGE;

struct ball {
  float speed_h;
  float speed_v;
  float speed_z;
  int angle;
  int x2d;
  int y2d;
  int z3d;
  short poisoned;
};

struct pie_entity {
  int pie_hp;
  int pie_facemode; //mode sarko-JLM-autre?
  int pie_direction;
  int pie_x;
  int pie_y;
};

OSL_IMAGE court, benj;
ALLEGRO_FONT *freesans = NULL;
ALLEGRO_COLOR current_col;
ALLEGRO_EVENT_QUEUE *event_queue;
ALLEGRO_DISPLAY *display = NULL;
ALLEGRO_SAMPLE_ID *id[16];
ALLEGRO_KEYBOARD_STATE kbdstate;
ALLEGRO_BITMAP *psp_screen = NULL;
ALLEGRO_VOICE *voice;
ALLEGRO_MIXER *mixer;
ALLEGRO_TIMER *timer = NULL;
ALLEGRO_EVENT_QUEUE *event_queue = NULL;
short redraw = 1;

unsigned long int counter=0;
unsigned int ratio=0;

const float FPS = 60;

OSL_IMAGE oslSetImageRotCenter(OSL_IMAGE osl_img)
{
  OSL_IMAGE dis = osl_img;
  dis.centerX = dis.sizeX/2;
  dis.centerY = dis.sizeY/2;
  return dis;
}

OSL_IMAGE oslSetImageTileSize(OSL_IMAGE img_param, int sx, int sy, int w, int h)
{
  OSL_IMAGE dis;
  dis = img_param;

  dis.asset = al_create_sub_bitmap(dis.asset, sx, sy, w, h);
  dis.sizeX = w;
  dis.sizeY = h;
  dis.stretchX = w;
  dis.stretchY = h;

  return dis;
}

OSL_IMAGE LoadImg(const char *filename)
{
  OSL_IMAGE dis;

  dis.asset = al_load_bitmap(filename);
  dis.sizeX = al_get_bitmap_width(dis.asset);
  dis.sizeY = al_get_bitmap_height(dis.asset);
  dis.x = 0;
  dis.y = 0;
  dis.stretchX = dis.sizeX;
  dis.stretchY = dis.sizeY;
  dis.centerX = 0;
  dis.centerY = 0;
  dis.angle = 0;

  dis.R=255;
  dis.G=255;
  dis.B=255;

  dis.trans=255;

  return dis;
}

OSL_IMAGE oslCreateImage(int w, int h)
{
  OSL_IMAGE dis;

  dis.asset = al_create_bitmap(w, h);
  dis.sizeX = al_get_bitmap_width(dis.asset);
  dis.sizeY = al_get_bitmap_height(dis.asset);
  dis.x = 0;
  dis.y = 0;
  dis.stretchX = dis.sizeX;
  dis.stretchY = dis.sizeY;
  dis.centerX = 0;
  dis.centerY = 0;
  dis.angle = 0;

  dis.R=255;
  dis.G=255;
  dis.B=255;

  dis.trans=255;

  return dis;
}

int random(int k)
{
  return rand()%k;
}

int swirl_collide(int px, int py, int gudule, int mgsy)
{
  if ((px-(gudule))*(px-(gudule))+(py-(mgsy))*(py-(mgsy)) <= 512) return 1; else return 0;
}

struct ball initball()
{
  struct ball abadgh;

   abadgh.x2d=random(320)+80; //x
   abadgh.y2d=170;     //y
   abadgh.speed_v=-1;  //vy
   abadgh.speed_h=0;   //vx
   abadgh.speed_z=2;  //vz
   abadgh.angle=0;  //
   abadgh.z3d=2;    //z
   abadgh.poisoned=0;

   return abadgh;
}

struct pie_entity initpie()
{
  struct pie_entity abadgh;
    abadgh.pie_facemode=0;
    abadgh.pie_direction=0;
    abadgh.pie_x=128;
    abadgh.pie_y=136;
  return abadgh;
}

struct ball apply_impulse(struct ball ball_arg, float v, float v2, float angle)
{
  struct ball dis = ball_arg;

  dis.speed_h = v;
  dis.speed_v = -v2;

  return dis;
}

int getScreenRatio()
{
  ALLEGRO_MONITOR_INFO proutzob;
  RESOLUTION res;
  int a,b;

  al_get_monitor_info(0, &proutzob);
  a=(proutzob).x2 - (proutzob).x1 + 1;
  b=(proutzob).y2 - (proutzob).y1 + 1;

  res.rx = a;
  res.ry = b;

  return (a*100)/b;
}

OSL_IMAGE oslDeleteImage(OSL_IMAGE image)
{
  OSL_IMAGE dis = image;
  al_destroy_bitmap(dis.asset);
  return dis;
}

void oslSetTextColor(ALLEGRO_COLOR col)
{
  current_col = col;
}

void oslDrawString(float x, float y, const char *text)
{
  al_draw_text(freesans, current_col, x, y, 0, text);
}

void spr_draw(OSL_IMAGE image, float x, float y)
{
  al_draw_tinted_scaled_rotated_bitmap(image.asset, al_map_rgba(image.R, image.G, image.B, image.trans), image.centerX, image.centerY, x, y, (image.stretchX)/(image.sizeX), (image.stretchY)/(image.sizeY), (image.angle)/60, 0);
  image.x = x;
  image.y = y;
}

OSL_MOD oslLoadSoundFileMOD(const char *filename)
{
  OSL_MOD dis;
  dis.stream = al_load_audio_stream(filename, 10, 1024);
  al_attach_audio_stream_to_mixer(dis.stream, mixer);
  return dis;
}

void oslSetSoundLoopMOD(OSL_MOD sound, short yesno)
{
  if (yesno == 1) al_set_audio_stream_playmode(sound.stream,ALLEGRO_PLAYMODE_LOOP); else al_set_audio_stream_playmode(sound.stream, ALLEGRO_PLAYMODE_ONCE);
}

void oslPlaySoundMOD(OSL_MOD sound)
{
  al_set_audio_stream_playmode(sound.stream, ALLEGRO_PLAYMODE_LOOP);
  al_set_audio_stream_playing(sound.stream, true);
}

void oslStopSoundMOD(OSL_MOD sound)
{
  al_set_audio_stream_playing(sound.stream, false);
}

void oslDeleteSoundMOD(OSL_MOD sound)
{
  oslStopSoundMOD(sound);
  al_destroy_audio_stream(sound.stream);
}

OSL_SOUND oslLoadSoundFile(const char *filename)
{
  OSL_SOUND dis;
  dis.ref = al_load_sample(filename);
  dis.instance = al_create_sample_instance(dis.ref);
  al_set_sample_instance_playmode(dis.instance, ALLEGRO_PLAYMODE_ONCE);
  al_attach_sample_instance_to_mixer(dis.instance, mixer);
  return dis;
}

void oslSetSoundLoop(OSL_SOUND sound, short yesno)
{
  if (yesno == 1) al_set_sample_instance_playmode(sound.instance,ALLEGRO_PLAYMODE_LOOP); else al_set_sample_instance_playmode(sound.instance,ALLEGRO_PLAYMODE_ONCE);
}

void oslPlaySound(OSL_SOUND sound)
{
  if (!al_play_sample_instance(sound.instance)) oslDrawString(0, 0, "could not play sound!");
}

void oslStopSound(OSL_SOUND sound)
{
  al_stop_sample_instance(sound.instance);
}

void oslDeleteSound(OSL_SOUND sound)
{
  oslStopSound(sound);
  al_destroy_sample_instance(sound.instance);
}

void oslStartDrawing()
{
  al_set_target_bitmap(psp_screen);
}

void oslEndDrawing()
{
  al_set_target_bitmap(al_get_backbuffer(display));
  al_draw_scaled_bitmap(psp_screen, 0, 0, 480, 272, 0, (al_get_display_height(display)-al_get_display_width(display)*9/16)/2, al_get_display_width(display), al_get_display_width(display)*9/16, 0);
}

OSL_IMAGE oslSetAlpha(OSL_IMAGE gfx, int trans_p)
{
  OSL_IMAGE dis = gfx;
  dis.trans = trans_p;
  return dis;
}

OSL_IMAGE oslSetTint(OSL_IMAGE img_param, int pR, int pG, int pB)
{
  OSL_IMAGE dis;
  dis = img_param;

  dis.R = pR;
  dis.G = pG;
  dis.B = pB;

  return dis;
}

int oslGetStringWidth(const char *text)
{
  int j;
  j=al_get_text_width(freesans, text);
  return j;
}

void cls()
{
  al_set_target_bitmap(al_get_backbuffer(display));
  oslDrawFillRect(0,0, al_get_display_width(display), al_get_display_height(display), _RGB(0, 0, 0));
  oslSwapBuffers();
  al_set_target_bitmap(psp_screen);
}

void fadeout()
{
  int i;
  al_set_target_bitmap(al_get_backbuffer(display));
  for (i=0; i<80; i++)
  {
    oslDrawFillRect(0,0, al_get_display_width(display), al_get_display_height(display), _RGBA(0, 0, 0, i));
    oslSwapBuffers();
    oslWaitVSync();
  }
  al_set_target_bitmap(psp_screen);
}

void draw_benj(OSL_IMAGE benj, int px, int py, short shielded, OSL_IMAGE shield)
{

  float court_zoom = 0.00192*(py+32) + 0.562;
  shield.stretchX = (int)(48*(float)court_zoom);
  shield.stretchY = (int)(48*(float)court_zoom);

  if ((benj.angle) == -90)
  {
    spr_draw(benj, px-16, py+88);
  }
  else if ((benj.angle) == 90)
  {
    spr_draw(benj, px+64, py+32);
  }
  else if ((benj.angle) == 0) spr_draw(benj, px, py);

  if (shielded)
  {
    shield.trans=128;
    spr_draw(shield, px+4, py+16);
  }
}

void amigatext(const char *arg, int x, int y, OSL_IMAGE amigafont, int width, int height)
{
  int i, l=strlen(arg), tx=x, placex=(amigafont.sizeX)/width;
  OSL_IMAGE singlechar;


  for(i=0; i<l; i++)
  {
    if (arg[i] <= 'Z')
    {
      singlechar=oslSetImageTileSize(amigafont, ((arg[i]-32)%placex)*width, ((arg[i]-32)/placex)*height, width, height);
      spr_draw(singlechar, tx, y);
    }

    tx += width;
  }
}

void credz()
{
  int frame=0, a=0, b=480, c=0, d=32, e=136, trans=0, skipframe=0, f=7, i, benj_frame=0;
  short quit=0;
  char buffer[39];

  const char *texts[23] = {"v2.00", "Released on 11/19/2014 for", "","", "(C) 2014 by",
              "Code, some GFX and .XM music by", "Ball physics and OSLib by",
              "Inspired by", "THE NONE", "Musics ingame ripped from", "EARTHBOUND",
              "PC Version powered by", "ALLEGRO V5", "Coding started on", "JULY 2013", "Hours of work", "COUNTLESS",
              "Most pictures were found on", "GOOGLE PICS", "Number of defeat animations", "25", " ", " "};

  const char *greeted[25] = {"ICEMAN", "PRINCEPS-BONUS", "ODIE_ONE", "MAGEDRAXGONVAMPIRE", "XELTEKSEN", "FEI", "SHYKOOPA77", "XIRIUS_THIR", "GOBOLZ",
               "MEZ", "ORION_", "ZEROSQUARE", "BRUNNI", "MATMOOK", "JEFFR3Y", "DR.DEIMOS", "GODZIL", "ARETHIUS", "TENDERNESS", "KEYDEE GAMER BOY",
               "OBO", "BARONLESTAT666", "ISOBEL", "LUNA240681", "...AND MANY OTHERS"};

  OSL_MOD theme;
  OSL_IMAGE aipc;
  OSL_IMAGE twt;
  OSL_IMAGE gml;
  OSL_IMAGE amiga;
  OSL_IMAGE giygas;
  OSL_IMAGE sonicexe;
  OSL_IMAGE flappy_redhill;
  OSL_IMAGE _1in24, aa, bb;
  OSL_IMAGE temp_gfx, temp_benj;
  OSL_IMAGE iamgod[4];

  theme = oslLoadSoundFileMOD("./muzaxx/credz.xm");
  aipc = LoadImg("./gfx/credz/aipc.png");
  twt = LoadImg("./gfx/credz/twitter.png");
  gml = LoadImg("./gfx/credz/gmail.png");
  amiga = LoadImg("./gfx/credz/amiga.png");
  giygas = LoadImg("./gfx/credz/giygas.png");
  sonicexe = LoadImg("./gfx/sonicexe.png");
  flappy_redhill = LoadImg("./gfx/flappy_redhill.png");
  aa = LoadImg("./gfx/pookey1.png");
  bb = LoadImg("./gfx/pona08.png");
  temp_gfx.asset = al_create_bitmap(480, 272);

  for (i=1; i<=4; i++)
  {
    sprintf(buffer,"./gfx/iamgod%d.png",i);
    iamgod[i-1] = LoadImg(buffer);
  }

  sprintf(buffer,"./gfx/pasta%d.png",random(42)+1);
  _1in24 = LoadImg(buffer);

 
  oslStartDrawing();
  oslDrawFillRect(0, 0, 480, 272, _RGB(0,0,0));
  oslEndDrawing();
  oslSwapBuffers();

  giygas = oslSetImageRotCenter(giygas);

  oslPlaySoundMOD(theme);

  while ((frame < 10600) && (!quit))
  {
    if (!skipframe)
    {
      oslStartDrawing();
      oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
      if (frame < 684)
      {
        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 64));
        for(a=0; a<16; a++)
        {
          oslDrawFillRect(a*32+c, 0, a*32+c+4, 272, _RGB(94, 126, 255));
          if (a<11) oslDrawFillRect(0, a*32+c, 480, a*32+c+4, _RGB(94, 126, 255));
        }

        temp_benj = oslSetImageTileSize(benj, (benj_frame%8)*32, 48, 32,48);
        temp_benj.stretchX = 96;
        temp_benj.stretchY = 144;
        if (frame < 492) benj.trans=192; else benj.trans=684-frame;
        spr_draw(temp_benj, 78, 90);
        if (frame < 428) benj.trans=255; else benj.trans=684-frame;

        oslSetImageTileSize(aipc, 0, 0, (frame<76)?frame*4:304, 34);
        spr_draw(aipc, 10, 10);
        if (c > -32) c--; else c=0;

        if (frame > 180)
        {
          /*if (frame < 428)
          {
            if (d > 255) oslSetAlpha(OSL_FX_DEFAULT, 0); else oslSetAlpha(OSL_FX_ALPHA, d);
          }
          else
          {
            oslSetAlpha(OSL_FX_ALPHA, 684-frame);
          }*/

          oslSetTextColor(_RGB(255, 255, 255));
          for (a=0; a<5; a++) oslDrawString(b, 100+a*20, texts[a]);
          amigatext("A.C. 2014", b, 132, amiga, 16, 22);
          amigatext("240-185", b, 192, amiga, 16, 22);
          if (b > 264) b -= 4;
          if (d < 255) d += 2;
        }

      }

      if ((frame >= 684) && (frame < 1368))
      {
        if ((frame==684) || (frame == 1032))
        {
          d=-12;
          trans=0;
        }

        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 64));
        for(a=0; a<16; a++)
        {
          oslDrawFillRect(a*32+c, 0, a*32+c+4, 272, _RGB(94, 126, 255));
          if (a<11) oslDrawFillRect(0, a*32+c, 480, a*32+c+4, _RGB(94, 126, 255));
        }
        if (c > -32) c--; else c=0;

        //oslSetAlpha(OSL_FX_ALPHA, trans);

        if (trans < 252) trans+=4;

        if (frame < 1032)
        {
          b=oslGetStringWidth(texts[5]);
          oslDrawString((480-b)/2, d, texts[5]);
          amigatext("240-185", 184, d+32, amiga, 16, 22);
        }
        else
        {
          b=oslGetStringWidth(texts[6]);
          oslDrawString((480-b)/2, d, texts[6]);
          amigatext("BRUNNI", 192, d+32, amiga, 16, 22);
        }

        if (d < 66) d += 2;
      }


      if ((frame >= 1368) && (frame <= 2735))
      {
        temp_gfx.stretchX = 480;
        temp_gfx.centerX = 0;
        temp_gfx.centerY = 0;

        oslStartDrawing();
        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));

       


        if (f < 21)
        {
          b=oslGetStringWidth(texts[f]);
          oslDrawString(240+(240-b)/2, 120, texts[f]);

          b=strlen(texts[f+1])*16;
          amigatext(texts[f+1], 240+(240-b)/2, 144, amiga, 16, 22);
          spr_draw(giygas, 120, 136);
        }


        temp_gfx=oslSetImageRotCenter(temp_gfx);
        temp_gfx.stretchX = d;
        temp_gfx.stretchY = (int)((float)(0.57)*d);

        if (frame == 1368)
        {
          d=0;
          e=136;
        }

        spr_draw(temp_gfx, 240, e);

        if (temp_gfx.stretchX > 1280) e += 8; else e=136;
        if (temp_gfx.stretchX < 1536) d += 8; else
        {
          f += 2;
          d=0;
        }
        oslEndDrawing();
      }

      if ((frame >= 2736) && (frame < 3422))
      {
        if (frame == 2736)
        {
          a=0;
          b=1;
          c=0;
        }

        spr_draw(sonicexe, 204, 20+16*sin(0.0625*frame));

        switch(c)
        {
        case 0:
          oslDrawString(198, 136, "SONIC.EXE by");
          amigatext("CRIMSON THE BAT", (480-strlen("CRIMSON THE BAT")*16)/2, 150, amiga, 16, 22);
          break;

        case 1:
          amigatext("SYMBIOTICFEDORAGEEK", (480-strlen("SYMBIOTICFEDORAGEEK")*16)/2, 150, amiga, 16, 22);
          break;

        case 2:
          amigatext("SHADOWNINJA976", (480-strlen("SHADOWNINJA976")*16)/2, 150, amiga, 16, 22);
          break;

        case 3:
          amigatext("HICHIGO1989", (480-strlen("HICHIGO1989")*16)/2, 150, amiga, 16, 22);
          break;

        default:
          break;
        }

        if (c>0) oslDrawString((480-strlen("SONIC.EXE DeviantArts by:")*6)/2, 136, "SONIC.EXE DeviantArts by:");

        for(i=0; i<32; i++)
        {
          spr_draw(flappy_redhill, a+i*16, 224);
        }

        a--;

        if (a == -16) a=0;

        b++;
        if ((!(b%172)) && (c<3)) c++;
      }

      if ((frame >= 3422) && (frame < 3764))
      {
        _1in24=oslSetImageRotCenter(_1in24);
        _1in24.angle = 16*sin(0.0625*frame);
        spr_draw(_1in24, 240, 136);

        oslDrawString(0, 0, "Weird movies stills taken from:");
        amigatext("STUART <ASHENS> ASHEN", 0, 30, amiga, 16, 22);
        amigatext("1IN24.TUMBLR.COM", 0, 60, amiga, 16, 22);
      }

      if ((frame >= 3764) && (frame < 4105))
      {
        if (frame == 3764)
        {
          aa=oslSetImageRotCenter(aa);
        }

        aa.angle = 16*sin(0.0625*frame);
        spr_draw(aa, 240, 136);

        oslDrawString(0, 0, "High-pitched Pookeymon Theme by");
        amigatext("DAN <LOUSY PANDAH> TOMLINSON", 0, 24, amiga, 16, 22);
        oslDrawString(0, 60, "Taken from animation 'POKEMON SHOWDOWN'");
      }

      if ((frame >= 4105) && (frame < 4447))
      {
        if (frame == 4105)
        {
          bb=oslSetImageRotCenter(bb);
        }

        bb.angle = 16*sin(0.0625*frame);
        spr_draw(bb, 240, 136);

        oslDrawString(0, 0, "Scene from 'Pikachu on Acid' taken from:");
        amigatext("HIGH5TOONS", 0, 24, amiga, 16, 22);
      }

      if ((frame >= 4447) && (frame < 5473))
      {
        if (frame == 4447)
        {
          c=0;
        }

        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 64));
        for(a=0; a<16; a++)
        {
          oslDrawFillRect(a*32+c, 0, a*32+c+4, 272, _RGB(94, 126, 255));
          if (a<11) oslDrawFillRect(0, a*32+c, 480, a*32+c+4, _RGB(94, 126, 255));
        }

        temp_benj=oslSetImageTileSize(benj, (benj_frame%8)*32, 48, 32, 48);
        temp_benj.stretchX = 96;
        temp_benj.stretchY = 144;
        temp_benj.trans=16;
        spr_draw(temp_benj, 192, 90);

        if (c > -32) c--; else c=0;

        if (frame <= 5090)
        {
        amigatext("SO, THERE WE ARE. I HAD TO", 0, 20, amiga, 16, 22);
        amigatext("TRAVEL FOR 700 KMS IN ORDER TO", 0, 42, amiga, 16, 22);
        amigatext("PRESENT MY SECOND HOMEBREW ON", 0, 64, amiga, 16, 22);
        amigatext("PSP.", 0, 86, amiga, 16, 22);
        amigatext("LITTLE DID I KNOW I HAD TO", 0, 130, amiga, 16, 22);
        amigatext("DEAL WITH A 2 PLAYER MODE ON A", 0, 152, amiga, 16, 22);
        amigatext("PORTABLE CONSOLE! LUCKILY, I", 0, 174, amiga, 16, 22);
        amigatext("WAS ADDICTED TO A MOBA GAME", 0, 196, amiga, 16, 22);
        amigatext("CALLED <SMITE>...", 0, 218, amiga, 16, 22);
        }
        else
        {
        amigatext("...AND THE IMPLEMENTATION OF", 0, 24, amiga, 16, 22);
        amigatext("A MOBA UI WAS A BREEZE. ", 0, 46, amiga, 16, 22);
        amigatext("THE MORAL OF THE STORY IS TO", 0, 90, amiga, 16, 22);
        amigatext("NEVER PREPARE YOUR PRODUCTION", 0, 112, amiga, 16, 22);
        amigatext("WAAAAAAAAAAY BEFORE THE CON", 0, 134, amiga, 16, 22);
        amigatext("BEGINS!", 0, 156, amiga, 16, 22);
        }
      }

      if ((frame >= 5473) && (frame < 8894))
      {
        if (frame == 5473)
        {
          d=480;
          i=0;
        }

        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 64));
        for(a=0; a<16; a++)
        {
          oslDrawFillRect(a*32+c, 0, a*32+c+4, 272, _RGB(94, 126, 255));
          if (a<11) oslDrawFillRect(0, a*32+c, 480, a*32+c+4, _RGB(94, 126, 255));
        }

        temp_benj = oslSetImageTileSize(benj, (benj_frame%8)*32, 48, 32, 48);
        temp_benj.stretchX = 96;
        temp_benj.stretchY = 144;
        temp_benj.trans=192;
        spr_draw(temp_benj, 192, 90);


        if (c > -32) c--; else c=0;

        oslDrawString(201, 4, "Greetings to:");
        amigatext(greeted[i], d, 136+32*sin(0.0625*frame), amiga, 16, 22);

        d=(int)(d-5.5);

        if ((d <= -288) && (i<23))
        {
          d=480;
          i++;
        }

      }

      if (frame >= 8894)
      {
        //if (frame < 10260) oslSetAlpha(OSL_FX_DEFAULT, 0); else oslSetAlpha(OSL_FX_ALPHA, trans);
        a = 54+32*sin(0.0625*frame);
        b = 296+32*cos(0.0625*frame);

        spr_draw(gml, a, 32);
        spr_draw(twt, b, 32);

        amigatext("@240185", 304+32*cos(0.0625*frame), 187, amiga, 16, 22);
        amigatext("ROUNDSOFTSTUDIO", 0, 172, amiga, 16, 22);
        amigatext("@ GMAIL.COM", 32+32*sin(0.0625*frame), 202, amiga, 16, 22);

        if (frame >= 9582)
        {
          if (frame == 9582)
          {
            c=480;
            trans=255;
          }
          oslDrawString(c, 256, "See you @ A.C. 2015 for my next project for PSP: THE FIFTH AXIS! Discover a twisted theory about time travel!");

          c -= 2;
        }

        if ((frame >= 10260) && (trans > 0)) trans--;
      }

      oslEndDrawing();
      //frame_debug(frame);
    }
    oslSwapBuffers();
    oslWaitVSync();
    frame++;
    if (!(frame%4)) benj_frame++;
  }

  oslStopSoundMOD(theme);

  oslDeleteSoundMOD(theme);
  oslDeleteImage(aipc);
  oslDeleteImage(amiga);
  oslDeleteImage(gml);
  oslDeleteImage(twt);
  oslDeleteImage(temp_gfx);
  oslDeleteImage(giygas);
  oslDeleteImage(sonicexe);
  oslDeleteImage(flappy_redhill);
  oslDeleteImage(_1in24);
  oslDeleteImage(aa);
  oslDeleteImage(bb);

  for (i=0; i<4; i++)
  {
    oslDeleteImage(iamgod[i]);
  }

  fadeout();
}

short sonicexe2(int diff)
{
  int i, rects=1, sc=0, bx=240, frame=0, bouss=0;

  short reussi=0;
  OSL_IMAGE bg, pass, buttons, sexe2, slyexe;
  OSL_IMAGE temp_benj;
  OSL_SOUND oof = oslLoadSoundFile("./sfx/sfx-0009.wav");
  OSL_SOUND passs = oslLoadSoundFile("./sfx/sfx-0053.wav");
  OSL_SOUND kte = oslLoadSoundFile("./sfx/kte.wav");
  OSL_SOUND sallyexe = oslLoadSoundFile("./sfx/sallyexe.wav");

  sexe2 = LoadImg("./gfx/sonicexe2.png");
  bg = LoadImg("./gfx/gfx-0776.png");
  pass = LoadImg("./gfx/gfx-0718.png");
  buttons = LoadImg("./gfx/arrows.png");
  slyexe = LoadImg("./gfx/sallyexe.png");



  sexe2=oslSetImageRotCenter(sexe2);
  buttons=oslSetImageRotCenter(buttons);
  pass=oslSetImageRotCenter(pass);



  oslSetSoundLoop(kte, 1);
  oslPlaySound(kte);

  while ((sc < 90*diff) && (rects < 240))
  {
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));
    bg.trans=160;
    bg.G=0;
    bg.B=0;
    spr_draw(bg, 0, 0);

    al_get_keyboard_state(&kbdstate);

    if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (bx > rects))
    {
      temp_benj=oslSetImageTileSize(benj,(abs(frame%32)/4)*32,144,32,48);
      temp_benj.stretchX = 64;
      temp_benj.stretchY = 96;
      bx -= 4;
      if (bouss==0)
      {
        bouss=1;
        sc++;
      }
    }
    else if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (bx < (448-(rects+1))))
    {
      temp_benj=oslSetImageTileSize(benj,(abs(frame%32)/4)*32,48,32,48);
      bx += 4;
      if (bouss==1)
      {
        bouss=0;
        sc++;
      }
    }
    else
    {
      temp_benj=oslSetImageTileSize(benj,0,192,32,48);
    }

    spr_draw(sexe2, 240+4*sin(0.0625*frame), 64);
    spr_draw(buttons, 240, 136);

    temp_benj.stretchX = 64;
    temp_benj.stretchY = 96;
    temp_benj.R = temp_benj.G = temp_benj.B = 0;
    spr_draw(temp_benj, bx, 176);

    oslDrawFillRect(0, 0, rects+1, 272, _RGB(0,0,0));
    oslDrawFillRect(480, 0, 480-(rects+1), 272, _RGB(0,0,0));
    oslDrawFillRect(0, 0, 480, rects+1, _RGB(0,0,0));

    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
    frame++;
    if (!(frame%(20-((diff-1)*5)))) rects++;
    if (bx < rects) bx=rects+4;
    if (bx > (448-(rects+1))) bx=443-rects;
  }


  if (sc >= 90*diff)
  {
    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    oslPlaySound(passs);
    for (i=135; i<=272; i+=24)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(pass,240,136);
      pass.stretchX = pass.stretchY = i;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    reussi=1;
  }
  else
  {
    al_set_sample_instance_position(sallyexe.instance, 16);
    oslPlaySound(sallyexe);
    while (al_get_sample_instance_position(sallyexe.instance))
    {
      oslStartDrawing();
      spr_draw(slyexe, 0, 0);
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
  }

 
  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();


  oslDeleteSound(kte);
  oslDeleteImage(sexe2);
  oslDeleteImage(bg);
  oslDeleteImage(pass);
  oslDeleteSound(oof);
  oslDeleteSound(passs);
  oslDeleteSound(sallyexe);
  oslDeleteImage(slyexe);
  return reussi;
}

short sonicexe(int diff)
{
  short reussi=0, rebound=0;
  int i, j=0, k=0, l=20, benj_frame=0, bgx=0, flx=0, bb, by, sedx=80, sedy=16;
  OSL_IMAGE iamgod, sonicexebg, sonicexefloor, sonicexe_d, buttons, pass;
  OSL_IMAGE temp_benj, temp_butt;
  OSL_SOUND drowning;
  OSL_SOUND oof;
  OSL_SOUND passs;

  char buffer[20];

  i=random(4)+1;
  bb=random(4);
  sprintf(buffer,"./gfx/iamgod%d.png",i);
  iamgod = LoadImg(buffer);
  iamgod = oslSetImageRotCenter(iamgod);
  sonicexebg = LoadImg("./gfx/gfx-0973.png");
  sonicexefloor = LoadImg("./gfx/gfx-0974.png");
  buttons = LoadImg("./gfx/buttons_pc.png");
  sonicexe_d = LoadImg("./gfx/sonicexe.png");
  pass = LoadImg("./gfx/gfx-0718.png");
  pass = oslSetImageRotCenter(pass);
  drowning = oslLoadSoundFile("./sfx/sfx-0146.wav");
  oof = oslLoadSoundFile("./sfx/sfx-0009.wav");
  passs = oslLoadSoundFile("./sfx/sfx-0053.wav");

  al_set_sample_instance_position(drowning.instance, 2);
  oslPlaySound(drowning);

  while ((al_get_sample_instance_position(drowning.instance)) && (j < 95*diff))
  {
    if (k > 96) l = 18;
    if (k > 188) l = 16;
    if (k > 262) l = 14;
    if (k > 342) l = 12;
    if (k > 390) l = 10;
    if (k > 462) l = 8;
    if (k > 516) l = 6;
    if (k > 600) l = 4;

    if (k%l < (l/2)) by=0; else by=32;

    if (!(k%10))
    {
      sedx++;
      sedy++;
    }

    oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

    spr_draw(sonicexebg, bgx, 8);
    spr_draw(sonicexefloor, flx, 248);
    spr_draw(sonicexebg, bgx+480, 8);
    spr_draw(sonicexefloor, flx+480, 248);
    spr_draw(sonicexe_d, sedx, sedy);

    temp_benj = oslSetImageTileSize(benj,(benj_frame%8)*32,48,32,48);
    temp_butt = oslSetImageTileSize(buttons,bb*32,by,32,32);
    temp_benj.stretchX = 64;
    temp_benj.stretchY = 96;
    temp_butt.stretchX = temp_butt.stretchY = 64;

    spr_draw(temp_benj, 360, 152);
    spr_draw(temp_butt, 368, 82);

    /*sprintf(buffer,"%d %d", l, (int)oslGetRamStatus().maxAvailable);
    oslDrawString(0,8,buffer);*/

    oslEndDrawing();
    oslSwapBuffers();

    al_get_keyboard_state(&kbdstate);

    if ((!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) &&
      (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE)) &&
      (!al_key_down(&kbdstate, ALLEGRO_KEY_C)) &&
      (!al_key_down(&kbdstate, ALLEGRO_KEY_X))) rebound=0;

    if ((!rebound) && ((bb==0) && (al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL))) || ((bb==1) && (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) || ((bb==2) && (al_key_down(&kbdstate, ALLEGRO_KEY_C))) || ((bb==3) && (al_key_down(&kbdstate, ALLEGRO_KEY_X))))
    {
      j++;
      rebound=1;
    }

    if (!(k%4)) benj_frame++;
    bgx -= 4;
    flx -= 8;
    if (bgx == -480) bgx=0;
    if (flx == -480) flx=0;
    k++;

    oslWaitVSync();
  }

  if (j >= 95*diff)
  {
    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }

    oslPlaySound(passs);
    for (i=135; i<=272; i+=24)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(pass,240,136);
      pass.stretchX = pass.stretchY = i;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    reussi=1;
  }
  else
  {

    k=255;
    for (i=sedx; i<360; i+=5)
    {
      oslStartDrawing();
      bgx--;
      flx -= 2;
      spr_draw(sonicexebg, bgx, 8);
      spr_draw(sonicexefloor, flx, 248);
      spr_draw(sonicexebg, bgx+480, 8);
      spr_draw(sonicexefloor, flx+480, 248);
      spr_draw(temp_benj, 360, 152);
      sonicexe_d.trans = k;
      spr_draw(sonicexe_d, i, sedy);
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      k -= 8;
      if (k<0) k=0;
      if (sedy < 168) sedy++;
    }

    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }

    oslPlaySound(oof);
    oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    spr_draw(iamgod,240,136);
    oslEndDrawing();
    oslSwapBuffers();
    fadeout();
  }

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  oslDeleteImage(iamgod);
  oslDeleteImage(sonicexebg);
  oslDeleteImage(sonicexefloor);
  oslDeleteImage(sonicexe_d);
  oslDeleteImage(buttons);
  oslDeleteImage(pass);
  oslDeleteSound(oof);
  oslDeleteSound(drowning);
  oslDeleteSound(passs);

  return reussi;
}

short mincer(int diff)
{
  short reussi=0, floor=-1, score=0, rebound=0;
  int i, skipframe=0, by=-36, bgy=0, my=404, minced=0, bb=random(4);
  OSL_IMAGE mincer[3];
  OSL_IMAGE benj_mincer;
  OSL_IMAGE buttons;
  OSL_IMAGE pass;
  OSL_IMAGE temp_mincer, temp_butt, temp_m;

  OSL_SOUND passs;
  OSL_SOUND mincing;
  OSL_SOUND rightwrong[2];

  buttons = LoadImg("./gfx/buttons_pc.png");
  pass = LoadImg("./gfx/gfx-0718.png");
  mincer[0] = LoadImg("./gfx/mincer_bg.png");
  mincer[1] = LoadImg("./gfx/mincer.png");
  mincer[2] = LoadImg("./gfx/mincer_fg.png");
  passs = oslLoadSoundFile("./sfx/sfx-0053.wav");
  mincing = oslLoadSoundFile("./sfx/sfx-0081.wav");

  rightwrong[0] = oslLoadSoundFile("./sfx/right.wav");
  rightwrong[1] = oslLoadSoundFile("./sfx/wrong.wav");

  benj_mincer = LoadImg("./gfx/benj_mincer.png");

  pass=oslSetImageRotCenter(pass);

  temp_mincer=oslSetImageTileSize(benj_mincer,0,0,29,34);
  temp_mincer.stretchX = temp_mincer.stretchY = 58;

  while ((floor <= (-2*diff+12)) && (score < (2*diff+3)))
  {
    if (!skipframe)
    {
      oslStartDrawing();
      temp_butt=oslSetImageTileSize(buttons,bb*32,0,32,32);
      temp_butt.stretchX = temp_butt.stretchY = 64;

      if (floor == -1)
      {
        oslDrawFillRect(0,0,480,272, _RGB(0,0,32));
        spr_draw(mincer[0], 80, 0);
        spr_draw(mincer[0], 80, 240);
        spr_draw(temp_mincer, 215, by);
        by += 4;

        if (by==136) floor=0;
      }
      else if (floor >= 0)
      {
        oslDrawFillRect(0,0,480,272, _RGB(0,0,32));
        spr_draw(mincer[0], 80, bgy);
        spr_draw(mincer[0], 80, bgy+240);


        if (floor >= (-2*diff+9))
        {
          spr_draw(mincer[1], 182, my);
        }

        spr_draw(mincer[0], 80, bgy+480);


        if (my < -108)
        {
          temp_mincer=oslSetImageTileSize(benj_mincer,29,0,29,34);
          temp_mincer.stretchX = temp_mincer.stretchY = 58;
        }

        spr_draw(temp_mincer, 215, 136);

        if (bgy<=-240)
          {
            floor++;
            bgy=0;
          }

        if ((my <= 48) && (my >= -180))
        {
          if ((!minced) && (my==48))
            {
              if (!(al_get_sample_instance_position(mincing.instance))) oslPlaySound(mincing);
              score=0;
            }

          switch(minced)
          {
            case 0:
            case 2:
            {
              bgy -= 2;
              if (floor >= (-2*diff+9))
                {
                  temp_m=oslSetImageTileSize(mincer[0],0,0,101,240);
                  spr_draw(temp_m, 80, my-164);
                  temp_m=oslSetImageTileSize(mincer[0],226,0,94,240);
                  spr_draw(temp_m, 306, my-164);
                  spr_draw(mincer[2], 182, my+158);
                  temp_m=oslSetImageTileSize(mincer[0],0,0,320,240);
                  /*oslDrawFillRect(0,0,480,my-163, _RGB(0,0,32));
                 
                  spr_draw(temp_m, 80, my-164);*/

                  oslDrawFillRect(400,0,480,272, _RGB(0,0,32));
                  my -= 2;
                }

              if ((my == -96) && (!minced)) minced=1;
              break;
            }

            case 1:
            {
              bgy += 2;
              if (floor >= (-2*diff+9))
                {
                  temp_m=oslSetImageTileSize(mincer[0],0,0,101,240);
                  spr_draw(temp_m, 80, my-164);
                  oslSetImageTileSize(mincer[0],226,0,94,240);
                  spr_draw(temp_m, 306, my-164);
                  spr_draw(mincer[2], 182, my+158);
                  my += 2;
                  temp_m=oslSetImageTileSize(mincer[0],0,0,320,240);
                  oslDrawFillRect(400,0,480,272, _RGB(0,0,32));
                  /*oslDrawFillRect(0,0,480,my-163, _RGB(0,0,32));

                  spr_draw(temp_m, 80, my-164);*/

                }
              if (my == -12) minced=2;
              break;
            }
          }

        }
        else
        {
          bgy -= 4;
          if (floor >= (-2*diff+9))
          {
            spr_draw(mincer[2], 182, my+158);
            my -= 4;
          }

          al_get_keyboard_state(&kbdstate);

          if ((!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) &&
            (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE)) &&
            (!al_key_down(&kbdstate, ALLEGRO_KEY_C)) &&
            (!al_key_down(&kbdstate, ALLEGRO_KEY_X))) rebound=0;

          if (my > 48)
          {
            spr_draw(temp_butt, 326, 136);

            if (!rebound)
            {


            if (((bb==0) && (al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL))) || ((bb==1) && (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) || ((bb==2) && (al_key_down(&kbdstate, ALLEGRO_KEY_C))) || ((bb==3) && (al_key_down(&kbdstate, ALLEGRO_KEY_X))))
              {
                score++;
                bb=random(4);
                oslStopSound(rightwrong[0]);
                oslStopSound(rightwrong[1]);
                oslPlaySound(rightwrong[0]);
                rebound=1;
              }


            else if (((bb!=0) && (al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL))) || ((bb!=1) && (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) || ((bb!=2) && (al_key_down(&kbdstate, ALLEGRO_KEY_C))) || ((bb!=3) && (al_key_down(&kbdstate, ALLEGRO_KEY_X))))
              {
                bb=random(4);
                oslStopSound(rightwrong[0]);
                oslStopSound(rightwrong[1]);
               
                oslPlaySound(rightwrong[1]);
                score--;
                rebound=1;
              }
            }
          }
        }
      }

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
  }

  if (score == (2*diff+3))
  {
    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    oslPlaySound(passs);
    for (i=135; i<=272; i+=24)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(pass,240,136);
      pass.stretchX = pass.stretchY = i;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    reussi=1;
  }

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  for (i=0; i<3; i++) oslDeleteImage(mincer[i]);
  oslDeleteImage(benj_mincer);
  oslDeleteSound(mincing);
  oslDeleteSound(rightwrong[0]);
  oslDeleteSound(rightwrong[1]);
  oslDeleteImage(buttons);
  oslDeleteImage(pass);
  oslDeleteSound(passs);



  return reussi;
}

short shoot_teevees(int diff, int *health, int round)
{
  short reussi=1, enemyx=random(2), enemyy=random(3), fired=13, hasdied=0, rebound=0;
  int i, j, u, frame=0, skipframe=0, hgx=208;

  int teevees[3][4]; //angle-ecran-y-fallspeed

  OSL_SOUND passs = oslLoadSoundFile("./sfx/sfx-0053.wav");
  OSL_SOUND dead = oslLoadSoundFile("./sfx/sfx-0025.wav");
  OSL_SOUND pew = oslLoadSoundFile("./sfx/sfx-0100.wav");
  OSL_SOUND oof = oslLoadSoundFile("./sfx/sfx-0101.wav");
  OSL_SOUND ambient = oslLoadSoundFile("./sfx/sfx-0017.wav");
  OSL_IMAGE pass = LoadImg("./gfx/gfx-0718.png");
  OSL_IMAGE bg = LoadImg("./gfx/gfx-0776.png");
  OSL_IMAGE teevee = LoadImg("./gfx/teevee.png");
  OSL_IMAGE teevee_targets = LoadImg("./gfx/teevee_targets.png");
  OSL_IMAGE numberz = LoadImg("./gfx/numberz.png");
  OSL_IMAGE handgun = LoadImg("./gfx/handgun.png");
  OSL_IMAGE explode = LoadImg("./gfx/explode.png");

  OSL_IMAGE temp_h, temp, temp_tv, temp_no;
 
  temp = oslCreateImage(128, 96);

  pass=oslSetImageRotCenter(pass);
  temp=oslSetImageRotCenter(temp);
 
  oslSetSoundLoop(ambient, 1);

  oslDrawFillRect(0,0, 480,272, _RGB(0,0,0));

  for (i=0; i<3; i++)
  {
      teevees[i][0]=random(180)-90;
      teevees[i][1]=random(2);
      teevees[i][2]=-1*random(128)-128;
      teevees[i][3]=diff+1+random(3);
  }

  temp_h=oslSetImageTileSize(handgun, 0, 0, 64, 64);
  oslPlaySound(ambient);

  while (frame < 900*diff)
  {
    if (!skipframe)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

      spr_draw(bg, 0, 0);

      oslSetTextColor(_RGB(255, 255, 255));
      oslDrawString(160, 2, "Shoot the TVs with that screen:");
      temp_tv=oslSetImageTileSize(teevee_targets, 99*enemyx, 71*enemyy, 99, 71);
     
      temp_tv.stretchX = 50;
      temp_tv.stretchY = 35;
      spr_draw(temp_tv, 215, 14);

      teevee_targets.stretchX = 99;
      teevee_targets.stretchY = 71;


      explode.stretchX = 128;
      explode.stretchY = 96;


      temp_no=oslSetImageTileSize(numberz,160,0,16,16);
      spr_draw(temp_no, 2, 2);


      for (i=0; i<3; i++)
      {
          al_set_target_bitmap(temp.asset);
          temp_tv=oslSetImageTileSize(teevee_targets, teevees[i][1]*99, 71*enemyy, 99, 71);
          spr_draw(teevee, 0, 0);
          spr_draw(temp_tv, 14, 10);

          al_set_target_bitmap(psp_screen);
          temp.angle = teevees[i][0];

          spr_draw(temp, 160*i+80, teevees[i][2]);
          teevees[i][2] += teevees[i][3];

          if (teevees[i][2] > (336+((int)128*(sin(teevee.stretchX)*3.14/180))))
          {
            if (teevees[i][1]==enemyx)
              {
                *health -= 12*diff;
                if ((*health <= 0) && (!hasdied))
                {
                  oslPlaySound(dead);
                  hasdied=1;
                  frame=900*diff-131;
                }
              }
            teevees[i][0]=random(180)-90;
            teevees[i][1]=random(2);
            teevees[i][2]=-1*random(128)-128;
            teevees[i][3]=diff+1+random(3);
          }
      }

      if (*health > 0) spr_draw(temp_h, hgx, 211+((int)3*sin(0.0625*frame))); else spr_draw(temp_h, hgx, 211+((int)3*sin(frame)));

      al_get_keyboard_state(&kbdstate);

      if  ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (hgx > 8) && (*health > 0)) hgx-=8;
      if  ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (hgx < 408) && (*health > 0)) hgx+=8;

      if (fired < 13)
      {
        fired--;

        if ((teevees[hgx/160][1]==enemyx)  && (teevees[hgx/160][2] > 140))
        {
          spr_draw(explode, 160*i+80, teevees[hgx/160][2]);
        }

        if (fired > 9)
        {
          temp_h=oslSetImageTileSize(handgun, 64, 0, 64, 64);
          spr_draw(temp_h, hgx, 211+((int)3*sin(0.0625*frame)));
        }
        else
        {
          temp_h=oslSetImageTileSize(handgun, 0, 0, 64, 64);

            if (fired==8)
            {
              if ((teevees[hgx/160][1]==enemyx)  && (teevees[hgx/160][2] > 140))
              {
                teevees[hgx/160][0]=random(180)-90;
                teevees[hgx/160][1]=random(2);
                teevees[hgx/160][2]=-1*random(128)-128;
                teevees[hgx/160][3]=diff+1+random(3);
                *health += 2*(4-diff);
                if (*health >= 100) *health=100;
              }
            }
        }

      }

      if (!fired)
      {
        fired=13;
        temp_h=oslSetImageTileSize(handgun, 0, 0, 64, 64);

      }

      if ((!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) rebound=0;

      if (((al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) || (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) && (fired==13) && (*health > 0) && (!rebound))
      {
        fired--;
        oslStopSound(pew);
        oslPlaySound(pew);
        rebound=1;

        if ((teevees[hgx/160][1]!=enemyx) && (teevees[hgx/160][2] > 140))
        {
          *health -= 6*diff;
          oslPlaySound(oof);
        }
      }

      i=random(15);
      u=18;

      if (*health <= 0)
      {
        *health=0;
      }

      if (*health < 25) j=16; else j=0;

        if (*health / 100)
        {
          temp_no=oslSetImageTileSize(numberz,((round==2)?((i<12)?16:random(144)):16),0,16,16);
          spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
          u += 16;
        }

        if (*health > 9)
        {
          if (round==2)
            {
              if (i<12)
                {
                  temp_no=oslSetImageTileSize(numberz,((*health%100)/10)*16,j,16,16);
                }
              else
                {
                  temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
                }
            }
          else temp_no=oslSetImageTileSize(numberz,((*health%100)/10)*16,j,16,16);
        spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
        u += 16;
        }

        if (round==2)
          {
            if (i<12)
              {
                temp_no=oslSetImageTileSize(numberz,(*health%10)*16,j,16,16);
              }
            else
              {
                temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
              }
          }
        else temp_no=oslSetImageTileSize(numberz,(*health%10)*16,j,16,16);
        spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));

      frame++;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
  }


    if (*health > 0)
    {
      oslStopSound(ambient);
      for (i=0; i<4; i++)
      {
        oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
      }
      oslPlaySound(passs);
      for (i=135; i<=272; i+=24)
      {
        oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
        spr_draw(pass,240,136);
        pass.stretchX = pass.stretchY = i;
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
      }
    }
    else reussi=0;

    oslStartDrawing();
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();

    oslDeleteImage(bg);
    oslDeleteImage(pass);
    oslDeleteImage(teevee);
    oslDeleteImage(teevee_targets);
    oslDeleteImage(handgun);
    oslDeleteImage(temp);
    oslDeleteImage(numberz);
    oslDeleteImage(explode);
    oslDeleteSound(passs);
    oslDeleteSound(dead);
    oslDeleteSound(pew);
    oslDeleteSound(ambient);
    oslDeleteSound(oof);

  return reussi;
}

short flappy_cacodemon(int diff)
{
  short reussi=1, bunk=0, bgx=0, ghgx=0, dead=0, cacoy=32, pressed=26, mess=0, rebound=0;
  int i, frame=0, skipframe=0, growl=random(360)+35, postree=0, gu;

  int walls[7]={0,0,0,0,0,0,random(100)};

  OSL_IMAGE pass = LoadImg("./gfx/gfx-0718.png");
  OSL_IMAGE cacod = LoadImg("./gfx/cacodemon.png");
  OSL_IMAGE pot = LoadImg("./gfx/pot.png");
  OSL_IMAGE pot_edge = LoadImg("./gfx/pot_edge.png");
  OSL_IMAGE flappy_bg = LoadImg("./gfx/flappy_bg.png");
  OSL_IMAGE flappy_redhill = LoadImg("./gfx/flappy_redhill.png");
  OSL_SOUND passs = oslLoadSoundFile("./sfx/sfx-0053.wav");
  OSL_SOUND ambient = oslLoadSoundFile("./sfx/sfx-0017.wav");
  OSL_SOUND caco_sfx[2];
  OSL_IMAGE temp_cacod;

  caco_sfx[0]= oslLoadSoundFile("./sfx/cacogrowl.wav");
  caco_sfx[1]= oslLoadSoundFile("./sfx/cacodie.wav");

  temp_cacod=oslSetImageTileSize(cacod, 0, 0, 64, 64);
  temp_cacod=oslSetImageRotCenter(temp_cacod);
  temp_cacod.y=32;
  pass=oslSetImageRotCenter(pass);
 
  oslSetSoundLoop(ambient, 1);
  oslPlaySound(ambient);

  oslSetTextColor(_RGB(0,0,0));

  while ((frame < 300*diff+300) && (dead < 5))
  {
    if (!(frame%growl))
    {
      growl=random(360)+35;
      oslPlaySound(caco_sfx[0]);
    }
    if (!skipframe)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

        for (i=0; i<5; i++) spr_draw(flappy_bg, bgx+i*138, 128);

      if (!bunk)
      {
        for (i=6; i>=0; i--)
        {
          if (walls[i])
          {
            pot.stretchY = walls[i];
            spr_draw(pot, i*80-(postree%80), 230-walls[i]);
            spr_draw(pot_edge, i*80-(postree%80), 230-walls[i]);

            pot.stretchY = 94-walls[i];
            spr_draw(pot, i*80-(postree%80), 0);
            spr_draw(pot_edge, i*80-(postree%80), 94-walls[i]);

          }
        }

      }

      if ((!bunk) && (!dead))
      {
        if ((postree%80) == (80-((diff==1)?1:((diff==2)?2:4))))
        {
          for (i=0; i<7; i++)
          {
            if (i < 6)
            {
              if (walls[i+1]) walls[i]=walls[i+1];
            }
            else
            {
              walls[6]=walls[5]+(random(2)?1:-1)*random(32);
              if (walls[6] < 32) walls[6]=32;
              if (walls[6] > 110) walls[6]=110;
            }
          }
        }
      }

      for(i=0; i<32; i++)
      {
        spr_draw(flappy_redhill, ghgx+i*16, 224);
      }

      if (!bunk)
      {
        if (!(frame%2))
        {
          temp_cacod.angle = 8*sin(0.15*frame);
        }
        spr_draw(temp_cacod, 40, temp_cacod.y);
      }
      else
      {
        if ((!(frame%9))) dead++;
        gu=temp_cacod.y;
        temp_cacod=oslSetImageTileSize(temp_cacod, 64*dead, 0, 64, 64);
        temp_cacod=oslSetImageRotCenter(temp_cacod);
        temp_cacod.y=gu;
        spr_draw(temp_cacod, 40, temp_cacod.y);
        if (dead==1)
        {
          oslPlaySound(caco_sfx[1]);
        }
      }

      if (!mess) oslDrawString(200, 18, "MAKE HIM FLY!");

      al_get_keyboard_state(&kbdstate);

      if ((!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) rebound=0;

      if (((al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) || (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) && (!rebound) && (!dead))
      {
        pressed=0;
        if (!mess) mess=1;
        rebound=1;
      }

        pressed++;
        if ((temp_cacod.y > 35) && (pressed < (-4*diff+28))) temp_cacod.y -= diff;
        if ((!dead) && (pressed > (-4*diff+28))) temp_cacod.y += diff;


      if (!bunk)
      {
        if (!(frame%2)) bgx -= diff+1;
        ghgx -= (diff+1);

        if (bgx <= -138) bgx=0;
        if (ghgx <= -16) ghgx=0;

      }

      if ((temp_cacod.y > 192) && (!bunk))
      {
        bunk=1;
        frame=0;
      }

      if ((walls[1]) && ((temp_cacod.y)-24 <= 102-walls[1]) && (!bunk) && (postree%80 < 40))
      {
        bunk=1;
        frame=0;
      }

      if ((walls[1]) && ((temp_cacod.y)+24 >= 230-walls[1]) && (!bunk) && (postree%80 < 40))
      {
        bunk=1;
        frame=0;
      }

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    frame++;

    if (!bunk)
    {
      postree += ((diff==1)?1:((diff==2)?2:4));
    }

  }

  while (al_get_sample_instance_position(caco_sfx[1].instance))
  {
    al_rest(0.016);
    oslWaitVSync();
  };

  if (!bunk)
  {
    oslStopSound(ambient);
      for (i=0; i<4; i++)
      {
        oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
      }
    oslPlaySound(passs);
    for (i=135; i<=272; i+=24)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(pass,240,136);
      pass.stretchX = pass.stretchY = i;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
  }
  else reussi=0;

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  oslDeleteImage(cacod);
  oslDeleteImage(flappy_bg);
  oslDeleteImage(flappy_redhill);
  oslDeleteImage(pot);
  oslDeleteImage(pot_edge);
  oslDeleteSound(ambient);
  oslDeleteImage(pass);
  oslDeleteSound(passs);
  oslDeleteSound(caco_sfx[0]);
  oslDeleteSound(caco_sfx[1]);
  return reussi;
}

short love_boat(int diff)
{
  short reussi=1, alive=1, bx=240, boat_x=random(320)+80, sens;
  int i, frame, a=0;

  OSL_IMAGE boat = LoadImg("./gfx/boat.png");
  OSL_IMAGE boat_blood = LoadImg("./gfx/boat_blood.png");
  OSL_SOUND boat_sfx = oslLoadSoundFile("./sfx/boat.wav");
  OSL_SOUND sflartch = oslLoadSoundFile("./sfx/beng-0037.wav");
  OSL_IMAGE pass = LoadImg("./gfx/gfx-0718.png");
  OSL_IMAGE temp_benj;
  OSL_SOUND passs = oslLoadSoundFile("./sfx/sfx-0053.wav");
  OSL_SOUND ambient = oslLoadSoundFile("./sfx/sfx-0061.wav");
  pass=oslSetImageRotCenter(pass);
  boat=oslSetImageRotCenter(boat);
  boat_blood=oslSetImageRotCenter(boat_blood);

  oslSetSoundLoop(ambient, 1);
  oslPlaySound(ambient);

  frame = -1*random(540)-240;

  if (diff == 3)
  {
    if (boat_x%4)
    {
      boat_x += 4-(boat_x%4);
    }
  }

  while (frame < 255)
  {
    if (!frame) oslPlaySound(boat_sfx);

    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(16,0,0));

    if (diff==3)
    {
      if (frame == 92)
      {
        a = bx+32;
      }
      else if (frame > 92)
      {
        if (boat_x > a) boat_x -= 4;
        if (boat_x < a) boat_x += 4;
      }
    }
    else if (diff==2)
    {
      sens=random(2);
      if ((sens) && (boat_x < (400-(boat.stretchX)/2))) boat_x += 4;
      if ((!sens) && (boat_x > (boat.stretchX)/2)) boat_x -=4;
    }

    if (frame >= 0)
    {
      boat.trans=frame;
      boat.stretchX = frame*2;
      boat.stretchY = (int)((float)1.5*(boat.stretchX));
      spr_draw(boat, boat_x, 96);
    }

    al_get_keyboard_state(&kbdstate);

    if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (bx > 0))
    {
      temp_benj = oslSetImageTileSize(benj,(abs(frame%32)/4)*32,144,32,48);
      bx -= 4;
    }
    else if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (bx < 448))
    {
      temp_benj = oslSetImageTileSize(benj,(abs(frame%32)/4)*32,48,32,48);
      bx += 4;
    }
    else
    {
      temp_benj = oslSetImageTileSize(benj,0,192,32,48);
    }

    temp_benj.stretchX = 64;
    temp_benj.stretchY = 96;

    if (alive) spr_draw(temp_benj, bx, 176);

    if (((boat.stretchX) >= 200))
    {
      if ((alive) && ((bx+32) >= (boat_x-((boat.stretchX)/4))) && ((bx+32) <= (boat_x+((boat.stretchX)/4))))
      {
        alive=0;
        oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
        oslPlaySound(sflartch);
      }
    }

    if (!alive)
    {
      spr_draw(boat_blood, 240, 136);
    }

    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
    frame++;
  }

  if (alive)
  {
    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    oslPlaySound(passs);
    for (i=135; i<=272; i+=24)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(pass,240,136);
      pass.stretchX = pass.stretchY = i;
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
  }
  else reussi=0;

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  oslDeleteImage(boat);
  oslDeleteImage(boat_blood);
  oslDeleteSound(boat_sfx);
  oslDeleteImage(pass);
  oslDeleteSound(passs);
  oslDeleteSound(sflartch);
  oslDeleteSound(ambient);
  return reussi;
}

void draw_ball(struct ball ball_ent, OSL_IMAGE ball_gfx, OSL_IMAGE ball_shad)
{
  float yr = pow((ball_ent.y2d - 160) / HAUT_FIELD, 1.4f) * HAUT_FIELD + 160;
  float x_pr_centre = ball_ent.x2d - 240;
  float x_percent = x_pr_centre / 240;
  float y_percent = (272-yr)/HAUT_FIELD;
  float x_mult = 240 - ESPAC_HORIZ*y_percent;
  float xr = x_percent * x_mult + 240;

  ball_gfx.stretchX = ball_gfx.stretchY = 8*(1-0.266f*y_percent);
  ball_shad.stretchX = ball_shad.stretchY = 8*(1-0.266f*y_percent);

  spr_draw(ball_gfx, ball_ent.x2d, ball_ent.y2d-ball_ent.z3d);
  spr_draw(ball_shad, ball_ent.x2d, ball_ent.y2d);
}

int shoop_da_whoop(int health, int round, int diff)
{
  int i=480, f=0, ta=0, j, u, k=0, sc=0, a=0, b=0;
  short sens=0, by=0;

  OSL_IMAGE starsky = LoadImg("./gfx/starsky.png");
  OSL_SOUND firin = oslLoadSoundFile("./sfx/sdw.wav");

  OSL_SOUND sdwh = oslLoadSoundFile("./sfx/sdw2.wav");
  OSL_SOUND expl_sound = oslLoadSoundFile("./sfx/sfx-0018.wav");
  OSL_IMAGE buttons = LoadImg("./gfx/arrows.png");
  OSL_IMAGE sdw = LoadImg("./gfx/sdw.png");
  OSL_IMAGE sdw_sh = LoadImg("./gfx/sdw_sh.png");
  OSL_IMAGE planet = LoadImg("./gfx/planet.png");

  OSL_IMAGE numberz = LoadImg("./gfx/numberz.png");
  OSL_IMAGE explode = LoadImg("./gfx/explode.png");

  OSL_IMAGE temp = oslCreateImage(480, 272);
  OSL_IMAGE shoot = oslCreateImage(160, 60);

  OSL_IMAGE temp_no;

  temp=oslSetImageRotCenter(temp);
  sdw=oslSetImageRotCenter(sdw);
  sdw_sh=oslSetImageRotCenter(sdw_sh);
  planet=oslSetImageRotCenter(planet);
  buttons=oslSetImageRotCenter(buttons);

  oslPlaySound(firin);
  starsky=oslSetImageRotCenter(starsky);

  oslStartDrawing();
  oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
  spr_draw(starsky, 240, 136);
  oslEndDrawing();
  oslSwapBuffers();

  for (i=480; i>=128; i-=4)
  {
    planet.stretchX = planet.stretchY = i;
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    spr_draw(starsky, 240, 136);
    spr_draw(planet, 240, 136);
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
  }

  for (i=480; i>=360; i-=4)
  {
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    spr_draw(starsky, 240, 136);
    spr_draw(planet, 240, 136);
    spr_draw(sdw, i, 136);
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
  }



  for (k=0; k<(diff+1); k++)
  {
    f=0;

    sc=0;

    if (k)
    {
      al_destroy_bitmap(shoot.asset);
      shoot.asset = al_create_bitmap(160, 60);

      al_destroy_bitmap(temp.asset);
      temp.asset = al_create_bitmap(480, 272);
    }

    while ((f < 270) && (health > 0))
    {
      if ((f%30) >= 15) by=32; else by=0;

      oslStartDrawing();
      spr_draw(sdw_sh, 240, 136);

      if (f < 120)
      {
        if (!(f%20)) sens=random(2);

        al_set_target_bitmap(temp.asset);

        spr_draw(sdw, 360, 136);

        ta += (sens)?6:-6;

        if (ta < 0) ta += 360;
        if (ta > 359) ta = ta%360;

        temp.angle = ta;

        al_get_keyboard_state(&kbdstate);


        if (al_key_down(&kbdstate, ALLEGRO_KEY_LEFT))
        {
          sdw_sh.angle -= 12;
        }

        if (al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT))
        {
          sdw_sh.angle += 12;
        }

        if ((sdw_sh.angle) < 0)
        {
          (sdw_sh.angle) += 360;
        }

        if ((sdw_sh.angle) > 359)
        {
          sdw_sh.angle = (float)((int)((sdw_sh.angle))%360);
        }


        /*if (((bb==0) && (osl_keys . pressed.circle)) || ((bb==1) && (osl_keys . pressed.cross)) || ((bb==2) && (osl_keys . pressed.square)) || ((bb==3) && (osl_keys . pressed.triangle)))
        {
          sc++;
        }*/

      }

      if (((sdw_sh.angle - 60) < (temp.angle)) && ((sdw_sh.angle + 60) > (temp.angle)) && (f==119)) sc = 2*diff+2;

      if (((sdw_sh.angle - 60) < ((temp.angle)+360)) && ((sdw_sh.angle + 60) > ((temp.angle)+360)) && (f==119)) sc = 2*diff+2;


          if ((f >= 120) && (f <= 150))
          {
            temp.angle = 0;
            shoot.angle = 0;

            al_set_target_bitmap(shoot.asset);
            oslDrawFillRect(160, 0, (-16/3)*f+800, 60, _RGB(0,0,255));
            oslDrawFillRect(160, 10, (-16/3)*f+800, 50, _RGB(0,128,255));
            oslDrawFillRect(160, 20, (-16/3)*f+800, 40, _RGB(0,255,255));
            oslDrawFillRect(160, 23, (-16/3)*f+800, 37, _RGB(128,255,255));
            oslDrawFillRect(160, 26, (-16/3)*f+800, 33, _RGB(255,255,255));

            al_set_target_bitmap(temp.asset);
            spr_draw(shoot, 208, 116);

            temp.angle = ta;
          }

        if (sc == 2*diff+2)
        {
          if (f >= 150)
          {
          al_set_target_bitmap(temp.asset);
          spr_draw(sdw, 360, 136);
          if (f == 150) oslPlaySound(sdwh);

            if (!(f%15))
            {
              oslStopSound(expl_sound);
              oslPlaySound(expl_sound);
              a=330+random(35);
              b=72+random(64);
            }

            if ((f%10) < 5)
            {
              explode.stretchX = 64;
              explode.stretchY = 96;
              spr_draw(explode, a, b);
            }
            else
            {
              explode.stretchX = 32;
              explode.stretchY = 48;
              spr_draw(explode, a+16, b+24);
            }
          }
          if (f > 180) f=333;
        }

      al_set_target_bitmap(psp_screen);
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(starsky, 240, 136);
      spr_draw(temp, 240, 136);
      spr_draw(planet, ((f > 150) && (sc < 2*diff+1))?(238+random(5)):240, ((f > 150) && (sc < 2*diff+1))?(134+random(5)):136);
      spr_draw(buttons, 240, 136);
      spr_draw(sdw_sh, 240, 136);

      //if (f < 120) spr_draw(buttons, 208, 118);
      if ((f >= 180) && (f <= 240) && (sc < 2*diff+1))
      {
        if (f > 180)
        {
          if (!(f%3)) health--;
        }

        if (!(f%15))
        {
          oslPlaySound(expl_sound);
          a=180+random(128);
          b=68+random(128);
        }

        if ((f%10) < 5)
        {
          explode.stretchX = 64;
          explode.stretchY = 96;
          spr_draw(explode, a, b);
        }
        else
        {
          explode.stretchX = 32;
          explode.stretchY = 48;
          spr_draw(explode, a+16, b+24);
        }

      }

      i=random(15);
      u=18;

      if (health <= 0)
      {
        health=0;
      }

      temp_no=oslSetImageTileSize(numberz,160,0,16,16);
      spr_draw(temp_no, 2, 2);

      if (health < 25) j=16; else j=0;

        if (health / 100)
        {
          temp_no=oslSetImageTileSize(numberz,((round==2)?((i<12)?16:random(144)):16),0,16,16);
          spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
          u += 16;
        }

        if (health > 9)
        {
          if (round==2)
            {
              if (i<12)
                {
                  temp_no=oslSetImageTileSize(numberz,((health%100)/10)*16,j,16,16);
                }
              else
                {
                  temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
                }
            }
          else temp_no=oslSetImageTileSize(numberz,((health%100)/10)*16,j,16,16);
        spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
        u += 16;
        }

        if (round==2)
          {
            if (i<12)
              {
                temp_no=oslSetImageTileSize(numberz,(health%10)*16,j,16,16);
              }
            else
              {
                temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
              }
          }
        else temp_no=oslSetImageTileSize(numberz,(health%10)*16,j,16,16);
        spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));


      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      f++;
    }
  }

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  oslDeleteSound(firin);
  oslDeleteSound(sdwh);
  oslDeleteSound(expl_sound);
  oslDeleteImage(buttons);
  oslDeleteImage(sdw);
  oslDeleteImage(planet);
  oslDeleteImage(starsky);
  oslDeleteImage(temp);
  oslDeleteImage(shoot);
  oslDeleteImage(explode);
  oslDeleteImage(sdw_sh);
  return health;
}

void sad()
{
  int f=0;
  OSL_IMAGE gr = LoadImg("./gfx/happyface.png");
  OSL_SOUND ss = oslLoadSoundFile("./sfx/sfx-0027.wav");
  OSL_SOUND dummy = oslLoadSoundFile("./sfx/dummy.wav");

  gr=oslSetImageRotCenter(gr);
  oslSetSoundLoop(ss, 1);

  for (f=0; f<8; f++) oslPlaySound(dummy);
  oslPlaySound(ss);

  f=0;

  while(f < 120)
  {
    oslStartDrawing();
    oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
    gr.stretchX = random(150)+400;
    gr.stretchY =(int)((float) 0.75*(gr.stretchX));
    spr_draw(gr, 240, 136);
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
    f++;
  }

  oslStartDrawing();
  oslEndDrawing();
  oslSwapBuffers();
  oslWaitVSync();

  oslDeleteImage(gr);
  oslDeleteSound(ss);
  oslDeleteSound(dummy);
}

int game(int round, int diff, int nbp)
{
  int i, j, a=0, stun=0, u, global_fr=0, fs=0, quit=0, px=239, py=180, giyg_flag=0, mort=0, health, pbouss=0, benj_frame=0, tvnoise_ev=0, att_ch_timer=80, skipframe=0, gbg=0;
  int cursor2p=0, mgcd=0, ko_frame=0, mgsy=0, ultlvl=0, ultrectshine=4, frappe=-1, frappe_ult=-1, shldlvl=60, racket_devnull=0, stary=0, suppo=0, suppox, suppoy, whineface=0, kx=0, ky=0;

  short lightsoff=0, paused=0, bulbfell=0, bulbfs=0, shielded=0, darkness=0, chair=0, attf=0, putin=0, ulted=0, rckchscr=0, nbult=0, returned=0, rebound=0;
  short swinging=0, ulting=0;

  int giyg_bg_angles[3] = {0, 0, 0};
  float court_zoom=1, reddv=0;
  char buffer[20];

  int pie_attacks[8][5]; //numeroattaque-duree(frames)-x-y?
  int att_cooldowns[15];
  int stars_ult[5];

  int meteors[3][3];

  struct pie_entity pie_ent = initpie();
  struct ball ball_ent = initball();

  ALLEGRO_EVENT ev;

  OSL_IMAGE pie, tvnoise[20], numberz, ulting_gfx;
  OSL_SOUND minigametime = oslLoadSoundFile("./sfx/sfx-0080.wav");
  OSL_SOUND tvnoisesound;
  OSL_SOUND giygas[3];
  OSL_SOUND quitter = oslLoadSoundFile("./sfx/quitter.wav");
  OSL_SOUND ko_sfx = oslLoadSoundFile("./sfx/sfx-0045.wav");
  OSL_SOUND expl_sound = oslLoadSoundFile("./sfx/sfx-0018.wav");
  OSL_SOUND pew = oslLoadSoundFile("./sfx/sfx-0100.wav");
  OSL_SOUND paf = oslLoadSoundFile("./sfx/beng-0011.wav");
  OSL_SOUND meteor_fall = oslLoadSoundFile("./sfx/sfx-0040.wav");
  OSL_SOUND expl_sound2 = oslLoadSoundFile("./sfx/sfx-0036.wav");
  OSL_SOUND bulbsfx[7];
  OSL_SOUND stun_sound =  oslLoadSoundFile("./sfx/sfx-0038.wav");
  OSL_SOUND elec =  oslLoadSoundFile("./sfx/elec.wav");
  OSL_SOUND thunder =  oslLoadSoundFile("./sfx/thunder.wav");
  OSL_SOUND psis_sfx = oslLoadSoundFile("./sfx/sfx-0043.wav");
  OSL_SOUND dictators_sfx[4];

  OSL_SOUND mouth_sfx[2];
 
  OSL_SOUND whine = oslLoadSoundFile("./sfx/sfx-0097.wav");
  OSL_SOUND bounce = oslLoadSoundFile("./sfx/racketbounce.wav");


  OSL_IMAGE lightning =  LoadImg("./gfx/lightning.png");
  OSL_IMAGE premess =  LoadImg("./gfx/premess.png");
    OSL_IMAGE giyg_bg[33], starsky = LoadImg("./gfx/starsky.png");
    OSL_IMAGE sleepwell = LoadImg("./gfx/sleepwell.png");
    OSL_IMAGE ball_gfx = LoadImg("./gfx/ball.png");
    OSL_IMAGE ball_shad = LoadImg("./gfx/ball_shadow.png");
    OSL_IMAGE ko = LoadImg("./gfx/ko.png");
    OSL_IMAGE mgswirl = LoadImg("./gfx/mgswirl.png");
    OSL_IMAGE explode = LoadImg("./gfx/explode.png");
    OSL_IMAGE rckch[2];
    OSL_IMAGE psycho = LoadImg("./gfx/gfx-0672.png");
    OSL_IMAGE paused_gfx = LoadImg("./gfx/paused.png");
    OSL_IMAGE ultgauge = LoadImg("./gfx/ultgauge.png");
    OSL_IMAGE shlgauge = LoadImg("./gfx/shlgauge.png");
    OSL_IMAGE visor = LoadImg("./gfx/visor.png");
    OSL_IMAGE bulbasaur = LoadImg("./gfx/bulbasaur.png");
    OSL_IMAGE recipe = LoadImg("./gfx/darkness.png");
    OSL_IMAGE shield = LoadImg("./gfx/shield.png");
    OSL_IMAGE meteor = LoadImg("./gfx/gfx-0471.png");
    OSL_IMAGE stunning = LoadImg("./gfx/creepycircle.png");
    OSL_IMAGE psis = LoadImg("./gfx/psis.png");
    OSL_IMAGE dictators = LoadImg("./gfx/dictators.png");
    OSL_IMAGE mouth = LoadImg("./gfx/gfx-0102.png");
    OSL_IMAGE powerball = LoadImg("./gfx/powerball.png");
    OSL_IMAGE star = LoadImg("./gfx/star.png");
    OSL_IMAGE juche = LoadImg("./gfx/juche.png");
    OSL_IMAGE suppo_gfx = LoadImg("./gfx/suppo.png");
    OSL_IMAGE attch = LoadImg("./gfx/attchoice.png");
    OSL_IMAGE cp2 = LoadImg("./gfx/cursor2p.png");

  OSL_SOUND benj_sfx[11];


  OSL_IMAGE shadow, temp_ulting, temp_ultg, temp_psis, temp_recipe, temp_bulb, temp_prem, temp_benj, temp_pb, temp_dics, temp_lghtn, temp_suppo, temp_met, temp_no, temp_ko;

  numberz = LoadImg("./gfx/numberz.png");

  ulting_gfx = LoadImg("./gfx/ulting.png");

  benj_sfx[0] = oslLoadSoundFile("./sfx/beng-0000.wav");
  benj_sfx[1] = oslLoadSoundFile("./sfx/beng-0001.wav");
  benj_sfx[2] = oslLoadSoundFile("./sfx/beng-0002.wav");
  benj_sfx[3] = oslLoadSoundFile("./sfx/beng-0003.wav");
  benj_sfx[4] = oslLoadSoundFile("./sfx/beng-0004.wav"); //hurt
  benj_sfx[5] = oslLoadSoundFile("./sfx/beng-0013.wav");
  benj_sfx[6] = oslLoadSoundFile("./sfx/beng-0016.wav");
  benj_sfx[7] = oslLoadSoundFile("./sfx/beng-0020.wav"); //pass
  benj_sfx[8] = oslLoadSoundFile("./sfx/beng-0009.wav");
  benj_sfx[9] = oslLoadSoundFile("./sfx/beng-0015.wav"); //ult
  benj_sfx[10] = oslLoadSoundFile("./sfx/beng-0006.wav"); //shield

  dictators_sfx[0] = oslLoadSoundFile("./sfx/putin.wav"),
  dictators_sfx[1] = oslLoadSoundFile("./sfx/kjun.wav"),
  dictators_sfx[2] = oslLoadSoundFile("./sfx/hitler.wav"),
  dictators_sfx[3] = oslLoadSoundFile("./sfx/skeletor.wav"),
 
  mouth_sfx[0] =  oslLoadSoundFile("./sfx/sfx-0021.wav");
  mouth_sfx[1] = oslLoadSoundFile("./sfx/sfx-0022.wav"),
 
    rckch[0] = LoadImg("./gfx/rocking_chair.png");
    rckch[1] = LoadImg("./gfx/rocking_chair2.png");

    pie_ent.pie_hp=100*round*diff;

  pie=LoadImg("./gfx/pie.png");
  pie=oslSetImageRotCenter(pie);
  starsky=oslSetImageRotCenter(starsky);
  sleepwell=oslSetImageRotCenter(sleepwell);
  rckch[0].centerX = 32;
  rckch[0].centerY = 47;
  rckch[1]=oslSetImageRotCenter(rckch[1]);
  recipe=oslSetImageRotCenter(recipe);
  paused_gfx=oslSetImageRotCenter(paused_gfx);
  visor=oslSetImageRotCenter(visor);
  mouth=oslSetImageRotCenter(mouth);
  stunning=oslSetImageRotCenter(stunning);
  powerball=oslSetImageRotCenter(powerball);
  star=oslSetImageRotCenter(star);
  ball_gfx.centerX = 3;
  ball_gfx.centerY = 7;

  al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_timer_event_source(timer));
    al_start_timer(timer);

  temp_pb=oslSetImageTileSize(powerball, 0, 0, 32, 32);
  tvnoisesound = oslLoadSoundFile("./sfx/dummy.wav");

  mouth.stretchX = 10;
  mouth.stretchY = 16;


  for (i=0; i<8; i++)
  {
    for (j=0; j<5; j++)
    {
      pie_attacks[i][j]=0;
      stars_ult[j]=-32;
    }
  }



  for (i=0; i<7; i++)
  {
    sprintf(buffer,"./sfx/sfx-0%d.wav",i+114);
    bulbsfx[i]=oslLoadSoundFile(buffer);
  }

  for (i=0; i<15; i++)
  {
    att_cooldowns[i]=(random((8-(diff*2)))*100+random(3*diff)*100+800);
    att_cooldowns[i] += (((i==0) || (i==3) || (i==4))?9*att_cooldowns[i]:0) + 2*random((int)(((i!=0)?1.5:3.5)*att_cooldowns[i]));
    if ((i!=0) && (i!=3) && (i!=4)) att_cooldowns[i]=att_cooldowns[i]/(0.5*round+0.5);
  }

  oslSetSoundLoop(psis_sfx, 1);

  if (round == 2)
  {
    giygas[0] = oslLoadSoundFile("./sfx/sfx-0006.wav");
    giygas[1] = oslLoadSoundFile("./sfx/sfx-0007.wav");
    giygas[2] = oslLoadSoundFile("./sfx/sfx-0008.wav");

    for (i=0; i<20; i++)
    {
      sprintf(buffer,"./gfx/gfx-0%d.png",i+642);
      tvnoise[i]= LoadImg(buffer);
      tvnoise[i].stretchX = 480;
      tvnoise[i].stretchY = 272;
    }

    oslDeleteSound(tvnoisesound);

    tvnoisesound = oslLoadSoundFile("./sfx/sfx-0028.wav");
    //tvnoisesound . volumeLeft = tvnoisesound . volumeRight = 0x2000;
    oslSetSoundLoop(tvnoisesound, 1);

    if (round==2)
    {
      for (i=0; i<33; i++)
      {
        sprintf(buffer,"./gfx/gfx-0%d.png",i+103);
        giyg_bg[i]=LoadImg(buffer);
        giyg_bg[i]=oslSetImageRotCenter(giyg_bg[i]);
        giyg_bg[i].stretchX = giyg_bg[i].stretchY = 512;
      }
    }
  }
  else
  {
    giygas[0] = oslLoadSoundFile("./sfx/sfx-0155.wav");
    giygas[1] = oslLoadSoundFile("./sfx/sfx-0153.wav");
    giygas[2] = oslLoadSoundFile("./sfx/dummy.wav");

    for (i=0; i<5; i++)
    {
      tvnoise[i]=LoadImg("./gfx/dummy.png");
    }
  }




    //oslSetTransparentColor(RGB(255,0,255));


  for (i=0; i<3; i++)
  {
    oslSetSoundLoop(giygas[i], 1);
  }

    oslPlaySound(giygas[0]);
    health=100;
   
    while(!quit)
    {
    al_wait_for_event(event_queue, &ev);

     if(ev.type == ALLEGRO_EVENT_TIMER) skipframe=1; else skipframe=0;

     if ((skipframe) && al_event_queue_is_empty(event_queue))
     {
      oslStartDrawing();
      skipframe=0;
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

      if (pie_ent.pie_hp < 1)
      {
        pie_ent.pie_y = 136+5*sin(0.5*global_fr);
      }

      spr_draw(starsky,239,136);

      if ((whineface) && (health > 0) && (pie_ent.pie_hp > 0))
      {
        //oslSetAlpha(OSL_FX_DEFAULT, 0);
        pie.R=255;
        pie.G=pie.B=(32-whineface)*8;
        spr_draw(pie, pie_ent.pie_x, pie_ent.pie_y);
        temp_dics=oslSetImageTileSize(dictators, 160, 80, 80, 80);
        temp_dics=oslSetImageRotCenter(temp_dics);
        temp_dics.trans=whineface*8;
        spr_draw(temp_dics, pie_ent.pie_x, pie_ent.pie_y-22);
        whineface--;
        pie.R=pie.G=pie.B=255;
      }
      else
      {
        pie.R=pie.G=pie.B=255;
        spr_draw(pie,pie_ent.pie_x, pie_ent.pie_y);
      }




      //oslSetAlpha(OSL_FX_DEFAULT, 0);

      for (i=0; i<((2*diff)+2); i++)
      {
        if ((pie_attacks[i][0]==12) && (health > 0))
        {
          temp_dics=oslSetImageTileSize(dictators, 80*(pie_ent.pie_facemode%2), 80*(pie_ent.pie_facemode/2),80 ,80);
          temp_dics=oslSetImageRotCenter(temp_dics);

          if (pie_attacks[i][1] > (240*diff-255))
          {
            temp_dics.trans=240*diff - pie_attacks[i][1];
          }
          else
          {
            temp_dics.trans=255;
          }

          if (pie_attacks[i][1] < 0)
          {
            temp_dics.trans=255+pie_attacks[i][1];
          }

          if (!whineface) spr_draw(temp_dics, pie_ent.pie_x, pie_ent.pie_y-22);

          if (!paused) pie_attacks[i][1]--;

          if (pie_attacks[i][1] == -255)
          {
            pie_attacks[i][0]=0;
            pie_ent.pie_facemode=0;
            putin=0;
          }

          temp_dics.trans=255;

          if ((pie_ent.pie_facemode == 2) && (pie_attacks[i][1]==90))
          {
            for (i=0; i<15; i++)
            {
              if ((i!=0) && (i!=3) && (i!=4) && (i != 11) && (i!=6)) att_cooldowns[i]=random(250);
            }
          }

          if (pie_ent.pie_facemode == 0)
          {
            if (pie_attacks[i][1] > -255) putin=1; else putin=0;
          }
          if (pie_ent.pie_facemode == 1)
          {
            spr_draw(juche, pie_attacks[i][2], 40+30*sin(0.0625*pie_attacks[i][2]));
            pie_attacks[i][2] -= 3;
          }
        }
      }

      if (health <= 0)
      {
        temp_dics=oslSetImageTileSize(dictators, 160, 0, 80, 80);
        temp_dics=oslSetImageRotCenter(temp_dics);
        temp_dics.trans=255;
        spr_draw(temp_dics, pie_ent.pie_x, pie_ent.pie_y-22);
      }
      else if (pie_ent.pie_hp < 1)
      {
        temp_dics=oslSetImageTileSize(dictators, 160, 80, 80, 80);
        temp_dics=oslSetImageRotCenter(temp_dics);
        temp_dics.trans=255;
        spr_draw(temp_dics, pie_ent.pie_x, pie_ent.pie_y-22);
      }

      spr_draw(court,0,0);


      if (!paused)
      {
        if (pie_ent.pie_hp > 0)
        {
          if (!(pie_ent.pie_direction))
          {
              pie_ent.pie_x++;
              pie.angle+=((round==2)?(giyg_flag+1):1)*4;

            if (pie_ent.pie_x>=351) pie_ent.pie_direction=1;

          }
          else
          {
              pie_ent.pie_x--;
              pie.angle-=((round==2)?(giyg_flag+1):1)*4;


            if (pie_ent.pie_x<=128) pie_ent.pie_direction=0;
          }
        }


        if (round==2) starsky.angle=starsky.angle-(giyg_flag+1)*((random(10))-1);

        if (counter >= 240)
        {

          if (diff != 3) a=diff; else a=2;

          if (counter == 240) ball_ent=apply_impulse(ball_ent, -1*a, -1*a, 30*3.14/180);

          if (ultlvl > 239) ultlvl=239;

          if ((!mgcd) && (!lightsoff) && (!rckchscr) && (mouth.stretchX == 10))
          {
            ball_ent.x2d += ball_ent.speed_h;
            ball_ent.y2d += ball_ent.speed_v;

            /*ball_ent.speed_z += GRAVITY;
            ball_ent.z3d += ball_ent.speed_z;

            if (ball_ent.z3d < 0)
            {
              ball_ent.speed_z = -1*(ball_ent.speed_z);
              ball_ent.z3d=0;
            }*/


            ball_ent.z3d = abs(16*sin(0.0625*global_fr));
          }

          if (ball_ent.y2d < 138)
            {
                ball_ent.speed_v = -1*(ball_ent.speed_v);
                ball_ent.y2d = 140;

                returned=0;

                if ((ball_ent.x2d >= pie_ent.pie_x-128) && (ball_ent.x2d <= pie_ent.pie_x+128))
                {
                  pie_ent.pie_hp -= (4-diff);
                  ultlvl += 5-diff;
                  oslPlaySound(whine);
                  whineface=31;
                }
                else
                {
                  if ((!suppo) && ((health) || (pie_ent.pie_hp)))
                  {
                    suppo = 150;
                    suppox = px - 32;
                    suppoy = py + 48;
                  }
                }


                if (ball_ent.speed_v > 0)
                {
                  a=random(100);
                  //if (a > 85) ball_ent.poisoned=1; else ball_ent.poisoned=0;
                }

            }

          if (ball_ent.y2d > 288)
            {
                ball_ent.speed_v = -1*(ball_ent.speed_v);
                ball_ent.y2d = 286;

                ball_ent.poisoned=0;

                if (!shielded)
                {
                  stun=616;
                  health -= diff+1;
                  oslPlaySound(thunder);
                }


                returned=1;
            }

          if ((ball_ent.x2d >= 480 - 16/2) || (ball_ent.x2d < 4))
          {
            ball_ent.speed_h = -1*(ball_ent.speed_h);
            if (ball_ent.x2d < 4) ball_ent.x2d = 6; else ball_ent.x2d = 478 - 16/2;
          }


        }

      }

    al_get_keyboard_state(&kbdstate);

    if (!al_key_down(&kbdstate, ALLEGRO_KEY_I) && !al_key_down(&kbdstate, ALLEGRO_KEY_O) && !al_key_down(&kbdstate, ALLEGRO_KEY_C) && !al_key_down(&kbdstate, ALLEGRO_KEY_P) && !al_key_down(&kbdstate, ALLEGRO_KEY_SPACE) && !al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL))
    {
      rebound=0;
      swinging=0;
      ulting=0;
      frappe=-1;
      frappe_ult=-1;
    }

      if (((al_key_down(&kbdstate, ALLEGRO_KEY_I)) || (al_key_down(&kbdstate, ALLEGRO_KEY_O))) && (nbp==2) && (!rebound))
      {
        att_ch_timer=0;
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_I)) && (cursor2p > 0)) cursor2p--;
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_O)) && (cursor2p < 13)) cursor2p++;
        rebound=1;
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_P)) && (pie_ent.pie_hp) && (health) && (!mgcd) && (counter > 256) && (!rebound))
        {
          rebound=1;
          if (!paused)
          {
            if (!lightsoff) oslStopSound(giygas[giyg_flag%3]);
            paused=1;
            if (al_get_sample_instance_position(quitter.instance))
            {
              health -= 5;
              if (putin) health -=2;
              oslStopSound(quitter);
            }
            if (al_get_sample_instance_position(tvnoisesound.instance)) oslStopSound(tvnoisesound);
            if (al_get_sample_instance_position(psis_sfx.instance)) oslStopSound(psis_sfx);
          }
          else
          {
            paused=0;
            oslPlaySound(giygas[giyg_flag%3]);
          }

         
        }


      if ((al_key_down(&kbdstate, ALLEGRO_KEY_L)) && (paused))
      {
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_R)) && (al_key_down(&kbdstate, ALLEGRO_KEY_L)))
          {
            if ((al_key_down(&kbdstate, ALLEGRO_KEY_X)) && (al_key_down(&kbdstate, ALLEGRO_KEY_R)) && (al_key_down(&kbdstate, ALLEGRO_KEY_L)))
              {
                paused=0;
                health=0;
                mort=2;
              }

            if ((al_key_down(&kbdstate, ALLEGRO_KEY_N)) && (al_key_down(&kbdstate, ALLEGRO_KEY_R)) && (al_key_down(&kbdstate, ALLEGRO_KEY_L)))
              {
                paused=0;
                pie_ent.pie_hp=0;
                pie_ent.pie_facemode=0;
              }
          }
      }


      counter++;
      global_fr++;
      if (nbp==2) att_ch_timer++; else att_ch_timer=4;

      if ((att_ch_timer >= 81) && (att_cooldowns[cursor2p] == 1) && (nbp==2))
      {
        att_cooldowns[cursor2p]=0;
      }


      benj.stretchX = 32;
      benj.stretchY = 48;
      benj.angle = 0;

      if (stun > 600)
      {
        lightning.trans=(stun%600)*16;
        temp_lghtn=oslSetImageTileSize(lightning,0,0,32,py+64);
        spr_draw(temp_lghtn, px, 0);
      }


      if (health > 0)
      {
        shadow=oslSetImageTileSize(benj,32,192,32,48);
        shadow.trans=128;
        spr_draw(shadow, px+8, py+26);
      }

      temp_benj=oslSetImageTileSize(benj,0,192,32,48);

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_C)) && (pie_ent.pie_hp > 0) && (health>0) && (!mgcd) && (!paused) && (frappe_ult<7) && (!stun) && (counter > 300) && (stary <= 0) && (!ulting) && (!rebound))
      {
        frappe_ult=1;
        ulting=1;
        rebound=1;
        oslPlaySound(benj_sfx[(random(2)+8)]);
        racket_devnull++;

        stary=py+48;

        if ((ultlvl > 59) && (ultlvl < 120))
        {
          stars_ult[0]=px+32;
          nbult=1;
        }

        else if ((ultlvl > 119) && (ultlvl < 239))
        {
            stars_ult[0]=px-48;
            stars_ult[1]=px+32;
            stars_ult[2]=px+112;
            nbult=3;
        }

        else if (ultlvl==239)
        {
          stars_ult[0]=px-48;
          stars_ult[1]=px-8;
          stars_ult[2]=px+32;
          stars_ult[3]=px+72;
          stars_ult[4]=px+112;
          nbult=5;
        }


      if (ultlvl > 59) ultlvl -= ((diff==1)?60:((diff==2)?(ultlvl%60+60):ultlvl));

      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_X)) && (health>0) && (!mgcd) && (!paused) && (shldlvl > 2) && (!stun))
      {
        racket_devnull++;
      }

      if (((al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) || (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE))) && (health>0) && (!mgcd) && (!paused) && (frappe<7) && (!stun) && (!rebound) && (!swinging))
      {
        if (!(racket_devnull%2)) oslPlaySound(benj_sfx[random(3)+5]);
        racket_devnull++;
        frappe=1;
        rebound=1;
        swinging=1;
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_UP)) && (py >= 102) && (health>0) && (!mgcd) && (!paused) && (frappe == -1) && (!stun) && (mouth.stretchX == 10))
      {
        if (pie_ent.pie_facemode != 1)
        {
          pbouss=0;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,0,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_UP))
            {
              if (pie_ent.pie_facemode != 3) py-=4; else py-=2;
              fs=3;
            }
        }
        else
        {
          pbouss=2;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,96,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_UP))
          {
            if (pie_ent.pie_facemode != 3) py+=4; else py+=2;
            fs=3;
          }
          if (py > 224) py=216;
        }

        temp_pb=oslSetImageTileSize(powerball, 32, 0, 32, 32);
        if (!(counter%fs)) benj_frame++;
      }
      if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (!ulting) && (px >= (-0.492*py+94.184)) && (px <= (0.492*py+321.792)) && (health>0) && (!mgcd) && (!paused) && (frappe < 4) && (!stun) && (mouth.stretchX == 10))
      {
        if (pie_ent.pie_facemode != 1)
        {
          pbouss=3;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,pbouss*48,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_LEFT))
          {
            if (frappe < 4)
            {
              if (pie_ent.pie_facemode != 3) px-=4; else px-=2;
            }
            fs=3;
          }
        }
        else
        {
          pbouss=1;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,48,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_LEFT))
          {
            if (frappe < 4)
            {
              if (pie_ent.pie_facemode != 3) px+=4; else px+=2;
            }
              fs=3;
          }
          if (px > (0.492*py+321.792)) px = (0.492*py+321.792);
        }

          temp_pb=oslSetImageTileSize(powerball, 32, 0, 32, 32);
          if (!(counter%fs)) benj_frame++;
      }
      if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (!ulting) && (px >= (-0.492*py+94.184)) && (px <= (0.492*py+321.792)) && (health>0) && (!mgcd) && (!paused) && (frappe < 4) && (!stun) && (mouth.stretchX == 10))
      {
        if (pie_ent.pie_facemode != 1)
        {
          pbouss=1;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,48,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT))
          {
            if (frappe < 4)
            {
              if (pie_ent.pie_facemode != 3) px+=4; else px+=2;
            }
              fs=3;
          }
        }
        else
        {
          pbouss=3;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,pbouss*48,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT))
          {
            if (frappe < 4)
            {
              if (pie_ent.pie_facemode != 3) px-=4; else px-=2;
            }
            fs=3;
          }

          if (px < (-0.492*py+94.184)) px = (-0.492*py+94.184);
        }
          temp_pb=oslSetImageTileSize(powerball, 0, 0, 32, 32);
          if (!(counter%fs)) benj_frame++;
      }
      if ((al_key_down(&kbdstate, ALLEGRO_KEY_DOWN)) && (py <= 224) && (health>0) && (!mgcd) && (!paused) && (frappe == -1) && (!stun) && (mouth.stretchX == 10))
      {
        if (pie_ent.pie_facemode != 1)
        {
          pbouss=2;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,96,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_DOWN))
          {
            if (pie_ent.pie_facemode != 3) py+=4; else py+=2;
            fs=3;
          }
        }
        else
        {
          pbouss=0;
          temp_benj=oslSetImageTileSize(benj,(benj_frame%8)*32,0,32,48);
          if (al_key_down(&kbdstate, ALLEGRO_KEY_DOWN))
            {
              if (pie_ent.pie_facemode != 3) py-=4; else py-=2;
              fs=3;
            }
          if (py < 102) py=110;
        }

          temp_pb=oslSetImageTileSize(powerball, 0, 0, 32, 32);
          if (!(counter%fs)) benj_frame++;
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) && (health>0) && (!mgcd) && (!paused) && (frappe<7) && (!stun) && (swinging))
      {
        if ((!(counter%3))) frappe++;
        temp_benj=oslSetImageTileSize(benj,(frappe)*32,240,32,48);


        if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (frappe > -1))
          {
            if (frappe>3) temp_benj.angle = 90;
            temp_benj=oslSetImageTileSize(benj,(frappe)*32,432,32,48);

          }
        else if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (frappe > -1))
          {
            if (frappe>3) temp_benj.angle = -90;
            temp_benj=oslSetImageTileSize(benj,(frappe)*32,384,32,48);
          }

        if (((px+24-(ball_ent.x2d))*(px+24-(ball_ent.x2d))+(py+24-(ball_ent.y2d))*(py+24-(ball_ent.y2d)) <= 404) && (!returned) && (py >= 142))
        {
          if (diff != 3) a=diff; else a=2;
          ball_ent = apply_impulse(ball_ent, a, a, (180-15*frappe)*3.14/180);
          oslPlaySound(bounce);
          frappe=-1;
          returned=1;
          //swinging=0;
        }
      }


      if ((al_key_down(&kbdstate, ALLEGRO_KEY_SPACE)) && (health>0) && (!mgcd) && (!paused) && (frappe<7) && (!stun) && (swinging))
      {
        if ((!(counter%3))) frappe++;
        temp_benj=oslSetImageTileSize(benj,(frappe)*32,288,32,48);


        if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (frappe > -1))
          {
            if (frappe>3) temp_benj.angle = 90;
            temp_benj=oslSetImageTileSize(benj,(frappe)*32,432,32,48);
          }
        else if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (frappe > -1))
          {
            if (frappe>3) temp_benj.angle = -90;
            temp_benj=oslSetImageTileSize(benj,(frappe)*32,384,32,48);
          }

        if (((px+36-(ball_ent.x2d))*(px+36-(ball_ent.x2d))+(py+36-(ball_ent.y2d))*(py+36-(ball_ent.y2d)) <= 404) && (!returned) && (py >= 142))
        {
          if (diff != 3) a=diff; else a=2;
          ball_ent = apply_impulse(ball_ent, -1*a, a, (15*frappe)*3.14/180);
          oslPlaySound(bounce);
          frappe=-1;
          returned=1;
          //swinging=0;
        }
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_X)) && (health>0) && (!mgcd) && (!paused) && (shldlvl > 0) && (!stun))
      {
        if ((!shielded) && (shldlvl > 2)) oslPlaySound(benj_sfx[10]);
        if ((!(counter%(4-diff)))) shldlvl--;
        shielded=1;
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_C)) && (health>0) && (!mgcd) && (!paused) && (frappe_ult<7) && (!stun) && (counter > 300) && (!rebound) && (ulting))
      {
        if (!(counter%3)) frappe_ult++;
      }

      /*if ((frappe==7) && (swinging) && (!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL))  ||  (!al_key_down(&kbdstate, ALLEGRO_KEY_X)) ||  (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE)))
      {
       
      }*/


      if ((!al_key_down(&kbdstate, ALLEGRO_KEY_X)) || (!shldlvl))
      {
        shielded=0;
      }

      if (stun)
      {
        frappe=-1;
        temp_benj=oslSetImageTileSize(benj,64,192,32,48);
        stun--;
        if (!(stun%200)) stun=0;
      }

      if (px < (-0.492*py+94.184)) px = (-0.492*py+94.184);
      if (px > (0.492*py+321.792)) px = (0.492*py+321.792);

      if ((!al_key_down(&kbdstate, ALLEGRO_KEY_LCTRL)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_SPACE)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_X)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_C)) &&
        (!al_key_down(&kbdstate, ALLEGRO_KEY_UP)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_DOWN)) && (!al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)))
      {
        benj_frame=0;
      }


      if ((frappe >= 7) && (swinging))
      {
        frappe=7;
        rebound=1;
      }

      if ((frappe_ult >= 7) && (ulting))
      {
        frappe_ult=7;
        rebound=1;
      }

      if (ulting) temp_benj=oslSetImageTileSize(ulting_gfx,(frappe_ult)*32,0,32,48);

      court_zoom = 0.00192*py + 0.562;

      temp_benj.stretchX = (int)(64*(float)court_zoom);
      temp_benj.stretchY = (int)(96*(float)court_zoom);

      shield.stretchX = (int)(48*(float)court_zoom);
      shield.stretchY = (int)(48*(float)court_zoom);



      ball_gfx.stretchX = (int)(8*(float)court_zoom);
      ball_gfx.stretchY = ball_gfx . stretchX;

      temp_pb.stretchX = temp_pb.stretchY = (int)(32*(float)(court_zoom));


      if (health > 0)
      {
        if (stary > 0)
        {
          for(u=0; u<nbult; u++)
          {
            spr_draw(star, stars_ult[u], stary);

            if (stary <= 136)
            {
              if ((stars_ult[u] >= (pie_ent.pie_x-128)) && (stars_ult[u] <= (pie_ent.pie_x+128))) pie_ent.pie_hp -= 10;
              stary=-64;
              stars_ult[u]=-32;
              nbult=0;
            }

          }
          star.angle -= 5;
          stary -= 4;

        }

        if (ball_ent.poisoned) ball_gfx.R=ball_gfx.G=0;
        if (pie_ent.pie_hp > 0) draw_ball(ball_ent, ball_gfx, ball_shad);
        draw_benj(temp_benj, px, py, shielded, shield);
        if (((pbouss == 3) || (pbouss == 0)) && (pie_ent.pie_facemode == 3)) spr_draw(temp_pb, px+64, py+48);
        if (((pbouss == 1) || (pbouss == 2)) && (pie_ent.pie_facemode == 3)) spr_draw(temp_pb, px, py+48);
        if (ball_ent.poisoned) ball_gfx.R=ball_gfx.G=0;


      }



      if (suppo)
      {
        if (!paused) suppo--;
        if (suppo<40)
        {
          temp_suppo=oslSetImageTileSize(suppo_gfx, suppo/10*32, 0, 32, 32);
        }

        if (suppo>110)
        {
          temp_suppo=oslSetImageTileSize(suppo_gfx, (150-suppo)/10*32, 0, 32, 32);
        }

        court_zoom = 0.00192*suppoy + 0.562;
        temp_suppo.stretchX = (int)(32*(float)court_zoom);
        temp_suppo.stretchY = (int)(32*(float)court_zoom);

        spr_draw(temp_suppo, suppox, suppoy);
        spr_draw(temp_suppo, suppox+64, suppoy);

        if ((suppo>65) && (suppo<85))
        {
          if ((px>=suppox) && (px<=suppox+64) && (py>=suppoy-64) && (py <= suppoy))
          {
            temp_benj.R=0;
            temp_benj.G=128;
            temp_benj.B=128;

            if ((suppo%4) < 2)
            {
              draw_benj(temp_benj, px, py, shielded, shield);
            }

            if ((suppo == 67) && (!mgcd) && (!rckchscr))
            {
              health -= diff;
              oslPlaySound(elec);
            }
            temp_benj.R=temp_benj.G=temp_benj.B=255;
          }
        }
      }

      if ((pie_ent.pie_hp > 25*round*diff) && (!giyg_flag) && (pie_ent.pie_hp <= 50*round*diff))
      {
        giyg_flag=1;
        oslStopSound(giygas[0]);
        oslPlaySound(giygas[1]);
      }



      if (round==2)
      {
        giyg_bg[gbg].trans=random(64);
        spr_draw(giyg_bg[gbg], 240, 138);

        giyg_bg_angles[0] = random(10)-5;

        giyg_bg[gbg].angle += giyg_bg_angles[0];

        if (pie_ent.pie_hp <= 50*round*diff)
        {
          giyg_bg_angles[1] = 2*(random(10)-5);
          giyg_bg[gbg].angle += giyg_bg_angles[1];
          giyg_bg[gbg].trans=random(64)+64;
          spr_draw(giyg_bg[gbg], 240, 138);

        }

        if (pie_ent.pie_hp <= 25*round*diff)
        {
          giyg_bg_angles[2] = 4*(random(10)-5);
          giyg_bg[gbg].angle += giyg_bg_angles[2];
          giyg_bg[gbg].trans=random(64)+128;
          spr_draw(giyg_bg[gbg], 240, 138);

          if ((giyg_flag < 2))
          {
            giyg_flag=2;
            oslStopSound(giygas[1]);
            oslPlaySound(giygas[2]);
          }

        }
      }

      if (!(global_fr%5))
      {
        gbg++;
        gbg=gbg%33;
      }

      if ((counter >= 640))
      {

        //initializing attacks
        for (i=0; i<14; i++)
        {
          if ((nbp==1) && (!paused)) att_cooldowns[i]--;
          if ((nbp==2) && (!paused) && (att_cooldowns[i]>1)) att_cooldowns[i]--;

          if ((i==7) && (bulbfell > 0)) att_cooldowns[7]++;

          if ((att_cooldowns[i] <= 0) && (pie_ent.pie_hp > 0))
          {

            attf=0;
            for (j=0; j<((2*diff)+2); j++)
            {
              if (pie_attacks[j][0] == (i+1)) attf=1;
            }

              for (j=0; j<((2*diff)+2); j++)
              {
                if ((!(pie_attacks[j][0])) && (!attf))
                {
                  pie_attacks[j][0]=i+1;

                  switch(i+1)
                  {
                    case 1:
                      pie_attacks[j][1]=140;
                    break;

                    case 2:
                      pie_attacks[j][1]=(py-(pie_ent.pie_y))/(px-pie_ent.pie_x);
                      pie_attacks[j][2]=(pie_ent.pie_y)-pie_attacks[j][1]*pie_ent.pie_x;
                      pie_attacks[j][3]=pie_ent.pie_x;
                      pie_attacks[j][4]=px;
                      mgsy=pie_attacks[i][1]*pie_attacks[i][3]+pie_attacks[i][2];
                    break;

                    case 3:
                      darkness=0;
                      for (u=0; u<((2*diff)+2); u++)
                      {
                        if (pie_attacks[u][0]==7) darkness=1;
                      }

                      if (!darkness)
                      {
                        pie_attacks[j][1]=360-(15*diff);
                        pie_attacks[j][2]=random(160)+80;
                        pie_attacks[j][3]=random(112)+160;
                        pie_attacks[j][4]=2*diff+3;
                      }
                      else pie_attacks[j][0]=0;
                    break;

                    case 4:
                      pie_attacks[j][1]=diff*166;
                      lightsoff=1;
                    break;

                    case 5:
                      pie_attacks[j][1]=-218;
                      pie_attacks[j][2]=255;
                    break;

                    case 6:
                      pie_attacks[j][1]=225*diff;
                      pie_attacks[j][2]=random(416);
                      pie_attacks[j][3]=random(100)+108;

                      if ((diff > 1) && (pie_attacks[j][2]%diff))
                      {
                        pie_attacks[j][2] += (diff)-(pie_attacks[j][2]%diff);
                      }

                      if ((diff > 1) && (pie_attacks[j][3]%diff))
                      {
                        pie_attacks[j][3] += (diff)-(pie_attacks[j][3]%diff);
                      }
                    break;

                    case 7:
                      chair=0;
                      for (u=0; u<((2*diff)+2); u++)
                      {
                        if (pie_attacks[u][0]==3) chair=1;
                      }

                      if (!chair)
                      {

                      if (px+16 < 240) pie_attacks[j][1]=0; else pie_attacks[j][1]=1;
                      pie_attacks[j][2]=random(400)+600;
                      if (pie_attacks[j][1]) pie_attacks[j][3]=400-random(160); else  pie_attacks[j][3]=random(160)+80;
                      if (pie_attacks[j][1]) pie_attacks[j][4]=480; else  pie_attacks[j][4]=0;

                      mouth.stretchX = 10;
                      mouth.stretchY = 16;
                      }
                      else  pie_attacks[j][0]=0;

                    break;

                    case 8:
                      pie_attacks[j][1]=diff+2;
                      pie_attacks[j][2]=random(4); //sens bulbasaur
                      pie_attacks[j][3]=random(320)+80; //bulb_x
                      pie_attacks[j][4]=-64; //bulb_y
                      bulbfell=1;
                      if (!lightsoff) oslPlaySound(bulbsfx[(random(2)?1:6)]);
                    break;

                    case 9:
                      pie_attacks[j][1]=120*diff+120;
                      if (px < 240) pie_attacks[j][2]=1; else pie_attacks[j][2]=0;
                      pie_attacks[j][3]=py;

                      for (u=0; u<3; u++)
                      {
                        meteors[u][0]=0;
                        meteors[u][1]=0;
                        meteors[u][2]=0;
                      }
                    break;

                    case 10:
                      pie_attacks[j][1]=96;
                      if ((!shielded) && (!stun)) stun=96;
                      break;

                    case 11:
                      pie_attacks[j][1]=1;
                      pie_attacks[j][2]=30;
                      if (!lightsoff) oslPlaySound(psis_sfx);
                      break;

                    case 12:
                      pie_attacks[j][1]=240*diff;
                      pie_ent.pie_facemode=random(4);
                      if ((!lightsoff) && (health > 0)) oslPlaySound(dictators_sfx[pie_ent.pie_facemode]);
                      if (pie_ent.pie_facemode==1)
                      {
                        pie_attacks[j][2]=560;
                      }
                      break;

                    case 13:
                      if ((round==2) && (pie_ent.pie_hp < 20*round*diff) && (!ulted) && (!lightsoff))
                      {
                        oslStopSound(giygas[giyg_flag]);
                        oslStopSound(psis_sfx);
                        oslEndDrawing();
                        health=shoop_da_whoop(health, round, diff);
                        oslStartDrawing();
                        ulted=1;
                        oslPlaySound(giygas[giyg_flag]);
                        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
                      }
                      pie_attacks[j][0]=0;
                      break;

                    case 14:
                      if ((round==2) && (pie_ent.pie_hp < 10*round*diff) && (ulted==1) && (!lightsoff))
                      {
                        oslStopSound(giygas[giyg_flag]);
                        oslStopSound(psis_sfx);
                        oslEndDrawing();
                        sad();
                        oslStartDrawing();
                        ulted=2;
                        oslPlaySound(giygas[giyg_flag]);
                        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
                      }
                      pie_attacks[j][0]=0;
                      break;


                    default:
                      break;
                  }

                  j=2*diff+3; //break;
                }
              }


              //att_cooldowns[i]=(random((8-(diff*2)))*100+random(3*diff)*100+800)*(2*i+11);
                att_cooldowns[i]=(random((8-(diff*2)))*100+random(3*diff)*100+800);
                att_cooldowns[i] += (((i==0) || (i==3) || (i==4))?9*att_cooldowns[i]:0) + 2*random((int)(((i!=0)?1.5:3.5)*att_cooldowns[i]));
                if ((i!=0) && (i!=3) && (i!=4)) att_cooldowns[i]=att_cooldowns[i]/(0.5*round+0.5);
                if (i == 11) att_cooldowns[i] += 1792;

          }
        }


        //programming attacks


        if (!paused) {

          for (i=0; i<((2*diff)+2); i++)
          {
            switch(pie_attacks[i][0])
            {
              case 1:
              {
                if ((mgcd < 1) && (health > 0) && (!lightsoff))
                {
                  ko.R=0;
                  ko.B=ko.G=128;
                  ko.trans=255;
                  if (pie_attacks[i][1] > 115)
                  {
                    temp_ko=oslSetImageTileSize(ko,0,0,120,96);
                    spr_draw(temp_ko, (int)(9.6*(140-pie_attacks[i][1])-120), 88);
                  }

                  if ((pie_attacks[i][1] <= 115) && (pie_attacks[i][1] >= 90))
                  {
                    temp_ko=oslSetImageTileSize(ko,0,0,120,96);
                    spr_draw(temp_ko, 120, 88);
                    temp_ko=oslSetImageTileSize(ko,120,0,120,96);
                    spr_draw(temp_ko, (int)(-9.6*(140-pie_attacks[i][1])+720), 88);
                  }

                  if ((pie_attacks[i][1] > 0) && (pie_attacks[i][1] < 90))
                  {
                    temp_ko=oslSetImageTileSize(ko,0,0,240,96);
                    spr_draw(temp_ko, 120, 88);
                  }

                  if ((pie_attacks[i][1] <= 0))
                  {
                    pie_attacks[i][0]=0;
                  }

                  if (pie_attacks[i][1] > 80)
                  {
                    if ((pie_attacks[i][1]%6) < 3)
                    {
                      explode.stretchX = 64;
                      explode.stretchY = 96;
                      spr_draw(explode, px, py);
                    }
                    else
                    {
                      explode.stretchX = 32;
                      explode.stretchY = 48;
                      spr_draw(explode, px+16, py+24);
                    }
                  }

                  pie_attacks[i][1]--;
                  //oslSetAlpha(OSL_FX_DEFAULT, 0);
                }
                break;
              }

              case 2:
              {
                //frame_debug(j);

                if ((!mgcd) && (!lightsoff))
                {
                  mgswirl.trans=128;

                  if (pie_attacks[i][4] < pie_attacks[i][3])
                    {
                      pie_attacks[i][4]-=3;
                      pie_attacks[i][3]-=3;
                    }
                  else
                    {
                      pie_attacks[i][4]+=3;
                      pie_attacks[i][3]+=3;
                    }

                  if (mgsy < py)  mgsy += random(8)+2;  else mgsy -= random(8)+2;

                  court_zoom = 0.00192*(mgsy) + 0.562;

                  mgswirl.stretchX = (int)(128*(float)court_zoom);
                  mgswirl.stretchY = (int)(128*(float)court_zoom);

                  spr_draw(mgswirl, pie_attacks[i][3], mgsy);
                }

                if ((swirl_collide(px, py, pie_attacks[i][3], mgsy)) && (health>0))
                {

                    if (!mgcd)
                    {
                      al_set_sample_instance_position(minigametime.instance,16);
                      oslStopSound(giygas[giyg_flag%3]);
                      oslPlaySound(minigametime);
                      if (al_get_sample_instance_position(tvnoisesound.instance)) oslStopSound(tvnoisesound);
                      if  (al_get_sample_instance_position(meteor_fall.instance)) oslStopSound(meteor_fall);
                      oslStopSound(psis_sfx);
                      sleepwell.stretchX = sleepwell. stretchY = 272;
                    }

                    mgcd++;

                    if (mgcd >= 1)
                    {

                        oslStopSound(psis_sfx);
                        if (mgcd < 9) oslDrawFillRect(0,0,480,272, _RGB(255,255,255)); else
                        {
                          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
                          sleepwell.trans=255-((int)(mgcd*2.55));
                          sleepwell.stretchX+=18;
                          sleepwell.stretchY+=36;
                          spr_draw(sleepwell,240,138);
                          sleepwell.trans=255;
                        }


                    }

                }

                if ((pie_attacks[i][3] <= -128) || (pie_attacks[i][3] >= 544))
                {
                  pie_attacks[i][0]=0;
                  mgcd=0;
                }


                break;
              }

              case 3:
              {
                if ((mgcd < 1) && (health > 0) && (!lightsoff))
                    {

                    if (pie_attacks[i][4] > 0)
                    {
                        pie_attacks[i][1]--;

                        if (pie_attacks[i][1] > 90)
                        {

                          if (pie_attacks[i][1] < 180) rckch[0].angle = (int)(6*sin(0.5*counter));
                          else rckch[0].angle = 0;

                          court_zoom = 0.00192*(pie_attacks[i][3]+15) + 0.562;
                          rckch[0].stretchX = (int)(64*(float)court_zoom);
                          rckch[0].stretchY = (int)(64*(float)court_zoom);

                          spr_draw(rckch[0], pie_attacks[i][2], pie_attacks[i][3]+15);

                          if ((((px-pie_attacks[i][2])*(px-pie_attacks[i][2])+(py-pie_attacks[i][3])*(py-pie_attacks[i][3])) <= 3000) & (frappe >= 1))
                          {
                            if (swinging)
                            {
                            rckch[0].B=0;
                            spr_draw(rckch[0], pie_attacks[i][2], pie_attacks[i][3]+15);
                            rckch[0].B=255;
                              pie_attacks[i][4]--;
                              //if (osl_keys . held.triangle) pie_attacks[i][4]=0;
                              oslPlaySound(paf);
                              ultlvl += 5-diff;
                              frappe=-1;
                            swinging=0;
                            }
                          }

                          if (pie_attacks[i][4] <= 0) pie_attacks[i][1]=20;
                        }
                        else
                        {
                          if (pie_attacks[i][1] > 59)
                          {
                            rckch[1].stretchX = (90-pie_attacks[i][1])*16;
                            rckch[1].stretchY = (int)(0.567 * (rckch[1] . stretchX));
                            rckch[1].angle = ((pie_attacks[i][1]-30)*12);
                          }
                          if (pie_attacks[i][1] == 59)
                          {
                            rckch[1].angle = 0;
                            rckch[1].stretchX = 480;
                            rckch[1].stretchY = 272;
                            rckchscr=1;
                            oslPlaySound(quitter);
                          }
                          spr_draw(rckch[1], 240+random(8)-4, 136+random(8)-4);
                          if (!(pie_attacks[i][1]%36) && (!shielded))
                          {
                            health--;
                            if (putin) health--;
                          }
                        }

                        if (pie_attacks[i][1] <= -180)
                        {

                          oslStopSound(quitter);
                          pie_attacks[i][0]=0;
                          rckchscr=0;

                        }

                        if (py > ((pie_attacks[i][3]-62)*court_zoom))
                        {
                          temp_benj.trans=255;
                          draw_benj(temp_benj, px, py, shielded, shield);
                        }


                      }
                    else
                      {
                        if (pie_attacks[i][1]==20) oslPlaySound(expl_sound2);
                        explode.stretchX = explode.stretchY = 20 - pie_attacks[i][1];
                        spr_draw(explode, pie_attacks[i][2], pie_attacks[i][3]);
                        pie_attacks[i][1]--;
                        if (pie_attacks[i][1]==0)
                        {
                          pie_attacks[i][0]=0;
                        }

                      }
                    }


                break;
              }

              case 4:
              {
                if ((mgcd < 1) && (health > 0))
                {
                  if ((pie_attacks[i][1] == diff*166) || (pie_attacks[i][1] == 0))
                  {
                     oslStopSound(giygas[giyg_flag%3]);
                  }
                  if (lightsoff)
                  {
                    oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
                    draw_benj(temp_benj, px, py, shielded, shield);


                    for (u=0; u<(2*diff+2); u++)
                    {
                      if (pie_attacks[u][0] != 4)
                        {
                          pie_attacks[u][0]=0;
                        }
                    }
                  }
                }

                 if (!pie_attacks[i][1])
                   {
                    lightsoff=0;
                    pie_attacks[i][0]=0;
                    oslPlaySound(giygas[giyg_flag%3]);
                   }

                pie_attacks[i][1]--;
                break;
              }

              case 5:
              {
                if ((mgcd < 1) && (health > 0))
                {
                  if (pie_attacks[i][1] < (px-108))
                    {
                      spr_draw(psycho, pie_attacks[i][1], abs(32*sin(0.0125*3.14*pie_attacks[i][1]))+8);
                    }
                  else
                    {

                      if (pie_attacks[i][2] > 2) pie_attacks[i][2]-=2; else pie_attacks[i][0]=0;
                      oslDrawFillRect(0,0,480,272, _RGBA(255,255,255,pie_attacks[i][2]));
                    }
                  pie_attacks[i][1]+=4;
                }
                break;
              }

              case 6:
              {
                if ((mgcd < 1) && (health > 0))
                {

                  if (pie_attacks[i][1] < 51)
                  {
                    if ((pie_attacks[i][1])%4 < 3)
                      {
                        visor.R=0;
                        visor.G=0;
                        visor.trans=192;
                      }
                    else
                      {
                        visor.R=visor.G=visor.B=visor.trans=255;
                      }
                  }
                  else
                  {
                    visor.R=255;
                    visor.G=255;
                    visor.trans=255;
                  }

                  if (pie_attacks[i][1] > 0) spr_draw(visor, pie_attacks[i][2], pie_attacks[i][3]);



                  if (px+32 < pie_attacks[i][2])
                    {
                      pie_attacks[i][2] -= diff;
                    }
                  else if (px+32 > pie_attacks[i][2])
                    {
                      pie_attacks[i][2] += diff;
                    }

                  if (py+48 < pie_attacks[i][3])
                    {
                      pie_attacks[i][3] -= diff;
                    }
                  else if (py+48 > pie_attacks[i][3])
                    {
                      pie_attacks[i][3] += diff;
                    }


                  pie_attacks[i][1]--;

                  if (!pie_attacks[i][1])
                  {
                    oslPlaySound(pew);
                    if ((pie_attacks[i][2] >= px-16) && (pie_attacks[i][2] <= px+80) && (pie_attacks[i][3] >= py+24) && (pie_attacks[i][3] <= py+72) && (!shielded))
                    {
                      health -= 2*diff+6;
                      if (putin) health -= 3;
                      oslPlaySound(benj_sfx[random(5)]);
                    }
                  }

                  if (pie_attacks[i][1] < 0)
                  {
                    explode.stretchX = explode.stretchY = 20 + 2*pie_attacks[i][1];
                    spr_draw(explode, pie_attacks[i][2], pie_attacks[i][3]);

                    if (pie_attacks[i][1] == -10) pie_attacks[i][0]=0;
                  }
                }
                break;
              }



              case 8:
              {
                if ((mgcd < 1) && (health > 0))
                {
                  if (bulbfell==1)
                  {
                    temp_bulb=oslSetImageTileSize(bulbasaur, 0, 128, 64, 64);
                    court_zoom = 0.00192*pie_attacks[i][4] + 0.562;
                    temp_bulb.stretchX = (int)(64*(float)court_zoom);
                    temp_bulb.stretchY = (int)(64*(float)court_zoom);

                    spr_draw(temp_bulb, pie_attacks[i][3], pie_attacks[i][4]);
                    pie_attacks[i][4] += 8;
                    if (pie_attacks[i][4] >= 136)
                    {
                      pie_attacks[i][4]=136;
                      bulbfell=2;
                    }

                    if (py > ((pie_attacks[i][4])*court_zoom))
                    {
                      draw_benj(temp_benj, px, py, shielded, shield);
                    }
                  }

                  else if (bulbfell==2)
                  {
                    if (pie_attacks[i][2] != 4)
                    {
                      temp_bulb=oslSetImageTileSize(bulbasaur, bulbfs*64, pie_attacks[i][2]*64, 64, 64);
                    }
                    else
                    {

                      if (abs(pie_attacks[i][3]-px) > abs(pie_attacks[i][4]-py))
                      {
                        if (pie_attacks[i][3] > px)
                        {
                          temp_bulb=oslSetImageTileSize(bulbasaur, 0, 192, 64, 64);
                        }
                        else
                        {
                          temp_bulb=oslSetImageTileSize(bulbasaur, 0, 64, 64, 64);
                        }
                      }
                      else
                      {
                        if (pie_attacks[i][4] > py)
                        {
                          temp_bulb=oslSetImageTileSize(bulbasaur, 0, 0, 64, 64);
                        }
                        else
                        {
                          temp_bulb=oslSetImageTileSize(bulbasaur, 0, 128, 64, 64);
                        }
                      }
                    }

                    court_zoom = 0.00192*pie_attacks[i][4] + 0.562;
                    temp_bulb.stretchX = (int)(64*(float)court_zoom);
                    temp_bulb.stretchY = (int)(64*(float)court_zoom);

                    spr_draw(temp_bulb, pie_attacks[i][3], pie_attacks[i][4]);

                    if (!(counter%52) && ((counter%416) < 364))
                    {
                      pie_attacks[i][2]=random(4);
                    }
                    else
                    {
                      switch(pie_attacks[i][2])
                      {
                        case 0:
                        if (pie_attacks[i][4] > 128) pie_attacks[i][4] -= 2; else pie_attacks[i][2]=2;
                        break;

                        case 1:
                        if (pie_attacks[i][3] < 400) pie_attacks[i][3] += 2; else pie_attacks[i][2]=3;
                        break;

                        case 2:
                        if (pie_attacks[i][4] < 240) pie_attacks[i][4] += 2; else pie_attacks[i][2]=0;
                        break;

                        case 3:
                        if (pie_attacks[i][3] > 80) pie_attacks[i][3] -= 2; else pie_attacks[i][2]=1;
                        break;
                      }
                    }



                    if ((counter%416) >= 364)
                    {
                      pie_attacks[i][2]=4;

                      if ((counter%416) == 364) oslPlaySound(bulbsfx[random(3)+3]);

                      if (pie_attacks[i][3] > px) pie_attacks[i][3] -= 4; else pie_attacks[i][3] += 4;
                      if (pie_attacks[i][4] > py) pie_attacks[i][4] -= 2; else if (pie_attacks[i][4] < 238) pie_attacks[i][4] += 2;

                    }



                    if ((((px-pie_attacks[i][3])*(px-pie_attacks[i][3])+(py-pie_attacks[i][4])*(py-pie_attacks[i][4])) <= 64) && (pie_attacks[i][2]==4) && (!shielded))
                    {
                      if (!stun) stun=200+3*diff;
                      pie_attacks[i][2]=random(4);
                      health -= diff+1;
                      if (putin) health -= diff;
                      oslPlaySound(benj_sfx[random(5)]);
                      counter += (counter%417)+1;
                      oslPlaySound(bulbsfx[0]);
                    }

                    if ((((px-pie_attacks[i][3])*(px-pie_attacks[i][3])+(py-pie_attacks[i][4])*(py-pie_attacks[i][4])) <= 1500) && (frappe >= 1))
                    {
                      if (swinging)
                      {
                      temp_bulb.B=0;
                      spr_draw(temp_bulb, pie_attacks[i][3], pie_attacks[i][4]);
                      ultlvl += 5-diff;
                      temp_bulb.B=255;
                        pie_attacks[i][1]--;
                        //if (osl_keys . held.triangle) pie_attacks[i][4]=0;
                        oslPlaySound(paf);
                        frappe=-1;
                        swinging=0;
                      }

                    }

                    bulbfs=(counter%20)/5;

                    if (py > ((pie_attacks[i][4])*court_zoom))
                    {
                      //oslSetAlpha(OSL_FX_DEFAULT, 0);
                      draw_benj(temp_benj, px, py, shielded, shield);
                    }
                  }

                  if (pie_attacks[i][1] <= 0)
                  {
                    bulbfell=0;
                    if (!pie_attacks[i][1]) oslPlaySound(bulbsfx[2]);
                    pie_attacks[i][2]=4;
                    pie_attacks[i][1]--;

                    if (pie_attacks[i][1] == -35)
                    {
                      pie_attacks[i][0]=0;
                    }

                    bulbfs=(abs(pie_attacks[i][1]))/9;
                    temp_bulb=oslSetImageTileSize(temp_bulb, bulbfs*64, pie_attacks[i][2]*64, 64, 64);
                    spr_draw(temp_bulb, pie_attacks[i][3], pie_attacks[i][4]);

                  }

                }
                break;

              case 9:
              {

                if ((mgcd <1) && (!lightsoff))
                {
                  if (pie_attacks[i][1] == 120*diff+120)
                  {


                    for(u=0; u<3; u++)
                    {
                      meteors[u][1] = random(176);
                      if (pie_attacks[i][2]) meteors[u][0]=-48; else meteors[u][0]=480;
                      meteors[u][2] = random(3)+1;
                    }

                    oslPlaySound(meteor_fall);
                  }
                  else
                  {
                    if (!al_get_sample_instance_position(meteor_fall.instance)) oslPlaySound(meteor_fall);

                    for(u=0; u<3; u++)
                    {

                      temp_met=oslSetImageTileSize(meteor, u*48, 0, 48, 48);
                      temp_met.stretchX = temp_met.stretchY = 12*meteors[u][2];
                      spr_draw(temp_met, meteors[u][0], meteors[u][1]);

                      if (pie_attacks[i][2]) meteors[u][0]+=random(9)+1; else meteors[u][0]-=random(9)+1;

                      meteors[u][1]+=4;

                      if ((meteors[u][1] < pie_attacks[i][3]+32) && (meteors[u][1] >= pie_attacks[i][3]))
                      {
                        explode . stretchX = explode . stretchY = 48;
                        spr_draw(explode, meteors[u][0], meteors[u][1]);
                        oslPlaySound(expl_sound2);
                      }

                      if (meteors[u][1] >= pie_attacks[i][3]+32)
                      {
                        if (((px-meteors[u][0])*(px-meteors[u][0])+(py+32-meteors[u][1])*(py+32-meteors[u][1]) <= 196) && (!shielded))
                        {
                          oslPlaySound(expl_sound2);
                          health -= round;
                          if (putin) health -= round;
                          oslPlaySound(benj_sfx[random(5)]);
                        }

                        if (pie_attacks[i][1] <= 0) meteors[u][2]=0; else meteors[u][2] = random(3)+1;
                        meteors[u][1]=random(176);
                        if (pie_attacks[i][2]) meteors[u][0]=-48; else meteors[u][0]=480;

                      }
                    }
                  }

                  pie_attacks[i][1]--;

                  if (pie_attacks[i][1] == 0)
                    {
                      oslStopSound(meteor_fall);
                    }

                  if (meteors[0][2]+meteors[1][2]+meteors[2][2] == 0) pie_attacks[i][0]=0;
                  }
                }
                break;

              case 10:
              {
                if ((mgcd <1) && (!lightsoff))
                {
                  if (!shielded)
                  {

                    if (pie_attacks[i][1] == 96)
                    {
                      stunning.stretchX = stunning.stretchY = 24;
                      oslPlaySound(stun_sound);
                    }


                    for (u=0; u<135; u++)
                    {
                      stunning.R=0;
                      stunning.trans=192;
                      if (stunning.stretchX > 4) spr_draw(stunning, (u%15)*32+12, ((int)(u/15))*32+12);
                      stunning.R = stunning.trans = 255;
                    }
                  }

                  pie_attacks[i][1]--;

                  if (!((pie_attacks[i][1])%8))
                  {
                    if (stunning.stretchX > 4)
                    {
                      stunning.stretchX -= 4;
                      stunning.stretchY -= 4;
                    }
                  }

                  if (!(pie_attacks[i][1]))
                  {
                    pie_attacks[i][0]=0;
                  }
                }
                break;
              }

              case 11:
              {
                if ((mgcd <1) && (!lightsoff) && (health > 0))
                {
                  if (pie_attacks[i][2] > 0)
                  {
                    temp_psis=oslSetImageTileSize(psis, ((int)(counter%18)/6)*16, 0, 16, 32);
                    temp_psis=oslSetImageRotCenter(temp_psis);

                    temp_psis.angle = pie_attacks[i][1];

                    court_zoom = 0.00192*(py+24) + 0.562;
                    psis.stretchX = (int)(16*(float)court_zoom);
                    psis.stretchY = (int)(32*(float)court_zoom);

                    spr_draw(temp_psis, px+32+pie_attacks[i][2]*cos(pie_attacks[i][1]*3.14/180), py+48+pie_attacks[i][2]*sin(pie_attacks[i][1]*3.14/180));
                    spr_draw(temp_psis, px+32+pie_attacks[i][2]*cos((pie_attacks[i][1]+180)*3.14/180), py+48+pie_attacks[i][2]*sin((pie_attacks[i][1]+180)*3.14/180));

                    pie_attacks[i][1] += 16;

                    if (pie_attacks[i][1] > 360)
                    {
                      pie_attacks[i][1] = pie_attacks[i][1]%360;
                      pie_attacks[i][2]-=2;
                    }
                  }
                  else if (pie_attacks[i][2] <= 0)
                  {
                      explode.stretchX = explode.stretchY = 40 + 4*pie_attacks[i][2];
                      spr_draw(explode, px, py);

                      if (!(pie_attacks[i][2])) oslPlaySound(expl_sound);

                      if ((!shielded) && (counter%2))
                      {
                        health -= diff;
                        if (putin) health -= diff;
                        oslPlaySound(benj_sfx[random(5)]);
                      }
                      pie_attacks[i][2]--;

                      if (pie_attacks[i][2] == -10)
                      {
                        oslStopSound(psis_sfx);
                        pie_attacks[i][0]=0;
                      }
                  }
                }
                break;
              }

              case 7:
              {
                if ((mgcd < 1) && (health > 0) && (!lightsoff))
                {
                  if (!(pie_attacks[i][1]))
                  {
                    temp_recipe=oslSetImageTileSize(recipe,0, 0, 32, 136);
                  }
                  else
                  {
                    temp_recipe=oslSetImageTileSize(recipe, 32, 0, 32, 136);
                  }
                  temp_recipe.trans=128;

                  if (pie_attacks[i][2] > 0)
                  {
                    oslDrawFillRect(pie_attacks[i][4], 0, (pie_attacks[i][1])?480:0, 272, _RGBA(0, 0, 0, 128));

                    for(u=0; u<4; u++)
                    {
                      spr_draw(temp_recipe, pie_attacks[i][4]+((pie_attacks[i][1])?0:32), u*136-(global_fr%137));
                    }

                    //oslSetAlpha(OSL_FX_DEFAULT, 0);

                    if (((pie_attacks[i][1]) && (pie_attacks[i][2] <= (480-pie_attacks[i][3]))) ||
                        ((!(pie_attacks[i][1])) && (pie_attacks[i][2] <= pie_attacks[i][3])))
                    {


                      if (((pie_attacks[i][1]) && (px+32 >= pie_attacks[i][4])) || (!(pie_attacks[i][1]) && (px+32 <= pie_attacks[i][4])))
                      {
                        if (!al_get_sample_instance_position(mouth_sfx[0].instance)) oslPlaySound(mouth_sfx[0]);
                        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
                        spr_draw(mouth, 240, 136);

                        pie_attacks[i][2]++;
                        mouth.stretchX += 6;
                        mouth.stretchY = 1.63*mouth.stretchX;

                        if (mouth . stretchY >= 420)
                        {
                          if (!al_get_sample_instance_position(mouth_sfx[1].instance)) oslPlaySound(mouth_sfx[1]);
                          oslDrawFillRect(0, 0, 480, 272, _RGB(255, 0, 0));
                        }

                        if (mouth . stretchY >= 450)
                        {
                          health -= 2*diff+4;
                          if (putin) health -= 2;
                          pie_attacks[i][0]=0;
                          mouth . stretchX = 10;
                          mouth . stretchY = 16;
                        }

                      }
                    else
                      {
                        if (!(pie_attacks[i][1]))
                        {
                          pie_attacks[i][4]--;

                        }
                        else
                        {
                          pie_attacks[i][4]++;

                        }
                      }
                    }
                    else
                    {
                      if (!(pie_attacks[i][1]))
                      {
                        if (pie_attacks[i][4] < pie_attacks[i][3]) pie_attacks[i][4]++;
                        if (pie_attacks[i][4] > 512)
                        {
                          darkness=0;
                          pie_attacks[i][0]=0;
                        }
                      }
                      else
                      {
                        if (pie_attacks[i][4] > pie_attacks[i][3]) pie_attacks[i][4]--;
                        if (pie_attacks[i][4] < -64)
                        {
                          darkness=0;
                          pie_attacks[i][0]=0;
                        }
                      }
                    }
                    pie_attacks[i][2]--;


                  }
                  else
                  {
                    darkness=0;
                    pie_attacks[i][0]=0;
                  }

                  if (pie_attacks[i][2] <= 0)
                  {
                    pie_attacks[i][0]=0;
                  }
                }
                break;
              }


              }
            }
          }
        }

        if ((!al_get_sample_instance_position(minigametime.instance)) && (!al_get_sample_instance_position(tvnoisesound.instance)) && (!paused))
          {
            tvnoise_ev=random((3800/(100*round*diff))*pie_ent.pie_hp+4200);
          }

        if ((tvnoise_ev <= 4000) && (tvnoise_ev > 3940) && (round==2)  && (health>0) && (!lightsoff) && (!paused))
        {
          i=random(20);
          spr_draw(tvnoise[i], 0, 0);
          if (!al_get_sample_instance_position(tvnoisesound.instance)) oslPlaySound(tvnoisesound);
          tvnoise_ev--;
        }
        else
        {
          oslStopSound(tvnoisesound);
        }
      }

      if ((pie_ent.pie_hp) && (!mgcd))
      {
        reddv = (-0.64/(round*diff))*pie_ent.pie_hp+64;

        oslDrawFillRect(0, 0, 480, 272, _RGBA(255, 0, 0, (int)(reddv*1.5)));
      }



      if ((health < 1) || (pie_ent.pie_hp < 1))
      {
        oslStopSound(psis_sfx);
        ball_ent.speed_v=0;
        if (pie_ent.pie_hp < 1)
        {
          if (!ko_frame)
          {
            a=pie_ent.pie_x-128+random(256);

            for (i=0; i<8; i++)
              {
                for (j=0; j<5; j++)
                {
                  pie_attacks[i][j]=0;
                }
                bulbfell=0;
              }
          }

          mort=1;


          if (round==2)
          {
            if (!(ko_frame%9))
            {
              oslPlaySound(expl_sound);
              kx=pie_ent.pie_x-128+random(256);
              ky=random(136);
            }

            if ((ko_frame%6) < 3)
            {
              explode.stretchX = 64;
              explode.stretchY = 96;
              spr_draw(explode, kx, ky);
            }
            else
            {
              explode.stretchX = 32;
              explode.stretchY = 48;
              spr_draw(explode, kx+16, ky+24);
            }
          }
        }

        if (ko_frame == 0)
        {
          oslPlaySound(ko_sfx);
          oslPlaySound(expl_sound);
          u=0;
        }

        if (health < 1)
        {
          if (ko_frame < 60)
          {
            if ((ko_frame%6) < 3)
            {
              explode.stretchX = 64;
              explode.stretchY = 96;
              spr_draw(explode, px, py);
            }
            else
            {
              explode.stretchX = 32;
              explode.stretchY = 48;
              spr_draw(explode, px+16, py+24);
            }
          }
        }


        if (ko_frame < 25)
        {
          temp_ko=oslSetImageTileSize(ko,0,0,120,96);
          spr_draw(temp_ko, (int)(9.6*ko_frame-120), 88);
        }

        if ((ko_frame >= 25) && (ko_frame <= 50))
        {
          temp_ko=oslSetImageTileSize(ko,0,0,120,96);
          spr_draw(temp_ko, 120, 88);
          temp_ko=oslSetImageTileSize(ko,120,0,120,96);
          spr_draw(temp_ko, (int)(-9.6*ko_frame+720), 88);
        }

        if (ko_frame > 50)
        {
          temp_ko=oslSetImageTileSize(ko,0,0,240,96);
          spr_draw(temp_ko, 120, 88);
        }

        if (ko_frame >= 140) quit=1;


        ko_frame++;
      }

      if (health < 0) health=0;

      if (!mgcd)
      {
          temp_no=oslSetImageTileSize(numberz,160,0,16,16);
          spr_draw(temp_no, 2, 2);

          u=random(5);

          temp_ultg=oslSetImageTileSize(ultgauge,0,0,64,8);
          spr_draw(temp_ultg, 2+((round==2)?u:0), (round==2)?20+u:21);
          temp_ultg=oslSetImageTileSize(ultgauge,(int)((ultlvl/60)*6),9,6,6);
          spr_draw(temp_ultg, 69+((round==2)?u:0), (round==2)?21+u:22);
          spr_draw(shlgauge, 2+((round==2)?u:0), (round==2)?28+u:30);

          if (ultlvl > 1) oslDrawFillRect(4+((round==2)?u:0), (round==2)?22+u:23, ultlvl%60+4+((round==2)?u:0), (round==2)?25+u:26, _RGB(0,0,255));
          if (shldlvl > 1) oslDrawFillRect(4+((round==2)?u:0), (round==2)?31+u:32, shldlvl+4+((round==2)?u:0), (round==2)?34+u:35, _RGB(255,150,255));

          if ((ultlvl%60) > 15)
          {
            if ((ultrectshine+16) <= ultlvl%60)
            {
              oslDrawFillRect(ultrectshine+((round==2)?u:0), (round==2)?22+u:23, ultrectshine+13+((round==2)?u:0), (round==2)?25+u:26, _RGB(0,255,255));
            }
            else
            {
              oslDrawFillRect(ultrectshine+((round==2)?u:0), (round==2)?22+u:23, ultlvl%60+3+((round==2)?u:0), (round==2)?25+u:26, _RGB(0,255,255));
            }

            if ((ultrectshine+8) <= ultlvl%60)
            {
              oslDrawFillRect(ultrectshine+4+((round==2)?u:0), (round==2)?22+u:23, ultrectshine+9+((round==2)?u:0), (round==2)?25+u:26, _RGB(255,255,255));
            }
            else
            {
              oslDrawFillRect(ultrectshine+4+((round==2)?u:0), (round==2)?22+u:23, ultlvl%60+3+((round==2)?u:0), (round==2)?25+u:26, _RGB(255,255,255));
            }

            ultrectshine++;

            if (ultrectshine > ultlvl%60)
            {
              ultrectshine=0;
            }
          }

          i=random(15);

          u=18;

          if (health < 25) j=16; else j=0;

            if (health / 100)
            {
              temp_no=oslSetImageTileSize(numberz,((round==2)?((i<12)?16:random(144)):16),0,16,16);
              spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
              u += 16;
            }

            if (health > 9)
            {
              if (round==2)
                {
                  if (i<12)
                    {
                      temp_no=oslSetImageTileSize(numberz,((health%100)/10)*16,j,16,16);
                    }
                  else
                    {
                      temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
                    }
                }
              else temp_no=oslSetImageTileSize(numberz,((health%100)/10)*16,j,16,16);
            spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
            u += 16;
            }

            if (round==2)
              {
                if (i<12)
                  {
                    temp_no=oslSetImageTileSize(numberz,(health%10)*16,j,16,16);
                  }
                else
                  {
                    temp_no=oslSetImageTileSize(numberz,random(128),j,16,16);
                  }
              }
            else temp_no=oslSetImageTileSize(numberz,(health%10)*16,j,16,16);
            spr_draw(temp_no, u + ((round==2)?random(3):0), ((round==2)?1+random(3):2));
        }



      if ((paused) && (health))
      {
        oslDrawFillRect(0,0,480,272, _RGBA(0,8,0,224));
        spr_draw(paused_gfx, 240, 136);
      }

      if ((!(counter%6)) && (shldlvl<60) && (!shielded) && (!paused)) shldlvl++;


      if (counter < 256)
      {
        if (counter < 128)
        {
          temp_prem=oslSetImageTileSize(premess,0,0,256,64);

          if (counter < 32) temp_prem.stretchY = counter*2;
          else if (counter > 96) temp_prem.stretchY = 128-counter*2;
          else temp_prem.stretchY = 64;

          spr_draw(temp_prem, 112, 136-(premess.stretchY)/2);
        }

        else if (counter >= 128)
        {
          temp_prem=oslSetImageTileSize(premess,0,64,256,64);
          if (counter < 160) temp_prem.stretchY = (counter-128)*2;
          else if (counter > 224) temp_prem.stretchY = 256-counter*2;
          else temp_prem.stretchY = 64;

          spr_draw(temp_prem, 112, 136-(premess.stretchY)/2);
        }

        // if (counter==255) oslDeleteImage(premess);
      }



      /*if ((nbp==1) && (DEBUG))
      {
        if (osl_keys.held.R)
        {
          for (i=0; i<16; i++)
          {
            sprintf(buffer,"%d",(i<15)?att_cooldowns[i]:(int)reddv);
            u = oslGetStringWidth(buffer);

            oslSetTransparentColor(RGB(255,0,255));
            oslSetBkColor(RGB(255,0,255));
            oslSetTextColor(RGB(255, 255, 255));
            oslDrawString(480-u, i*12, buffer);
          }
        }


        if (osl_keys.held.L)
        {
          for (i=0; i<10; i++)
          {
            sprintf(buffer,"%d", (i<8)?pie_attacks[i][0]:
                            (i==8)?(pie_ent.pie_hp):
                                (int)(-2.55/(round*diff)*(pie_ent.pie_hp)+255));
            u = oslGetStringWidth(buffer);

            oslSetTransparentColor(RGB(255,0,255));
            oslSetBkColor(RGB(255,0,255));
            oslSetTextColor(RGB(255, 255, 255));
            oslDrawString(480-u, i*12, buffer);
          }
        }
      }*/


      if ((att_ch_timer < 80) && (nbp==2) && (health > 0) && (pie_ent.pie_hp > 0) && (!paused))
      {
        spr_draw(attch, 32, 33);
        spr_draw(cp2, 40 + cursor2p*32, 68);
        for (i=0; i<15; i++)
        {
          if (att_cooldowns[i] > 1)
          {
            sprintf(buffer, "%d", att_cooldowns[i]/60);

            oslDrawFillRect(32+i*32, 33, 32+(i+1)*32, 67, _RGBA(1, 1, 1, 128));

            if (i < 12) oslDrawString(36+i*32, 42, buffer);
            if ((i==12) && (pie_ent.pie_hp > 25*round*diff) && (ulted == 0) && (att_cooldowns[12] > 1))
            {
              al_draw_line(32+i*32, 33, 32+(i+1)*32, 66, _RGB(255, 0, 0), 0);
            }
            if ((i==13) && (pie_ent.pie_hp > 10*round*diff) && (ulted != 1) && (att_cooldowns[13] > 1))
            {
              al_draw_line(32+i*32, 33, 32+(i+1)*32, 66, _RGB(255, 0, 0), 0);
            }
          }
        }
      }

      if (nbp == 2)
      {
        oslSetTextColor( _RGBA(255, 255, 255, 255-(global_fr%64)*4));
        oslDrawString(270, 2, "OTHER MORTAL, USE I OR O TO ATTACK!");
        oslSetTextColor( _RGB(255, 255, 255));
      }

    oslEndDrawing();
    oslSwapBuffers();
    }
   
    //oslWaitVSync();

      /*oslSwapBuffers();
    oslWaitVSync();*/


    if (mgcd==100)
      {
        u=random(6);

        switch(u)
        {
          case 0:
          i=sonicexe(diff);
          break;

          case 1:
          i=mincer(diff);
          break;

          case 2:
          i=shoot_teevees(diff, &health, round);
          break;

          case 3:
          i=flappy_cacodemon(diff);
          break;

          case 4:
          i=love_boat(diff);
          break;

          case 5:
          i=sonicexe2(diff);
          break;
        }
        if (i)
          {
           oslPlaySound(giygas[giyg_flag%3]);

          } else health=0;


        for (i=0; i<8; i++)
          {
            for (j=0; j<5; j++)
            {
              pie_attacks[i][j]=0;
            }
            bulbfell=0;
          }

        pie_ent.pie_facemode=0;
        mgcd=0;
        mouth.stretchX = 10;
        if (diff != 3) a=diff; else a=2;
        ball_ent = apply_impulse(ball_ent, random(2)?a:-1*a, random(2)?a:-1*a, (180-15*frappe)*3.14/180);
        frappe=-1;
        rckchscr=0;
        if (putin) putin=0;
      }
    }


    if ((mort==1) && (round==2))
    {
      oslStopSound(tvnoisesound);
      oslDeleteSound(paf);
      paf = oslLoadSoundFile("./sfx/sfx-0029.wav");

    oslStopSound(giygas[2]);

      oslPlaySound(tvnoisesound);


      for(i=0; i<420; i++)
      {
        oslStartDrawing();
        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
        u=random(4);
        //oslSetBilinearFilter(1);
        spr_draw(tvnoise[u], 0, 0);
        spr_draw(tvnoise[u], random(480), random(272));
        spr_draw(tvnoise[u], random(480)-240, random(272)-136);
        spr_draw(tvnoise[u], random(240)-120, random(136)-68);
        //oslSetBilinearFilter(0);
      oslEndDrawing();
      oslWaitVSync();
      oslSwapBuffers();
      }

      oslStopSound(tvnoisesound);
      oslPlaySound(paf);

      for(i=0; i<=135; i+=2)
      {
        oslStartDrawing();
        oslDrawFillRect(0, 0, 480, 272, _RGB(0, 0, 0));
        oslDrawFillRect(0, i, 480, 272-i, _RGB(255, 255, 255));
        oslEndDrawing();
        oslWaitVSync();
        oslSwapBuffers();
      }

      fadeout();
    }


    for (i=0; i<3; i++) oslDeleteSound(giygas[i]);

  for (i=0; i<4; i++) oslDeleteSound(dictators_sfx[i]);

  for (i=0; i<5; i++) oslDeleteImage(tvnoise[i]);

  for (i=0; i<7; i++) oslDeleteSound(bulbsfx[i]);

  for (i=0; i<11; i++) oslDeleteSound(benj_sfx[i]);

  oslDeleteSound(tvnoisesound);
 
  if (round==2)
  {
    for (i=0; i<33; i++) oslDeleteImage(giyg_bg[i]);
  }

    oslDeleteSound(ko_sfx);
  oslDeleteSound(quitter);
  oslDeleteSound(pew);
  oslDeleteSound(paf);
  oslDeleteSound(psis_sfx);
  oslDeleteImage(numberz);
  oslDeleteImage(starsky);
  oslDeleteImage(lightning);
  oslDeleteImage(pie);
  oslDeleteImage(sleepwell);
  oslDeleteImage(ko);
  oslDeleteImage(explode);
  oslDeleteImage(ball_gfx);
  oslDeleteImage(ball_shad);
  oslDeleteImage(mgswirl);
  oslDeleteImage(powerball);
  oslDeleteSound(minigametime);
  oslDeleteSound(expl_sound);
  oslDeleteSound(expl_sound2);
  oslDeleteSound(meteor_fall);
  oslDeleteSound(stun_sound);
  oslDeleteSound(elec);
  oslDeleteSound(thunder);
  oslDeleteSound(whine);
  oslDeleteSound(mouth_sfx[0]);
  oslDeleteSound(mouth_sfx[1]);
  oslDeleteSound(bounce);
  oslDeleteImage(rckch[0]);
  oslDeleteImage(rckch[1]);
  oslDeleteImage(psycho);
  oslDeleteImage(paused_gfx);
  oslDeleteImage(ultgauge);
  oslDeleteImage(shlgauge);
  oslDeleteImage(visor);
  oslDeleteImage(bulbasaur);
  oslDeleteImage(recipe);
  oslDeleteImage(shield);
  oslDeleteImage(meteor);
  oslDeleteImage(stunning);
  oslDeleteImage(juche);
  oslDeleteImage(psis);
  oslDeleteImage(dictators);
  oslDeleteImage(mouth);
  oslDeleteImage(star);
  oslDeleteImage(suppo_gfx);
  oslDeleteImage(ulting_gfx);
  oslDeleteImage(attch);
  oslDeleteImage(cp2);

    return mort;
}

void taunt(int nbt)
{
  int frame=0, k;
  const char *texts[12] = {"YOUR HEAD IS ALREADY OFF", "YOU WON'T SEE THE MOCK TURTLE", "MOTHER", "YOU'RE NOT EVEN TRYING", "AEIOU", "UNHAPPY UNBIRTHDAY", "YOU'RE LATE YOU'RE LATE YOU'RE LATE",
               "NO TIME TO SAY GOODBYE", "PAINTING YOUR BOWELS RED", "HOW DOTH THE LITTLE OF YOU LIVE", "I HAVE A VERY GOOD ADVICE", "THE WALRUS ATE THE CARPENTER"};

  OSL_SOUND wind = oslLoadSoundFile("./sfx/sfx-0019.wav");

  k = oslGetStringWidth(texts[nbt]);

  oslPlaySound(wind);

  while(frame<282)
  {
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));


    if (frame < 82)
    {
      oslSetTextColor(_RGB(frame*3, frame*3, frame*3));
      oslDrawString((480 - k)/2, 130, texts[nbt]);
    }
    if ((frame >= 82) && (frame <= 200))
    {
      oslSetTextColor(_RGB(255, 255, 255));
      oslDrawString((480 - k)/2, 130, texts[nbt]);
    }
    else if (frame > 200)
    {
      oslSetTextColor(_RGB((282-frame)*3, (282-frame)*3, (282-frame)*3));
      oslDrawString((480 - k)/2, 130, texts[nbt]);
    }
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
    frame++;
  }

  oslDeleteSound(wind);
}

void creepypasta(int cpn)
{
  int i, j, k, l, frame=0;
  char buffer[20];
  OSL_IMAGE suicidemouse[18];
  OSL_IMAGE temp_gfx;
  OSL_SOUND creepysfx, sfx;
  int bok[4][16];
  const char *text[7]={"y wud u do dis","acually is dolan","fak u","FAGGT","u litl SHIZNIT", "gooby pls", "i wuz ins al a long"};

  switch(cpn)
  {

  case 0:

    for (i=0; i<18; i++)
    {
      sprintf(buffer,"./gfx/gfx-%d.png",i+1160);
      suicidemouse[i]=LoadImg(buffer);

      suicidemouse[i].stretchX = 363;
      suicidemouse[i].stretchY = 272;
      suicidemouse[i]=oslSetImageRotCenter(suicidemouse[i]);
    }

    creepysfx = oslLoadSoundFile("./sfx/sfx-0065.wav");
    oslSetSoundLoop(creepysfx, 1);
    oslPlaySound(creepysfx);

    i=0;



    while (frame < 620)
    {
      if (!(frame%6)) i++;
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));
      spr_draw(suicidemouse[i%18],240,138);
        oslEndDrawing();
        oslSwapBuffers();

      oslWaitVSync();
        frame++;
    }

    for (i=0; i<18; i++)
    {
       oslDeleteImage(suicidemouse[i]);
    }

    oslStopSound(creepysfx);
    oslDeleteSound(creepysfx);
   
    break;



  case 1:
    suicidemouse[0]=LoadImg("./gfx/gfx-1038.png");
    suicidemouse[1]=LoadImg("./gfx/gfx-1039.png");

    suicidemouse[0]=oslSetImageRotCenter(suicidemouse[0]);

    creepysfx = oslLoadSoundFile("./sfx/sfx-0058.wav");

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);

    while (frame < 45)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      suicidemouse[0]=oslSetAlpha(suicidemouse[0], frame*4);
      spr_draw(suicidemouse[0],240,271);
      oslEndDrawing();
      //frame_debug(frame);
      oslSwapBuffers();

      suicidemouse[0].stretchX +=2;
      suicidemouse[0].stretchY +=2;

      oslSetImageRotCenter(suicidemouse[0]);
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      frame++;
      oslWaitVSync();
    }

    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
   
    for (i=0; i<4; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));
      spr_draw(suicidemouse[1],0,0);
      oslEndDrawing();
      oslSwapBuffers();
    }
    fadeout();
    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);

    /*while (oslGetSoundChannel(creepysfx) == 0);*/

    oslDeleteSound(creepysfx);
  break;

  case 2:

    j = random(2);

    if (!j) suicidemouse[0] = LoadImg("./gfx/endisneigh.png");
    else suicidemouse[0] = LoadImg("./gfx/endisneigh2.png");

    if (!j) creepysfx = oslLoadSoundFile("./sfx/sfx-0083.wav");
    else creepysfx = oslLoadSoundFile("./sfx/sfx-0109.wav");

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);

    for (i=0; i<10; i++)
    {
      oslStartDrawing();
      spr_draw(suicidemouse[0],0,0);
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
    fadeout();
    oslDeleteImage(suicidemouse[0]);
    break;


  case 3:
    suicidemouse[0] = LoadImg("./gfx/safe.png");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);
    creepysfx = oslLoadSoundFile("./sfx/sfx-0026.wav");

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);

    for (i=0; i<3; i++)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }

    for (i=0; i<200; i++)
      {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(suicidemouse[0],239,135);
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      }

    fadeout();
    oslDeleteImage(suicidemouse[0]);
    oslDeleteSound(creepysfx);
    break;

  case 4:
    for (i=0; i<4; i++)
    {
      sprintf(buffer,"./gfx/bnours%d.png",i+1);
      suicidemouse[i]=LoadImg(buffer);
    }
    creepysfx = oslLoadSoundFile("./sfx/sfx-0149.wav");

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);

    i=0;

    while (frame < 600)
        {
          if (!(frame%4)) i++;
          oslStartDrawing();
          spr_draw(suicidemouse[i%4],0,0);
          oslEndDrawing();
            oslSwapBuffers();
            frame++;
          oslWaitVSync();
        }

        fadeout();

    for (i=0; i<4; i++)
    {
       oslDeleteImage(suicidemouse[i]);
    }
    oslDeleteSound(creepysfx);
    break;

  case 5:
    suicidemouse[0] = LoadImg("./gfx/court_joy.png");
    suicidemouse[1] = LoadImg("./gfx/gfx-0717.png");
    creepysfx = oslLoadSoundFile("./sfx/sfx-0147.wav");
    sfx=oslLoadSoundFile("./sfx/sfx-0011.wav");

    oslPlaySound(sfx);

    for (j=0; j<256; j+=3)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(255,255,255));

      suicidemouse[0]=oslSetAlpha(suicidemouse[0], j);
      suicidemouse[1]=oslSetAlpha(suicidemouse[1], j);
      spr_draw(suicidemouse[0],0,0);
      spr_draw(suicidemouse[1],177,215);

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }

    /*oslSetAlpha(OSL_FX_DEFAULT,0);*/

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);

    while (frame < 292)
    {
      oslStartDrawing();
      spr_draw(suicidemouse[0],0,0);
      spr_draw(suicidemouse[1],177,215);
      oslEndDrawing();

      oslSwapBuffers();

      frame++;
      oslWaitVSync();
    }

    fadeout();
    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    oslDeleteSound(creepysfx);
    oslDeleteSound(sfx);
    break;

  case 6:
    creepysfx = oslLoadSoundFile("./sfx/sfx-0060.wav");
    suicidemouse[0] = LoadImg("./gfx/oag1.png");
    suicidemouse[1] = LoadImg("./gfx/oag2.png");

    oslStartDrawing();
    spr_draw(suicidemouse[0],0,0);
    oslEndDrawing();

    oslSwapBuffers();

    while (frame < 720)
    {
      if (frame==480)
      {
        oslSetSoundLoop(creepysfx, 0);
        oslPlaySound(creepysfx);
      }

      if (frame >= 480)
      {

        oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
        spr_draw(suicidemouse[1],173,26);
        oslEndDrawing();
        oslSwapBuffers();

      }
      else if (frame < 480)
      {
        oslStartDrawing();
        spr_draw(suicidemouse[0],0,0);
        oslEndDrawing();
        oslSwapBuffers();
      }


      frame++;
      oslWaitVSync();
    }

    fadeout();
    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    oslDeleteSound(creepysfx);
    break;

  case 7:
    creepysfx = oslLoadSoundFile("./sfx/sfx-0148.wav");
    suicidemouse[0] = LoadImg("./gfx/smurf_village.png");
    suicidemouse[1] = LoadImg("./gfx/smurf_sprite.png");
    suicidemouse[2] = LoadImg("./gfx/smurf_papazombie.png");

    oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(suicidemouse[0],0,0);
    oslEndDrawing();

    i=0;
    j=-32;
    frame=0;

    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);
    suicidemouse[2]=oslSetImageRotCenter(suicidemouse[2]);

    //fadein(suicidemouse[0]);

    while (frame < 400)
    {

      if (!(frame%2))
      {
        if (j < 222) j+=4;
      }
      if (!(frame%3))
      {
        i++;
      }

        oslStartDrawing();
        spr_draw(suicidemouse[0],0,0);
        temp_gfx = oslSetImageTileSize(suicidemouse[1],(i%8)*32,0,32,42);
        temp_gfx.stretchX = 64;
        temp_gfx.stretchY = 84;
        spr_draw(temp_gfx, j, 181);
        oslEndDrawing();

      if (j >= 222)
      {
        oslStartDrawing();
        spr_draw(suicidemouse[0],0,0);
        temp_gfx = oslSetImageTileSize(suicidemouse[1],256,0,32,42);
        temp_gfx.stretchX = 64;
        temp_gfx.stretchY = 84;
        spr_draw(temp_gfx, j, 181);

        oslEndDrawing();


        if (frame > 248)
        {
          oslStartDrawing();
            oslDrawFillRect(0,0,480,272, _RGBA(255,0,0,155));
          suicidemouse[2]=oslSetAlpha(suicidemouse[2], 250);
            spr_draw(suicidemouse[2],238,136);
          if (!(frame%2))
            {
              suicidemouse[2].stretchX+=16;
              suicidemouse[2].stretchY+=16;
            }
          oslEndDrawing();
        }
      }

      //frame_debug(frame);

      oslSwapBuffers();
      frame++;
      oslWaitVSync();
    }

    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    oslDeleteImage(suicidemouse[2]);
    oslDeleteSound(creepysfx);

    /*oslSetBilinearFilter(1);
   

    oslDeleteSound(sfx);*/


    break;

  case 8:
    creepysfx = oslLoadSoundFile("./sfx/sfx-0151.wav");
    suicidemouse[0] = LoadImg("./gfx/squiward_suicide.png");
    suicidemouse[1] = LoadImg("./gfx/bikini_hell.png");

    suicidemouse[0]=oslSetImageRotCenter(suicidemouse[0]);
    suicidemouse[1]=oslSetImageRotCenter(suicidemouse[1]);

    oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    oslEndDrawing();


    oslSetSoundLoop(creepysfx, 0);
    oslPlaySound(creepysfx);



    frame=0;

    while((suicidemouse[0].stretchX) >= 0)
    {
      if (!(frame%2))
      {
      oslStartDrawing();
      spr_draw(suicidemouse[1],240,136);
      spr_draw(suicidemouse[0],240,136);
      if (!(frame%4) && (frame < 282))
        {
          suicidemouse[0].stretchX++;
          suicidemouse[0].stretchY++;
          suicidemouse[0].angle += 6;
        }
      if (frame >= 282)
        {
          suicidemouse[0].stretchX-=3;
          suicidemouse[0].stretchY-=3;
          suicidemouse[0].angle -= 11;
        }
      oslEndDrawing();
      //frame_debug(frame);
      oslSwapBuffers();
      }
      else
      {
        oslStartDrawing();
        spr_draw(suicidemouse[1],240,136);
        spr_draw(suicidemouse[0],240,136);
        oslEndDrawing();
        oslSwapBuffers();
      }
      oslWaitVSync();
      frame++;
    }

    oslStartDrawing();
    spr_draw(suicidemouse[1],240,136);
    oslEndDrawing();
    oslSwapBuffers();

    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
   
    oslDeleteSound(creepysfx);
    /*oslSetTransparentColor(RGB(255,0,255));
    oslDeleteSound(sfx);*/

    break;

    case 9:
    creepysfx = oslLoadSoundFile("./sfx/sfx-0152.wav");

    j=0;
    i=0;

    frame=0;

    oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    oslEndDrawing();

    for (k=0; k<16; k++)
    {
      suicidemouse[k] = LoadImg("./gfx/creepycircle.png");
      suicidemouse[k] = oslSetImageRotCenter(suicidemouse[k]);
    }

    while (frame<16*2)
    {
      if (!(frame%2))
      {
      bok[0][i]=(2*(random(24)+1))-24;


      bok[1][i]= random(128)+127;
      bok[2][i]= random(128)+127;
      bok[3][i]= random(128)+127;




      oslStartDrawing();
      if (bok[0][i] > 0) suicidemouse[i].stretchX = bok[0][i]; else suicidemouse[i].stretchX = 1;
      if (bok[0][i] > 0) suicidemouse[i].stretchY = bok[0][i]; else suicidemouse[i].stretchY = 1;

      spr_draw(suicidemouse[i],(i%4)*40+172, (i/4)*40+64);

      oslEndDrawing();
      i++;
      }
      else
      {
        oslWaitVSync();
      }
      frame++;
    }

    oslSwapBuffers();
    //oslWaitKey();


    i=0;
    j=0;
    k=0;
    frame=0;

    while(k < 100)
    {

      if (!(frame%4))
      {
          oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

          for (j=0; j<16; j++)
          {

            if (bok[0][j] > -24) bok[0][j]--;

            if (bok[0][j] <= -24)
              {
                k++;
                bok[0][j]=24;
                i=0;
   
                oslPlaySound(creepysfx);

                bok[1][j]= random(128)+127;
                bok[2][j]= random(128)+127;
                bok[3][j]= random(128)+127;
              }

            if (bok[0][j] > 1) suicidemouse[j].stretchX = suicidemouse[j].stretchY = bok[0][j];

              suicidemouse[j].R=bok[2][j];
            suicidemouse[j].G=bok[3][j];
            suicidemouse[j].B=bok[1][j];

            if (bok[0][j] > 21)  suicidemouse[j].R=suicidemouse[j].G=suicidemouse[j].B=255;

            spr_draw(suicidemouse[j],(j%4)*40+172, (j/4)*40+64);
          }
          oslEndDrawing();
          //frame_debug(frame);
          oslSwapBuffers();
          //oslWaitKey();



      }
      else
      {
        oslWaitVSync();
      }

      frame++;
    }

    for(i=0; i<16; i++) oslDeleteImage(suicidemouse[i]);
    oslDeleteSound(creepysfx);
    break;

  case 10:
  case 15:
    creepysfx = oslLoadSoundFile("./sfx/sfx-0057.wav");
    sfx = oslLoadSoundFile("./sfx/bark.wav");

    suicidemouse[0] = LoadImg("./gfx/gfx-0253.png");
      suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);



    for (i=1; i<9; i++)
    {
      sprintf(buffer,"./gfx/gfx-0%d.png",i+661);
      suicidemouse[i]=LoadImg(buffer);
      suicidemouse[i].stretchX = 480;
      suicidemouse[i].stretchY = 272;
    }

    frame=0;
    j=0;
    /*oslStopSound(w4c);*/

    oslSetSoundLoop(creepysfx, 1);
    oslPlaySound(creepysfx);

    while (frame < 750)
    {

      if (!(frame%16))
      {
        suicidemouse[0].stretchX++;
        suicidemouse[0].stretchY = (int)(1.27*(suicidemouse[0].stretchX));
      }

      if (!(frame%4))
      {
        oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
          spr_draw(suicidemouse[(j%8)+1],0,0);
          suicidemouse[0]=oslSetAlpha(suicidemouse[0],75);
          spr_draw(suicidemouse[0],240,136);
          oslEndDrawing();
          oslSwapBuffers();
      }
      else
      {    
        j++;
        al_rest(0.016);
      }

      frame++;
      oslWaitVSync();
    }

    if (cpn == 15)
    {
      suicidemouse[0].stretchX = 480;
      suicidemouse[0].stretchY = 610;
      oslStartDrawing();
        suicidemouse[0]=oslSetAlpha(suicidemouse[0],255);
        spr_draw(suicidemouse[0],240,136);
        oslEndDrawing();
        oslSwapBuffers();
      oslWaitVSync();
      al_set_sample_instance_position(sfx.instance, 16);
        oslPlaySound(sfx);
        while (al_get_sample_instance_position(sfx.instance));
    }

    for (i=0; i<9; i++)
    {
      oslDeleteImage(suicidemouse[i]);
    }

    oslDeleteSound(creepysfx);
    oslDeleteSound(sfx);
    fadeout();
    break;

  case 11:
  case 16:
    suicidemouse[0] = LoadImg("./gfx/dolan.png");
    creepysfx = oslLoadSoundFile("./sfx/dolan.wav");

    oslSetSoundLoop(creepysfx, 0);
    i=272;
    frame=0;
    j=random(7);

    while(frame < 1200)
    {
      if (!(frame%2))
      {
        if (i>72)
        {
        oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
          spr_draw(suicidemouse[0], 332, i);
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
        i--;
        }
        if ((frame > 800) && (i<73))
        {
          if (cpn == 16)
          {
            suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);
            suicidemouse[0].stretchX = 480;
            suicidemouse[0].stretchY = 648;
            oslStartDrawing();
              oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
              spr_draw(suicidemouse[0],240,136);
              oslEndDrawing();
              oslSwapBuffers();
              if (frame == 812) oslPlaySound(creepysfx);
            oslWaitVSync();
          }
          else
          {
            oslStartDrawing();
            oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
            spr_draw(suicidemouse[0], 332, i+1);
            oslSetTextColor(_RGB(255, 255, 255));
            k = oslGetStringWidth(text[j]);
            oslDrawString((480 - k)/2, 32, text[j]);
            oslEndDrawing();
            oslSwapBuffers();
            oslWaitVSync();
          }
        }
        oslWaitVSync();
      }
      else
      {
        al_rest(0.008);
      }
      frame++;
      oslWaitVSync();
    }

    oslDeleteImage(suicidemouse[0]);
    oslDeleteSound(creepysfx);

     /* while (oslGetSoundChannel(creepysfx) == 1);
   
    oslDeleteSound(sfx);*/


    break;

    case 12:
    k=random(42);
    j=random(25);

    sprintf(buffer,"./sfx/sfx-0%d.wav",j+121);
    creepysfx = oslLoadSoundFile(buffer);

    j=random(25);
    sprintf(buffer,"./sfx/sfx-0%d.wav",j+121);
    sfx = oslLoadSoundFile(buffer);

    sprintf(buffer,"./gfx/pasta%d.png",k+1);
    suicidemouse[0] =  LoadImg(buffer);

    oslSetSoundLoop(creepysfx, 0);
    al_set_sample_instance_position(creepysfx.instance, 16);
    oslPlaySound(creepysfx);
    suicidemouse[0]=oslSetImageRotCenter(suicidemouse[0]);

    frame=0;

    //oslSetBilinearFilter(1);

    while (al_get_sample_instance_position(creepysfx.instance))
    {
      oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
        spr_draw(suicidemouse[0], 240, 136);
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      if (!(frame%4)) suicidemouse[0].stretchX++;
      suicidemouse[0].stretchY = (int)((float)(suicidemouse[0].sizeY)/(suicidemouse[0].sizeX)*suicidemouse[0].stretchX);
      frame++;
    }

    oslSetSoundLoop(sfx, 0);
    al_set_sample_instance_position(sfx.instance, 16);
    oslPlaySound(sfx);

    while (al_get_sample_instance_position(sfx.instance))
    {
        oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
          spr_draw(suicidemouse[0], 240, 136);
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
        if (!(frame%4)) suicidemouse[0].stretchX++;
        suicidemouse[0].stretchY = (int)((float)(suicidemouse[0].sizeY)/(suicidemouse[0].sizeX)*suicidemouse[0].stretchX);
        frame++;
    }

    //oslSetBilinearFilter(0);

    oslDeleteSound(creepysfx);
    oslDeleteImage(suicidemouse[0]);
    oslDeleteSound(sfx);

    break;

case 13:
   
    creepysfx = oslLoadSoundFile("./sfx/sfx-0150.wav");

    oslSetSoundLoop(creepysfx, 0);
    al_set_sample_instance_position(creepysfx.instance, 16);
    oslPlaySound(creepysfx);
   
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0,0,255));
    oslSetTextColor(_RGB(255, 255, 255));

    al_draw_text(freesans, current_col, 8, 0, 0, "FATAL ERROR OCURRED IN THREAD");
    al_draw_text(freesans, current_col, 8, 12, 0, "Shit happens... :-(");
    al_draw_text(freesans, current_col, 8, 36, 0, "Exception Details:");
    al_draw_text(freesans, current_col, 8, 48, 0, "Exception - Bus error (death)");
    al_draw_text(freesans, current_col, 8, 60, 0, "EPC       - 08A1C208");
    al_draw_text(freesans, current_col, 8, 72, 0, "Cause     - 07H30P13");
    al_draw_text(freesans, current_col, 8, 84, 0, "Status    - D34D0L0L");
    al_draw_text(freesans, current_col, 8, 96, 0, "BadVAddr  - 0012AC40");
    al_draw_text(freesans, current_col, 8, 108, 0, "zr:000Y0000 at:0008OF00 v0:000U0000 v1:00000012");
    al_draw_text(freesans, current_col, 8, 120, 0, "a0:0000A001 a1:000R002E a2:09FFE768 a3:09FF06BC");
    al_draw_text(freesans, current_col, 8, 132, 0, "t0:00D0E6BC t1:000E07D4 t2:0000A032 t3:8804D000");
    al_draw_text(freesans, current_col, 8, 144, 0, "t4:09FFY5F8 t5:000O0E00 t6:08A2U658 t7:00008600");
    al_draw_text(freesans, current_col, 8, 156, 0, "t8:000S0000 t9:000U8368 s0:08AC0000 s1:08AFK53C");
    al_draw_text(freesans, current_col, 8, 168, 0, "s2:08BA0C20 s3:08BT453C s4:08A30000 s5:08A30000");
    al_draw_text(freesans, current_col, 8, 180, 0, "s6:000T00EC s7:0000H0F9 k0:09FFIF00 k1:0000S000");
    al_draw_text(freesans, current_col, 8, 192, 0, "gp:08AGD390 sp:000AFF00 fp:08A3M000 ra:0896E4BC");
    al_draw_text(freesans, current_col, 8, 216, 0, "Will exit to Windows desktop in 10 seconds");
    oslEndDrawing();
    oslSwapBuffers();

    while (al_get_sample_instance_position(creepysfx.instance));
    oslDeleteSound(creepysfx);
    fadeout();
    break;


  case 14:
    if (random(2)) suicidemouse[0] =  LoadImg("./gfx/smilechu.png"); else suicidemouse[0] =  LoadImg("./gfx/smilechu2.png");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);

    i=0;
    j=0;
    frame=0;

      while (i < 12)
      {
        if (!(frame%3))
        {
          if (!j)
          {
            k=random(70);
            suicidemouse[0].stretchX = 10+random(150);
            l=82+random(36);
          }
          else k++;
          oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
          if (k>44)
          {
            j=1;

            if (k < 74)
            {
              suicidemouse[0].stretchX += 13;
              suicidemouse[0].stretchY = (int)(1.18 * (suicidemouse[0].stretchX));

              spr_draw(suicidemouse[0],240,138);
            }

            if (k==l)
            {
              i++;
              j=0;
            }
          }
          //frame_debug(k);
          oslEndDrawing();
          oslSwapBuffers();
          oslWaitVSync();
        }
        else
        {
          al_rest(0.008);
          oslWaitVSync();
        }
        frame++;
        oslWaitVSync();
      }

    oslDeleteImage(suicidemouse[0]);
    //oslDeleteSound(sfx);
  break;

    case 17:
    suicidemouse[0] =  LoadImg("./gfx/nigel.png");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);

    creepysfx = oslLoadSoundFile("./sfx/smashing.wav");

    frame=0;

    oslPlaySound(creepysfx);

    while (frame<512)
    {
        oslStartDrawing();
          oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

          for(i=0; i<8; i++)
          {
              j=random(10)-20;
              oslDrawFillRect(i*60,120+j,(i*60)+60,152+(-1*j), _RGB(96,96,0));
              oslDrawFillRect(i*60,128+j,(i*60)+60,144+(-1*j), _RGB(128,128,0));
              oslDrawFillRect(i*60,136+j,(i*60)+60,136+(-1*j), _RGB(160,160,0));
          }

          if (frame >= 480)
          {

            spr_draw(suicidemouse[0],240,138);

              suicidemouse[0].stretchX += 16;
              suicidemouse[0].stretchY = (int)(1.33*(suicidemouse[0].stretchX));
          }
        oslEndDrawing();
        oslSwapBuffers();
        oslWaitVSync();
        frame++;
    }

    oslDeleteSound(creepysfx);
    oslDeleteImage(suicidemouse[0]);

  break;

  case 18:
    suicidemouse[0] =  LoadImg("./gfx/caaat.png");
    suicidemouse[1] =  LoadImg("./gfx/caaat_ns.png");
    creepysfx = oslLoadSoundFile("./sfx/caaat.wav");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);
    suicidemouse[1] = oslSetImageRotCenter(suicidemouse[1]);

    al_set_sample_instance_position(creepysfx.instance, 16);
    oslPlaySound(creepysfx);

    frame=0;

    while (al_get_sample_instance_position(creepysfx.instance))
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

      if (frame<150)
      {
        spr_draw(suicidemouse[1],240,138);
      }
      else
      {
        spr_draw(suicidemouse[0],240,138);
      }

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      frame++;
    }
    oslDeleteSound(creepysfx);
    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
  break;

  case 19:
    for (i=0; i<9; i++)
        {
          sprintf(buffer,"./gfx/pona0%d.png",i);
          suicidemouse[i]=LoadImg(buffer);

          suicidemouse[i].stretchX = 480;
          suicidemouse[i].stretchY = 272;
          suicidemouse[i]=oslSetImageRotCenter(suicidemouse[i]);
        }

    frame=0;

    creepysfx = oslLoadSoundFile("./sfx/pona.wav");
    oslPlaySound(creepysfx);

    i=0;

    while (frame < 333)
    {

      oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

      if (frame < 110)
        {
          spr_draw(suicidemouse[frame/14],240,138);
        }

        if ((frame >= 110) && (frame <= 140))
        {
          spr_draw(suicidemouse[8],240,138);
        }

        oslEndDrawing();
      //frame_debug((int)oslGetRamStatus().maxAvailable);
        oslSwapBuffers();

      oslWaitVSync();
        frame++;
    }

    oslDeleteSound(creepysfx);
    for (i=0; i<9; i++)
    {
      oslDeleteImage(suicidemouse[i]);
    }
    break;

  case 20:
    suicidemouse[0] =  LoadImg("./gfx/pookey1.png");
    suicidemouse[1] =  LoadImg("./gfx/pookey2.png");
    creepysfx = oslLoadSoundFile("./sfx/pookeymon.wav");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);
    suicidemouse[1] = oslSetImageRotCenter(suicidemouse[1]);

    oslPlaySound(creepysfx);

    frame=0;

    while(frame < 550)
    {
      oslStartDrawing();
        oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

        if ((frame >= 375) && (frame < 389)) spr_draw(suicidemouse[0], 240, 136);
        if ((frame >= 389) && (frame < 401)) spr_draw(suicidemouse[1], 240, 136);

        oslEndDrawing();
        oslSwapBuffers();

      oslWaitVSync();

      frame++;
    }

    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    oslDeleteSound(creepysfx);
    break;

  case 21:
    suicidemouse[0] =  LoadImg("./gfx/gfx-0825.png");
    creepysfx = oslLoadSoundFile("./sfx/sfx-0030.wav");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);

    oslPlaySound(creepysfx);

    frame=0;

    suicidemouse[0].stretchX = i = 396;
    suicidemouse[0].stretchY = (int)(1.68*suicidemouse[0].stretchX);

    while(frame < 480)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));


      i=suicidemouse[0].stretchX;

      if ((suicidemouse[0].stretchX) > -72)
      {

        if (suicidemouse[0].stretchX >= 0)
        {
          suicidemouse[0].trans=255;
          spr_draw(suicidemouse[0], 240, 136);
        }

        if (suicidemouse[0].stretchX >= -36)
        {
          suicidemouse[0].stretchX += 36;
          suicidemouse[0].stretchY = (int)(1.68* (suicidemouse[0].stretchX));


          suicidemouse[0].trans=128;
          spr_draw(suicidemouse[0], 240, 136);
        }


        suicidemouse[0].stretchX += ((suicidemouse[0].stretchX < -36)?72:36);
        suicidemouse[0].stretchY = (int)(1.68* (suicidemouse[0].stretchX));

        suicidemouse[0].trans=64;
        spr_draw(suicidemouse[0], 240, 136);
      }

      suicidemouse[0].stretchX = i;

      if (!(frame%5))
      {
        suicidemouse[0].stretchX = i - 18;
      }

      suicidemouse[0].stretchY = (int)(1.68*suicidemouse[0].stretchX);

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      frame++;
    }

    oslDeleteImage(suicidemouse[0]);
    oslDeleteSound(creepysfx);
    break;

  case 22:
    suicidemouse[0] =  LoadImg("./gfx/lavender.png");
    creepysfx = oslLoadSoundFile("./sfx/lavender.wav");

    temp_gfx = oslSetImageTileSize(suicidemouse[0],0,0,48,48);
    temp_gfx = oslSetImageRotCenter(temp_gfx);
    oslPlaySound(creepysfx);

    frame=0;

    while(frame < 420)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));

      if (frame <= 341)
      {
        temp_gfx.trans=random(128);
        temp_gfx.stretchX = temp_gfx.stretchY = 96;
      }
      else
      {
        temp_gfx.trans=255;
        temp_gfx = oslSetImageTileSize(suicidemouse[0],48,0,48,48);
        temp_gfx = oslSetImageRotCenter(temp_gfx);
        temp_gfx.stretchX = temp_gfx.stretchY = 640;
      }

      if (frame < 395) spr_draw(temp_gfx, 240+((frame>341)?0:random(4)), 136+((frame>341)?104:random(4)));

      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      frame++;
    }


    oslDeleteImage(suicidemouse[0]);
    oslDeleteSound(creepysfx);
    break;

  case 23:
    frame=0;
    suicidemouse[0] =  LoadImg("./gfx/c64.png");
    suicidemouse[1] =  LoadImg("./gfx/c64-ar.png");

    while (frame < 360)
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      oslDrawFillRect(60, 0, 420, 272, _RGB(165,165,255));
      oslDrawFillRect(80, 46, 400, 226, _RGB(66,66,231));

      if (frame < 150)
      {
        for(i=0; i<1000; i++)
        {
           spr_draw(suicidemouse[1], (i%40)*8+80, ((int)(i/40))*8+38);
        }
      }
      else
      {
         spr_draw(suicidemouse[0], 80, 46);
         if ((frame%60) < 30)
         {
           oslDrawFillRect(80, 94, 88, 102, _RGB(165,165,255));
         }
      }
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
      frame++;
    }
    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    break;

  case 24:
    suicidemouse[0] =  LoadImg("./gfx/sncell.png");
    suicidemouse[1] =  LoadImg("./gfx/sncpnt.png");
    suicidemouse[0] = oslSetImageRotCenter(suicidemouse[0]);
    creepysfx = oslLoadSoundFile("./sfx/nuls.wav");

    al_set_sample_instance_position(creepysfx.instance, 16);
    oslPlaySound(creepysfx);

    frame=0;

    while (al_get_sample_instance_position(creepysfx.instance))
    {
      oslStartDrawing();
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(suicidemouse[0], 236+random(7), 132+random(7));
      spr_draw(suicidemouse[1], 224+random(7), 132+random(7));
      spr_draw(suicidemouse[1], 246+random(7), 132+random(7));
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }

    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    oslEndDrawing();
    oslSwapBuffers();
    fadeout();

    oslDeleteImage(suicidemouse[0]);
    oslDeleteImage(suicidemouse[1]);
    oslDeleteSound(creepysfx);

    cls();
    break;
  }


  fadeout();
}

void ben()
{
  OSL_IMAGE noise[9];
  ALLEGRO_BITMAP *ben_sub;
  OSL_SOUND ben_mzx =  oslLoadSoundFile("./sfx/ben.wav");
  char buffer[20];
  int i, j, frame=0, trans;

  noise[0]=LoadImg("./gfx/ben.png");

  for (i=1; i<9; i++)
  {
    sprintf(buffer,"./gfx/gfx-0%d.png",i+661);
    noise[i]=LoadImg(buffer);
    noise[i].stretchX = 480;
    noise[i].stretchY = 272;
  }

  oslPlaySound(ben_mzx);

  while(frame<704)
  {
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
    spr_draw(noise[(frame%8)+1],0,0);

    if (frame<192)
    {
      trans=frame;
    }
    else if (frame>512) trans=704-frame;
    else trans=192;

    i=0;
    while(i<272)
    {
      j=random(27)+13;
      ben_sub=al_create_sub_bitmap(noise[0].asset,0,i,425,i+j);
      al_draw_tinted_bitmap(ben_sub, al_map_rgba(255, 255, 255, trans), random(55), i, 0);
      i += j;
    }

    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
    frame++;
  }

  for(i=0; i<9; i++)
  {
      oslDeleteImage(noise[i]);
  }
   
  oslDeleteSound(ben_mzx);

  fadeout();
}

void rndsft()
{
  int frame=-3, i=0, j=0, k=0, l=0, m=0, n=0;
  OSL_IMAGE rndsft, px;
  ALLEGRO_BITMAP *rndsft_sub;
  OSL_MOD rndtheme;

  rndsft = LoadImg("./gfx/rndsft.png");
  px = LoadImg("./gfx/pixel.png");
  rndtheme = oslLoadSoundFileMOD("./muzaxx/rndsft.xm");


  rndsft=oslSetImageRotCenter(rndsft);

  oslSetSoundLoopMOD(rndtheme, 0);
  oslPlaySoundMOD(rndtheme);  

  while(frame<470)
  {


    oslStartDrawing();
    al_clear_to_color(_RGB(0, 0, 0));

    if (frame >= 161)
    {
      if (frame-160 < 35) rndsft_sub=al_create_sub_bitmap(rndsft.asset, 0, 0, 282, frame-160); else rndsft_sub=al_create_sub_bitmap(rndsft.asset, 0, 0, 282, frame-160);
      al_draw_bitmap(rndsft_sub, (480-rndsft.sizeX)/2, (272-rndsft.sizeY)/2, 0);
    }

    if ((frame >= 200) && (frame <= 220))
    {
      if (frame==200) i=random(360);

      if (!(frame%2))
      {
        oslDrawFillRect(0, 0, 480, 272, _RGB(0,0,0));

        for (j=0; j<13; j++)
        {
          oslDrawFillRect(i+j*16, 60, i+j*16+8, 272, _RGB(255,127,0));
        }
      }
    }

    if ((frame >= 259) && (frame <= 295))
    {

      if (frame == 259)
      {
        i=random(32)+24;
        k=random(9)+6;
        oslSetTextColor(_RGB(0, 224, 0));
        m=random(127);
        n=random(44);
      }

      for(j=0; j<k; j++)
      {
        for (l=0; l<i; l++)
        {
          oslDrawString(m+l*6, n+j*12, "@");
        }
      }
    }

    if ((frame >= 336) && (frame <= 345))
    {
      oslDrawFillRect(0,0,480,272, _RGB(0,0,0));
      spr_draw(rndsft,random(480),random(272));
    }

    if (frame >= 369)
    {

        for(i=0; i<48; i++)
        {
          for (j=0; j<17;  j++)
          {
            al_draw_pixel(i*10, j*16, _RGB(random(256), random(256), random(256)));
          }
        }

      if ((frame == 369) || (!(frame%4))) k=random(360);
      oslDrawFillRect(k,0,k+32,272, _RGB(0,254,255));


    }

    oslEndDrawing();
      oslSwapBuffers();
    frame++;
      oslWaitVSync();

  }

    oslDeleteImage(rndsft);
    oslDeleteImage(px);
  oslStopSoundMOD(rndtheme);
  fadeout();
}

int warning_onepilepsy()
{
  OSL_IMAGE warning = LoadImg("./gfx/warning.png");
  OSL_MOD theme = oslLoadSoundFileMOD("./muzaxx/giygas.xm");

  int i, w, frame=0, quit=0, red=0, accept=0;
  const char *text[8] = {"This game contains flashing patterns that may cause","epileptic seizures when players attempt to see them.","It also contains strange pictures that may cause some players","to have brief but intense adrenaline surges in their body."," ","Consult a doctor if you experience","unusual symptoms while playing games!","Press SPACE to play or ESC to quit"};

  warning.stretchX = 360;

  warning=oslSetImageRotCenter(warning);
 
  oslPlaySoundMOD(theme);

  while (!quit)
  {
    oslStartDrawing();
      al_clear_to_color(_RGB(0, 0, 0));


  for (i=0; i<7; i++)
  {
    if (i<5) oslSetTextColor(_RGB(255, 255, 255));
    if (i>4) oslSetTextColor(_RGB(255, 255, 0));
    w = oslGetStringWidth(text[i]);
    oslDrawString((480 - w)/2, 92+i*20, text[i]);
  }

  warning.angle = 7*sin((0.25*frame)/3.14);

  spr_draw(warning, 240, 32);

  oslSetTextColor(_RGB(red, 0, 0));
  w = oslGetStringWidth(text[7]);
  oslDrawString((480 - w)/2, 256, text[7]);
  red -= 3;
  if (red < 0) red=255;

  al_get_keyboard_state(&kbdstate);
  if (al_key_down(&kbdstate, ALLEGRO_KEY_SPACE) || al_key_down(&kbdstate, ALLEGRO_KEY_ENTER))
      {
        accept=1;
        quit=1;
      }
    else if (al_key_down(&kbdstate, ALLEGRO_KEY_ESCAPE))
      {
        accept=0;
        quit=1;
      }

  oslEndDrawing();
  oslSwapBuffers();
    oslWaitVSync();
    frame++;
  }

  //oslFlushKey();

  //oslSetBilinearFilter(0);
    fadeout();
    oslStopSoundMOD(theme);
    oslDeleteSoundMOD(theme);

    return accept;
}

int main()
{
    short i, a, tx=0, ty=0, gt=0, ch=0, chd=1, mort=0, vies=2, round=1, f=0, nbp=1, fs=0, quit=0, rebound=0;
    int q=strlen("v2.00"), scrw, scrh, h=100;
  const char *items[4] = {"CHALLENGE THE PIE", "DIFFICULTY:", "WHO DID THIS MESS?", "FLEE TO WINDOWS LIKE A COWARD"};
  const char *diffs[3] = {"WUSS", "MANLY", "HELL"};
  OSL_IMAGE hand;
    OSL_IMAGE title;
    OSL_IMAGE alice;
  OSL_SOUND crack;
  OSL_SOUND theme;
 
   srand(time(NULL));

   if(!al_init()) {
      fprintf(stderr, "failed to initialize allegro!\n");
    exit(-1);
   }
 
   al_set_new_display_option(ALLEGRO_VSYNC, 1, ALLEGRO_REQUIRE);
   al_set_new_display_option(ALLEGRO_SINGLE_BUFFER, 1, ALLEGRO_REQUIRE);
   al_set_new_display_option(ALLEGRO_RENDER_METHOD, 0, ALLEGRO_REQUIRE);
   al_set_new_display_flags(ALLEGRO_FULLSCREEN);

   al_init_image_addon();
   al_init_primitives_addon();
   al_init_ttf_addon();
   al_install_audio();
   al_init_acodec_addon();
   al_install_keyboard();

   timer=al_create_timer(1.0 / 60);
   event_queue = al_create_event_queue();

   //al_reserve_samples(16);
   voice = al_create_voice(44100, ALLEGRO_AUDIO_DEPTH_INT16, ALLEGRO_CHANNEL_CONF_2);
   mixer = al_create_mixer(44100, ALLEGRO_AUDIO_DEPTH_FLOAT32, ALLEGRO_CHANNEL_CONF_2);
 
    al_attach_mixer_to_voice(mixer, voice);

  al_set_new_bitmap_flags(ALLEGRO_NO_PREMULTIPLIED_ALPHA);
  al_set_blender(ALLEGRO_ADD, ALLEGRO_ALPHA, ALLEGRO_INVERSE_ALPHA);
  al_set_new_display_refresh_rate(60);

   freesans = al_load_ttf_font("./fonts/Nouveau_IBM.ttf", 11, 0); //ALLEGRO_TTF_MONOCHROME);

   court=LoadImg("./gfx/court_hell.png");
   benj=LoadImg("./gfx/boktai.png");

   crack = oslLoadSoundFile("./sfx/sfx-0026.wav");
   theme = oslLoadSoundFile("./sfx/theme.wav");

   ratio=getScreenRatio();

   if (ratio < 160)
   {
     scrw=800;
     scrh=600;
   }
   else if (ratio > 160)
   {
     scrw=1280;
     scrh=720;
   }
   else if (ratio == 160)
   {
     scrw=1280;
     scrh=800;
   }

   display = al_create_display(scrw, scrh);
   al_hide_mouse_cursor(display);

   psp_screen = al_create_bitmap(480, 272);

 
  hand = LoadImg("./gfx/hand.png");
  title = LoadImg("./gfx/title.png");
  alice = LoadImg("./gfx/alice.png");

  for (a=0; a<90; a++)
  {
    oslStartDrawing();
    oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));
    oslEndDrawing();
    oslSwapBuffers();
    oslWaitVSync();
  }
   
   a=warning_onepilepsy();

   

   if (a)
   {

     rndsft();

      while ((ch != 137) && (!quit))
    {
      oslStartDrawing();
      if (!f) oslPlaySound(theme);

      if (!(f%6))
      {
        tx=random(16);
        ty=random(32);
      }

      chd=chd%3;

      oslSetTextColor(_RGBA(255, 255, 255, gt));
      oslDrawFillRect(0,0,480,272, _RGB(0, 0, 0));

      title=oslSetAlpha(title, gt);
      spr_draw(title, tx, ty);

      title=oslSetAlpha(title, gt/2);
      spr_draw(title, random(16), random(32));

      title=oslSetAlpha(title, gt/4);
      spr_draw(title, random(16), random(32));

      alice=oslSetAlpha(alice, gt);
      spr_draw(alice, 299, 0);

      oslDrawString(480-(q*6), 260, "v2.00");

      for (i=0; i<4; i++)
      {
        oslDrawString(48, 182+i*20, items[i]);
        if ((!i) && (nbp==2))  oslDrawString(162, 182, "(AGAINST A MORTAL)");
      }

      hand=oslSetAlpha(hand,gt);
      spr_draw(hand, 8+4*sin(0.0625*f), 186+ch*20);

      oslSetTextColor(_RGBA(255, ((chd<2)?(255/(chd+1)):0), 0, gt));
      oslDrawString(120, 202, diffs[chd]);



      if (gt < 255) gt++;

      al_get_keyboard_state(&kbdstate);

      if ((!al_key_down(&kbdstate, ALLEGRO_KEY_UP) && !al_key_down(&kbdstate, ALLEGRO_KEY_DOWN) &&
        !al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT) && !al_key_down(&kbdstate, ALLEGRO_KEY_LEFT) &&
        !al_key_down(&kbdstate, ALLEGRO_KEY_ENTER))) rebound=0;

      if (!rebound)
      {
        if (al_key_down(&kbdstate, ALLEGRO_KEY_UP)) ch--;
        if (al_key_down(&kbdstate, ALLEGRO_KEY_DOWN)) ch++;
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (ch==1)) chd++;

        if ((al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT)) && (ch==0) && (nbp==1)) nbp++;
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (ch==0) && (nbp==2)) nbp--;

        if ((al_key_down(&kbdstate, ALLEGRO_KEY_LEFT)) && (ch==1))
          {
            chd--;
            if (chd < 0) chd=2;
          }
        if ((al_key_down(&kbdstate, ALLEGRO_KEY_UP) || al_key_down(&kbdstate, ALLEGRO_KEY_DOWN) ||
        al_key_down(&kbdstate, ALLEGRO_KEY_RIGHT) || al_key_down(&kbdstate, ALLEGRO_KEY_LEFT))) rebound=1;

      }

     
      if (ch < 0) ch += 4;
      else if (ch > 3) ch -= 4;
         
      f++;
     
      if (al_key_down(&kbdstate, ALLEGRO_KEY_ESCAPE))
      {
        ch=137;
        quit=1;
      }

      if (al_key_down(&kbdstate, ALLEGRO_KEY_C))
      {
        oslStopSound(theme);
        fadeout();
        for (i=0; i<25; i++) creepypasta(i);
        oslPlaySound(theme);
      }

      if ((al_key_down(&kbdstate, ALLEGRO_KEY_ENTER)) && (!rebound) && (!quit))
      {
        rebound=1;
       
        if (!(ch%2)) fadeout();
         
          switch(ch)
          {

            case 0:
            {
              vies=2;
              mort=0;
              round=1;
              f=-1;

              oslStopSound(theme);

              while ((vies > 0) && (round < 3))
              {
                mort=game(round, chd+1, nbp);

                counter=0;
                if ((!mort) || (mort==2))
                {
                  i=random(25);

                  if (!mort)
                  {
                    oslPlaySound(crack);

                      for (a=0; a<15; a++)
                      {
                        oslStartDrawing();
                        oslDrawFillRect(0,0,480,272, _RGB(255, 255, 255));
                        oslEndDrawing();
                        oslSwapBuffers();
                        oslWaitVSync();
                      }
                    creepypasta(i);
                    vies--;
                  }
                  else
                  {
                    vies=-1;
                  }
                }
                else
                {
                  fadeout();
                  if (round==1) ben();
                  round++;
                }
                if ((vies > 0) && (round < 3))
                {
                  taunt(random(12));
                }
              }

              break;
            }

            case 1:
            {
              chd++;
              break;
            }

            case 2:
            {
              f=-1;
              oslStopSound(theme);


              h=100;
             
              credz();

              /*if (DEBUG)
              {
                sonicexe(chd+1);
              }
              else
              {
                credz();
              }*/

              break;
            }

            case 3:
            {
              ch=137;
              quit=1;
              break;
            }
          }
      }
      oslEndDrawing();
      oslSwapBuffers();
      oslWaitVSync();
    }
   }

   fadeout();
   al_show_mouse_cursor(display);
   al_destroy_display(display);
 
   return 0;
}