Esempio n. 1
0
// Checks for mouse input, called once every frame
void* mousehandler(MOUSE* mouse_s, void *data)
{
    MOUSE *mouse = (MOUSE*)mouse_s;
    GDATAPTR game = (GDATAPTR)data;

    if((mouse->button & MOUSE_L_NEW) && game->gamestarted)
    {
        SPRITESPTR sprite = search_sprite_list_for_element("BRICK_WALL");
        SPRITESPTR fsprite = sprite;
        if(sprite != NULL)
        {
            do
            {
                if(strcmp(sprite->slabel, "BRICK_WALL") == 0)
                    set_anim_flags_on_sprite(sprite, MDOWN);
                sprite = sprite->nextsprite;
            } while(sprite != fsprite);
        }
    }
//    if((mouse->button & MOUSE_R))
//    {
//        set_anim_flags_on_sprite(search_sprite_list_for_element("STICKMAN"), MRIGHT);
//    }
//    if(mouse->dz > 0)
//    {
//        set_anim_flags_on_sprite(search_sprite_list_for_element("STICKMAN"), MRIGHT);
//    }

    return NULL;
}
Esempio n. 2
0
void collision_end_lose(cpSpace *Space, void *obj, void *unused)
{
    // cpShape *shape = (cpShape*)obj;
    // SPRITESPTR sprite = (SPRITESPTR)shape->data;
    SPRITESPTR stman = search_sprite_list_for_element("STICKMAN");
    lives--;
    set_anim_flags_on_sprite(stman, MDAMAGED);
}
Esempio n. 3
0
// Checks for keyboard input, called once every frame
void* keyhandler(String key, void *data)
{
    GDATAPTR game = (GDATAPTR)data;
	if(game->gamestarted)
	{
		if((key[ALLEGRO_KEY_W] & KEYNEW) || (key[ALLEGRO_KEY_UP] & KEYNEW))
		{
			set_anim_flags_on_sprite(search_sprite_list_for_element("STICKMAN"),
				MUP);
		}
		if((key[ALLEGRO_KEY_S] & KEYNEW) || (key[ALLEGRO_KEY_DOWN] & KEYNEW))
		{
			set_anim_flags_on_sprite(search_sprite_list_for_element("STICKMAN"),
				MDOWN);
		}
		if((key[ALLEGRO_KEY_SPACE] & KEYNEW))
		{
			set_anim_flags_on_sprite(search_sprite_list_for_element("STICKMAN"),
				MATTACK);
		}
	}
	if((key[ALLEGRO_KEY_ESCAPE] & KEYPRESSED))
	{
	    game->exit = true;
	    game->gamestarted = false;
	}
	if((key[ALLEGRO_KEY_M] & KEYNEW))
	{
        return_to_main_menu(game);
	}
	if((key[ALLEGRO_KEY_P] & KEYNEW))
	{
	    if(game->paused)
	    {
            exit_pause(game);
            mpressed = true;
	    }
	    else
	    {
            if (game->gamestarted) game->paused = true;
	    }
	}
	return NULL;
}
Esempio n. 4
0
void remove_all_enemies(void)
{
    SPRITESPTR sprite;
    while((sprite = search_sprite_list_for_element("AMEAN")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("BRICK_WALL")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("CLAMP")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("STEEL_WALL")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("FLYING_FIST")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("SPIKES")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("RAW")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    while((sprite = search_sprite_list_for_element("PLANT")) != NULL)
    {
        remove_physics_object(sprite);
        remove_element_from_sprite_list_ptr(sprite);
    }
    total_enemies = 0;
    ameans = 0;
    bwall = 0;
    clamp = 0;
    swall = 0;
    fist = 0;
    spikes = 0;
    raw = 0;
    plants = 0;
}
Esempio n. 5
0
void update_raw(SPRITESPTR raw)
{
    int nflags = 0;

	raw->shape->body->v = cpv(-180, 0);

    if(raw->sdata.x <= 600 && raw->sdata.x >= 550)
    {
        set_anim_flags_on_sprite(raw, MATTACK);
    }

    add_element_to_render_queue(raw->sdata.currentimg->image, raw->sdata.x, raw->sdata.y, nflags,
                                RCOLOR(255, 255, 255, 255), NULL);

    if((raw->sdata.animflags & MATTACK))
    {
        int x = raw->sdata.x-5*raw->sdata.anim_counter;
        int y = raw->sdata.y+30;
        SIMAGEPTR lazer = search_image_list_for_element(&(raw->ifirstptr), "LAZER");
        raw->sdata.anim_counter++;
        raw->sdata.currentimg = search_image_list_for_element(&(raw->ifirstptr), "RAW_2");
        if(x+lazer->width <= raw->sdata.x)
        {
            raw->sdata.currentimg = search_image_list_for_element(&(raw->ifirstptr), "RAW_1");
        }
        if(x+lazer->width <= 0)
        {
            raw->sdata.anim_counter = 0;
            remove_anim_flags_on_sprite(raw, MATTACK);
        }
        SPRITESPTR stman = search_sprite_list_for_element("STICKMAN");
        if((x >= stman->sdata.x && x <= stman->sdata.x+stman->sdata.currentimg->width) &&
           (y >= stman->sdata.y && y <= stman->sdata.y+stman->sdata.currentimg->height) &&
           !(stman->sdata.animflags & MDAMAGED) && !(stman->sdata.animflags & MRECOVER))
        {
            lives--;
            set_anim_flags_on_sprite(stman, MDAMAGED);
            raw->sdata.anim_counter = 0;
            remove_anim_flags_on_sprite(raw, MATTACK);
        }
        add_element_to_render_queue(lazer->image, x, y, nflags,
                                    RCOLOR(255, 255, 255, 255), NULL);
    }

    raw->sdata.x = raw->shape->body->p.x-raw->sdata.currentimg->width/2;
    raw->sdata.y = raw->shape->body->p.y-raw->sdata.currentimg->height/2;

    if(raw->sdata.x+raw->sdata.currentimg->width <= 0)
        cpSpaceAddPostStepCallback(get_global_cpSpace(), &remove_enemy, raw, NULL);
}
Esempio n. 6
0
void update_lives(void)
{
    SPRITESPTR sprite = search_sprite_list_for_element("STICKMAN");
    SIMAGEPTR life = search_image_list_for_element(&(sprite->ifirstptr), "STICKFIGURE_LIVES");

    int x = res_width-life->width;
    int y = 0;

    for(int i = 0; i < lives; i++)
    {
        add_element_to_render_queue(life->image, x, y, 0, RCOLOR(255, 255, 255, 255), NULL);
        x -= life->width+10;
    }
}
Esempio n. 7
0
void maingame_cleanup(void)
{
    SPRITESPTR stman = search_sprite_list_for_element("STICKMAN");
    SPRITESPTR ground = search_sprite_list_for_element("GROUND");
    GDATAPTR game = get_game_data();
    cpSpace *space = get_global_cpSpace();
    cpSpaceRemoveCollisionHandler(space, 1, 2);
    remove_physics_object(stman);
    remove_element_from_sprite_list_ptr(stman);
    remove_element_from_sprite_list("CLOUD");

    ground->sdata.x = 0;
    ground->sdata.y = 510;

    remove_all_enemies();

    game->gamestarted = false;

    start = false;
    lives = 3;
    score = 0;
    minutes = 0;
    seconds = 0;
}
Esempio n. 8
0
void update_ground(void)
{
    SPRITESPTR ground = search_sprite_list_for_element("GROUND");
    if(start)
    {
        ground->sdata.x -= ground->sdata.dx;
        add_element_to_render_queue(ground->sdata.currentimg->image, ground->sdata.x, ground->sdata.y, 0,
                                    RCOLOR(255, 255, 255, 255), NULL);
        add_element_to_render_queue(ground->sdata.currentimg->image, ground->sdata.x+ground->sdata.currentimg->width,
                                    ground->sdata.y, 0, RCOLOR(255, 255, 255, 255), NULL);
        if(ground->sdata.x+ground->sdata.currentimg->width < 0)
            ground->sdata.x = 0;
    }
    else
        add_element_to_render_queue(ground->sdata.currentimg->image, ground->sdata.x, ground->sdata.y, 0,
                                    RCOLOR(255, 255, 255, 255), NULL);
}
Esempio n. 9
0
void update_clouds(void)
{
    SPRITESPTR clouds = search_sprite_list_for_element("CLOUD");
    int nflags = 0;
    static int m = -1;

    clouds->sdata.x += m*clouds->sdata.dx;
    if(clouds->sdata.x+clouds->sdata.currentimg->width < 0)
    {
       clouds->sdata.y = rand_int(res_height-90-clouds->sdata.currentimg->height);
       m *= -1;
    }
    if(clouds->sdata.x > res_width)
    {
        clouds->sdata.y = rand_int(res_height-90-clouds->sdata.currentimg->height);
        m *= -1;
    }
    add_element_to_render_queue(clouds->sdata.currentimg->image, clouds->sdata.x, clouds->sdata.y, nflags,
                                RCOLOR(255, 255, 255, 255), NULL);
}
Esempio n. 10
0
void remove_all_enemies_of_type(char *enemy_label)
{
    SPRITESPTR sprite;
    if(strcmp(enemy_label, "AMEAN") == 0)
    {
        while((sprite = search_sprite_list_for_element("AMEAN")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        ameans = 0;
    }
    else if(strcmp(enemy_label, "BRICK_WALL") == 0)
    {
        while((sprite = search_sprite_list_for_element("BRICK_WALL")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        bwall = 0;
    }
    else if(strcmp(enemy_label, "CLAMP") == 0)
    {
        while((sprite = search_sprite_list_for_element("CLAMP")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        clamp = 0;
    }
    else if(strcmp(enemy_label, "STEEL_WALL") == 0)
    {
        while((sprite = search_sprite_list_for_element("STEEL_WALL")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        swall = 0;
    }
    else if(strcmp(enemy_label, "FLYING_FIST") == 0)
    {
        while((sprite = search_sprite_list_for_element("FLYING_FIST")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        fist = 0;
    }
    else if(strcmp(enemy_label, "SPIKES") == 0)
    {
        while((sprite = search_sprite_list_for_element("SPIKES")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        spikes = 0;
    }
    else if(strcmp(enemy_label, "RAW") == 0)
    {
        while((sprite = search_sprite_list_for_element("RAW")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        raw = 0;
    }
    else if(strcmp(enemy_label, "PLANT") == 0)
    {
        while((sprite = search_sprite_list_for_element("PLANT")) != NULL)
        {
            remove_physics_object(sprite);
            remove_element_from_sprite_list_ptr(sprite);
        }
        plants = 0;
    }
}
Esempio n. 11
0
// Performs animations for the stickman and adds the sprites to the render queue
void update_stickman(void)
{
    SPRITESPTR stman = search_sprite_list_for_element("STICKMAN");
    SPRITESPTR ground = search_sprite_list_for_element("GROUND");
    float height = (search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_MOVE_1"))->height;
    float y = stman->shape->body->p.y-height/2;
    int cx = 0, cy = 0, nflags = 0;
    static _Bool up = false, down = false;
    ALLEGRO_COLOR color = RCOLOR(255, 255, 255, 255);

    if(!start)
    {
        //static int sx = 0;
        //static int sy = 0;
        if(y+height >= ground->sdata.y)
            stman->sdata.anim_counter++;
        stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_MOVE_1");
        if(stman->sdata.anim_counter >= 20)
        {
            stman->sdata.anim_counter = 0;
            stman->shape->e = 0.1;
            stman->shape->u = 0.9;
            //sx = stman->shape->body->p.x;
            //sy = stman->shape->body->p.y;
            start = true;
        }
    }
    else if((stman->sdata.animflags & MUP) && !down)
    {
        if(y+height >= ground->sdata.y && !up)
        {
            cpVect currentvel = stman->shape->body->v;
			stman->shape->body->v = cpv(0, -stman->sdata.dy);
            cpVect newvel = stman->shape->body->v;
            stman->shape->body->v = cpvadd(currentvel, newvel);
            up = true;
        }
        else if(y+height >= ground->sdata.y && up)
        {
           remove_anim_flags_on_sprite(stman, MUP);
           up = false;
        }
        stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_MOVE_1");
    }
    else if((stman->sdata.animflags & MDOWN))
    {
        down = true;
        static int dcounter = 0;
        dcounter++;
        if(dcounter > 65)
        {
            down = false;
            remove_anim_flags_on_sprite(stman, MDOWN);
            dcounter = 0;
        }
        stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_SLIDE");
        cy = 15;
    }
    else
    {
        stman->sdata.anim_counter++;
        if(stman->sdata.anim_counter < 5)
            stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_MOVE_1");
        else if(stman->sdata.anim_counter > 5 && stman->sdata.anim_counter < 10)
            stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_MOVE_2");
        else if(stman->sdata.anim_counter > 10)
            stman->sdata.anim_counter = 0;
    }

    if((stman->sdata.animflags & MATTACK))
    {
        static int counter = 0;
        counter++;
        if(counter > 44)
        {
            remove_anim_flags_on_sprite(stman, MATTACK);
            counter = 0;
        }
        if(up)
        {
            stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_ATTACK_JUMP");
        }
        else if(down)
        {
            stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_ATTACK_SLIDE");
            cy = 20;
        }
        else
            stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_ATTACK_RUN");
    }
    if ((stman->sdata.animflags & MDAMAGED))
    {
        static int counter = 0;
        counter++;
        stman->sdata.currentimg = search_image_list_for_element(&stman->ifirstptr, "STICKFIGURE_DEAD");

        if(stman->sdata.x+stman->sdata.currentimg->width <= 0 || counter >= 60)
        {
            remove_anim_flags_on_sprite(stman, MDAMAGED);
            set_anim_flags_on_sprite(stman, MRECOVER);
            stman->shape->body->p.x = 70;
            stman->shape->body->v = cpvzero;
            counter = 0;
        }
    }
    if((stman->sdata.animflags & MRECOVER))
    {
        static int counter = 0;
        counter++;

        if(counter >= 15 && counter <= 30)
            color = RCOLOR(255, 255, 255, 105);
        else if(counter >= 45 && counter <= 60)
            color = RCOLOR(255, 255, 255, 105);
        else if(counter >= 75 && counter <= 90)
            color = RCOLOR(255, 255, 255, 105);
        else if(counter >= 105 && counter <= 120)
            color = RCOLOR(255, 255, 255, 105);

        if(counter >= 120)
        {
            counter = 0;
            remove_anim_flags_on_sprite(stman, MRECOVER);
        }
    }

    if((int)stman->shape->body->p.x != 50 && start && y+height >= ground->sdata.y && !(stman->sdata.animflags & MDAMAGED))
    {
        stman->shape->body->p.x = 70;
    }

    add_element_to_render_queue(stman->sdata.currentimg->image, stman->sdata.x+cx, stman->sdata.y+cy, nflags,
                                color, NULL);
    stman->sdata.x = stman->shape->body->p.x-stman->sdata.currentimg->width/2;
    stman->sdata.y = stman->shape->body->p.y-stman->sdata.currentimg->height/2;
}
Esempio n. 12
0
// Updates the background image
void update_background(void)
{
    SPRITESPTR background = search_sprite_list_for_element("BACKGROUND");
    add_element_to_render_queue(background->sdata.currentimg->image, background->sdata.x, background->sdata.y,
                                0, RDEFAULT, NULL);
}