void player_bump(int dir, int x, int y)
{
    int bump_x = player_entity.x;
    int bump_y = player_entity.y;

    switch(dir)
    {
        case LEFT:
            bump_x--;
            break;
        case RIGHT:
            bump_x++;
            break;
        case UP:
            bump_y--;
            break;
        case DOWN:
            bump_y++;
            break;
        case UP_LEFT:
            bump_x--;
            bump_y--;
            break;
        case UP_RIGHT:
            bump_x++;
            bump_y--;
            break;
        case DOWN_LEFT:
            bump_x--;
            bump_y++;
            break;
        case DOWN_RIGHT:
            bump_x++;
            bump_y++;
            break;
        default:
            break;
    }

    u32 meta = map_get_meta(LAYER_MIDDLE, bump_x, bump_y);
    if(meta & (TILE_ITEM | TILE_WEAPON))
    {
        u16 item = map_get_tile(LAYER_MIDDLE, bump_x, bump_y);
        map_set_tile(LAYER_MIDDLE, bump_x, bump_y, TILE_NONE);

        item_select_prompt(bump_x, bump_y, item);
    }
    else
    {
        iact_set_trigger(IACT_TRIG_BumpTile, 3, bump_x, bump_y, map_get_tile(LAYER_MIDDLE, bump_x, bump_y));
    }
}
Exemple #2
0
void client_net_block_set(map_t *map, s32 x, s32 y, tile_t tile)
{
	printf("client_net_block_set: %d,%d\n", x, y);
	
	if(net_player.sockfd != FD_LOCAL_IMMEDIATE)
	{
		net_pack(NULL, PKT_BLOCK_SET,
			x, y,
			tile.type, tile.col, tile.chr);
	} else {
		map_set_tile(map, x, y, tile);
	}
}
bool player_do_pull(int dir)
{
    if(BUTTON_PUSH_STATE)
    {
        switch(dir)
        {
            case LEFT:
                if((map_get_meta(LAYER_MIDDLE, player_entity.x+1,player_entity.y) & (TILE_PUSH_PULL_BLOCK)) && player_entity.x != 0 && map_get_tile(LAYER_MIDDLE, player_entity.x+1,player_entity.y) != TILE_NONE)
                {
                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x+1,player_entity.y));

                    int object_index = 0;
                    while(1)
                    {
                        obj_info *object = map_get_object(object_index++, player_entity.x+1, player_entity.y);
                        if (object == NULL)
                            break;

                        if(!object->visible) continue;

                        if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON)
                        {
                            object->visible = false;
                            map_set_tile(LAYER_MIDDLE, player_entity.x+1, player_entity.y, object->arg);
                            return true;
                        }
                    }

                    map_set_tile(LAYER_MIDDLE, player_entity.x+1, player_entity.y, TILE_NONE);
                    return true;
                }
                break;
            case RIGHT:
                if((map_get_meta(LAYER_MIDDLE, player_entity.x-1,player_entity.y) & (TILE_PUSH_PULL_BLOCK)) && player_entity.x != map_get_width()-1 && map_get_tile(LAYER_MIDDLE, player_entity.x-1,player_entity.y) != TILE_NONE)
                {
                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x-1,player_entity.y));

                    int object_index = 0;
                    while(1)
                    {
                        obj_info *object = map_get_object(object_index++, player_entity.x-1, player_entity.y);
                        if (object == NULL)
                            break;

                        if(!object->visible) continue;

                        if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON)
                        {
                            object->visible = false;
                            map_set_tile(LAYER_MIDDLE, player_entity.x-1, player_entity.y, object->arg);
                            return true;
                        }
                    }

                    map_set_tile(LAYER_MIDDLE, player_entity.x-1, player_entity.y, TILE_NONE);
                    return true;
                }
                break;
            case UP:
                if((map_get_meta(LAYER_MIDDLE,player_entity.x, player_entity.y+1) & (TILE_PUSH_PULL_BLOCK)) && player_entity.y != 0 && map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y+1) != TILE_NONE)
                {
                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y+1));

                    int object_index = 0;
                    while(1)
                    {
                        obj_info *object = map_get_object(object_index++, player_entity.x, player_entity.y+1);
                        if (object == NULL)
                            break;

                        if(!object->visible) continue;

                        if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON)
                        {
                            object->visible = false;
                            map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y+1, object->arg);
                            return true;
                        }
                    }

                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y+1, TILE_NONE);
                    return true;
                }
                break;
            case DOWN:
                if((map_get_meta(LAYER_MIDDLE,player_entity.x, player_entity.y-1) & (TILE_PUSH_PULL_BLOCK)) && player_entity.y != map_get_height()-1 && map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y-1) != TILE_NONE)
                {
                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y, map_get_tile(LAYER_MIDDLE, player_entity.x,player_entity.y-1));

                    int object_index = 0;
                    while(1)
                    {
                        obj_info *object = map_get_object(object_index++, player_entity.x, player_entity.y-1);
                        if (object == NULL)
                            break;

                        if(!object->visible) continue;

                        if(object->type == OBJ_ITEM || object->type == OBJ_WEAPON)
                        {
                            object->visible = false;
                            map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y-1, object->arg);
                            return true;
                        }
                    }

                    map_set_tile(LAYER_MIDDLE, player_entity.x, player_entity.y-1, TILE_NONE);
                    return true;
                }
                break;
        }
    }
    return false;
}