diff --git a/include/game/hsfformat.h b/include/game/hsfformat.h
index 505ab6ba..427f7b69 100644
--- a/include/game/hsfformat.h
+++ b/include/game/hsfformat.h
@@ -67,9 +67,9 @@ typedef struct hsf_bitmap {
s32 maxLod;
u8 dataFmt;
u8 pixSize;
- u16 w;
- u16 h;
- u16 palSize;
+ s16 sizeX;
+ s16 sizeY;
+ s16 palSize;
GXColor tint;
void *palData;
u32 unk;
@@ -79,13 +79,17 @@ typedef struct hsf_bitmap {
typedef struct hsf_palette {
char *name;
s32 unk;
- s32 palSize;
- void *data;
+ u32 palSize;
+ u16 *data;
} HsfPalette;
typedef struct hsf_attribute {
char *name;
- u8 unk[124];
+ u8 unk4[96];
+ u32 wrap_s;
+ u32 wrap_t;
+ u8 unk6C[16];
+ u32 flag;
HsfBitmap *bitmap;
} HsfAttribute;
@@ -288,10 +292,10 @@ typedef struct hsf_motion {
} HsfMotion;
typedef struct hsf_map_attr {
- float min_x;
- float min_z;
- float max_x;
- float max_z;
+ float minX;
+ float minZ;
+ float maxX;
+ float maxZ;
s16 *data;
u32 dataLen;
} HsfMapAttr;
diff --git a/src/game/hsfload.c b/src/game/hsfload.c
index 94b1b915..976bc113 100644
--- a/src/game/hsfload.c
+++ b/src/game/hsfload.c
@@ -877,6 +877,93 @@ static void ShapeLoad(void)
}
}
+static void BitmapLoad(void)
+{
+ HsfBitmap *bitmap_file;
+ HsfBitmap *bitmap_temp;
+ HsfBitmap *bitmap_new;
+ HsfPalette *palette;
+ void *data;
+ s32 i;
+
+ if(head.bitmap.count) {
+ bitmap_temp = bitmap_file = (HsfBitmap *)((u32)fileptr+head.bitmap.ofs);
+ data = &bitmap_file[head.bitmap.count];
+ for(i=0; i
name = SetName((u32 *)&bitmap_file->name);
+ bitmap_new->dataFmt = bitmap_file->dataFmt;
+ bitmap_new->pixSize = bitmap_file->pixSize;
+ bitmap_new->sizeX = bitmap_file->sizeX;
+ bitmap_new->sizeY = bitmap_file->sizeY;
+ bitmap_new->palSize = bitmap_file->palSize;
+ palette = SearchPalettePtr((u32)bitmap_file->palData);
+ if(palette) {
+ bitmap_new->palData = palette->data;
+ }
+ bitmap_new->data = (void *)((u32)data+(u32)bitmap_file->data);
+ }
+ }
+}
+
+static void PaletteLoad(void)
+{
+ s32 i;
+ s32 j;
+ HsfPalette *palette_file;
+ HsfPalette *palette_temp;
+ HsfPalette *palette_new;
+
+ void *data_base;
+ u16 *temp_data;
+ u16 *data;
+
+ if(head.palette.count) {
+ palette_temp = palette_file = (HsfPalette *)((u32)fileptr+head.palette.ofs);
+ data_base = (u16 *)&palette_file[head.palette.count];
+ for(i=0; idata);
+ }
+ Model.palette = palette_temp;
+ Model.paletteCnt = head.palette.count;
+ palette_new = palette_temp;
+ palette_file = (HsfPalette *)((u32)fileptr+head.palette.ofs);
+ data_base = (u16 *)&palette_file[head.palette.count];
+ for(i=0; idata);
+ data = temp_data;
+ palette_new->name = SetName((u32 *)&palette_file->name);
+ palette_new->data = data;
+ palette_new->palSize = palette_file->palSize;
+ for(j=0; jpalSize; j++) {
+ data[j] = data[j];
+ }
+ }
+ }
+}
+
+static void MotionLoad(void)
+{
+
+}
+
+static void MatrixLoad(void)
+{
+ HsfMatrix *matrix_file;
+
+ if(head.matrix.count) {
+ matrix_file = (HsfMatrix *)((u32)fileptr+head.matrix.ofs);
+ matrix_file->data = (Mtx *)((u32)fileptr+head.matrix.ofs+sizeof(HsfMatrix));
+ Model.matrix = matrix_file;
+ Model.matrixCnt = head.matrix.count;
+ }
+}
+
static void MapAttrLoad(void)
{
s32 i;