Index: libs/picomodel/pm_md2.c
===================================================================
--- libs/picomodel/pm_md2.c	(Revision 5190)
+++ libs/picomodel/pm_md2.c	(Arbeitskopie)
@@ -68,8 +68,6 @@
 {
 	short	Vert;
 	short	ST;
-	struct	index_LUT_s	*next;
-
 } index_LUT_t;
 
 typedef struct index_DUP_LUT_s
@@ -432,9 +430,6 @@
 		texCoord->t = _pico_little_short( texCoord->t );
 	}
 
-	// set Skin Name
-	strncpy(skinname, (const char*)(bb + md2->ofsSkins), MD2_MAX_SKINNAME );
-
 	// Print out md2 values
 	_pico_printf(PICO_VERBOSE,"Skins: %d  Verts: %d  STs: %d  Triangles: %d  Frames: %d\nSkin Name \"%s\"\n", md2->numSkins, md2->numXYZ, md2->numST, md2->numTris, md2->numFrames, &skinname );
 
@@ -517,166 +512,55 @@
 		p_index_LUT[i].next = NULL;
 	}
 
-	// Fill in Look Up Table, and allocate/fill Linked List from vert array as needed for dup STs per Vert.
+	/* Fill in Look Up Table, and allocate/fill Linked List from vert array as needed for dup STs per Vert. */
 	tot_numVerts = md2->numXYZ;
-	dups = 0;
-	for(i=0; i<md2->numTris; i++)
-	{
-		p_md2Triangle = (md2Triangle_t *) ( bb + md2->ofsTris + (sizeof(md2Triangle_t)*i));
-		for(j=0; j<3; j++)
-		{
-			if (p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1) // No Main Entry
+	for (i = 0; i < md2->numTris; i++) {
+		p_md2Triangle = (md2Triangle_t *) (bb + md2->ofsTris + (sizeof(md2Triangle_t) * i));
+		for (j = 0; j < 3; j++) {
+			if (p_index_LUT[p_md2Triangle->index_xyz[j]].ST == -1) /* No Main Entry */
 				p_index_LUT[p_md2Triangle->index_xyz[j]].ST = p_md2Triangle->index_st[j];
-
-			else if (p_md2Triangle->index_st[j] == p_index_LUT[p_md2Triangle->index_xyz[j]].ST ) // Equal to Main Entry
-				continue;
-
-			else if ( (p_index_LUT[p_md2Triangle->index_xyz[j]].next == NULL) )  // Not equal to Main entry, and no LL entry
-			{	// Add first entry of LL from Main
-				p_index_LUT2 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t));
-				if (p_index_LUT2 == NULL)
-					_pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
-				p_index_LUT[p_md2Triangle->index_xyz[j]].next = (index_LUT_t *)p_index_LUT2;
-				p_index_LUT2->Vert = dups;
-				p_index_LUT2->ST = p_md2Triangle->index_st[j];
-				p_index_LUT2->next = NULL;
-				p_md2Triangle->index_xyz[j] = dups + md2->numXYZ; // Make change in Tri hunk
-				dups++;
-			}
-			else // Try to find in LL from Main Entry
-			{
-				p_index_LUT3 = p_index_LUT2 = p_index_LUT[p_md2Triangle->index_xyz[j]].next;
-				while ( (p_index_LUT2 != NULL) && (p_md2Triangle->index_xyz[j] != p_index_LUT2->Vert) ) // Walk down LL
-				{
-					p_index_LUT3 = p_index_LUT2;
-					p_index_LUT2 = p_index_LUT2->next;
-				}
-				p_index_LUT2 = p_index_LUT3;
-
-				if ( p_md2Triangle->index_st[j] == p_index_LUT2->ST ) // Found it
-				{
-					p_md2Triangle->index_xyz[j] = p_index_LUT2->Vert + md2->numXYZ; // Make change in Tri hunk
-					continue;
-				}
-
-				if ( p_index_LUT2->next == NULL)  // Didn't find it. Add entry to LL.
-				{
-					// Add the Entry
-					p_index_LUT3 = (index_LUT_t *)_pico_alloc(sizeof(index_LUT_t));
-					if (p_index_LUT3 == NULL)
-						_pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
-					p_index_LUT2->next = (index_LUT_t *)p_index_LUT3;
-					p_index_LUT3->Vert = p_md2Triangle->index_xyz[j];
-					p_index_LUT3->ST = p_md2Triangle->index_st[j];
-					p_index_LUT3->next = NULL;
-					p_md2Triangle->index_xyz[j] = dups + md2->numXYZ; // Make change in Tri hunk
-					dups++;
-				}
-			}
 		}
 	}
 
-	// malloc and build array for Dup STs
-	p_index_LUT_DUPS = (index_DUP_LUT_t *)_pico_alloc(sizeof(index_DUP_LUT_t) * dups);
-	if (p_index_LUT_DUPS == NULL)
-		_pico_printf( PICO_ERROR," Couldn't allocate memory!\n");
-
-	dup_index = 0;
-	for(i=0; i<md2->numXYZ; i++)
-	{
-		p_index_LUT2 = p_index_LUT[i].next;
-		while (p_index_LUT2 != NULL)
-		{
-			p_index_LUT_DUPS[p_index_LUT2->Vert].OldVert = i;
-			p_index_LUT_DUPS[p_index_LUT2->Vert].ST = p_index_LUT2->ST;
-			dup_index++;
-			p_index_LUT2 = p_index_LUT2->next;
-		}
+	/* Build Picomodel */
+	triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris));
+	for (j = 0; j < md2->numTris; j++, triangle++) {
+		PicoSetSurfaceIndex(picoSurface, j * 3, triangle->index_xyz[0]);
+		PicoSetSurfaceIndex(picoSurface, j * 3 + 1, triangle->index_xyz[1]);
+		PicoSetSurfaceIndex(picoSurface, j * 3 + 2, triangle->index_xyz[2]);
 	}
 
-	// Build Picomodel
-	triangle = (md2Triangle_t *) ((picoByte_t *) (bb + md2->ofsTris) );
-	texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST) );
-	vertex = (md2XyzNormal_t*) ((picoByte_t*) (frame->verts) );
-	for( j = 0; j < md2->numTris; j++, triangle++ )
-	{
-		PicoSetSurfaceIndex( picoSurface, j*3   , triangle->index_xyz[0] );
-		PicoSetSurfaceIndex( picoSurface, j*3+1 , triangle->index_xyz[1] );
-		PicoSetSurfaceIndex( picoSurface, j*3+2 , triangle->index_xyz[2] );
-	}
+	_pico_set_color(color, 255, 255, 255, 255);
 
-	for(i=0; i< md2->numXYZ; i++, vertex++)
-	{
+	texCoord = (md2St_t*) ((picoByte_t *) (bb + md2->ofsST));
+	vertex = (md2XyzNormal_t*) ((picoByte_t*) (frame->verts));
+	for (i = 0; i < md2->numXYZ; i++, vertex++) {
 		/* set vertex origin */
-		xyz[ 0 ] = vertex->v[0] * frame->scale[0] + frame->translate[0];
-		xyz[ 1 ] = vertex->v[1] * frame->scale[1] + frame->translate[1];
-		xyz[ 2 ] = vertex->v[2] * frame->scale[2] + frame->translate[2];
-		PicoSetSurfaceXYZ( picoSurface, i , xyz );
+		xyz[0] = vertex->v[0] * frame->scale[0] + frame->translate[0];
+		xyz[1] = vertex->v[1] * frame->scale[1] + frame->translate[1];
+		xyz[2] = vertex->v[2] * frame->scale[2] + frame->translate[2];
+		PicoSetSurfaceXYZ(picoSurface, i, xyz);
 
 		/* set normal */
-		normal[ 0 ] = md2_normals[vertex->lightnormalindex][0];
-		normal[ 1 ] = md2_normals[vertex->lightnormalindex][1];
-		normal[ 2 ] = md2_normals[vertex->lightnormalindex][2];
-		PicoSetSurfaceNormal( picoSurface, i , normal );
+		normal[0] = md2_normals[vertex->lightnormalindex][0];
+		normal[1] = md2_normals[vertex->lightnormalindex][1];
+		normal[2] = md2_normals[vertex->lightnormalindex][2];
+		PicoSetSurfaceNormal(picoSurface, i, normal);
 
 		/* set st coords */
-		st[ 0 ] =  ((texCoord[p_index_LUT[i].ST].s) / ((float)md2->skinWidth));
-		st[ 1 ] =  (texCoord[p_index_LUT[i].ST].t / ((float)md2->skinHeight));
-		PicoSetSurfaceST( picoSurface, 0, i , st );
-	}
+		st[0] = (float) texCoord[p_index_LUT[i].ST].s / (float) md2->skinWidth;
+		st[1] = (float) texCoord[p_index_LUT[i].ST].t / (float) md2->skinHeight;
+		PicoSetSurfaceST(picoSurface, 0, i, st);
 
-	if (dups)
-	{
-		for(i=0; i<dups; i++)
-		{
-			j = p_index_LUT_DUPS[i].OldVert;
-			/* set vertex origin */
-			xyz[ 0 ] = frame->verts[j].v[0] * frame->scale[0] + frame->translate[0];
-			xyz[ 1 ] = frame->verts[j].v[1] * frame->scale[1] + frame->translate[1];
-			xyz[ 2 ] = frame->verts[j].v[2] * frame->scale[2] + frame->translate[2];
-			PicoSetSurfaceXYZ( picoSurface, i + md2->numXYZ , xyz );
-
-			/* set normal */
-			normal[ 0 ] = md2_normals[frame->verts[j].lightnormalindex][0];
-			normal[ 1 ] = md2_normals[frame->verts[j].lightnormalindex][1];
-			normal[ 2 ] = md2_normals[frame->verts[j].lightnormalindex][2];
-			PicoSetSurfaceNormal( picoSurface, i + md2->numXYZ , normal );
-
-			/* set st coords */
-			st[ 0 ] =  ((texCoord[p_index_LUT_DUPS[i].ST].s) / ((float)md2->skinWidth));
-			st[ 1 ] =  (texCoord[p_index_LUT_DUPS[i].ST].t / ((float)md2->skinHeight));
-			PicoSetSurfaceST( picoSurface, 0, i + md2->numXYZ , st );
-		}
+		/* set color */
+		PicoSetSurfaceColor(picoSurface, 0, i, color);
 	}
 
-	/* set color */
-	PicoSetSurfaceColor( picoSurface, 0, 0, color );
+	/* Free malloc'ed LUTs */
+	_pico_free(p_index_LUT);
 
-	// Free up malloc'ed LL entries
-	for(i=0; i<md2->numXYZ; i++)
-	{
-		if(p_index_LUT[i].next != NULL)
-		{
-			p_index_LUT2 = p_index_LUT[i].next;
-			do {
-				p_index_LUT3 = p_index_LUT2->next;
-				_pico_free(p_index_LUT2);
-				p_index_LUT2 = p_index_LUT3;
-				dups--;
-			} while (p_index_LUT2 != NULL);
-		}
-	}
-
-	if (dups)
-		_pico_printf(PICO_WARNING, " Not all LL mallocs freed\n");
-
-	// Free malloc'ed LUTs
- 	_pico_free(p_index_LUT);
-	_pico_free(p_index_LUT_DUPS);
-
 	/* return the new pico model */
 	return picoModel;
-
 }
 
 
