|
| 1 | +/* |
| 2 | + * a i c r a s h a n d b u r n . c |
| 3 | + * |
| 4 | + * AIMODE_DEATH_CRASHANDBURN |
| 5 | + * |
| 6 | + * Copyright (c) 1997 Probe Entertainment Limited |
| 7 | + * All Rights Reserved |
| 8 | + * |
| 9 | + * $Revision: 11 $ |
| 10 | + * |
| 11 | + * $Header: /PcProjectX/Ai/AICrashAndBurn.c 11 3/19/98 5:17p Phillipd $ |
| 12 | + * |
| 13 | + * $Log: /PcProjectX/Ai/AICrashAndBurn.c $ |
| 14 | + * |
| 15 | + * 11 3/19/98 5:17p Phillipd |
| 16 | + * |
| 17 | + * 10 3/05/98 9:29a Phillipd |
| 18 | + * added the OPT_ON stuff to all AI files.... |
| 19 | + * |
| 20 | + * 9 21/02/98 14:29 Collinsd |
| 21 | + * Added dan's new enemy code and fixed flashing of team in capture the |
| 22 | + * flag. |
| 23 | + * |
| 24 | + * 8 11/26/97 10:44a Phillipd |
| 25 | + * |
| 26 | + * 7 11/25/97 4:13p Phillipd |
| 27 | + * |
| 28 | + * 6 11/25/97 3:13p Phillipd |
| 29 | + * |
| 30 | + * 5 11/25/97 2:37p Phillipd |
| 31 | + * |
| 32 | + * 4 11/22/97 1:23p Phillipd |
| 33 | + * |
| 34 | + * 3 11/21/97 10:56a Phillipd |
| 35 | + * Max Kills to end a level.... |
| 36 | + * |
| 37 | + * 2 11/20/97 12:39p Phillipd |
| 38 | + * |
| 39 | + * 1 11/20/97 12:05p Phillipd |
| 40 | + */ |
| 41 | +#include <stdio.h> |
| 42 | +#include <math.h> |
| 43 | +#include <malloc.h> |
| 44 | +#include <dplay.h> |
| 45 | +#include "typedefs.h" |
| 46 | +#include "main.h" |
| 47 | +#include "new3d.h" |
| 48 | +#include "quat.h" |
| 49 | +#include "mload.h" |
| 50 | +#include "Node.h" |
| 51 | +#include "compobjects.h" |
| 52 | +#include "bgobjects.h" |
| 53 | +#include "Object.h" |
| 54 | +#include "mydplay.h" |
| 55 | +#include "ships.h" |
| 56 | +#include "text.h" |
| 57 | +#include "triggers.h" |
| 58 | +#include "sphere.h" |
| 59 | +#include "pickups.h" |
| 60 | +#include "enemies.h" |
| 61 | +#include "AI.h" |
| 62 | +#include "secondary.h" |
| 63 | +#include "primary.h" |
| 64 | + |
| 65 | +#ifdef OPT_ON |
| 66 | +#pragma optimize( "gty", on ) |
| 67 | +#endif |
| 68 | + |
| 69 | +// Externals |
| 70 | +extern float framelag; |
| 71 | +extern AIMDATA AimData; |
| 72 | +extern VECTOR Forward; |
| 73 | +extern VECTOR SlideUp; |
| 74 | +extern PRIMARYWEAPONATTRIB PrimaryWeaponAttribs[]; |
| 75 | +extern SECONDARYWEAPONATTRIB SecondaryWeaponAttribs[]; |
| 76 | +extern MLOADHEADER Mloadheader; |
| 77 | +void CreateSpotFXBurning( VECTOR * Pos, VECTOR * Dir, uint16 Group ); |
| 78 | + |
| 79 | +/*ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ |
| 80 | + Procedure : AIR Crash and burn... |
| 81 | + Input : ENEMY * Enemy |
| 82 | + Output : Nothing |
| 83 | +ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ*/ |
| 84 | +void AI_AIR_DEATH_CRASHANDBURN( register ENEMY * Enemy ) |
| 85 | +{ |
| 86 | + OBJECT * SObject; |
| 87 | + VECTOR NewDir = { 0.0F, 1.0F, 0.0F }; |
| 88 | + VECTOR NewPos; |
| 89 | + |
| 90 | + SObject = &Enemy->Object; |
| 91 | + Enemy->AIFlags |= AI_ANYPLAYERINRANGE; |
| 92 | + |
| 93 | + Enemy->Timer -= framelag; |
| 94 | + if( (Enemy->Timer < 0.0F) || (Enemy->AIMoveFlags & AI_CONTROL_COLLISION) ) |
| 95 | + { |
| 96 | + Enemy->Timer = 0.0F; |
| 97 | + // Time to Die properly |
| 98 | + CreateNewExplosion( &Enemy->Object.Pos, &NewDir, Enemy->Object.Group ); |
| 99 | + KillUsedEnemy( Enemy ); |
| 100 | + return; |
| 101 | + } |
| 102 | + Enemy->Object.ExternalForce.x -= Mloadheader.Group[ Enemy->Object.Group ].up.x * 0.55F * framelag; |
| 103 | + Enemy->Object.ExternalForce.y -= Mloadheader.Group[ Enemy->Object.Group ].up.y * 0.55F * framelag; |
| 104 | + Enemy->Object.ExternalForce.z -= Mloadheader.Group[ Enemy->Object.Group ].up.z * 0.55F * framelag; |
| 105 | + |
| 106 | + NewPos = Enemy->Object.Pos; |
| 107 | + |
| 108 | + NewPos.x -= Mloadheader.Group[ Enemy->Object.Group ].up.x * (EnemyTypes[Enemy->Type].Radius * 0.75F); |
| 109 | + NewPos.y -= Mloadheader.Group[ Enemy->Object.Group ].up.y * (EnemyTypes[Enemy->Type].Radius * 0.75F); |
| 110 | + NewPos.z -= Mloadheader.Group[ Enemy->Object.Group ].up.z * (EnemyTypes[Enemy->Type].Radius * 0.75F); |
| 111 | + |
| 112 | + AI_AimAtTarget( &Enemy->Object.InvMat , &Enemy->Object.Pos, &NewPos ); |
| 113 | + Enemy->AI_Angle = AimData.Angle; |
| 114 | + Enemy->AIMoveFlags |= AimData.Flags; |
| 115 | + |
| 116 | + CreateSpotFXBurning( &NewPos, &Mloadheader.Group[ Enemy->Object.Group ].up, Enemy->Object.Group ); |
| 117 | + |
| 118 | +} |
| 119 | +#ifdef OPT_ON |
| 120 | +#pragma optimize( "", off ) |
| 121 | +#endif |
| 122 | + |
| 123 | + |
| 124 | + |
| 125 | + |
| 126 | + |
| 127 | + |
0 commit comments