1 /****************************************************************************
7 ****************************************************************************/
20 LevelData MyLevelData
;
25 pBot FirstUnusedBot
=0;
27 /* Replace strtod1000() cause of bug */
29 fix
strtod1000(char * MyStr
, char ** EndStr
)
31 return ((fix
)strtol(MyStr
,EndStr
,10))/1000.0;
34 /* Parse a string from File */
35 /* No error checking yet */
37 int16
ParseFile(FILE *MyFile
,char *Buffer
)
44 fscanf(MyFile
,"%s",Buffer
);
52 if (*Pos
==(char)34) /* Check for " and parse until " */
53 { /* Eliminate first " */
55 while (*(Pos2
)!=(char)0)
60 while (*Pos
!=(char)34) /* Parse until " */
66 fscanf(MyFile
,"%s",Pos
);
71 while (*(Pos
)!=(char)0) /* Eliminate second " */
79 while (*Pos
!=(char)0) /* Check for `/''*` */
81 if ((*Pos
=='/') && (*(Pos
+1)=='*'))
83 Pos2
=Pos
; /* Remember start of comment */
85 while ((*Pos
!='*') || (*(Pos
+1)!='/'))
86 { /* parse until '*''/' */
90 fscanf(MyFile
,"%s",Pos
);
95 Pos3
=Pos
+2; /* Eliminate Comment */
97 while (*Pos2
!=(char)0)
109 if ((*Buffer
==(char)0)&&(Error
==0))
110 return ParseFile(MyFile
,Buffer
);
116 /* Parse Missionfile and build Mission Menu */
118 int16
LoadMissions(char *Name
)
122 FILE *MissionFile
= NULL
;
123 pMission PosMission
= NULL
;
124 pLevel PosLevel
= NULL
;
126 MissionFile
=fopen(Name
,"r");
128 while (!feof(MissionFile
))
130 if (!ParseFile(MissionFile
,PadStr
))
132 if (!strcmp(PadStr
,"OnFile")) /* Parse loader helpers */
133 while (strcmp(PadStr
,"OnFileEnd"))
135 ParseFile(MissionFile
,PadStr
);
137 else if (!strcmp(PadStr
,"Missions")) /* Parse Missions */
138 while (strcmp(PadStr
,"MissionsEnd"))
140 ParseFile(MissionFile
,PadStr
);
141 if (!strcmp(PadStr
,"NumMissions:"))
143 ParseFile(MissionFile
,PadStr
);
144 MyMissions
.Num
=strtol(PadStr
,0,0);
145 MyMissions
.Missions
=(pMission
)MemAlloc((int32
)(MyMissions
.Num
*sizeof(Mission
)));
146 if (MyMissions
.Missions
==0)
148 printf("Not enough mem to alloc Missions\n");
149 /* To be considered */
151 PosMission
=MyMissions
.Missions
;
153 else if (!strcmp(PadStr
,"MissionsName:"))
155 ParseFile(MissionFile
,PadStr
);
156 strcpy(MyMissions
.Name
,PadStr
);
158 else if (!strcmp(PadStr
,"MissionsStorry:"))
160 ParseFile(MissionFile
,PadStr
);
163 MyMissions
.Storry
="MissionsStorry";
164 /* To be considered */
168 MyMissions
.Storry
="MissionsStorry";
169 /* To be considered */
173 else if (!strcmp(PadStr
,"Mission")) /* parse Mission */
175 while (strcmp(PadStr
,"MissionEnd"))
177 ParseFile(MissionFile
,PadStr
);
178 if (!strcmp(PadStr
,"MissionName:"))
180 ParseFile(MissionFile
,PadStr
);
181 strcpy(PosMission
->Name
,PadStr
);
183 else if (!strcmp(PadStr
,"MissionStorry:"))
185 ParseFile(MissionFile
,PadStr
);
188 PosMission
->Storry
="MissionStorry";
189 /* To be considered */
193 PosMission
->Storry
="MissionStorry";
194 /* To be considered */
197 else if (!strcmp(PadStr
,"NumLevels:"))
199 ParseFile(MissionFile
,PadStr
);
200 PosMission
->Num
=strtol(PadStr
,0,0);
201 PosMission
->Levels
=(pLevel
)MemAlloc((int32
)(PosMission
->Num
*sizeof(Level
)));
204 printf("Could not allocate mem for LevelNames\n");
205 /* To be considered */
207 PosLevel
=PosMission
->Levels
;
209 else if (!strcmp(PadStr
,"Level:"))
211 ParseFile(MissionFile
,PadStr
);
214 printf("Levelnames should have a leeding @\n");
215 /* To be considered */
219 strcpy((char *)PosLevel
,PadStr
+1);
235 void ReadTextureFile(char * Name
,pTexture Texture
)
239 printf("Loading Texture :%s\n",Name
);
241 TextFile
=fopen(Name
,"r");
243 if (TextFile
!= NULL
)
245 Texture
->TextureWidth
= 256;
246 Texture
->TextureHeight
= 256;
247 fread(&Texture
->ColMap
,256,256,TextFile
);
253 printf("Could not open Texture: %s\n",Name
);
258 void LoadColors(char * Name
,pColor MyColor
)
265 printf("Loading Colors...\n");
267 ColFile
= fopen(Name
,"r");
271 col
= &MyColor
->RGB
[0][0];
273 for (t
=0; t
<256*3; t
++)
275 fread(bytes
,1,4,ColFile
);
277 col
[t
] = (bytes
[0] << 24) | (bytes
[1] << 16) |
278 (bytes
[2] << 8) | bytes
[3];
285 printf("Could not open Colors:%s\n",Name
);
290 void LoadFading(char * Name
,pFade MyFade
)
294 printf("Loading Fading...\n");
296 FadeFile
= fopen(Name
,"r");
298 if (FadeFile
!= NULL
)
300 fread(&MyFade
->Col
,256,256,FadeFile
);
306 printf("Could not open Fadeings:%s\n",Name
);
310 int16
LoadLevel(char * Name
)
315 pPnt PosPoint
= NULL
;
316 pTexture PosTexture
= NULL
;
317 pSide PosSide
= NULL
;
318 pCube PosCube
= NULL
;
319 pPolygon PosPolygon
= NULL
;
320 pMesh PosMesh
= NULL
;
324 LevelFile
=fopen(Name
,"r");
328 while (!feof(LevelFile
))
330 ParseFile(LevelFile
,PadStr
);
331 if (!strcmp(PadStr
,"Header"))
333 while(strcmp(PadStr
,"HeaderEnd"))
335 ParseFile(LevelFile
,PadStr
);
336 /* To be considered */
337 if (!strcmp(PadStr
,"Colors:"))
339 ParseFile(LevelFile
,PadStr
);
340 if (PadStr
[0] != '@')
342 printf("Colors must be in a file!\n");
348 LoadColors(&PadStr
[1],&MyColor
);
351 if (!strcmp(PadStr
,"Fadeing:"))
353 ParseFile(LevelFile
,PadStr
);
354 if (PadStr
[0] != '@')
356 printf("Fading must be in a file!\n");
362 LoadFading(&PadStr
[1],&MyFade
);
365 if (!strcmp(PadStr
,"Rings:"))
367 ParseFile(LevelFile
,PadStr
);
368 MyLevelData
.NumRings
= strtol(PadStr
,0,0);
372 else if (!strcmp(PadStr
,"Points"))
374 while(strcmp(PadStr
,"PointsEnd"))
376 ParseFile(LevelFile
,PadStr
);
377 if (!strcmp(PadStr
,"NumPoints:"))
379 ParseFile(LevelFile
,PadStr
);
380 MyLevelData
.NumPoints
=strtol(PadStr
,0,0);
381 MyLevelData
.Points
=(pPnt
)MemAlloc((int32
)(MyLevelData
.NumPoints
*sizeof(Pnt
)));
382 PosPoint
=MyLevelData
.Points
;
384 else if (!strcmp(PadStr
,"Point:"))
386 ParseFile(LevelFile
,PadStr
);
387 PosPoint
->x
=(fix
)strtod1000(PadStr
,0);
388 ParseFile(LevelFile
,PadStr
);
389 PosPoint
->y
=(fix
)strtod1000(PadStr
,0);
390 ParseFile(LevelFile
,PadStr
);
391 PosPoint
->z
=(fix
)strtod1000(PadStr
,0);
397 else if (!strcmp(PadStr
,"Textures"))
399 while(strcmp(PadStr
,"TexturesEnd"))
401 ParseFile(LevelFile
,PadStr
);
402 if (!strcmp(PadStr
,"NumTextures:"))
404 ParseFile(LevelFile
,PadStr
);
405 MyLevelData
.NumTextures
=strtol(PadStr
,0,0);
406 MyLevelData
.Textures
=(pTexture
)MemAlloc((int32
)(MyLevelData
.NumTextures
*sizeof(Texture
)));
407 PosTexture
=MyLevelData
.Textures
;
409 else if (!strcmp(PadStr
,"Texture:"))
411 ParseFile(LevelFile
,PadStr
);
412 if (PadStr
[0] != '@')
414 printf("Textures should be in a file\n");
419 ReadTextureFile(&PadStr
[1],PosTexture
);
426 else if (!strcmp(PadStr
,"Sides"))
428 while(strcmp(PadStr
,"SidesEnd"))
430 ParseFile(LevelFile
,PadStr
);
431 if (!strcmp(PadStr
,"NumSides:"))
433 ParseFile(LevelFile
,PadStr
);
434 MyLevelData
.NumSides
=strtol(PadStr
,0,0);
435 MyLevelData
.Sides
=(pSide
)MemAlloc((int32
)(MyLevelData
.NumSides
*sizeof(Side
)));
436 PosSide
=MyLevelData
.Sides
;
438 else if (!strcmp(PadStr
,"Side:"))
440 ParseFile(LevelFile
,PadStr
);
441 if (strtol(PadStr
,0,0) != 0)
443 PosSide
->Back
=&MyLevelData
.Textures
[strtol(PadStr
,0,0)];
446 ParseFile(LevelFile
,PadStr
);
447 PosSide
->BackPnts
[v
].x
=strtod1000(PadStr
,0);
448 ParseFile(LevelFile
,PadStr
);
449 PosSide
->BackPnts
[v
].y
=strtod1000(PadStr
,0);
450 ParseFile(LevelFile
,PadStr
);
451 PosSide
->BackPnts
[v
].z
=strtod1000(PadStr
,0);
458 ParseFile(LevelFile
,PadStr
);
459 if (strtol(PadStr
,0,0) != 0)
461 PosSide
->Front
=&MyLevelData
.Textures
[strtol(PadStr
,0,0)];
464 ParseFile(LevelFile
,PadStr
);
465 PosSide
->FrontPnts
[v
].x
=strtod1000(PadStr
,0);
466 ParseFile(LevelFile
,PadStr
);
467 PosSide
->FrontPnts
[v
].y
=strtod1000(PadStr
,0);
468 ParseFile(LevelFile
,PadStr
);
469 PosSide
->FrontPnts
[v
].z
=strtod1000(PadStr
,0);
481 else if (!strcmp(PadStr
,"Cubes"))
483 while(strcmp(PadStr
,"CubesEnd"))
485 ParseFile(LevelFile
,PadStr
);
486 if (!strcmp(PadStr
,"NumCubes:"))
488 ParseFile(LevelFile
,PadStr
);
489 MyLevelData
.NumCubes
=strtol(PadStr
,0,0);
490 MyLevelData
.Cubes
=(pCube
)MemAlloc((int32
)(MyLevelData
.NumCubes
*sizeof(Cube
)));
491 PosCube
=MyLevelData
.Cubes
;
493 else if (!strcmp(PadStr
,"Cube:"))
497 for (v
=0;v
<8;v
++) /* Read 8 Points */
499 ParseFile(LevelFile
,PadStr
);
500 MyPoints
[v
]=strtol(PadStr
,0,0);
502 ParseFile(LevelFile
,PadStr
); /* Read Light */
503 PosCube
->Light
=strtod1000(PadStr
,0);
505 for (v
=0;v
<6;v
++) /* Read 6 Sides */
507 ParseFile(LevelFile
,PadStr
);
508 if (strtol(PadStr
,0,0) != 0)
510 PosCube
->Sides
[v
].Back
=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].Back
;
511 PosCube
->Sides
[v
].BackPnts
[0]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].BackPnts
[0];
512 PosCube
->Sides
[v
].BackPnts
[1]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].BackPnts
[1];
513 PosCube
->Sides
[v
].BackPnts
[2]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].BackPnts
[2];
514 PosCube
->Sides
[v
].BackPnts
[3]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].BackPnts
[3];
515 PosCube
->Sides
[v
].Front
=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].Front
;
516 PosCube
->Sides
[v
].FrontPnts
[0]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].FrontPnts
[0];
517 PosCube
->Sides
[v
].FrontPnts
[1]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].FrontPnts
[1];
518 PosCube
->Sides
[v
].FrontPnts
[2]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].FrontPnts
[2];
519 PosCube
->Sides
[v
].FrontPnts
[3]=MyLevelData
.Sides
[strtol(PadStr
,0,0)-1].FrontPnts
[3];
520 ParseFile(LevelFile
,PadStr
);
521 PosCube
->Sides
[v
].Light
=strtod1000(PadStr
,0);
525 PosCube
->Sides
[v
].Light
=0.0;
526 PosCube
->Sides
[v
].Back
=0;
527 PosCube
->Sides
[v
].Front
=0;
529 switch (v
) /* Insert Points depending on the side */
533 PosCube
->Sides
[0].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideFront0
]-1];
534 PosCube
->Sides
[0].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideFront1
]-1];
535 PosCube
->Sides
[0].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideFront2
]-1];
536 PosCube
->Sides
[0].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideFront3
]-1];
540 PosCube
->Sides
[1].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideBack0
]-1];
541 PosCube
->Sides
[1].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideBack1
]-1];
542 PosCube
->Sides
[1].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideBack2
]-1];
543 PosCube
->Sides
[1].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideBack3
]-1];
547 PosCube
->Sides
[2].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideLeft0
]-1];
548 PosCube
->Sides
[2].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideLeft1
]-1];
549 PosCube
->Sides
[2].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideLeft2
]-1];
550 PosCube
->Sides
[2].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideLeft3
]-1];
554 PosCube
->Sides
[3].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideRight0
]-1];
555 PosCube
->Sides
[3].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideRight1
]-1];
556 PosCube
->Sides
[3].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideRight2
]-1];
557 PosCube
->Sides
[3].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideRight3
]-1];
561 PosCube
->Sides
[4].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideTop0
]-1];
562 PosCube
->Sides
[4].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideTop1
]-1];
563 PosCube
->Sides
[4].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideTop2
]-1];
564 PosCube
->Sides
[4].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideTop3
]-1];
568 PosCube
->Sides
[5].Pnts
[0]=&MyLevelData
.Points
[MyPoints
[SideBottom0
]-1];
569 PosCube
->Sides
[5].Pnts
[1]=&MyLevelData
.Points
[MyPoints
[SideBottom1
]-1];
570 PosCube
->Sides
[5].Pnts
[2]=&MyLevelData
.Points
[MyPoints
[SideBottom2
]-1];
571 PosCube
->Sides
[5].Pnts
[3]=&MyLevelData
.Points
[MyPoints
[SideBottom3
]-1];
574 ParseFile(LevelFile
,PadStr
);
575 if (strtol(PadStr
,0,0) != 0)
577 PosCube
->Cubes
[v
]=&MyLevelData
.Cubes
[strtol(PadStr
,0,0)-1];
583 CalcNormalToSide(&PosCube
->Sides
[v
]);
590 else if (!strcmp(PadStr
,"Polygons"))
592 while(strcmp(PadStr
,"PolygonsEnd"))
594 ParseFile(LevelFile
,PadStr
);
595 if (!strcmp(PadStr
,"NumPolygons:"))
597 ParseFile(LevelFile
,PadStr
);
598 MyLevelData
.NumPolygons
=strtol(PadStr
,0,0);
599 MyLevelData
.Polygons
=(pPolygon
)MemAlloc((int32
)(MyLevelData
.NumPolygons
*sizeof(Polygon
)));
600 PosPolygon
=MyLevelData
.Polygons
;
602 else if (!strcmp(PadStr
,"Polygon:"))
606 ParseFile(LevelFile
,PadStr
);
607 PosPolygon
->NumPoints
=strtol(PadStr
,0,0);
611 for (u
=0;u
<PosPolygon
->NumPoints
;u
++)
613 ParseFile(LevelFile
,PadStr
);
614 PosPolygon
->Pnts
[u
].x
=strtod1000(PadStr
,0);
615 ParseFile(LevelFile
,PadStr
);
616 PosPolygon
->Pnts
[u
].y
=strtod1000(PadStr
,0);
617 ParseFile(LevelFile
,PadStr
);
618 PosPolygon
->Pnts
[u
].z
=strtod1000(PadStr
,0);
623 ParseFile(LevelFile
,PadStr
);
624 PosPolygon
->Normal
.x
=strtod1000(PadStr
,0);
625 ParseFile(LevelFile
,PadStr
);
626 PosPolygon
->Normal
.y
=strtod1000(PadStr
,0);
627 ParseFile(LevelFile
,PadStr
);
628 PosPolygon
->Normal
.z
=strtod1000(PadStr
,0);
632 ParseFile(LevelFile
,PadStr
);
634 if (strtol(PadStr
,0,0) == 0)
636 PosPolygon
->Back
= 0;
640 PosPolygon
->Back
= &MyLevelData
.Textures
[strtol(PadStr
,0,0)];
646 ParseFile(LevelFile
,PadStr
);
647 PosPolygon
->BackPnts
[u
].x
=strtod1000(PadStr
,0);
648 ParseFile(LevelFile
,PadStr
);
649 PosPolygon
->BackPnts
[u
].y
=strtod1000(PadStr
,0);
650 ParseFile(LevelFile
,PadStr
);
651 PosPolygon
->BackPnts
[u
].z
=strtod1000(PadStr
,0);
655 ParseFile(LevelFile
,PadStr
);
657 if (strtol(PadStr
,0,0) == 0)
659 PosPolygon
->Front
= 0;
663 PosPolygon
->Front
= &MyLevelData
.Textures
[strtol(PadStr
,0,0)];
669 ParseFile(LevelFile
,PadStr
);
670 PosPolygon
->FrontPnts
[u
].x
=strtod1000(PadStr
,0);
671 ParseFile(LevelFile
,PadStr
);
672 PosPolygon
->FrontPnts
[u
].y
=strtod1000(PadStr
,0);
673 ParseFile(LevelFile
,PadStr
);
674 PosPolygon
->FrontPnts
[u
].z
=strtod1000(PadStr
,0);
682 else if (!strcmp(PadStr
,"Meshes"))
684 while(strcmp(PadStr
,"MeshesEnd"))
686 ParseFile(LevelFile
,PadStr
);
687 if (!strcmp(PadStr
,"NumMeshes:"))
689 ParseFile(LevelFile
,PadStr
);
690 MyLevelData
.NumMeshes
=strtol(PadStr
,0,0);
691 MyLevelData
.Meshes
=(pMesh
)MemAlloc((int32
)(MyLevelData
.NumMeshes
*sizeof(Mesh
)));
692 PosMesh
=MyLevelData
.Meshes
;
694 else if (!strcmp(PadStr
,"Mesh:"))
696 /* Read NumPolygons */
698 ParseFile(LevelFile
,PadStr
);
699 PosMesh
->NumPolygons
=strtol(PadStr
,0,0);
703 for (u
=0;u
<PosMesh
->NumPolygons
;u
++)
707 ParseFile(LevelFile
,PadStr
);
708 PosMesh
->Polygons
[u
] = &MyLevelData
.Polygons
[strtol(PadStr
,0,0)-1];
710 ParseFile(LevelFile
,PadStr
);
711 PosMesh
->Base
[u
].x
=strtod1000(PadStr
,0);
712 ParseFile(LevelFile
,PadStr
);
713 PosMesh
->Base
[u
].y
=strtod1000(PadStr
,0);
714 ParseFile(LevelFile
,PadStr
);
715 PosMesh
->Base
[u
].z
=strtod1000(PadStr
,0);
720 ParseFile(LevelFile
,PadStr
);
721 PosMesh
->Light
=strtod1000(PadStr
,0);
727 else if (!strcmp(PadStr
,"Bots"))
729 while(strcmp(PadStr
,"BotsEnd"))
731 ParseFile(LevelFile
,PadStr
);
732 if (!strcmp(PadStr
,"NumBots:"))
734 ParseFile(LevelFile
,PadStr
);
735 MyLevelData
.NumBots
=strtol(PadStr
,0,0);
736 MyLevelData
.Bots
=(pBot
)MemAlloc((int32
)(MyLevelData
.NumBots
*sizeof(Bot
)));
737 PosBot
=MyLevelData
.Bots
;
739 MyLevelData
.Bots
[0].AbsPrev
=0;
741 if (MyLevelData
.NumBots
>1)
743 MyLevelData
.Bots
[0].AbsNext
=&MyLevelData
.Bots
[1];
744 for (u
=1;u
<MyLevelData
.NumBots
-1;u
++)
746 MyLevelData
.Bots
[u
].AbsNext
= &MyLevelData
.Bots
[u
+1];
747 MyLevelData
.Bots
[u
].AbsPrev
= &MyLevelData
.Bots
[u
-1];
750 MyLevelData
.Bots
[MyLevelData
.NumBots
-1].AbsNext
= 0;
751 MyLevelData
.Bots
[MyLevelData
.NumBots
-1].AbsPrev
= &MyLevelData
.Bots
[MyLevelData
.NumBots
-2];
755 MyLevelData
.Bots
[0].AbsNext
= 0;
758 else if (!strcmp(PadStr
,"Bot:"))
765 ParseFile(LevelFile
,PadStr
);
766 PosBot
->Pos
.x
=strtod1000(PadStr
,0);
767 ParseFile(LevelFile
,PadStr
);
768 PosBot
->Pos
.y
=strtod1000(PadStr
,0);
769 ParseFile(LevelFile
,PadStr
);
770 PosBot
->Pos
.z
=strtod1000(PadStr
,0);
774 ParseFile(LevelFile
,PadStr
);
775 PosBot
->Direction
.a
.x
=strtod1000(PadStr
,0);
776 ParseFile(LevelFile
,PadStr
);
777 PosBot
->Direction
.a
.y
=strtod1000(PadStr
,0);
778 ParseFile(LevelFile
,PadStr
);
779 PosBot
->Direction
.a
.z
=strtod1000(PadStr
,0);
781 ParseFile(LevelFile
,PadStr
);
782 PosBot
->Direction
.b
.x
=strtod1000(PadStr
,0);
783 ParseFile(LevelFile
,PadStr
);
784 PosBot
->Direction
.b
.y
=strtod1000(PadStr
,0);
785 ParseFile(LevelFile
,PadStr
);
786 PosBot
->Direction
.b
.z
=strtod1000(PadStr
,0);
788 ParseFile(LevelFile
,PadStr
);
789 PosBot
->Direction
.c
.x
=strtod1000(PadStr
,0);
790 ParseFile(LevelFile
,PadStr
);
791 PosBot
->Direction
.c
.y
=strtod1000(PadStr
,0);
792 ParseFile(LevelFile
,PadStr
);
793 PosBot
->Direction
.c
.z
=strtod1000(PadStr
,0);
797 ParseFile(LevelFile
,PadStr
);
798 PosBot
->Speed
.x
=strtod1000(PadStr
,0);
799 ParseFile(LevelFile
,PadStr
);
800 PosBot
->Speed
.y
=strtod1000(PadStr
,0);
801 ParseFile(LevelFile
,PadStr
);
802 PosBot
->Speed
.z
=strtod1000(PadStr
,0);
806 ParseFile(LevelFile
,PadStr
);
807 PosBot
->Size
=strtod1000(PadStr
,0);
811 ParseFile(LevelFile
,PadStr
);
812 PosBot
->Cube
=&MyLevelData
.Cubes
[strtol(PadStr
,0,0)-1];
814 if (PosBot
->Cube
->FirstBot
!= 0)
816 PosBot
->Next
= PosBot
->Cube
->FirstBot
;
817 PosBot
->Cube
->FirstBot
->Prev
= PosBot
;
820 PosBot
->Cube
->FirstBot
= PosBot
;
824 ParseFile(LevelFile
,PadStr
);
825 PosBot
->Type
=strtol(PadStr
,0,0);
829 ParseFile(LevelFile
,PadStr
);
830 PosBot
->Light
=strtod1000(PadStr
,0);
834 ParseFile(LevelFile
,PadStr
);
836 if (strtol(PadStr
,0,0) == 0)
842 PosBot
->Mesh
= &MyLevelData
.Meshes
[strtol(PadStr
,0,0)-1];
857 printf ("Failed to open LevelFile\n");