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; iname = 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;