/************************************************************ * * * flying.h * * * * * LPGE 1997 * * * * Copyright (C) 1996 Sony Computer Entertainment Inc. * * All Rights Reserved * * * ***********************************************************/ #ifndef FLYING_H_INCLUDED #include "tunnel.h" /**************************************************************************** constants, structures, globals ****************************************************************************/ // these used as indeces to AllShipParameters #define STANDARD_FLYING_PARAMETERS 0 #define FAST_AND_DODGY_FLYING_PARAMETERS 1 #define ULTRA_SAFE_FLYING_PARAMETERS 2 #define PECULIAR_FLYING_PARAMETERS 3 #define X_AND_Z_ROTATION 0 #define Y_AND_Z_ROTATION 1 #define ALL_THREE_ROTATIONS 2 typedef struct { int zAcceleration; int maximumSpeed; int rotationType; VECTOR rotationPowers; // coefficients: the higher, the heavier the collision, // the more the ship loses speed int collisionWithTunnelCoefficient; int collisionWithOtherShipsCoefficient; // coefficients: each time, quantity = quantity * (ONE-coeff) int movementFrictionCoefficient; int rotationFrictionCoefficient; } ShipFlyingParameters; #define MAX_SHIP_FLYING_PARAMETERS 4 #define HUMAN_PLAYER 0 #define AI_FLIER_1 1 #define AI_FLIER_2 2 #define AI_FLIER_3 3 #define AI_FLIER_4 4 #define PRERECORDED_SLOW 5 #define PRERECORDED_MEDIUM 6 #define PRERECORDED_FAST 7 #define SLOW 1001 #define MEDIUM 1002 #define FAST 1003 // these used as indexes into the list AllShipTypes #define BOG_STANDARD 0 #define SLIGHTLY_FLASH 1 #define VERY_FLASH 2 #define EXTREMELY_FLASH 3 typedef struct { int label; char shipTypeName[64]; ShipFlyingParameters *flyingParameters; int specialMovementFlag; int collisionRadius; u_long tmdAddress; int whichTmd; int tmdRightWayFlag; int scalingFlag; VECTOR scalingVector; } ShipType; #define MAX_SHIP_TYPES 4 #define SMALL_TURN_ANGLE (ONE/1024) #define FULL_FORWARD 1 #define FULL_BRAKE 2 // for proper dynamic flier #define MAX_ACCELERATION 1 #define MAINTAIN_SPEED 2 #define MAX_BRAKE 3 /**************************************************************************** prototypes ****************************************************************************/ void InitialiseGlobalFlyingModel (void); void HandleSplinePathFollower (ObjectHandler* object); void ProperSortObjectPositionOnSplineCurve (ObjectHandler *object, int curveAngle, TunnelSection *section, int offset, int speed); void HandleSplinePathDeviator (ObjectHandler *object); void GetPointOnSplinePath (int sectionID, int offsetRatio, VECTOR *point); void GetPointOnSplineCurve (int curveAngle, TunnelSection *section, int offsetRatio, VECTOR *point); void GetPointAndTotalAngleOnSplinePath (int sectionID, int offsetRatio, VECTOR *point, int *totalAngle); void HandleFourthBlagger (ObjectHandler *object); void HandleFirstAIFlier (ObjectHandler *object); void HandleSecondAIFlier (ObjectHandler *object); void HandleXZFlier2 (ObjectHandler *object); void GetNextWaypoint( ObjectHandler *object, VECTOR *wayPoint); int FindDirectionShipPointsInTunnel (ObjectHandler *ship); void HandleProperDynamicFlier (ObjectHandler *object); void HandleProperDynamicFlier2 (ObjectHandler *object); int SectionIsCurveSection (int sectionID); int FindRequiredTurnAnglePerFrameGivenSpeed (int speed, int sectionID); int GetNewShipSpeedGivenAction (ObjectHandler *ship, int accelerationAction); void HandleProperDynamicFlier3 (ObjectHandler *object); void HandleDubiousBlagger (ObjectHandler *ship); void Accelerate (ObjectHandler *object, int amount); void TurnShip (ObjectHandler *ship, VECTOR *turn); void TurnLeft (ObjectHandler *ship, int amount); void TurnRight (ObjectHandler *ship, int amount); void HandleYZFlier2 (ObjectHandler *object); void HandleThirdAIFlier (ObjectHandler *object); void HandleSecondCheater (ObjectHandler *object); void InitialiseAllShipParameters (void); void InitShipFlyingParametersToVoid (ShipFlyingParameters *parameters); void InitialiseShipTypes (void); void InitShipTypeToVoid (ShipType *type); void AssignShipType (ShipType *type, int label, char* name, ShipFlyingParameters *flyingParameters, int collisionRadius, u_long tmdAddress, int whichTmd, int tmdFlag, int scalingFlag, VECTOR *scalingVector); void SetObjectToShipType (ObjectHandler *object, int shipType); void HandleShipMovementInTunnel (ObjectHandler *ship); void FindShipActionsThisFrame (ObjectHandler* object); void SortFirstFlierBehaviour (ObjectHandler *object); #define FLYING_H_INCLUDED 1 #endif