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;
}