00001
00002
00003
00004
00005
00006
00007
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
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 }