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