From e23035e61fc28747a77f1b141120e9d61a5eefa9 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 24 Aug 2013 22:09:58 +0000 Subject: [PATCH] Move Last_afterburner_time into laser_info --- common/main/object.h | 3 +++ d2x-rebirth/main/gamesave.c | 1 + similar/main/multi.c | 3 +++ similar/main/object.c | 12 ++++++------ similar/main/state.c | 3 +++ 5 files changed, 16 insertions(+), 6 deletions(-) diff --git a/common/main/object.h b/common/main/object.h index fda72f0b8..3998c4423 100644 --- a/common/main/object.h +++ b/common/main/object.h @@ -214,6 +214,9 @@ typedef struct laser_info { short track_goal; // Object this object is tracking. fix multiplier; // Power if this is a fusion bolt (or other super weapon to be added). fix track_turn_time; +#if defined(DXX_BUILD_DESCENT_II) + fix64 last_afterburner_time; // Time at which this object last created afterburner blobs. +#endif } __pack__ laser_info; // Same as above but structure Savegames/Multiplayer objects expect diff --git a/d2x-rebirth/main/gamesave.c b/d2x-rebirth/main/gamesave.c index fd322b4eb..fa79c4769 100644 --- a/d2x-rebirth/main/gamesave.c +++ b/d2x-rebirth/main/gamesave.c @@ -423,6 +423,7 @@ void read_object(object *obj,PHYSFS_file *f,int version) obj->ctype.laser_info.parent_type = PHYSFSX_readShort(f); obj->ctype.laser_info.parent_num = PHYSFSX_readShort(f); obj->ctype.laser_info.parent_signature = PHYSFSX_readInt(f); + obj->ctype.laser_info.last_afterburner_time = 0; break; diff --git a/similar/main/multi.c b/similar/main/multi.c index 33311bbca..ea60afc41 100644 --- a/similar/main/multi.c +++ b/similar/main/multi.c @@ -5699,6 +5699,9 @@ void multi_object_rw_to_object(object_rw *obj_rw, object *obj) obj->ctype.laser_info.track_goal = obj_rw->ctype.laser_info.track_goal; obj->ctype.laser_info.multiplier = obj_rw->ctype.laser_info.multiplier; obj->ctype.laser_info.track_turn_time = HOMING_TURN_TIME; +#if defined(DXX_BUILD_DESCENT_II) + obj->ctype.laser_info.last_afterburner_time = 0; +#endif break; case CT_EXPLOSION: diff --git a/similar/main/object.c b/similar/main/object.c index 85fc77a5d..5e8b9fd0b 100644 --- a/similar/main/object.c +++ b/similar/main/object.c @@ -1206,6 +1206,9 @@ int obj_create(enum object_type_t type, ubyte id,int segnum,const vms_vector *po obj->ctype.laser_info.last_hitobj = -1; memset(&obj->ctype.laser_info.hitobj_list, 0, sizeof(ubyte)*MAX_OBJECTS); obj->ctype.laser_info.multiplier = F1_0; +#if defined(DXX_BUILD_DESCENT_II) + obj->ctype.laser_info.last_afterburner_time = 0; +#endif } #if defined(DXX_BUILD_DESCENT_II) @@ -1688,9 +1691,6 @@ extern void fuelcen_check_for_goal (segment *); //see if wall is volatile, and if so, cause damage to player //returns true if player is in lava int check_volatile_wall(object *obj,int segnum,int sidenum,vms_vector *hitpt); - -// Time at which this object last created afterburner blobs. -fix64 Last_afterburner_time[MAX_OBJECTS]; #endif //-------------------------------------------------------------------- @@ -1891,7 +1891,6 @@ void object_move_one( object * obj ) } if ((obj->type == OBJ_WEAPON) && (Weapon_info[obj->id].afterburner_size)) { - int objnum = obj-Objects; fix vel = vm_vec_mag_quick(&obj->mtype.phys_info.velocity); fix delay, lifetime; @@ -1908,9 +1907,10 @@ void object_move_one( object * obj ) lifetime *= 2; } - if ((Last_afterburner_time[objnum] + delay < GameTime64) || (Last_afterburner_time[objnum] > GameTime64)) { + assert(obj->control_type == CT_WEAPON); + if ((obj->ctype.laser_info.last_afterburner_time + delay < GameTime64) || (obj->ctype.laser_info.last_afterburner_time > GameTime64)) { drop_afterburner_blobs(obj, 1, i2f(Weapon_info[obj->id].afterburner_size)/16, lifetime); - Last_afterburner_time[objnum] = GameTime64; + obj->ctype.laser_info.last_afterburner_time = GameTime64; } } #endif diff --git a/similar/main/state.c b/similar/main/state.c index 6c9765706..cb5f21f30 100644 --- a/similar/main/state.c +++ b/similar/main/state.c @@ -360,6 +360,9 @@ void state_object_rw_to_object(object_rw *obj_rw, object *obj) obj->ctype.laser_info.track_goal = obj_rw->ctype.laser_info.track_goal; obj->ctype.laser_info.multiplier = obj_rw->ctype.laser_info.multiplier; obj->ctype.laser_info.track_turn_time = HOMING_TURN_TIME; +#if defined(DXX_BUILD_DESCENT_II) + obj->ctype.laser_info.last_afterburner_time = 0; +#endif break; case CT_EXPLOSION: