This commit was manufactured by cvs2svn to create tag 'd2x-0_1_2'.
[btb/d2x.git] / main / laser.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #ifndef _LASER_H
15 #define _LASER_H
16
17 #define LASER_ID                        0                               //0..3 are lasers
18 #define CONCUSSION_ID   8
19 #define FLARE_ID                        9                                                       //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
20 #define VULCAN_ID               11                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
21 #define SPREADFIRE_ID   12                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
22 #define PLASMA_ID               13                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
23 #define FUSION_ID               14                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
24 #define HOMING_ID               15
25 #define PROXIMITY_ID    16
26 #define SMART_ID                        17
27 #define MEGA_ID                 18
28
29 #define PLAYER_SMART_HOMING_ID  19
30 #define SUPER_MECH_MISS                 21
31 #define REGULAR_MECH_MISS                       22
32 #define SILENT_SPREADFIRE_ID            23
33 #define ROBOT_SMART_HOMING_ID   29
34 #define EARTHSHAKER_MEGA_ID             54
35
36 #define SUPER_LASER_ID  30                      //30,31 are super lasers (level 5,6)
37
38 #define GAUSS_ID                        32                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
39 #define HELIX_ID                        33                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
40 #define PHOENIX_ID              34                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
41 #define OMEGA_ID                        35                                                      //      NOTE: This MUST correspond to the ID generated at bitmaps.tbl read time.
42
43 #define FLASH_ID                        36
44 #define GUIDEDMISS_ID   37
45 #define SUPERPROX_ID    38
46 #define MERCURY_ID              39
47 #define EARTHSHAKER_ID  40
48
49 #define SMART_MINE_HOMING_ID    47
50 #define ROBOT_SMART_MINE_HOMING_ID      49
51 #define ROBOT_SUPERPROX_ID      53
52 #define ROBOT_EARTHSHAKER_ID    58
53
54 #define PMINE_ID                        51              //the mine that the designers can place
55
56 #define OMEGA_MULTI_LIFELEFT    (F1_0/6)
57
58 // These are new defines for the value of 'flags' passed to do_laser_firing.
59 // The purpose is to collect other flags like QUAD_LASER and Spreadfire_toggle
60 // into a single 8-bit quantity so it can be easily used in network mode.
61
62 #define LASER_QUAD                                      1
63 #define LASER_SPREADFIRE_TOGGLED        2
64 #define LASER_HELIX_FLAG0                       4               //helix uses 3 bits for angle
65 #define LASER_HELIX_FLAG1                       8               //helix uses 3 bits for angle
66 #define LASER_HELIX_FLAG2                       16              //helix uses 3 bits for angle
67
68 #define LASER_HELIX_SHIFT                       2               //how far to shift count to put in flags 
69 #define LASER_HELIX_MASK                        7               //must match number of bits in flags
70
71 #define MAX_LASER_LEVEL         3               //      Note, laser levels are numbered from 0.
72 #define MAX_SUPER_LASER_LEVEL           5               //      Note, laser levels are numbered from 0.
73
74 #define MAX_LASER_BITMAPS       6
75
76 //      For muzzle firing casting light.
77 #define MUZZLE_QUEUE_MAX        8
78
79 //      Constants governing homing missile behavior.
80 //      MIN_TRACKABLE_DOT gets inversely scaled by FrameTime and stuffed in Min_trackable_dot
81 #define MIN_TRACKABLE_DOT                                       (7*F1_0/8)
82 #define MAX_TRACKABLE_DIST                              (F1_0*250)
83 #define HOMING_MISSILE_STRAIGHT_TIME    (F1_0/8)                        //      Changed as per request of John, Adam, Yuan, but mostly John
84
85 extern fix Min_trackable_dot;                           //      MIN_TRACKABLE_DOT inversely scaled by FrameTime
86
87 extern object *Guided_missile[];
88 extern int Guided_missile_sig[];
89
90 void Laser_render( object *obj );
91 void Laser_player_fire( object * obj, int type, int gun_num, int make_sound, int harmless_flag );
92 void Laser_player_fire_spread(object *obj, int laser_type, int gun_num, fix spreadr, fix spreadu, int make_sound, int harmless);
93 void Laser_do_weapon_sequence( object *obj );
94 void Flare_create(object *obj);
95 int laser_are_related( int o1, int o2 );
96
97 extern int do_laser_firing_player(void);
98 extern void do_missile_firing(int do_autoselect);
99 extern void net_missile_firing(int player, int weapon, int flags);
100
101 int Laser_create_new( vms_vector * direction, vms_vector * position, int segnum, int parent, int type, int make_sound );
102
103 //      Fires a laser-type weapon (a Primary weapon)
104 //      Fires from object objnum, weapon type weapon_id.
105 //      Assumes that it is firing from a player object, so it knows which gun to fire from.
106 //      Returns the number of shots actually fired, which will typically be 1, but could be
107 //      higher for low frame rates when rapidfire weapons, such as vulcan or plasma are fired.
108 extern int do_laser_firing(int objnum, int weapon_id, int level, int flags, int nfires);
109
110 //      Easier to call than Laser_create_new because it determines the segment containing the firing point
111 //      and deals with it being stuck in an object or through a wall.
112 //      Fires a laser of type "weapon_type" from an object (parent) in the direction "direction" from the position "position"
113 //      Returns object number of laser fired or -1 if not possible to fire laser.
114 int Laser_create_new_easy( vms_vector * direction, vms_vector * position, int parent, int weapon_type, int make_sound );
115
116 //creates a weapon object
117 int create_weapon_object(int weapon_type,int segnum,vms_vector *position);
118
119 //give up control of the guided missile
120 void release_guided_missile(int player_num);
121
122 extern void create_smart_children(object *objp, int count);
123 extern int object_to_object_visibility(object *obj1, object *obj2, int trans_type);
124
125 extern int              Muzzle_queue_index;
126
127 typedef struct muzzle_info {
128         fix                     create_time;
129         short                   segnum;
130         vms_vector      pos;
131 }       muzzle_info;
132
133 extern muzzle_info              Muzzle_data[MUZZLE_QUEUE_MAX];
134
135 //      Omega cannon stuff.
136 #define MAX_OMEGA_CHARGE                (F1_0)  //      Maximum charge level for omega cannonw
137 extern fix      Omega_charge;
138 //NOTE: OMEGA_CHARGE_SCALE      moved to laser.c to avoid long rebuilds if changed
139
140
141 #endif
142