1 /****************************************************************************
7 ****************************************************************************/
12 #include <intuition/intuition.h>
13 #include <proto/exec.h>
21 int32 XMove
=0,YMove
=0,ZMove
=0;
22 int32 Button1
,Button2
;
24 struct MsgPort
* WindowPort
;
26 int32 MouseX
=0,MouseY
=0;
27 fix SpeedUp
= DefSpeedUp
;
28 fix SpeedDown
= DefSpeedDown
;
29 int16 Pause
= !(0==0);
31 void TurnPlayer(pBot MyPlayer
)
36 #define COS1 0.0038053
40 printf("%f %f %f , %f %f %f , %f %f %f\n",MyPlayer->Direction.a.x,MyPlayer->Direction.a.y,MyPlayer->Direction.a.z,
41 MyPlayer->Direction.b.x,MyPlayer->Direction.b.y,MyPlayer->Direction.b.z,
42 MyPlayer->Direction.c.x,MyPlayer->Direction.c.y,MyPlayer->Direction.c.z);
46 VctMulFix(&MyPlayer
->Direction
.a
,1.0-COS1
*XMove
*XMove
,&a
);
47 VctMulFix(&MyPlayer
->Direction
.c
,SIN
*XMove
,&b
);
50 M
.b
.x
= MyPlayer
->Direction
.b
.x
;
51 M
.b
.y
= MyPlayer
->Direction
.b
.y
;
52 M
.b
.z
= MyPlayer
->Direction
.b
.z
;
54 VctMulFix(&MyPlayer
->Direction
.a
,-SIN
*XMove
,&a
);
55 VctMulFix(&MyPlayer
->Direction
.c
,1-COS1
*XMove
*XMove
,&b
);
60 MyPlayer
->Direction
.a
.x
= M
.a
.x
;
61 MyPlayer
->Direction
.a
.y
= M
.a
.y
;
62 MyPlayer
->Direction
.a
.z
= M
.a
.z
;
64 VctMulFix(&M
.b
,1-COS1
*YMove
*YMove
,&a
);
65 VctMulFix(&M
.c
,SIN
*YMove
,&b
);
66 VctAdd(&a
,&b
,&MyPlayer
->Direction
.b
);
68 VctMulFix(&M
.b
,-SIN
*YMove
,&a
);
69 VctMulFix(&M
.c
,1-COS1
*YMove
*YMove
,&b
);
70 VctAdd(&a
,&b
,&MyPlayer
->Direction
.c
);
75 VctMulFix(&MyPlayer
->Direction
.a
,1.0-COS1
*ZMove
*ZMove
,&a
);
76 VctMulFix(&MyPlayer
->Direction
.b
,SIN
*ZMove
,&b
);
79 VctMulFix(&MyPlayer
->Direction
.a
,-SIN
*ZMove
,&a
);
80 VctMulFix(&MyPlayer
->Direction
.b
,1-COS1
*ZMove
*ZMove
,&b
);
83 MyPlayer
->Direction
.a
.x
= M
.a
.x
;
84 MyPlayer
->Direction
.a
.y
= M
.a
.y
;
85 MyPlayer
->Direction
.a
.z
= M
.a
.z
;
87 MyPlayer
->Direction
.b
.x
= M
.b
.x
;
88 MyPlayer
->Direction
.b
.y
= M
.b
.y
;
89 MyPlayer
->Direction
.b
.z
= M
.b
.z
;
92 printf("%f %f %f , %f %f %f , %f %f %f\n",MyPlayer->Direction.a.x,MyPlayer->Direction.a.y,MyPlayer->Direction.a.z,
93 MyPlayer->Direction.b.x,MyPlayer->Direction.b.y,MyPlayer->Direction.b.z,
94 MyPlayer->Direction.c.x,MyPlayer->Direction.c.y,MyPlayer->Direction.c.z);
98 void MoveForward(pBot MyPlayer
)
102 VctMulFix(&MyPlayer
->Direction
.c
,SpeedUp
,&a
);
103 VctAdd(&MyPlayer
->Speed
,&a
,&MyPlayer
->Speed
);
106 void MoveBackward(pBot MyPlayer
)
110 VctMulFix(&MyPlayer
->Direction
.c
,-SpeedUp
,&a
);
111 VctAdd(&MyPlayer
->Speed
,&a
,&MyPlayer
->Speed
);
114 int16
CheckCollision(pBot MyPlayer
)
120 int16 Death
= !(0==0);
123 printf("\n%d\n",MyPlayer->Cube);
128 MyBot
=MyPlayer
->Cube
->FirstBot
;
130 while ((MyBot
!= 0) && (!Death
))
132 NextBot
= MyBot
->Next
;
134 if (MyBot
!= MyPlayer
)
136 VctSub(&MyBot
->Pos
,&MyPlayer
->Pos
,&a
);
141 printf("Tele Frag\n");
143 else if (d
<MyPlayer
->Size
+MyBot
->Size
) /* Do we hit it ? */
145 d
=(MyPlayer
->Size
+MyBot
->Size
-d
) / d
;
147 if ((MyBot
->Type
& BotPush
) != 0)
152 VctSub(&MyPlayer
->Speed
,&a
,&MyPlayer
->Speed
);
154 if ((MyPlayer
->Type
& BotPickup
) != 0)
158 if ((MyBot
->Type
& BotPlayer
) != 0) /* Only Player can Pickup */
160 /* Resolve Bot from Cube */
162 if (MyPlayer
->Next
!= 0)
164 MyPlayer
->Next
->Prev
= MyPlayer
->Prev
;
166 if (MyPlayer
->Prev
!= 0)
168 MyPlayer
->Prev
->Next
= MyPlayer
->Next
;
172 MyPlayer
->Cube
->FirstBot
= MyPlayer
->Next
;
175 /* Resolve Bot from Abs Chain */
177 if (MyPlayer
->AbsNext
!= 0)
179 MyPlayer
->AbsNext
->AbsPrev
= MyPlayer
->AbsPrev
;
181 if (MyPlayer
->AbsPrev
!= 0)
183 MyPlayer
->AbsPrev
->AbsNext
= MyPlayer
->AbsNext
;
186 /* Insert Player into unused chain */
188 MyPlayer
->Next
= FirstUnusedBot
;
191 if (MyPlayer
->Next
!= 0)
193 MyPlayer
->Next
->Prev
= MyPlayer
;
196 /* Add Thing to Bot */
198 if ((MyPlayer
->Type
& BotRing
) != 0)
200 printf("Ring collected\n");
220 printf("Pos %f %f %f\n",MyPlayer->Pos.x,MyPlayer->Pos.y,MyPlayer->Pos.z);
223 VctSub(&MyPlayer
->Pos
,MyPlayer
->Cube
->Sides
[x
].Pnts
[0],&a
);
226 printf("Pos %f %f %f\n",a.x,a.y,a.z);
227 printf("Vct %f %f %f\n",MyPlayer->Cube->Sides[x].Rev.a.z,
228 MyPlayer->Cube->Sides[x].Rev.b.z,
229 MyPlayer->Cube->Sides[x].Rev.c.z);
232 d
=a
.x
* MyPlayer
->Cube
->Sides
[x
].Rev
.a
.z
233 +a
.y
* MyPlayer
->Cube
->Sides
[x
].Rev
.b
.z
234 +a
.z
* MyPlayer
->Cube
->Sides
[x
].Rev
.c
.z
;
237 printf("%d %f\n",x,d);
239 if (MyPlayer
->Cube
->Cubes
[x
] != 0)
243 /* Resolve Bot from chains */
245 if (MyPlayer
->Next
!= 0)
247 MyPlayer
->Next
->Prev
= MyPlayer
->Prev
;
249 if (MyPlayer
->Prev
!= 0)
251 MyPlayer
->Prev
->Next
= MyPlayer
->Next
;
255 MyPlayer
->Cube
->FirstBot
= MyPlayer
->Next
;
258 /* Change to new cube */
260 MyPlayer
->Cube
=MyPlayer
->Cube
->Cubes
[x
];
262 /* Insert into chain */
264 MyPlayer
->Next
= MyPlayer
->Cube
->FirstBot
;
265 MyPlayer
->Cube
->FirstBot
= MyPlayer
;
268 if (MyPlayer
->Next
!= 0)
270 MyPlayer
->Next
->Prev
= MyPlayer
;
278 printf("Side %d\n",x
);
282 if (d
<MyPlayer
->Size
) /* Do we hit anything ? */
286 VctMulFix(&MyPlayer
->Cube
->Sides
[x
].Normal
,d
,&a
);
287 VctAdd(&MyPlayer
->Speed
,&a
,&MyPlayer
->Speed
);
296 void MoveSpeed(pBot MyPlayer
)
299 printf("Bot %ld %f,%f,%f\n",MyPlayer,MyPlayer->Pos.x,MyPlayer->Pos.y,MyPlayer->Pos.z);
300 printf(" %ld %f,%f,%f\n",MyPlayer->Type,MyPlayer->Speed.x,MyPlayer->Speed.y,MyPlayer->Speed.z);
302 VctAdd(&MyPlayer
->Pos
,&MyPlayer
->Speed
,&MyPlayer
->Pos
);
303 VctMulFix(&MyPlayer
->Speed
,SpeedDown
,&MyPlayer
->Speed
);
306 void MoveBot(pBot MyPlayer
,pBot MyBot
)
310 printf("Bot %ld\n",MyBot);
313 if ((MyBot
->Type
& BotMove
) != 0)
315 VctSub(&MyPlayer
->Pos
,&MyBot
->Pos
,&a
);
317 VctMulFix(&a
,0.25/MyBot
->Size
/VctLength(&a
),&a
);
319 VctAdd(&a
,&MyBot
->Speed
,&MyBot
->Speed
);
322 if (!CheckCollision(MyBot
))
330 pBot MyBot
,NextBot
,MyPlayer
;
334 MyPlayer
=&MyLevelData
.Bots
[0];
336 printf("\nPlayer %ld\n",MyPlayer);
337 printf("Bot %ld\n",MyPlayer->AbsNext);
339 MyBot
=MyPlayer
->AbsNext
;
341 while (MyBot
!= NULL
)
343 NextBot
= MyBot
->AbsNext
;
345 MoveBot(MyPlayer
,MyBot
);
352 void MovePlayer(pBot MyPlayer
)
354 struct IntuiMessage
* MyMsg
;
358 while ((MyMsg
=(struct IntuiMessage
*)GetMsg(WindowPort
)) != NULL
)
360 switch (MyMsg
->Class
)
362 case IDCMP_VANILLAKEY
:
366 case 27: /* ESC quit */
368 printf("\n Sucide is illegal here!\n");
372 case 32: /* SPACE hit */
374 printf("KILL .. KILL .. KILL .. KILL .. KILL\n");
377 case '7': /* turn anti-clockwise */
382 case '9': /* turn clockwise */
387 case 'l': /* decrease Light */
394 printf("Lightless: %f\n",LightLess
);
398 case 'L': /* increase Light */
405 printf("Lightless: %f\n",LightLess
);
409 case '+': /* Decrease CameraBehind */
413 printf("CameraBehind: %f\n",CameraBehind
);
417 case '-': /* Increase CameraBehind */
421 printf("CameraBehind: %f\n",CameraBehind
);
425 case 'p': /* Pause */
434 printf("Do you realy wanna harm that cute little cube?\n");
437 case IDCMP_MOUSEBUTTONS
:
464 case IDCMP_MOUSEMOVE
:
466 MouseX
=MyMsg
->MouseX
;
467 MouseY
=MyMsg
->MouseY
;
471 ReplyMsg((struct Message
*)MyMsg
);
474 if (MouseX
<QuaterWidth
)
478 else if (MouseX
<HalfWidth
+QuaterWidth
)
487 if (MouseY
<QuaterHeight
)
491 else if (MouseY
<HalfHeight
+QuaterHeight
)
502 TurnPlayer(MyPlayer
);
506 MoveForward(MyPlayer
);
510 MoveBackward(MyPlayer
);
513 if (!CheckCollision(MyPlayer
))