0x98 is the primitve type value for triangle strips. unlike triangle list every 3 vertices does not form a single triangle. After the initial 3 vertices, every vertex after that uses the previous 2 index values to create a new triangle.
So if you have the index values:
0 1 2 3 4 5 6
if you treated this as a triangle list you would get:
[0 1 2], [3 4 5]
and not have enough index values.
instead for a triangle strip the actual triangles will be:
[0 1 2], [1 2 3], [2 3 4], [3 4 5], and [4 5 6]
which means you would have missed 3 whole triangles if you interpreted things as a list of triangles.
So you have to make sure you take the various primitive types into account. The normals and uvs should work similarly except since normals are unit length you would have to divide the values you get by say 32,767 if the values are 16-bit, which would convert values to a range of -1 to 1 in floating point. UV coordinates would be converted similarly. This is under that assumption the values are not already in floating point, and are 16-bit within the range of -32,767 and 32,767.
As far as faces go, like i mentioned earlier, the gamecube/wii allows for indexing vertices, normals, and uv coordinates separately, so unfortunately you will not always be able to setup faces from just a single index. As such you may have to do a preprocessing step that duplicates any necessary data, unless the application, format or api you are working with also supports indexing values separately.
So if you have vertices normals and uv coordinates, every 3 index values would represent a single vertex, and every 3 groups (of three index values) would define a triangle if the primitive type is triangle list.