src/hcode/btech/ds.turret.c

Go to the documentation of this file.
00001 /*
00002  * Author: Markus Stenberg <fingon@iki.fi>
00003  *
00004  *  Copyright (c) 1996 Markus Stenberg
00005  *  Copyright (c) 1998-2002 Thomas Wouters
00006  *  Copyright (c) 2000-2002 Cord Awtry
00007  *       All rights reserved
00008  *
00009  */
00010 
00011 #include "turret.h"
00012 #include "mech.tic.h"
00013 #include "create.h"
00014 #include "p.mech.scan.h"
00015 #include "p.mech.move.h"
00016 #include "p.mech.maps.h"
00017 #include "p.mech.combat.h"
00018 #include "p.mech.contacts.h"
00019 #include "p.mech.status.h"
00020 
00021 int arc_override = 0;
00022 dbref pilot_override = 0;
00023 
00024 #define LOCK_FUDGE(mech,tur) \
00025 if (tur->gunner > 0) pilot_override = tur->gunner; \
00026 stored_status = MechStatus(mech); \
00027 stored_target = MechTarget(mech); \
00028 stored_targx  = MechTargX(mech); \
00029 stored_targy  = MechTargY(mech); \
00030 stored_targz  = MechTargZ(mech); \
00031 MechStatus(mech) &= ~LOCK_MODES; \
00032 MechStatus(mech) |= tur->lockmode; \
00033 arc_override  = tur->arcs; \
00034 MechTarget(mech) = tur->target; \
00035 MechTargX(mech) = tur->targx; \
00036 MechTargY(mech) = tur->targy; \
00037 MechTargZ(mech) = tur->targz
00038 
00039 #define LOCK_FUDGE_R(mech,tur) \
00040 pilot_override = 0; \
00041 tur->target = MechTarget(mech); \
00042 tur->targx = MechTargX(mech); \
00043 tur->targy = MechTargY(mech); \
00044 tur->targz = MechTargZ(mech); \
00045 tur->lockmode = (MechStatus(mech) & LOCK_MODES); \
00046 MechStatus(mech) = stored_status; \
00047 MechTarget(mech) = stored_target; \
00048 MechTargX(mech) = stored_targx ; \
00049 MechTargY(mech) = stored_targy ; \
00050 MechTargZ(mech) = stored_targz ; \
00051 arc_override    = 0;
00052 
00053 #define LOCK_FUDGE_VARS \
00054 short stored_targx, stored_targy, stored_targz; \
00055 dbref stored_target; int stored_status; \
00056 
00057 #define TUR_BASE \
00058 TURRET_T *tur = (TURRET_T *) data; \
00059 MECH *mech = FindObjectsData(tur->parent); \
00060 DOCHECK(!IsMech(tur->parent), "Error: Turret's parentage is unknown.");
00061 
00062 #define TUR_COMMON \
00063 TUR_BASE \
00064 DOCHECK(tur->gunner < 0, "The turret hasn't been initialized yet!"); \
00065 DOCHECK(player!=tur->gunner, "You aren't the registered gunner! Go 'way!"); \
00066 DOCHECK(player==MechPilot(mech), "You'll pilot and gun at once? Yah right :P");
00067 
00068 #define TUR_GCOMMON \
00069 LOCK_FUDGE_VARS \
00070 TUR_COMMON \
00071 LOCK_FUDGE(mech,tur)
00072 
00073 void turret_addtic(dbref player, void *data, char *buffer)
00074 {
00075 #if 0
00076         TUR_COMMON;
00077         addtic_sub(player, tur->tic, mech, buffer);
00078 #endif
00079 }
00080 
00081 void turret_deltic(dbref player, void *data, char *buffer)
00082 {
00083 #if 0
00084         TUR_COMMON;
00085         deltic_sub(player, tur->tic, mech, buffer);
00086 #endif
00087 }
00088 
00089 void turret_listtic(dbref player, void *data, char *buffer)
00090 {
00091 #if 0
00092         TUR_COMMON;
00093         listtic_sub(player, tur->tic, mech, buffer);
00094 #endif
00095 }
00096 
00097 void turret_cleartic(dbref player, void *data, char *buffer)
00098 {
00099 #if 0
00100         TUR_COMMON;
00101         cleartic_sub(player, tur->tic, buffer);
00102 #endif
00103 }
00104 
00105 void turret_firetic(dbref player, void *data, char *buffer)
00106 {
00107 #if 0
00108         TUR_GCOMMON;
00109         firetic_sub(player, tur->tic, mech, buffer);
00110         LOCK_FUDGE_R(mech, tur);
00111 #endif
00112 }
00113 
00114 void turret_bearing(dbref player, void *data, char *buffer)
00115 {
00116         TUR_GCOMMON;
00117         mech_bearing(player, mech, buffer);
00118         LOCK_FUDGE_R(mech, tur);
00119 }
00120 
00121 void turret_eta(dbref player, void *data, char *buffer)
00122 {
00123         TUR_GCOMMON;
00124         mech_eta(player, mech, buffer);
00125         LOCK_FUDGE_R(mech, tur);
00126 }
00127 
00128 void turret_findcenter(dbref player, void *data, char *buffer)
00129 {
00130         TUR_COMMON;
00131         mech_findcenter(player, mech, buffer);
00132 }
00133 
00134 void turret_fireweapon(dbref player, void *data, char *buffer)
00135 {
00136         TUR_GCOMMON;
00137         mech_fireweapon(player, mech, buffer);
00138         LOCK_FUDGE_R(mech, tur);
00139 }
00140 
00141 void turret_settarget(dbref player, void *data, char *buffer)
00142 {
00143         TUR_GCOMMON;
00144         mech_settarget(player, mech, buffer);
00145         LOCK_FUDGE_R(mech, tur);
00146 }
00147 
00148 void turret_lrsmap(dbref player, void *data, char *buffer)
00149 {
00150         TUR_GCOMMON;
00151         mech_lrsmap(player, mech, buffer);
00152         LOCK_FUDGE_R(mech, tur);
00153 }
00154 
00155 void turret_navigate(dbref player, void *data, char *buffer)
00156 {
00157         TUR_GCOMMON;
00158         mech_navigate(player, mech, buffer);
00159         LOCK_FUDGE_R(mech, tur);
00160 }
00161 
00162 void turret_range(dbref player, void *data, char *buffer)
00163 {
00164         TUR_GCOMMON;
00165         mech_range(player, mech, buffer);
00166         LOCK_FUDGE_R(mech, tur);
00167 }
00168 
00169 void turret_sight(dbref player, void *data, char *buffer)
00170 {
00171         TUR_GCOMMON;
00172         mech_sight(player, mech, buffer);
00173         LOCK_FUDGE_R(mech, tur);
00174 }
00175 
00176 void turret_tacmap(dbref player, void *data, char *buffer)
00177 {
00178         TUR_GCOMMON;
00179         mech_tacmap(player, mech, buffer);
00180         LOCK_FUDGE_R(mech, tur);
00181 }
00182 
00183 void turret_contacts(dbref player, void *data, char *buffer)
00184 {
00185         TUR_GCOMMON;
00186         mech_contacts(player, mech, buffer);
00187         LOCK_FUDGE_R(mech, tur);
00188 }
00189 
00190 void turret_critstatus(dbref player, void *data, char *buffer)
00191 {
00192         TUR_GCOMMON;
00193         mech_critstatus(player, mech, buffer);
00194         LOCK_FUDGE_R(mech, tur);
00195 }
00196 
00197 void turret_report(dbref player, void *data, char *buffer)
00198 {
00199         TUR_GCOMMON;
00200         mech_report(player, mech, buffer);
00201         LOCK_FUDGE_R(mech, tur);
00202 }
00203 
00204 void turret_scan(dbref player, void *data, char *buffer)
00205 {
00206         TUR_GCOMMON;
00207         mech_scan(player, mech, buffer);
00208         LOCK_FUDGE_R(mech, tur);
00209 }
00210 
00211 void turret_status(dbref player, void *data, char *buffer)
00212 {
00213         TUR_GCOMMON;
00214         mech_status(player, mech, buffer);
00215         LOCK_FUDGE_R(mech, tur);
00216 }
00217 
00218 void turret_weaponspecs(dbref player, void *data, char *buffer)
00219 {
00220         TUR_GCOMMON;
00221         mech_weaponspecs(player, mech, buffer);
00222         LOCK_FUDGE_R(mech, tur);
00223 }
00224 
00225 #define SPECIAL_FREE 0
00226 #define SPECIAL_ALLOC 1
00227 
00228 /* Alloc/free routine */
00229 void newturret(dbref key, void **data, int selector)
00230 {
00231         TURRET_T *new = *data;
00232 
00233         switch (selector) {
00234         case SPECIAL_ALLOC:
00235                 new->target = -1;
00236                 new->targx = -1;
00237                 new->targy = -1;
00238                 new->mynum = key;
00239                 break;
00240         }
00241 }
00242 
00243 void turret_initialize(dbref player, void *data, char *buffer)
00244 {
00245         TUR_BASE;
00246         DOCHECK(player != tur->gunner && Connected(tur->gunner) &&
00247                         Location(tur->gunner) == Location(player),
00248                         tprintf("You need %s to leave or disconnect first.",
00249                                         Name(tur->gunner)));
00250         DOCHECK(player == tur->gunner, "You grap firmer hold on the joystick..");
00251         notify_except(tur->mynum, NOTHING, tur->mynum,
00252                                   tprintf("%s initialized as gunner.", Name(player)));
00253         tur->gunner = player;
00254 }
00255 
00256 void turret_deinitialize(dbref player, void *data, char *buffer)
00257 {
00258         TUR_BASE;
00259         DOCHECK(player != tur->gunner, "You aren't gunner!");
00260         notify_except(tur->mynum, NOTHING, tur->mynum,
00261                                   tprintf("%s deinitialized as gunner.", Name(player)));
00262         tur->gunner = -1;
00263 }

Generated on Mon May 28 04:25:21 2007 for BattletechMUX by  doxygen 1.4.7