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