From 616ed749c52266a5995c017bb4ddcd946ccff653 Mon Sep 17 00:00:00 2001 From: relnev Date: Tue, 18 Jun 2002 08:58:53 +0000 Subject: [PATCH] last few struct changes --- Makefile | 2 +- README | 6 +- src/asteroid/asteroid.cpp | 101 ++++++++++++++++--------------- src/hud/hudtargetbox.cpp | 5 +- src/io/keycontrol.cpp | 25 ++++---- src/object/collidedebrisship.cpp | 7 ++- 6 files changed, 79 insertions(+), 67 deletions(-) diff --git a/Makefile b/Makefile index a880b28..abddddd 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ CFLAGS=-Wall -g -DPLAT_UNIX $(shell sdl-config --cflags) -Iinclude/ -fwritable-s #CFLAGS+=-DNDEBUG #CFLAGS+=-funroll-loops # -fomit-frame-pointer # not stable? #CFLAGS+=-march=pentiumpro -mcpu=pentiumpro # not stable? -CFLAGS+=-Wno-missing-braces +CFLAGS+=-Wno-missing-braces -Wno-multichar %.o: %.cpp $(CC) -c -o $@ $< $(CFLAGS) diff --git a/README b/README index 270392d..4e60785 100644 --- a/README +++ b/README @@ -19,7 +19,7 @@ or otherwise commercially exploit the source or things you created based on the source. ---------------------------------------------- -06/17/2002 +06/18/2002 Current status: - It currently uses SDL (http://www.libsdl.org) and OpenAL @@ -31,8 +31,8 @@ Current status: - Lots of debug messages. Recompile with NDEBUG defined to get rid of them. -- Only the demo was tested. The full version may or may not work (edit -pstypes.h to build the full version). Mods, etc. have also not been tested. +- The build currently defaults to the demo. Edit pstypes.h to build the +full version. Mods, etc. have not been tested. - Networking (TCP) seems to work OK. Linux<->Linux works great, Lin<->Win not tested. diff --git a/src/asteroid/asteroid.cpp b/src/asteroid/asteroid.cpp index 95c4cf3..c50b779 100644 --- a/src/asteroid/asteroid.cpp +++ b/src/asteroid/asteroid.cpp @@ -15,6 +15,9 @@ * C module for asteroid code * * $Log$ + * Revision 1.4 2002/06/18 08:58:53 relnev + * last few struct changes + * * Revision 1.3 2002/06/09 04:41:15 relnev * added copyright header * @@ -420,15 +423,15 @@ int asteroid_in_inner_bound_with_axes(asteroid_field *asfieldp, vector *pos, flo Assert(asfieldp->has_inner_bound); int rval = 0; - if ( (pos->x > asfieldp->inner_min_bound.x - delta) && (pos->x < asfieldp->inner_max_bound.x + delta) ) { + if ( (pos->xyz.x > asfieldp->inner_min_bound.xyz.x - delta) && (pos->xyz.x < asfieldp->inner_max_bound.xyz.x + delta) ) { rval += 1; } - if ( (pos->y > asfieldp->inner_min_bound.y - delta) && (pos->y < asfieldp->inner_max_bound.y + delta) ) { + if ( (pos->xyz.y > asfieldp->inner_min_bound.xyz.y - delta) && (pos->xyz.y < asfieldp->inner_max_bound.xyz.y + delta) ) { rval += 2; } - if ( (pos->z > asfieldp->inner_min_bound.z - delta) && (pos->z < asfieldp->inner_max_bound.z + delta) ) { + if ( (pos->xyz.z > asfieldp->inner_min_bound.xyz.z - delta) && (pos->xyz.z < asfieldp->inner_max_bound.xyz.z + delta) ) { rval += 4; } @@ -541,9 +544,9 @@ object *asteroid_create(asteroid_field *asfieldp, int asteroid_type, int asteroi signature = 0; rand_base = 0; if ( Game_mode & GM_NORMAL ) { - pos.x = asfieldp->min_bound.x + delta_bound.x * frand(); - pos.y = asfieldp->min_bound.y + delta_bound.y * frand(); - pos.z = asfieldp->min_bound.z + delta_bound.z * frand(); + pos.xyz.x = asfieldp->min_bound.xyz.x + delta_bound.xyz.x * frand(); + pos.xyz.y = asfieldp->min_bound.xyz.y + delta_bound.xyz.y * frand(); + pos.xyz.z = asfieldp->min_bound.xyz.z + delta_bound.xyz.z * frand(); inner_bound_pos_fixup(asfieldp, &pos); // vm_set_identity(&orient); @@ -554,9 +557,9 @@ object *asteroid_create(asteroid_field *asfieldp, int asteroid_type, int asteroi signature = multi_assign_network_signature( MULTI_SIG_ASTEROID ); rand_base = signature; - pos.x = asfieldp->min_bound.x + delta_bound.x * static_randf( rand_base++ ); - pos.y = asfieldp->min_bound.y + delta_bound.y * static_randf( rand_base++ ); - pos.z = asfieldp->min_bound.z + delta_bound.z * static_randf( rand_base++ ); + pos.xyz.x = asfieldp->min_bound.xyz.x + delta_bound.xyz.x * static_randf( rand_base++ ); + pos.xyz.y = asfieldp->min_bound.xyz.y + delta_bound.xyz.y * static_randf( rand_base++ ); + pos.xyz.z = asfieldp->min_bound.xyz.z + delta_bound.xyz.z * static_randf( rand_base++ ); inner_bound_pos_fixup(asfieldp, &pos); // vm_set_identity(&orient); @@ -625,14 +628,14 @@ object *asteroid_create(asteroid_field *asfieldp, int asteroid_type, int asteroi // Fill in the max_vel field, so the collision pair stuff knows // how fast this can move maximum in order to throw out collisions. // This is in local coordinates, so Z is forward velocity. - objp->phys_info.max_vel.x = 0.0f; - objp->phys_info.max_vel.y = 0.0f; - objp->phys_info.max_vel.z = vm_vec_mag(&objp->phys_info.desired_vel); + objp->phys_info.max_vel.xyz.x = 0.0f; + objp->phys_info.max_vel.xyz.y = 0.0f; + objp->phys_info.max_vel.xyz.z = vm_vec_mag(&objp->phys_info.desired_vel); objp->phys_info.mass = asip->modelp[asteroid_subtype]->rad * 700.0f; - objp->phys_info.I_body_inv.rvec.x = 1.0f / (objp->phys_info.mass*asip->modelp[asteroid_subtype]->rad); - objp->phys_info.I_body_inv.uvec.y = objp->phys_info.I_body_inv.rvec.x; - objp->phys_info.I_body_inv.fvec.z = objp->phys_info.I_body_inv.rvec.x; + objp->phys_info.I_body_inv.v.rvec.xyz.x = 1.0f / (objp->phys_info.mass*asip->modelp[asteroid_subtype]->rad); + objp->phys_info.I_body_inv.v.uvec.xyz.y = objp->phys_info.I_body_inv.v.rvec.xyz.x; + objp->phys_info.I_body_inv.v.fvec.xyz.z = objp->phys_info.I_body_inv.v.rvec.xyz.x; objp->hull_strength = asip->initial_hull_strength * (0.8f + (float)Game_skill_level/NUM_SKILL_LEVELS)/2.0f; // ensure vel is valid @@ -867,35 +870,35 @@ int asteroid_should_wrap(object *objp, asteroid_field *asfieldp) if ( MULTIPLAYER_CLIENT ) return 0; - if (objp->pos.x < asfieldp->min_bound.x) { + if (objp->pos.xyz.x < asfieldp->min_bound.xyz.x) { return 1; } - if (objp->pos.y < asfieldp->min_bound.y) { + if (objp->pos.xyz.y < asfieldp->min_bound.xyz.y) { return 1; } - if (objp->pos.z < asfieldp->min_bound.z) { + if (objp->pos.xyz.z < asfieldp->min_bound.xyz.z) { return 1; } - if (objp->pos.x > asfieldp->max_bound.x) { + if (objp->pos.xyz.x > asfieldp->max_bound.xyz.x) { return 1; } - if (objp->pos.y > asfieldp->max_bound.y) { + if (objp->pos.xyz.y > asfieldp->max_bound.xyz.y) { return 1; } - if (objp->pos.z > asfieldp->max_bound.z) { + if (objp->pos.xyz.z > asfieldp->max_bound.xyz.z) { return 1; } // check against inner bound if (asfieldp->has_inner_bound) { - if ( (objp->pos.x > asfieldp->inner_min_bound.x) && (objp->pos.x < asfieldp->inner_max_bound.x) - && (objp->pos.y > asfieldp->inner_min_bound.y) && (objp->pos.y < asfieldp->inner_max_bound.y) - && (objp->pos.z > asfieldp->inner_min_bound.z) && (objp->pos.z < asfieldp->inner_max_bound.z) ) { + if ( (objp->pos.xyz.x > asfieldp->inner_min_bound.xyz.x) && (objp->pos.xyz.x < asfieldp->inner_max_bound.xyz.x) + && (objp->pos.xyz.y > asfieldp->inner_min_bound.xyz.y) && (objp->pos.xyz.y < asfieldp->inner_max_bound.xyz.y) + && (objp->pos.xyz.z > asfieldp->inner_min_bound.xyz.z) && (objp->pos.xyz.z < asfieldp->inner_max_bound.xyz.z) ) { return 1; } @@ -907,28 +910,28 @@ int asteroid_should_wrap(object *objp, asteroid_field *asfieldp) // Wrap an asteroid from one end of the asteroid field to the other void asteroid_wrap_pos(object *objp, asteroid_field *asfieldp) { - if (objp->pos.x < asfieldp->min_bound.x) { - objp->pos.x = asfieldp->max_bound.x + (objp->pos.x - asfieldp->min_bound.x); + if (objp->pos.xyz.x < asfieldp->min_bound.xyz.x) { + objp->pos.xyz.x = asfieldp->max_bound.xyz.x + (objp->pos.xyz.x - asfieldp->min_bound.xyz.x); } - if (objp->pos.y < asfieldp->min_bound.y) { - objp->pos.y = asfieldp->max_bound.y + (objp->pos.y - asfieldp->min_bound.y); + if (objp->pos.xyz.y < asfieldp->min_bound.xyz.y) { + objp->pos.xyz.y = asfieldp->max_bound.xyz.y + (objp->pos.xyz.y - asfieldp->min_bound.xyz.y); } - if (objp->pos.z < asfieldp->min_bound.z) { - objp->pos.z = asfieldp->max_bound.z + (objp->pos.z - asfieldp->min_bound.z); + if (objp->pos.xyz.z < asfieldp->min_bound.xyz.z) { + objp->pos.xyz.z = asfieldp->max_bound.xyz.z + (objp->pos.xyz.z - asfieldp->min_bound.xyz.z); } - if (objp->pos.x > asfieldp->max_bound.x) { - objp->pos.x = asfieldp->min_bound.x + (objp->pos.x - asfieldp->max_bound.x); + if (objp->pos.xyz.x > asfieldp->max_bound.xyz.x) { + objp->pos.xyz.x = asfieldp->min_bound.xyz.x + (objp->pos.xyz.x - asfieldp->max_bound.xyz.x); } - if (objp->pos.y > asfieldp->max_bound.y) { - objp->pos.y = asfieldp->min_bound.y + (objp->pos.y - asfieldp->max_bound.y); + if (objp->pos.xyz.y > asfieldp->max_bound.xyz.y) { + objp->pos.xyz.y = asfieldp->min_bound.xyz.y + (objp->pos.xyz.y - asfieldp->max_bound.xyz.y); } - if (objp->pos.z > asfieldp->max_bound.z) { - objp->pos.z = asfieldp->min_bound.z + (objp->pos.z - asfieldp->max_bound.z); + if (objp->pos.xyz.z > asfieldp->max_bound.xyz.z) { + objp->pos.xyz.z = asfieldp->min_bound.xyz.z + (objp->pos.xyz.z - asfieldp->max_bound.xyz.z); } // wrap on inner bound, check all 3 axes as needed, use of rand ok for multiplayer with send_asteroid_throw() @@ -967,9 +970,9 @@ void asteroid_aim_at_target(object *objp, object *asteroid_objp, float delta_tim vm_vec_rand_vec_quick(&rand_vec); vm_vec_scale_add2(&predicted_center_pos, &rand_vec, objp->radius/2.0f); - vm_vec_add2(&rand_vec, &objp->orient.fvec); + vm_vec_add2(&rand_vec, &objp->orient.v.fvec); if (vm_vec_mag_quick(&rand_vec) < 0.1f) - vm_vec_add2(&rand_vec, &objp->orient.rvec); + vm_vec_add2(&rand_vec, &objp->orient.v.rvec); vm_vec_normalize(&rand_vec); speed = Asteroid_info[0].max_speed * (frand()/2.0f + 0.5f); @@ -1076,7 +1079,7 @@ void asteroid_maybe_reposition(object *objp, asteroid_field *asfieldp) // only wrap if player won't see asteroid disappear/reverse direction dist = vm_vec_normalized_dir(&vec_to_asteroid, &objp->pos, &Eye_position); - dot = vm_vec_dot(&Eye_matrix.fvec, &vec_to_asteroid); + dot = vm_vec_dot(&Eye_matrix.v.fvec, &vec_to_asteroid); if ((dot < 0.7f) || (dist > 3000.0f)) { if (Num_asteroids > MAX_ASTEROIDS-10) { @@ -1087,7 +1090,7 @@ void asteroid_maybe_reposition(object *objp, asteroid_field *asfieldp) Asteroids[objp->instance].target_objnum = -1; vm_vec_normalized_dir(&vec_to_asteroid, &objp->pos, &Eye_position); - dot = vm_vec_dot(&Eye_matrix.fvec, &vec_to_asteroid); + dot = vm_vec_dot(&Eye_matrix.v.fvec, &vec_to_asteroid); dist = vm_vec_dist_quick(&objp->pos, &Eye_position); if (( dot > 0.7f) && (dist < 3000.0f)) { @@ -1127,9 +1130,9 @@ void asteroid_process_pre( object *objp, float frame_time) //nprintf(("AI", "Frm %i: Obj #%2i: Hull: %5.1f Vel: %5.1f %5.1f %5.1f Des: %5.1f %5.1f %5.1f\n", Framecount, objp-Objects, objp->hull_strength, v->x, v->y, v->z, vv->x, vv->y, vv->z)); // Make vel chase desired_vel - lerp(&objp->phys_info.vel.x, objp->phys_info.vel.x, objp->phys_info.desired_vel.x, flFrametime); - lerp(&objp->phys_info.vel.y, objp->phys_info.vel.y, objp->phys_info.desired_vel.y, flFrametime); - lerp(&objp->phys_info.vel.z, objp->phys_info.vel.z, objp->phys_info.desired_vel.z, flFrametime); + lerp(&objp->phys_info.vel.xyz.x, objp->phys_info.vel.xyz.x, objp->phys_info.desired_vel.xyz.x, flFrametime); + lerp(&objp->phys_info.vel.xyz.y, objp->phys_info.vel.xyz.y, objp->phys_info.desired_vel.xyz.y, flFrametime); + lerp(&objp->phys_info.vel.xyz.z, objp->phys_info.vel.xyz.z, objp->phys_info.desired_vel.xyz.z, flFrametime); } } @@ -2079,12 +2082,12 @@ int set_asteroid_throw_objnum() float radius = ship_objp->radius*2.0f; if (Ship_info[Ships[ship_objp->instance].ship_info_index].flags & (SIF_HUGE_SHIP | SIF_BIG_SHIP)) { - if (ship_objp->pos.x + radius > Asteroid_field.min_bound.x) - if (ship_objp->pos.y + radius > Asteroid_field.min_bound.y) - if (ship_objp->pos.z + radius > Asteroid_field.min_bound.z) - if (ship_objp->pos.x - radius < Asteroid_field.max_bound.x) - if (ship_objp->pos.y - radius < Asteroid_field.max_bound.y) - if (ship_objp->pos.z - radius < Asteroid_field.max_bound.z) + if (ship_objp->pos.xyz.x + radius > Asteroid_field.min_bound.xyz.x) + if (ship_objp->pos.xyz.y + radius > Asteroid_field.min_bound.xyz.y) + if (ship_objp->pos.xyz.z + radius > Asteroid_field.min_bound.xyz.z) + if (ship_objp->pos.xyz.x - radius < Asteroid_field.max_bound.xyz.x) + if (ship_objp->pos.xyz.y - radius < Asteroid_field.max_bound.xyz.y) + if (ship_objp->pos.xyz.z - radius < Asteroid_field.max_bound.xyz.z) if (!asteroid_in_inner_bound(&Asteroid_field, &ship_objp->pos, radius)) return so->objnum; } diff --git a/src/hud/hudtargetbox.cpp b/src/hud/hudtargetbox.cpp index 7599453..368d112 100644 --- a/src/hud/hudtargetbox.cpp +++ b/src/hud/hudtargetbox.cpp @@ -15,6 +15,9 @@ * C module for drawing the target monitor box on the HUD * * $Log$ + * Revision 1.5 2002/06/18 08:58:53 relnev + * last few struct changes + * * Revision 1.4 2002/06/17 06:33:09 relnev * ryan's struct patch for gcc 2.95 * @@ -807,7 +810,7 @@ void hud_render_target_asteroid(object *target_objp) factor = 2*target_objp->radius; // use the player's up vector, and construct the viewers orientation matrix - up_vector = Player_obj->orient.uvec; + up_vector = Player_obj->orient.v.uvec; vm_vector_2_matrix(&camera_orient,&orient_vec,&up_vector,NULL); // normalize the vector from the player to the current target, and scale by a factor to calculate diff --git a/src/io/keycontrol.cpp b/src/io/keycontrol.cpp index 0b107da..79901bc 100644 --- a/src/io/keycontrol.cpp +++ b/src/io/keycontrol.cpp @@ -15,6 +15,9 @@ * Routines to read and deal with keyboard input. * * $Log$ + * Revision 1.3 2002/06/18 08:58:53 relnev + * last few struct changes + * * Revision 1.2 2002/06/09 04:41:21 relnev * added copyright header * @@ -1073,7 +1076,7 @@ void process_debug_keys(int k) object *asteroid_create(asteroid_field *asfieldp, int asteroid_type, int subtype); object *objp = asteroid_create(&Asteroid_field, 0, 0); vector vel; - vm_vec_copy_scale(&vel, &Player_obj->orient.fvec, 50.0f); + vm_vec_copy_scale(&vel, &Player_obj->orient.v.fvec, 50.0f); objp->phys_info.vel = vel; objp->phys_info.desired_vel = vel; objp->pos = Player_obj->pos; @@ -1567,7 +1570,7 @@ void game_process_pause_key() vector gpos; \ vm_vec_sub2(&temp, &hit_check->pos); \ vm_vec_rotate(&gpos, &temp, &hit_check->orient); \ - if((gpos.x >= pm->mins.x * scale) && (gpos.y >= pm->mins.y * scale) && (gpos.z >= pm->mins.z * scale) && (gpos.x <= pm->maxs.x * scale) && (gpos.y <= pm->maxs.y * scale) && (gpos.z <= pm->maxs.z * scale)) { \ + if((gpos.xyz.x >= pm->mins.xyz.x * scale) && (gpos.xyz.y >= pm->mins.xyz.y * scale) && (gpos.xyz.z >= pm->mins.xyz.z * scale) && (gpos.xyz.x <= pm->maxs.xyz.x * scale) && (gpos.xyz.y <= pm->maxs.xyz.y * scale) && (gpos.xyz.z <= pm->maxs.xyz.z * scale)) { \ collided = 1; \ } \ } \ @@ -1578,19 +1581,19 @@ void game_process_pause_key() if(pm != NULL){ \ switch((int)frand_range(0.0f, 3.9f)){ \ case 0: \ - new_obj->pos.x += 200.0f; \ + new_obj->pos.xyz.x += 200.0f; \ break; \ case 1: \ - new_obj->pos.x -= 200.0f; \ + new_obj->pos.xyz.x -= 200.0f; \ break; \ case 2: \ - new_obj->pos.y += 200.0f; \ + new_obj->pos.xyz.y += 200.0f; \ break; \ case 3: \ - new_obj->pos.y -= 200.0f; \ + new_obj->pos.xyz.y -= 200.0f; \ break; \ default : \ - new_obj->pos.z -= 200.0f; \ + new_obj->pos.xyz.z -= 200.0f; \ break; \ } \ } \ @@ -1659,9 +1662,9 @@ void game_process_cheats(int k) for(int idx=0; idx<1; idx++){ vector add = Player_obj->pos; - add.x += frand_range(-700.0f, 700.0f); - add.y += frand_range(-700.0f, 700.0f); - add.z += frand_range(-700.0f, 700.0f); + add.xyz.x += frand_range(-700.0f, 700.0f); + add.xyz.y += frand_range(-700.0f, 700.0f); + add.xyz.z += frand_range(-700.0f, 700.0f); int objnum = ship_create(&vmd_identity_matrix, &add, Num_ship_types - 1); @@ -1690,7 +1693,7 @@ void game_process_cheats(int k) // just to make sure we don't get any strange magnitude errors if(vm_vec_same(&hit_check->pos, &Objects[objnum].pos)){ - Objects[objnum].pos.x += 1.0f; + Objects[objnum].pos.xyz.x += 1.0f; } WITHIN_BBOX(); diff --git a/src/object/collidedebrisship.cpp b/src/object/collidedebrisship.cpp index e3fd60c..83ea93e 100644 --- a/src/object/collidedebrisship.cpp +++ b/src/object/collidedebrisship.cpp @@ -15,6 +15,9 @@ * Routines to detect collisions and do physics, damage, etc for ships and debris * * $Log$ + * Revision 1.5 2002/06/18 08:58:53 relnev + * last few struct changes + * * Revision 1.4 2002/06/17 06:33:10 relnev * ryan's struct patch for gcc 2.95 * @@ -363,7 +366,7 @@ int collide_asteroid_ship( obj_pair * pair ) return 0; // limit damage from impulse by making max impulse (for damage) 2*m*v_max_relative - float max_ship_impulse = (2.0f*pship->phys_info.max_vel.z+vm_vec_mag_quick(&asteroid_vel)) * + float max_ship_impulse = (2.0f*pship->phys_info.max_vel.xyz.z+vm_vec_mag_quick(&asteroid_vel)) * (pship->phys_info.mass*pasteroid->phys_info.mass) / (pship->phys_info.mass + pasteroid->phys_info.mass); if (asteroid_hit_info.impulse > max_ship_impulse) { @@ -441,7 +444,7 @@ int collide_asteroid_ship( obj_pair * pair ) ship_max_speed = ship_get_max_speed(shipp); } ship_max_speed = max(ship_max_speed, 10.0f); - ship_max_speed = max(ship_max_speed, pship->phys_info.vel.z); + ship_max_speed = max(ship_max_speed, pship->phys_info.vel.xyz.z); time = 1000.0f * (dist - pship->radius - pasteroid->radius - 10.0f) / (asteroid_max_speed + ship_max_speed); // 10.0f is a safety factor -- 2.39.2