libbfbmp

Une bibliothèque C qui propose une API pour lire et écrire des fichier .bfbmp (Binary Format Beatmap)

Introduction

Le format de fichier .bfbmp (pour Binary Format Beatmap) est un format open source que je développe qui contient des informations de beatmaps pour des jeux de rhythme. Le format est pensé pour etre compact et interchangeable. Un fichier contient les métadonnées, une image, un son, et les données de niveaux. Un fichier peur contenir plusieurs niveaux de difficultés ou des versions alternatives. Comme il s’agit d’un format binaire les données sont illisibles par un humain et donc rend les modifications difficiles sans passer par l’api.
Plus d’informations sur la page github ——————————————————-

Comment utiliser

Pour creer une beatmap et ecrire des données dedans:

#include <bfbmp/bfbmp.h>

int main(void)
{
    // Initialiser une structure beatmap
    bfbmp_beatmap_t beatmap = bfbmp_beatmap_create();
    bfbmp_beatmap_set_song_name(&beatmap, "The Song Name");
    bfbmp_beatmap_set_sub_name(&beatmap, "feat. some artist");
    bfbmp_beatmap_set_author_name(&beatmap, "The author");
    bfbmp_beatmap_set_mapper_name(&beatmap, "Map creator");
    beatmap.metadata.beats_per_minute = 160.0f;
    beatmap.metadata.beats_per_measure = 4;
    beatmap.metadata.start_offset = 0.0f;

    // Creer une structure level et ajouter des notes
    bfbmp_level_t level = bfbmp_level_create_with_name("Level Name");
    level.scroll_speed = 1.0f;

    bfbmp_note_t note;
    note.duration = 1.0f;
    note.position = 1.0f;
    note.type = bfbmp_note_normal;
    bfbmp_vector_note_push(&level.notes, note);

    // Ajouter le level a la beatmap
    bfbmp_vector_level_push(&beatmap.game_data, level);
    
    // Charger une image et un son
    bfbmp_beatmap_load_image(&beatmap, "Path/To/Image/File");
    bfbmp_beatmap_load_sound(&beatmap, "Path/To/Audio/File");

    // Et écrire le fichier
    const char* filepath = "Path/To/OutputFile.bfbmp";
    const uint8_t result = bfbmp_beatmap_encode_file(&beatmap, filepath, BFBMP_FALSE);
    if(result != BFBMP_SUCCESS) fprintf(stderr, "Failed to write beatmap to file!");

    // Toujours penser a liberer la mémoire
    bfbmp_beatmap_free(&beatmap);
}

Pour lire une beatmap:

#include <bfbmp/bfbmp.h>

int main(void)
{
    bfbmp_beatmap_t beatmap = bfbmp_beatmap_create();
    const char* filepath = "Path/To/File.bfbmp";
    bfbmp_beatmap_decode_file(&beatmap, filepath);
}

Prise en charge des erreurs

Chaque fonction de l’api return un uint8_t interprété comme un booléen. Ça valeur peur être BFBMP_SUCCESS or BFBMP_FAIL. C’est donc à l’utilisateur de traiter les erreurs

#include <stdio.h>
#include <bfbmp/bfbmp.h>

int main(void)
{
    bfbmp_beatmap_t beatmap = bfbmp_beatmap_create();
    const char* filepath = "Path/To/File.bfbmp";
    uint8_t result = bfbmp_beatmap_decode_file(&beatmap, filepath);
    if(result != BFBMP_SUCCESS) 
    { 
        fprintf(stderr, "Failed to decode beatmap!");
        return -1;
    }
    return 0;
}

C++ Wrapper

Un header C++ bfbmp.hpp est donné dans les include

#include <bfbmp/bfbmp.hpp>
#include <iostream>

int main()
{
    const std::string filepath = "Path/To/File.bfbmp";
    bfbmp::beatmap beatmap;
    if(!beatmap.decode(filepath))
    {
        std::cerr << "Failed to decode beatmap!\n;
        return -1;
    }
    return 0;
}