diff --git a/osufs/osufs/osu_object_analyze/osu_object_includes.h b/osufs/osufs/osu_object_analyze/osu_object_includes.h index 3dd16acf3500335e65e1fdd359cc12548d298d40..eb1752a1660bbbf885a857d32ad03b400bb06d39 100644 --- a/osufs/osufs/osu_object_analyze/osu_object_includes.h +++ b/osufs/osufs/osu_object_analyze/osu_object_includes.h @@ -17,7 +17,7 @@ typedef struct __attribute__((__packed__)) hit_circle_t{ uint16_t approach_rate; uint16_t gradient_color1; uint16_t gradient_color2; - uint8_t gradient_direction; + uint8_t hit_sound; char type; } elem_hit_circle; diff --git a/osufs/osufs/osu_object_analyze/osu_object_parser.cpp b/osufs/osufs/osu_object_analyze/osu_object_parser.cpp index 4f91e350ce94f7e79e87dfe168c9784ceb7dfe24..ee1b305b5efd8e4fed1937c0fc00bcac21114042 100644 --- a/osufs/osufs/osu_object_analyze/osu_object_parser.cpp +++ b/osufs/osufs/osu_object_analyze/osu_object_parser.cpp @@ -62,7 +62,7 @@ int osu_parse_hit_object(char* line, osu_song* song){ //hit sound //elemn->hit_sound = stoi(v[4]); // -// elemn->hit_sound = 1; // TODO + sscanf(v[4].c_str(),"%c",&(elemn->hit_sound)); // //handle timing stuff int temp_c = 0; @@ -79,15 +79,19 @@ int osu_parse_hit_object(char* line, osu_song* song){ } //update count and data block if (!song->storyboard){ - song->storyboard = (uint8_t *) malloc(4+4+32*temp_c); - *((uint32_t*)(song->storyboard)) = 0b01110010011001010110000101101100; + song->storyboard = (osu_storyboard*) malloc(sizeof(osu_storyboard)); + /**((uint32_t*)(song->storyboard)) = 0b01110010011001010110000101101100; *((uint32_t*)(song->storyboard)+1) = temp_c; - memcpy(song->storyboard+8,elemn,32*temp_c); + memcpy(song->storyboard+8,elemn,32*temp_c);*/ + song->storyboard->magic = 0b01110010011001010110000101101100; + song->storyboard->object_number = temp_c; }else{ - song->storyboard = (uint8_t *) realloc(song->storyboard,4+4+ + /*song->storyboard = (uint8_t *) realloc(song->storyboard,4+4+ 32*(temp_c+(*((uint32_t*)(song->storyboard)+1)))); memcpy(song->storyboard+8+32*(*((uint32_t*)(song->storyboard)+1)),elemn,32*temp_c); - *((uint32_t*)(song->storyboard)+1) += temp_c; + *((uint32_t*)(song->storyboard)+1) += temp_c;*/ + memcpy(object_list,elemn,temp_c*sizeof(elem_hit_circle)) + song->storyboard->object_number += temp_c; } free(elemn); return 0; diff --git a/osufs/osufs/osufs.h b/osufs/osufs/osufs.h index a4b2458c5295aad0cc84876f89f4f3ffbc592321..03e43245826fff8c9a22453357281f35dea736f3 100644 --- a/osufs/osufs/osufs.h +++ b/osufs/osufs/osufs.h @@ -16,7 +16,7 @@ extern "C" { #include <stdio.h> #include <inttypes.h> #include "blkio.h" - +#include "osu_object_analyze/osu_object_includes.h" typedef struct __attribute__((__packed__)) osu_meta_t { char magic[4]; // 0 - 3 @@ -228,7 +228,7 @@ extern "C" { uint16_t stack_leniency; // 78 - 79 //for analyze side only - uint8_t *storyboard; // 80 - 87 + osu_storyboard *storyboard; // 80 - 87 uint8_t combo_colors_count; // 88 uint8_t combo_colors_start; // 89 uint8_t combo_slider_color[3]; // 90 - 92 @@ -241,7 +241,14 @@ extern "C" { char creator[32]; // 448 - 479 char version[32]; // 480 - 511 } osu_song; - + + typedef struct __attribute__((__packed__)) storyboard_t { + uint32_t magic; //4 + uint32_t object_number; //4 + elem_hit_circle object_list[65535]; //fill a total of 4096 blocks + char _padding[24]; //32-8 = 24 + } osu_storyboard; + osu_meta osu_read_meta(mdev *dev); osu_song osu_read_song(mdev *dev, int idx); void osu_write_meta(mdev *dev, osu_meta *meta);