From eb37c80e5f6df2b2a28d80a0796468f2afb2ba93 Mon Sep 17 00:00:00 2001 From: Bradley Bell Date: Thu, 27 Nov 2014 21:31:20 -0800 Subject: [PATCH] macro for Segment pointer indexing --- main/ai2.c | 4 +-- main/aipath.c | 8 +++--- main/automap.c | 6 ++--- main/collide.c | 14 +++++----- main/editor/centers.c | 12 ++++----- main/editor/eobject.c | 18 ++++++------- main/editor/eswitch.c | 8 +++--- main/editor/group.c | 30 +++++++++++----------- main/editor/info.c | 10 ++++---- main/editor/kbuild.c | 10 ++++---- main/editor/ksegsel.c | 6 ++--- main/editor/ktmap.c | 4 +-- main/editor/meddraw.c | 2 +- main/editor/medrobot.c | 14 +++++----- main/editor/medwall.c | 16 ++++++------ main/editor/mine.c | 6 ++--- main/editor/segment.c | 40 ++++++++++++++--------------- main/editor/seguvs.c | 24 ++++++++--------- main/fuelcen.c | 30 +++++++++++----------- main/fvi.c | 14 +++++----- main/gamemine.c | 4 +-- main/gameseg.c | 14 +++++----- main/multi.c | 2 +- main/paging.c | 4 +-- main/render.c | 36 +++++++++++++------------- main/segment.h | 5 ++-- main/switch.c | 12 ++++----- main/wall.c | 58 +++++++++++++++++++++--------------------- 28 files changed, 206 insertions(+), 205 deletions(-) diff --git a/main/ai2.c b/main/ai2.c index c77bce40..56c704bc 100644 --- a/main/ai2.c +++ b/main/ai2.c @@ -1961,7 +1961,7 @@ int create_gated_robot( int segnum, int object_id, vms_vector *pos) compute_segment_center(&object_pos, segp); if (pos == NULL) - pick_random_point_in_seg(&object_pos, (int)(segp - Segments)); + pick_random_point_in_seg(&object_pos, SEGMENT_NUMBER(segp)); else object_pos = *pos; @@ -1980,7 +1980,7 @@ int create_gated_robot( int segnum, int object_id, vms_vector *pos) return -1; } - //mprintf((0, "Gating in object %i in segment %i\n", objnum, segp-Segments)); + //mprintf((0, "Gating in object %i in segment %i\n", objnum, SEGMENT_NUMBER(segp))); Objects[objnum].lifeleft = F1_0*30; // Gated in robots only live 30 seconds. diff --git a/main/aipath.c b/main/aipath.c index b634053b..9a20b974 100644 --- a/main/aipath.c +++ b/main/aipath.c @@ -1071,7 +1071,7 @@ void ai_follow_path(object *objp, int player_visibility, int previous_visibility // int connect_side = find_connect_side(objp->segnum, goal_seg); // Only move to goal if allowed to fly through the side. // Buddy-bot can create paths he can't fly, waiting for player. - // -- bah, this isn't good enough, buddy will fail to get through any door! if (WALL_IS_DOORWAY(&Segments]objp->segnum], connect_side) & WID_FLY_FLAG) { + // -- bah, this isn't good enough, buddy will fail to get through any door! if (WALL_IS_DOORWAY(&Segments[objp->segnum], connect_side) & WID_FLY_FLAG) { if (!Robot_info[objp->id].companion && !Robot_info[objp->id].thief) { if (distance_travellable >= dist_to_goal) { move_object_to_goal(objp, &goal_point, goal_seg); @@ -1562,7 +1562,7 @@ void test_create_path_many(void) for (i=0; itime_left = new_ec->vc.frame_time; new_ec->frame_count = 0; - new_ec->segnum = seg-Segments; + new_ec->segnum = SEGMENT_NUMBER(seg); new_ec->sidenum = side; new_ec->flags |= EF_ONE_SHOT; new_ec->dest_bm_num = Effects[ec].dest_bm_num; @@ -660,7 +660,7 @@ int check_effect_blowup(segment *seg,int side,vms_vector *pnt, object *blower, i seg->sides[side].tmap_num2 = TmapInfo[tm].destroyed | tmf; //assume this is a light, and play light sound - digi_link_sound_to_pos( SOUND_LIGHT_BLOWNUP, seg-Segments, 0, pnt, 0, F1_0 ); + digi_link_sound_to_pos( SOUND_LIGHT_BLOWNUP, SEGMENT_NUMBER(seg), 0, pnt, 0, F1_0 ); } diff --git a/main/editor/centers.c b/main/editor/centers.c index 6523d902..1f85b77f 100644 --- a/main/editor/centers.c +++ b/main/editor/centers.c @@ -140,7 +140,7 @@ void do_centers_window() // If we change walls, we need to reset the ui code for all // of the checkboxes that control the wall flags. //------------------------------------------------------------ - if (old_seg_num != Cursegp-Segments) { + if (old_seg_num != SEGMENT_NUMBER(Cursegp)) { Assert(Curseg2p->special < MAX_CENTER_TYPES); ui_radio_set_value(CenterFlag[Curseg2p->special], 1); @@ -192,13 +192,13 @@ void do_centers_window() if (!(robot_flags & (1 << robot_index))) { robot_flags |= (1 << robot_index); - mprintf((0, "Segment %i, matcen = %i, robot_flags[%d] = %d\n", Cursegp - Segments, Curseg2p->matcen_num, i, robot_flags)); + mprintf((0, "Segment %i, matcen = %i, robot_flags[%d] = %d\n", SEGMENT_NUMBER(Cursegp), Curseg2p->matcen_num, i, robot_flags)); } } else if (robot_flags & 1 << robot_index) { robot_flags &= ~(1 << robot_index); - mprintf((0, "Segment %i, matcen = %i, robot_flags[%d] = %d\n", Cursegp - Segments, Curseg2p->matcen_num, i, robot_flags)); + mprintf((0, "Segment %i, matcen = %i, robot_flags[%d] = %d\n", SEGMENT_NUMBER(Cursegp), Curseg2p->matcen_num, i, robot_flags)); } } @@ -209,11 +209,11 @@ void do_centers_window() // If anything changes in the ui system, redraw all the text that // identifies this wall. //------------------------------------------------------------ - if (redraw_window || (old_seg_num != Cursegp-Segments ) ) { + if ( redraw_window || (old_seg_num != SEGMENT_NUMBER(Cursegp)) ) { // int i; // char temp_text[CENTER_STRING_LENGTH]; - ui_wprintf_at( MainWindow, 12, 6, "Seg: %3d", Cursegp-Segments ); + ui_wprintf_at( MainWindow, 12, 6, "Seg: %3d", SEGMENT_NUMBER(Cursegp) ); // for (i=0; iobjects; while (objid != -1) { @@ -133,8 +133,8 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short case OBJ_HOSTAGE: objnum = obj_create(OBJ_HOSTAGE, -1, - segp-Segments,object_pos,&seg_matrix,HOSTAGE_SIZE, - CT_NONE,MT_NONE,RT_HOSTAGE); + SEGMENT_NUMBER(segp), object_pos, &seg_matrix, HOSTAGE_SIZE, + CT_NONE, MT_NONE, RT_HOSTAGE); if ( objnum < 0 ) return 0; @@ -154,7 +154,7 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short case OBJ_ROBOT: - objnum = obj_create(OBJ_ROBOT, object_id, segp - Segments, object_pos, + objnum = obj_create(OBJ_ROBOT, object_id, SEGMENT_NUMBER(segp), object_pos, &seg_matrix, Polygon_models[Robot_info[object_id].model_num].rad, CT_AI, MT_PHYSICS, RT_POLYOBJ); @@ -179,7 +179,7 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short { int hide_segment; if (Markedsegp) - hide_segment = Markedsegp-Segments; + hide_segment = SEGMENT_NUMBER(Markedsegp); else hide_segment = -1; // robots which lunge forward to attack cannot have behavior type still. @@ -193,7 +193,7 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short case OBJ_POWERUP: objnum = obj_create(OBJ_POWERUP, object_id, - segp - Segments, object_pos, &seg_matrix, Powerup_info[object_id].size, + SEGMENT_NUMBER(segp), object_pos, &seg_matrix, Powerup_info[object_id].size, CT_POWERUP, MT_NONE, RT_POWERUP); if ( objnum < 0 ) @@ -216,7 +216,7 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short case OBJ_CNTRLCEN: { - objnum = obj_create(OBJ_CNTRLCEN, object_id, segp - Segments, object_pos, + objnum = obj_create(OBJ_CNTRLCEN, object_id, SEGMENT_NUMBER(segp), object_pos, &seg_matrix, Polygon_models[object_id].rad, CT_CNTRLCEN, MT_NONE, RT_POLYOBJ); @@ -234,7 +234,7 @@ int place_object(segment *segp, vms_vector *object_pos, short object_type, short } case OBJ_PLAYER: { - objnum = obj_create(OBJ_PLAYER, object_id, segp - Segments, object_pos, + objnum = obj_create(OBJ_PLAYER, object_id, SEGMENT_NUMBER(segp), object_pos, &seg_matrix, Polygon_models[Player_ship->model_num].rad, CT_NONE, MT_PHYSICS, RT_POLYOBJ); @@ -388,7 +388,7 @@ int ObjectSelectNextinSegment(void) Cur_object_index = objsegp->objects; } else { objsegp = Cursegp; - if (Objects[Cur_object_index].segnum != Cursegp-Segments) + if (Objects[Cur_object_index].segnum != SEGMENT_NUMBER(Cursegp)) Cur_object_index = objsegp->objects; } diff --git a/main/editor/eswitch.c b/main/editor/eswitch.c index 387308b7..43902939 100644 --- a/main/editor/eswitch.c +++ b/main/editor/eswitch.c @@ -198,13 +198,13 @@ int bind_matcen_to_trigger() { link_num = Triggers[trigger_num].num_links; for (i=0;i= MAX_SEGMENTS)) { - mprintf((0,"Warning -- invalid segment index = %i, max = %i\n",segp-Segments,MAX_SEGMENTS)); + if ((SEGMENT_NUMBER(segp) < 0) || (SEGMENT_NUMBER(segp) >= MAX_SEGMENTS)) { + mprintf((0, "Warning -- invalid segment index = %i, max = %i\n", SEGMENT_NUMBER(segp), MAX_SEGMENTS)); Int3(); } - if (!Been_visited[segp-Segments]) { - seglistp[(*num_segs)++] = segp-Segments; - Been_visited[segp-Segments] = 1; + if (!Been_visited[SEGMENT_NUMBER(segp)]) { + seglistp[(*num_segs)++] = SEGMENT_NUMBER(segp); + Been_visited[SEGMENT_NUMBER(segp)] = 1; for (side=0; sidechildren[side])) @@ -585,7 +585,7 @@ int med_copy_group(int delta_flag, segment *base_seg, int base_side, segment *gr // Find groupsegp index for (s=0;schildren[c])) { if (!in_group(segp->children[c], new_current_group)) { - mprintf((0, "2: Breaking connection at seg:side = %i:%i\n", segp-Segments, c)); + mprintf((0, "2: Breaking connection at seg:side = %i:%i\n", SEGMENT_NUMBER(segp), c)); segp->children[c] = -1; validate_segment_side(segp,c); // we have converted a connection to a side so validate the segment } @@ -719,7 +719,7 @@ int med_move_group(int delta_flag, segment *base_seg, int base_side, segment *gr vms_matrix rotmat; if (IS_CHILD(base_seg->children[base_side])) - if (base_seg->children[base_side] != group_seg-Segments) { + if (base_seg->children[base_side] != SEGMENT_NUMBER(group_seg)) { editor_status("Error -- unable to move group, base_seg:base_side must be free or point to group_seg."); return 1; } @@ -1002,7 +1002,7 @@ int rotate_segment_new(vms_angvec *pbh) int current_group_save; if (!IS_CHILD(Cursegp->children[(int) Side_opposite[Curside]])) { - // -- I don't understand this, MK, 01/25/94: if (Cursegp->children[Curside] != group_seg-Segments) { + // -- I don't understand this, MK, 01/25/94: if (Cursegp->children[Curside] != SEGMENT_NUMBER(group_seg)) { editor_status("Error -- unable to rotate group, Cursegp:Side_opposite[Curside] cannot be free."); return 1; } @@ -1013,7 +1013,7 @@ int rotate_segment_new(vms_angvec *pbh) save_selected_segs(&n_selected_segs_save, selected_segs_save); GroupList[ROT_GROUP].num_segments = 0; - newseg = Cursegp - Segments; + newseg = SEGMENT_NUMBER(Cursegp); newseg_side = Side_opposite[Curside]; // Create list of segments to rotate. @@ -1139,7 +1139,7 @@ int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int n group_editor.newsegment_size = sizeof(segment); // Next 3 vars added 10/07 by JAS if (Groupsegp[current_group]) { - segnum = Groupsegp[current_group]-Segments; + segnum = SEGMENT_NUMBER(Groupsegp[current_group]); for (i=0;igroup == current_group) { Cursegp->group = -1; - delete_segment_from_group( Cursegp-Segments, current_group ); + delete_segment_from_group( SEGMENT_NUMBER(Cursegp), current_group ); Update_flags |= UF_WORLD_CHANGED; mine_changed = 1; @@ -1602,7 +1602,7 @@ int GroupSegment( void ) if (Cursegp->group == -1) { Cursegp->group = current_group; - add_segment_to_group( Cursegp-Segments, current_group ); + add_segment_to_group( SEGMENT_NUMBER(Cursegp), current_group ); Update_flags |= UF_WORLD_CHANGED; mine_changed = 1; @@ -1625,7 +1625,7 @@ int Degroup( void ) for (i=0; isides[Curside].tmap_num, Cursegp->sides[Curside].tmap_num2 & 0x3FFF, (Cursegp->sides[Curside].tmap_num2 >> 14) & 3); - old_Cursegp_num = Cursegp-Segments; + old_Cursegp_num = SEGMENT_NUMBER(Cursegp); old_Curside = Curside; } //--------------- Current_vertex_numbers ------------- - if ( old_Cursegp_num_for_verts != Cursegp-Segments ) { + if ( old_Cursegp_num_for_verts != SEGMENT_NUMBER(Cursegp) ) { gr_uprintf( 0, 64, "{%3d,%3d,%3d,%3d,", Cursegp->verts[0],Cursegp->verts[1], Cursegp->verts[2],Cursegp->verts[3] ); gr_uprintf( 0, 80," %3d,%3d,%3d,%3d}", Cursegp->verts[4],Cursegp->verts[5], Cursegp->verts[6],Cursegp->verts[7] ); - old_Cursegp_num_for_verts = Cursegp-Segments; + old_Cursegp_num_for_verts = SEGMENT_NUMBER(Cursegp); } //--------------- Num walls/links/triggers ------------------------- diff --git a/main/editor/kbuild.c b/main/editor/kbuild.c index 5720695a..c984997d 100644 --- a/main/editor/kbuild.c +++ b/main/editor/kbuild.c @@ -77,7 +77,7 @@ int CreateAdjacentJoint() segment *adj_sp; if (med_find_adjacent_segment_side(Cursegp, Curside, &adj_sp, &adj_side)) { - if (Cursegp->children[Curside] != adj_sp-Segments) { + if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) { med_form_joint(Cursegp,Curside,adj_sp,adj_side); Update_flags |= UF_WORLD_CHANGED; mine_changed = 1; @@ -102,7 +102,7 @@ int CreateSloppyAdjacentJoint() save_level("SLOPPY.LVL"); if (med_find_closest_threshold_segment_side(Cursegp, Curside, &adj_sp, &adj_side, 20*F1_0)) { - if (Cursegp->children[Curside] != adj_sp-Segments) { + if (Cursegp->children[Curside] != SEGMENT_NUMBER(adj_sp)) { if (!med_form_joint(Cursegp,Curside,adj_sp,adj_side)) { Update_flags |= UF_WORLD_CHANGED; @@ -140,7 +140,7 @@ int CreateSloppyAdjacentJointsGroup() if (!IS_CHILD(segp->children[sidenum])) if (med_find_closest_threshold_segment_side(segp, sidenum, &adj_sp, &adj_side, 5*F1_0)) { if (adj_sp->group == segp->group) { - if (segp->children[sidenum] != adj_sp-Segments) + if (segp->children[sidenum] != SEGMENT_NUMBER(adj_sp)) if (!med_form_joint(segp, sidenum, adj_sp,adj_side)) done_been_a_change = 1; } @@ -170,7 +170,7 @@ int CreateAdjacentJointsSegment() for (s=0; schildren[s] != adj_sp-Segments) + if (Cursegp->children[s] != SEGMENT_NUMBER(adj_sp)) { med_form_joint(Cursegp,s,adj_sp,adj_side); Update_flags |= UF_WORLD_CHANGED; @@ -196,7 +196,7 @@ int CreateAdjacentJointsAll() for (seg=0; seg<=Highest_segment_index; seg++) for (s=0; schildren[side])) { @@ -182,7 +182,7 @@ int PropagateTexturesSelected(void) strcpy(undo_status[Autosave_count], "Propogate Textures Selected UNDONE."); for (i=0; ictype.ai_info.follow_path_start_seg = Cursegp-Segments; - //objp->ctype.ai_info.follow_path_end_seg = Markedsegp-Segments; + //objp->ctype.ai_info.follow_path_start_seg = SEGMENT_NUMBER(Cursegp); + //objp->ctype.ai_info.follow_path_end_seg = SEGMENT_NUMBER(Markedsegp); } } diff --git a/main/editor/medwall.c b/main/editor/medwall.c index 951d5be0..5d3051ee 100644 --- a/main/editor/medwall.c +++ b/main/editor/medwall.c @@ -703,7 +703,7 @@ int wall_remove_side(segment *seg, short side) // Destroy any links to the deleted wall. for (t=0;tchildren[side]]; connectside = find_connect_side(segp, csegp); - Walls[segp->sides[side].wall_num].segnum = segp-Segments; - Walls[csegp->sides[connectside].wall_num].segnum = csegp-Segments; + Walls[segp->sides[side].wall_num].segnum = SEGMENT_NUMBER(segp); + Walls[csegp->sides[connectside].wall_num].segnum = SEGMENT_NUMBER(csegp); Walls[segp->sides[side].wall_num].sidenum = side; Walls[csegp->sides[connectside].wall_num].sidenum = connectside; @@ -821,8 +821,8 @@ int wall_add_to_markedside(sbyte type) wall_num = Markedsegp->sides[Markedside].wall_num; cwall_num = csegp->sides[Connectside].wall_num; - Walls[wall_num].segnum = Markedsegp-Segments; - Walls[cwall_num].segnum = csegp-Segments; + Walls[wall_num].segnum = SEGMENT_NUMBER(Markedsegp); + Walls[cwall_num].segnum = SEGMENT_NUMBER(csegp); Walls[wall_num].sidenum = Markedside; Walls[cwall_num].sidenum = Connectside; @@ -931,13 +931,13 @@ int bind_wall_to_control_center() { link_num = ControlCenterTriggers.num_links; for (i=0;i 0) degeneracy_flag = 0; else { - mprintf((0, "segment #%i is degenerate due to cross product check.\n", sp-Segments)); + mprintf((0, "segment #%i is degenerate due to cross product check.\n", SEGMENT_NUMBER(sp))); degeneracy_flag = 1; } @@ -982,7 +982,7 @@ int med_attach_segment_rotated(segment *destseg, segment *newseg, int destside, // Add segment to proper group list. if (nsp->group > -1) - add_segment_to_group(nsp-Segments, nsp->group); + add_segment_to_group(SEGMENT_NUMBER(nsp), nsp->group); // Copy the texture map ids. copy_tmap_ids(nsp,newseg); @@ -996,7 +996,7 @@ int med_attach_segment_rotated(segment *destseg, segment *newseg, int destside, // Form the connection destseg->children[destside] = segnum; // destseg->sides[destside].render_flag = 0; - nsp->children[newside] = destseg-Segments; + nsp->children[newside] = SEGMENT_NUMBER(destseg); // Copy vertex indices of the four vertices forming the joint dvp = Side_to_verts[destside]; @@ -1189,7 +1189,7 @@ int med_delete_segment(segment *sp) int s,side,segnum; int objnum; - segnum = sp-Segments; + segnum = SEGMENT_NUMBER(sp); // Cannot delete segment if only segment. if (Num_segments == 1) @@ -1244,7 +1244,7 @@ int med_delete_segment(segment *sp) // If deleted segment = group segment, wipe it off the group list. if (sp->group > -1) - delete_segment_from_group(sp-Segments, sp->group); + delete_segment_from_group(SEGMENT_NUMBER(sp), sp->group); // If we deleted something which was not connected to anything, must now select a new current segment. if (Cursegp == sp) @@ -1268,7 +1268,7 @@ int med_delete_segment(segment *sp) if (objnum == OBJECT_NUMBER(ConsoleObject)) { compute_segment_center(&ConsoleObject->pos,Cursegp); - obj_relink(objnum,Cursegp-Segments); + obj_relink(objnum, SEGMENT_NUMBER(Cursegp)); } else obj_delete(objnum); } @@ -1331,14 +1331,14 @@ int med_rotate_segment(segment *seg, vms_matrix *rotmat) destseg = &Segments[seg->children[newside]]; destside = 0; - while ((destseg->children[destside] != seg-Segments) && (destside < MAX_SIDES_PER_SEGMENT)) + while ((destseg->children[destside] != SEGMENT_NUMBER(seg)) && (destside < MAX_SIDES_PER_SEGMENT)) destside++; // Before deleting the segment, copy its texture maps to New_segment copy_tmaps_to_segment(&New_segment,seg); if (med_delete_segment(seg)) - mprintf((0,"Error in rotation: Unable to delete segment %i\n",seg-Segments)); + mprintf((0, "Error in rotation: Unable to delete segment %i\n", SEGMENT_NUMBER(seg))); if (Curside == WFRONT) Curside = WBACK; @@ -1507,7 +1507,7 @@ int med_form_joint(segment *seg1, int side1, segment *seg2, int side2) // Put the one segment we know are being modified into the validation list. // Note: seg1 does not require a full validation, only a validation of the affected side. Its vertices do not move. nv = 1; - validation_list[0] = seg2 - Segments; + validation_list[0] = SEGMENT_NUMBER(seg2); for (v=0; v<4; v++) for (s=0; s<=Highest_segment_index; s++) @@ -1525,8 +1525,8 @@ int med_form_joint(segment *seg1, int side1, segment *seg2, int side2) } // Form new connections. - seg1->children[side1] = seg2 - Segments; - seg2->children[side2] = seg1 - Segments; + seg1->children[side1] = SEGMENT_NUMBER(seg2); + seg2->children[side2] = SEGMENT_NUMBER(seg1); // validate all segments validate_segment_side(seg1,side1); @@ -1580,9 +1580,9 @@ int med_form_bridge_segment(segment *seg1, int side1, segment *seg2, int side2) return 1; bs = &Segments[get_free_segment_number()]; -// mprintf((0,"Forming bridge segment %i from %i to %i\n",bs-Segments,seg1-Segments,seg2-Segments)); +// mprintf((0, "Forming bridge segment %i from %i to %i\n", SEGMENT_NUMBER(bs), SEGMENT_NUMBER(seg1), SEGMENT_NUMBER(seg2))); - bs->segnum = bs-Segments; + bs->segnum = SEGMENT_NUMBER(bs); bs->objects = -1; // Copy vertices from seg2 into last 4 vertices of bridge segment. @@ -1605,11 +1605,11 @@ int med_form_bridge_segment(segment *seg1, int side1, segment *seg2, int side2) // Now form connections between segments. - bs->children[AttachSide] = seg1 - Segments; - bs->children[(int) Side_opposite[AttachSide]] = seg2 - Segments; + bs->children[AttachSide] = SEGMENT_NUMBER(seg1); + bs->children[(int) Side_opposite[AttachSide]] = SEGMENT_NUMBER(seg2); - seg1->children[side1] = bs-Segments; //seg2 - Segments; - seg2->children[side2] = bs-Segments; //seg1 - Segments; + seg1->children[side1] = SEGMENT_NUMBER(bs); // SEGMENT_NUMBER(seg2); + seg2->children[side2] = SEGMENT_NUMBER(bs); // SEGMENT_NUMBER(seg1); // Validate bridge segment, and if degenerate, clean up mess. Degenerate_segment_found = 0; @@ -1968,7 +1968,7 @@ void warn_if_concave_segment(segment *s) result = check_seg_concavity(s); if (result) { - Warning_segs[N_warning_segs++] = s-Segments; + Warning_segs[N_warning_segs++] = SEGMENT_NUMBER(s); if (N_warning_segs) { editor_status("*** WARNING *** New segment is concave! *** WARNING ***"); @@ -1997,7 +1997,7 @@ int med_find_adjacent_segment_side(segment *sp, int side, segment **adj_sp, int // Scan all segments, looking for a segment which contains the four abs_verts for (seg=0; seg<=Highest_segment_index; seg++) { - if (seg != sp-Segments) { + if (seg != SEGMENT_NUMBER(sp)) { for (v=0; v<4; v++) { // do for each vertex in abs_verts for (vv=0; vvuvls[v].l > F1_0*16) || (sidep->uvls[v].l < 0)) - Int3(); //mprintf(0,"Bogus lighting value in segment %i, side %i, vert %i = %x\n",sp-Segments, side, v, sidep->uvls[v].l); + Int3(); //mprintf(0, "Bogus lighting value in segment %i, side %i, vert %i = %x\n", SEGMENT_NUMBER(sp), side, v, sidep->uvls[v].l); } void check_lighting_segment(segment *segp) @@ -617,7 +617,7 @@ void assign_uvs_to_side(segment *segp, int sidenum, uvl *uva, uvl *uvb, int va, mag01 = fixmul(mag01, Stretch_scale_y); if (mag01 < F1_0/1024 ) - editor_status("U, V bogosity in segment #%i, probably on side #%i. CLEAN UP YOUR MESS!", segp-Segments, sidenum); + editor_status("U, V bogosity in segment #%i, probably on side #%i. CLEAN UP YOUR MESS!", SEGMENT_NUMBER(segp), sidenum); else { vm_vec_sub(&tvec,&Vertices[v2],&Vertices[v1]); uvls[(vhi+1)%4].u = uvhi.u + @@ -1008,7 +1008,7 @@ void fix_bogus_uvs_on_side1(segment *sp, int sidenum, int uvonly_flag) side *sidep = &sp->sides[sidenum]; if ((sidep->uvls[0].u == 0) && (sidep->uvls[1].u == 0) && (sidep->uvls[2].u == 0)) { - mprintf((0,"Found bogus segment %i, side %i\n", sp-Segments, sidenum)); + mprintf((0, "Found bogus segment %i, side %i\n", SEGMENT_NUMBER(sp), sidenum)); med_propagate_tmaps_to_back_side(sp, sidenum, uvonly_flag); } } @@ -1092,9 +1092,9 @@ void med_propagate_tmaps_to_segments(segment *base_seg,segment *con_seg, int uv_ { int s; -// mprintf((0,"Propagating segments from %i to %i\n",base_seg-Segments,con_seg-Segments)); +// mprintf((0, "Propagating segments from %i to %i\n", SEGMENT_NUMBER(base_seg), SEGMENT_NUMBER(con_seg))); for (s=0; schildren[s] == con_seg-Segments) + if (base_seg->children[s] == SEGMENT_NUMBER(con_seg)) propagate_tmaps_to_segment_sides(base_seg, s, con_seg, find_connect_side(base_seg, con_seg), uv_only_flag); s2s2(con_seg)->static_light = s2s2(base_seg)->static_light; @@ -1164,7 +1164,7 @@ void cast_light_from_side(segment *segp, int light_side, fix light_intensity, in compute_segment_center(&segment_center, segp); -//mprintf((0, "From [%i %i %7.3f]: ", segp-Segments, light_side, f2fl(light_intensity))); +//mprintf((0, "From [%i %i %7.3f]: ", SEGMENT_NUMBER(segp), light_side, f2fl(light_intensity))); // Do for four lights, one just inside each corner of side containing light. for (lightnum=0; lightnum<4; lightnum++) { @@ -1206,7 +1206,7 @@ void cast_light_from_side(segment *segp, int light_side, fix light_intensity, in side *rsidep = &rsegp->sides[sidenum]; vms_vector *side_normalp = &rsidep->normals[0]; // kinda stupid? always use vector 0. -//mprintf((0, "[%i %i], ", rsegp-Segments, sidenum)); +//mprintf((0, "[%i %i], ", SEGMENT_NUMBER(rsegp), sidenum)); for (vertnum=0; vertnum<4; vertnum++) { fix distance_to_point, light_at_point, light_dot; vms_vector vert_location, vector_to_light; @@ -1239,10 +1239,10 @@ void cast_light_from_side(segment *segp, int light_side, fix light_intensity, in vm_vec_scale_add(&vert_location_1, &vert_location, &r_vector_to_center, inverse_segment_magnitude); vert_location = vert_location_1; -//if ((segp-Segments == 199) && (rsegp-Segments==199)) +//if ((SEGMENT_NUMBER(segp) == 199) && (SEGMENT_NUMBER(rsegp) == 199)) // Int3(); -// Seg0 = segp-Segments; -// Seg1 = rsegp-Segments; +// Seg0 = SEGMENT_NUMBER(segp); +// Seg1 = SEGMENT_NUMBER(rsegp); if (!quick_light) { int hash_value = Side_to_verts[sidenum][vertnum]; hash_info *hashp = &fvi_cache[hash_value]; @@ -1268,7 +1268,7 @@ void cast_light_from_side(segment *segp, int light_side, fix light_intensity, in hashp->flag = 1; fq.p0 = &light_location; - fq.startseg = segp-Segments; + fq.startseg = SEGMENT_NUMBER(segp); fq.p1 = &vert_location; fq.rad = 0; fq.thisobjnum = -1; @@ -1378,7 +1378,7 @@ void cast_light_from_side_to_center(segment *segp, int light_side, fix light_int fvi_info hit_data; fq.p0 = &light_location; - fq.startseg = segp-Segments; + fq.startseg = SEGMENT_NUMBER(segp); fq.p1 = &r_segment_center; fq.rad = 0; fq.thisobjnum = -1; diff --git a/main/fuelcen.c b/main/fuelcen.c index b2d557ca..54c78ede 100644 --- a/main/fuelcen.c +++ b/main/fuelcen.c @@ -128,7 +128,7 @@ void reset_all_robot_centers() // Turns a segment into a fully charged up fuel center... void fuelcen_create( segment *segp) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); int station_type; @@ -158,7 +158,7 @@ void fuelcen_create( segment *segp) Station[Num_fuelcenters].Type = station_type; Station[Num_fuelcenters].MaxCapacity = Fuelcen_max_amount; Station[Num_fuelcenters].Capacity = Station[Num_fuelcenters].MaxCapacity; - Station[Num_fuelcenters].segnum = seg2p-Segment2s; + Station[Num_fuelcenters].segnum = SEGMENT_NUMBER(segp); Station[Num_fuelcenters].Timer = -1; Station[Num_fuelcenters].Flag = 0; // Station[Num_fuelcenters].NextRobotType = -1; @@ -178,7 +178,7 @@ void fuelcen_create( segment *segp) // This function is separate from other fuelcens because we don't want values reset. void matcen_create( segment *segp) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); int station_type = seg2p->special; @@ -194,20 +194,20 @@ void matcen_create( segment *segp) Station[Num_fuelcenters].Capacity = i2f(Difficulty_level + 3); Station[Num_fuelcenters].MaxCapacity = Station[Num_fuelcenters].Capacity; - Station[Num_fuelcenters].segnum = seg2p-Segment2s; + Station[Num_fuelcenters].segnum = SEGMENT_NUMBER(segp); Station[Num_fuelcenters].Timer = -1; Station[Num_fuelcenters].Flag = 0; // Station[Num_fuelcenters].NextRobotType = -1; // Station[Num_fuelcenters].last_created_obj=NULL; // Station[Num_fuelcenters].last_created_sig = -1; - compute_segment_center(&Station[Num_fuelcenters].Center, &Segments[seg2p-Segment2s] ); + compute_segment_center( &Station[Num_fuelcenters].Center, segp ); seg2p->matcen_num = Num_robot_centers; Num_robot_centers++; RobotCenters[seg2p->matcen_num].hit_points = MATCEN_HP_DEFAULT; RobotCenters[seg2p->matcen_num].interval = MATCEN_INTERVAL_DEFAULT; - RobotCenters[seg2p->matcen_num].segnum = seg2p-Segment2s; + RobotCenters[seg2p->matcen_num].segnum = SEGMENT_NUMBER(segp); RobotCenters[seg2p->matcen_num].fuelcen_num = Num_fuelcenters; //mprintf( (0, "Segment %d is assigned to be fuel center %d.\n", Station[Num_fuelcenters].segnum, Num_fuelcenters )); @@ -218,7 +218,7 @@ void matcen_create( segment *segp) // Adds a segment that already is a special type into the Station array. void fuelcen_activate( segment * segp, int station_type ) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); seg2p->special = station_type; @@ -288,7 +288,7 @@ void trigger_matcen(int segnum) // Deletes the segment point entry in the FuelCenter list. void fuelcen_delete( segment * segp ) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); int i, j; Restart: ; @@ -296,7 +296,7 @@ Restart: ; seg2p->special = 0; for (i=0; ispecial ) { //--unused-- case SEGMENT_IS_NOTHING: //--unused-- return; @@ -1136,7 +1136,7 @@ extern void multi_send_capture_bonus (char); void fuelcen_check_for_goal(segment *segp) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); Assert( segp != NULL ); Assert (Game_mode & GM_CAPTURE); @@ -1166,7 +1166,7 @@ void fuelcen_check_for_goal(segment *segp) void fuelcen_check_for_hoard_goal(segment *segp) { - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); Assert( segp != NULL ); Assert (Game_mode & GM_HOARD); diff --git a/main/fvi.c b/main/fvi.c index eea7c13d..a1973473 100644 --- a/main/fvi.c +++ b/main/fvi.c @@ -287,10 +287,10 @@ int check_line_to_face(vms_vector *newp,vms_vector *p0,vms_vector *p1,segment *s norm = seg->sides[side].normals[facenum]; #endif - if ((seg-Segments)==-1) + if (SEGMENT_NUMBER(seg) == -1) Error("segnum == -1 in check_line_to_face()"); - create_abs_vertex_lists(&num_faces, vertex_list, seg - Segments, side, __FILE__, __LINE__); + create_abs_vertex_lists(&num_faces, vertex_list, SEGMENT_NUMBER(seg), side, __FILE__, __LINE__); //use lowest point number if (num_faces==2) { @@ -387,10 +387,10 @@ int special_check_line_to_face(vms_vector *newp,vms_vector *p0,vms_vector *p1,se //calc some basic stuff - if ((seg-Segments)==-1) + if ((SEGMENT_NUMBER(seg))==-1) Error("segnum == -1 in special_check_line_to_face()"); - create_abs_vertex_lists(&num_faces, vertex_list, seg - Segments, side, __FILE__, __LINE__); + create_abs_vertex_lists(&num_faces, vertex_list, SEGMENT_NUMBER(seg), side, __FILE__, __LINE__); vm_vec_sub(&move_vec,p1,p0); //figure out which edge(s) to check against @@ -1158,7 +1158,7 @@ void find_hitpoint_uv(fix *u,fix *v,fix *l,vms_vector *pnt,segment *seg,int side { vms_vector_array *pnt_array; vms_vector_array normal_array; - int segnum = seg-Segments; + int segnum = SEGMENT_NUMBER(seg); int num_faces; int biggest,ii,jj; side *side = &seg->sides[sidenum]; @@ -1315,10 +1315,10 @@ int sphere_intersects_wall(vms_vector *pnt,int segnum,fix rad) //did we go through this wall/door? - if ((seg-Segments)==-1) + if (SEGMENT_NUMBER(seg) == -1) Error("segnum == -1 in sphere_intersects_wall()"); - create_abs_vertex_lists(&num_faces, vertex_list, seg - Segments, side, __FILE__, __LINE__); + create_abs_vertex_lists(&num_faces, vertex_list, SEGMENT_NUMBER(seg), side, __FILE__, __LINE__); face_hit_type = check_sphere_to_face( pnt,&seg->sides[side], face,((num_faces==1)?4:3),rad,vertex_list); diff --git a/main/gamemine.c b/main/gamemine.c index a123edd1..094dd46a 100644 --- a/main/gamemine.c +++ b/main/gamemine.c @@ -846,12 +846,12 @@ int load_mine_data(CFILE *LoadFile) Groupside[i] = mine_editor.Groupside[i]; if ( mine_editor.current_seg != -1 ) - Cursegp = mine_editor.current_seg + Segments; + Cursegp = &Segments[mine_editor.current_seg]; else Cursegp = NULL; if (mine_editor.Markedsegp != -1 ) - Markedsegp = mine_editor.Markedsegp + Segments; + Markedsegp = &Segments[mine_editor.Markedsegp]; else Markedsegp = NULL; diff --git a/main/gameseg.c b/main/gameseg.c index 930e28e1..916d8593 100644 --- a/main/gameseg.c +++ b/main/gameseg.c @@ -86,7 +86,7 @@ void compute_segment_center(vms_vector *vp,segment *sp) int find_connect_side(segment *base_seg, segment *con_seg) { int s; - short base_seg_num = base_seg - Segments; + short base_seg_num = SEGMENT_NUMBER(base_seg); short *childs = con_seg->children; for (s=0; sspecial == SEGMENT_IS_ROBOTMAKER ) { paging_touch_vclip(&Vclip[VCLIP_MORPHING_ROBOT]); @@ -310,7 +310,7 @@ void paging_touch_segment(segment * segp) { int sn; int objnum; - segment2 *seg2p = &Segment2s[segp-Segments]; + segment2 *seg2p = s2s2(segp); if ( seg2p->special == SEGMENT_IS_ROBOTMAKER ) paging_touch_robot_maker(segp); diff --git a/main/render.c b/main/render.c index 2e98d4ac..ff7de5dd 100644 --- a/main/render.c +++ b/main/render.c @@ -499,7 +499,7 @@ void render_side(segment *segp, int sidenum) // -- Old, slow way -- else // -- Old, slow way -- vm_vec_normalized_dir(&tvec, &Viewer_eye, &Vertices[segp->verts[Side_to_verts[sidenum][0]]]); - get_side_verts(vertnum_list,segp-Segments,sidenum); + get_side_verts(vertnum_list, SEGMENT_NUMBER(segp), sidenum); v_dot_n0 = vm_vec_dot(&tvec, &normals[0]); // -- flare creates point -- { @@ -517,7 +517,7 @@ void render_side(segment *segp, int sidenum) // -- flare creates point -- // -- flare creates point -- find_hitpoint_uv( &u, &v, &l, hit_point, segp, sidenum, 0); // last parm means always use face 0. // -- flare creates point -- -// -- flare creates point -- get_side_verts(vertnum_list, segp-Segments, sidenum); +// -- flare creates point -- get_side_verts(vertnum_list, SEGMENT_NUMBER(segp), sidenum); // -- flare creates point -- // -- flare creates point -- g3_rotate_point(&Segment_points[MAX_VERTICES-1], hit_point); // -- flare creates point -- @@ -535,7 +535,7 @@ void render_side(segment *segp, int sidenum) // -- flare creates point -- tri_uvls[2].v = v; // -- flare creates point -- tri_uvls[2].l = F1_0; // -- flare creates point -- -// -- flare creates point -- render_face(segp-Segments, sidenum, 3, tri_verts, sidep->tmap_num, sidep->tmap_num2, tri_uvls, &normals[0]); +// -- flare creates point -- render_face(SEGMENT_NUMBER(segp), sidenum, 3, tri_verts, sidep->tmap_num, sidep->tmap_num2, tri_uvls, &normals[0]); // -- flare creates point -- } // -- flare creates point -- // -- flare creates point -- return; @@ -543,9 +543,9 @@ void render_side(segment *segp, int sidenum) // -- flare creates point -- } if (v_dot_n0 >= 0) { - render_face(segp-Segments, sidenum, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); + render_face(SEGMENT_NUMBER(segp), sidenum, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); #ifdef EDITOR - check_face(segp-Segments, sidenum, 0, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 0, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } } else { @@ -556,7 +556,7 @@ void render_side(segment *segp, int sidenum) else vm_vec_normalized_dir_quick(&tvec, &Viewer_eye, &Vertices[segp->verts[Side_to_verts[sidenum][0]]]); - get_side_verts(vertnum_list,segp-Segments,sidenum); + get_side_verts(vertnum_list, SEGMENT_NUMBER(segp), sidenum); v_dot_n0 = vm_vec_dot(&tvec, &normals[0]); @@ -577,7 +577,7 @@ void render_side(segment *segp, int sidenum) } // Determine whether to detriangulate side: (speed hack, assumes Tulate_min_ratio == F1_0*2, should fixmul(min_dot, Tulate_min_ratio)) - if (Detriangulation_on && ((min_dot+F1_0/256 > max_dot) || ((Viewer->segnum != segp-Segments) && (min_dot > Tulate_min_dot) && (max_dot < min_dot*2)))) { + if (Detriangulation_on && ((min_dot+F1_0/256 > max_dot) || ((Viewer->segnum != SEGMENT_NUMBER(segp)) && (min_dot > Tulate_min_dot) && (max_dot < min_dot*2)))) { fix n0_dot_n1; // The other detriangulation code doesn't deal well with badly non-planar sides. @@ -585,47 +585,47 @@ void render_side(segment *segp, int sidenum) if (n0_dot_n1 < Min_n0_n1_dot) goto im_so_ashamed; - render_face(segp-Segments, sidenum, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); + render_face(SEGMENT_NUMBER(segp), sidenum, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); #ifdef EDITOR - check_face(segp-Segments, sidenum, 0, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 0, 4, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } else { im_so_ashamed: ; if (sidep->type == SIDE_IS_TRI_02) { if (v_dot_n0 >= 0) { - render_face(segp-Segments, sidenum, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); + render_face(SEGMENT_NUMBER(segp), sidenum, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls, wid_flags); #ifdef EDITOR - check_face(segp-Segments, sidenum, 0, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 0, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } if (v_dot_n1 >= 0) { temp_uvls[0] = sidep->uvls[0]; temp_uvls[1] = sidep->uvls[2]; temp_uvls[2] = sidep->uvls[3]; vertnum_list[1] = vertnum_list[2]; vertnum_list[2] = vertnum_list[3]; // want to render from vertices 0, 2, 3 on side - render_face(segp-Segments, sidenum, 3, &vertnum_list[0], sidep->tmap_num, sidep->tmap_num2, temp_uvls, wid_flags); + render_face(SEGMENT_NUMBER(segp), sidenum, 3, &vertnum_list[0], sidep->tmap_num, sidep->tmap_num2, temp_uvls, wid_flags); #ifdef EDITOR - check_face(segp-Segments, sidenum, 1, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 1, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } } else if (sidep->type == SIDE_IS_TRI_13) { if (v_dot_n1 >= 0) { - render_face(segp-Segments, sidenum, 3, &vertnum_list[1], sidep->tmap_num, sidep->tmap_num2, &sidep->uvls[1], wid_flags); // rendering 1,2,3, so just skip 0 + render_face(SEGMENT_NUMBER(segp), sidenum, 3, &vertnum_list[1], sidep->tmap_num, sidep->tmap_num2, &sidep->uvls[1], wid_flags); // rendering 1,2,3, so just skip 0 #ifdef EDITOR - check_face(segp-Segments, sidenum, 1, 3, &vertnum_list[1], sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 1, 3, &vertnum_list[1], sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } if (v_dot_n0 >= 0) { temp_uvls[0] = sidep->uvls[0]; temp_uvls[1] = sidep->uvls[1]; temp_uvls[2] = sidep->uvls[3]; vertnum_list[2] = vertnum_list[3]; // want to render from vertices 0,1,3 - render_face(segp-Segments, sidenum, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, temp_uvls, wid_flags); + render_face(SEGMENT_NUMBER(segp), sidenum, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, temp_uvls, wid_flags); #ifdef EDITOR - check_face(segp-Segments, sidenum, 0, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); + check_face(SEGMENT_NUMBER(segp), sidenum, 0, 3, vertnum_list, sidep->tmap_num, sidep->tmap_num2, sidep->uvls); #endif } } else - Error("Illegal side type in render_side, type = %i, segment # = %li, side # = %i\n", sidep->type, segp-Segments, sidenum); + Error("Illegal side type in render_side, type = %i, segment # = %li, side # = %i\n", sidep->type, SEGMENT_NUMBER(segp), sidenum); } } diff --git a/main/segment.h b/main/segment.h index ddd2b524..97c3cbcc 100644 --- a/main/segment.h +++ b/main/segment.h @@ -173,15 +173,16 @@ extern segment Segments[]; extern segment2 Segment2s[]; extern int Num_segments; extern int Num_vertices; +#define SEGMENT_NUMBER(seg) ((int)((seg) - Segments)) // Get pointer to the segment2 for the given segment pointer -#define s2s2(segp) (&Segment2s[(segp) - Segments]) +#define s2s2(segp) (&Segment2s[SEGMENT_NUMBER(segp)]) extern sbyte Side_to_verts[MAX_SIDES_PER_SEGMENT][4]; // Side_to_verts[my_side] is list of vertices forming side my_side. extern int Side_to_verts_int[MAX_SIDES_PER_SEGMENT][4]; // Side_to_verts[my_side] is list of vertices forming side my_side. extern char Side_opposite[]; // Side_opposite[my_side] returns side opposite cube from my_side. -#define SEG_PTR_2_NUM(segptr) (Assert((unsigned) (segptr-Segments)sides[side].tmap_num].flags & TMI_FORCE_FIELD)) { vms_vector pos; compute_center_point_on_side(&pos, segp, side ); - digi_link_sound_to_pos( SOUND_FORCEFIELD_OFF, segp-Segments, side, &pos, 0, F1_0 ); + digi_link_sound_to_pos( SOUND_FORCEFIELD_OFF, SEGMENT_NUMBER(segp), side, &pos, 0, F1_0 ); Walls[segp->sides[side].wall_num].type = new_wall_type; - digi_kill_sound_linked_to_segment(segp-Segments,side,SOUND_FORCEFIELD_HUM); + digi_kill_sound_linked_to_segment(SEGMENT_NUMBER(segp), side, SOUND_FORCEFIELD_HUM); if (cside > -1 && csegp->sides[cside].wall_num > -1) { Walls[csegp->sides[cside].wall_num].type = new_wall_type; - digi_kill_sound_linked_to_segment(csegp-Segments, cside, SOUND_FORCEFIELD_HUM); + digi_kill_sound_linked_to_segment(SEGMENT_NUMBER(csegp), cside, SOUND_FORCEFIELD_HUM); } } else @@ -307,7 +307,7 @@ int do_change_walls(sbyte trigger_num) if ((TmapInfo[segp->sides[side].tmap_num].flags & TMI_FORCE_FIELD)) { vms_vector pos; compute_center_point_on_side(&pos, segp, side ); - digi_link_sound_to_pos(SOUND_FORCEFIELD_HUM,segp-Segments,side,&pos,1, F1_0/2); + digi_link_sound_to_pos(SOUND_FORCEFIELD_HUM, SEGMENT_NUMBER(segp), side, &pos, 1, F1_0/2); Walls[segp->sides[side].wall_num].type = new_wall_type; if (cside > -1 && csegp->sides[cside].wall_num > -1) Walls[csegp->sides[cside].wall_num].type = new_wall_type; @@ -398,7 +398,7 @@ void do_il_off(sbyte trigger_num) trigger_num, Triggers[trigger_num].seg[i], Triggers[trigger_num].side[i])); compute_center_point_on_side(&cp, seg, side ); - digi_link_sound_to_pos( SOUND_WALL_REMOVED, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( SOUND_WALL_REMOVED, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } } @@ -617,7 +617,7 @@ void check_trigger(segment *seg, short side, short objnum,int shot) if ((objnum == Players[Player_num].objnum) || ((Objects[objnum].type == OBJ_ROBOT) && (Robot_info[Objects[objnum].id].companion))) { if ( Newdemo_state == ND_STATE_RECORDING ) - newdemo_record_trigger( seg-Segments, side, objnum,shot); + newdemo_record_trigger( SEGMENT_NUMBER(seg), side, objnum, shot ); wall_num = seg->sides[side].wall_num; if ( wall_num == -1 ) return; diff --git a/main/wall.c b/main/wall.c index eeb54437..41a220b2 100644 --- a/main/wall.c +++ b/main/wall.c @@ -151,7 +151,7 @@ int wall_is_doorway ( segment * seg, int side ) //--Covered by macro if (seg->sides[side].wall_num == -1) //--Covered by macro return WID_NO_WALL; - Assert(seg-Segments>=0 && seg-Segments<=Highest_segment_index); + Assert(SEGMENT_NUMBER(seg) >= 0 && SEGMENT_NUMBER(seg) <= Highest_segment_index); Assert(side>=0 && side<6); type = Walls[seg->sides[side].wall_num].type; @@ -233,7 +233,7 @@ void wall_reset(segment *seg, int side) return; } - Walls[i].segnum = seg-Segments; + Walls[i].segnum = SEGMENT_NUMBER(seg); Walls[i].sidenum = side; Walls[i].type = WALL_NORMAL; Walls[i].flags = 0; @@ -255,12 +255,12 @@ void wall_set_tmap_num(segment *seg,int side,segment *csegp,int cside,int anim_n if (anim->flags & WCF_TMAP1) { seg->sides[side].tmap_num = csegp->sides[cside].tmap_num = tmap; if ( Newdemo_state == ND_STATE_RECORDING ) - newdemo_record_wall_set_tmap_num1(seg-Segments,side,csegp-Segments,cside,tmap); + newdemo_record_wall_set_tmap_num1(SEGMENT_NUMBER(seg), side, SEGMENT_NUMBER(csegp), cside, tmap); } else { Assert(tmap!=0 && seg->sides[side].tmap_num2!=0); seg->sides[side].tmap_num2 = csegp->sides[cside].tmap_num2 = tmap; if ( Newdemo_state == ND_STATE_RECORDING ) - newdemo_record_wall_set_tmap_num2(seg-Segments,side,csegp-Segments,cside,tmap); + newdemo_record_wall_set_tmap_num2(SEGMENT_NUMBER(seg), side, SEGMENT_NUMBER(csegp), cside, tmap); } } @@ -287,7 +287,7 @@ void blast_blastable_wall(segment *seg, int side) //if this is an exploding wall, explode it if (WallAnims[Walls[seg->sides[side].wall_num].clip_num].flags & WCF_EXPLODES) - explode_wall(seg-Segments,side); + explode_wall(SEGMENT_NUMBER(seg), side); else { //if not exploding, set final frame, and make door passable a = Walls[seg->sides[side].wall_num].clip_num; @@ -306,7 +306,7 @@ void blast_blastable_wall(segment *seg, int side) void wall_destroy(segment *seg, int side) { Assert(seg->sides[side].wall_num != -1); - Assert(seg-Segments != 0); + Assert(SEGMENT_NUMBER(seg) != 0); if (Walls[seg->sides[side].wall_num].type == WALL_BLASTABLE) blast_blastable_wall( seg, side ); @@ -348,7 +348,7 @@ void wall_damage(segment *seg, int side, fix damage) blast_blastable_wall( seg, side ); #ifdef NETWORK if (Game_mode & GM_MULTI) - multi_send_door_open(seg-Segments, side,Walls[seg->sides[side].wall_num].flags); + multi_send_door_open(SEGMENT_NUMBER(seg), side, Walls[seg->sides[side].wall_num].flags); #endif } else @@ -432,10 +432,10 @@ void wall_open_door(segment *seg, int side) d->front_wallnum[0] = seg->sides[side].wall_num; d->back_wallnum[0] = cwall_num; - Assert( seg-Segments != -1); + Assert( SEGMENT_NUMBER(seg) != -1 ); if (Newdemo_state == ND_STATE_RECORDING) { - newdemo_record_door_opening(seg-Segments, side); + newdemo_record_door_opening(SEGMENT_NUMBER(seg), side); } if (w->linked_wall != -1) { @@ -470,7 +470,7 @@ void wall_open_door(segment *seg, int side) vms_vector cp; compute_center_point_on_side(&cp, seg, side ); if (WallAnims[w->clip_num].open_sound > -1 ) - digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } } @@ -543,14 +543,14 @@ void start_wall_cloak(segment *seg, int side) d->front_wallnum = seg->sides[side].wall_num; d->back_wallnum = cwall_num; - Assert( seg-Segments != -1); + Assert( SEGMENT_NUMBER(seg) != -1 ); Assert(w->linked_wall == -1); if ( Newdemo_state != ND_STATE_PLAYBACK ) { vms_vector cp; compute_center_point_on_side(&cp, seg, side ); - digi_link_sound_to_pos( SOUND_WALL_CLOAK_ON, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( SOUND_WALL_CLOAK_ON, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } for (i=0;i<4;i++) { @@ -630,14 +630,14 @@ void start_wall_decloak(segment *seg, int side) d->front_wallnum = seg->sides[side].wall_num; d->back_wallnum = csegp->sides[Connectside].wall_num; - Assert( seg-Segments != -1); + Assert( SEGMENT_NUMBER(seg) != -1 ); Assert(w->linked_wall == -1); if ( Newdemo_state != ND_STATE_PLAYBACK ) { vms_vector cp; compute_center_point_on_side(&cp, seg, side ); - digi_link_sound_to_pos( SOUND_WALL_CLOAK_OFF, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( SOUND_WALL_CLOAK_OFF, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } for (i=0;i<4;i++) { @@ -717,11 +717,11 @@ int is_door_free(segment *seg,int side) //it pokes into the connecting seg for (objnum=seg->objects;objnum!=-1;objnum=Objects[objnum].next) - if (Objects[objnum].type!=OBJ_WEAPON && Objects[objnum].type!=OBJ_FIREBALL && check_poke(objnum,seg-Segments,side)) + if (Objects[objnum].type != OBJ_WEAPON && Objects[objnum].type != OBJ_FIREBALL && check_poke(objnum, SEGMENT_NUMBER(seg), side)) return 0; //not free for (objnum=csegp->objects;objnum!=-1;objnum=Objects[objnum].next) - if (Objects[objnum].type!=OBJ_WEAPON && Objects[objnum].type!=OBJ_FIREBALL && check_poke(objnum,csegp-Segments,Connectside)) + if (Objects[objnum].type != OBJ_WEAPON && Objects[objnum].type != OBJ_FIREBALL && check_poke(objnum, SEGMENT_NUMBER(csegp), Connectside)) return 0; //not free return 1; //doorway is free! @@ -795,10 +795,10 @@ void wall_close_door(segment *seg, int side) d->front_wallnum[0] = seg->sides[side].wall_num; d->back_wallnum[0] = cwall_num; - Assert( seg-Segments != -1); + Assert( SEGMENT_NUMBER(seg) != -1 ); if (Newdemo_state == ND_STATE_RECORDING) { - newdemo_record_door_opening(seg-Segments, side); + newdemo_record_door_opening(SEGMENT_NUMBER(seg), side); } if (w->linked_wall != -1) { @@ -814,7 +814,7 @@ void wall_close_door(segment *seg, int side) vms_vector cp; compute_center_point_on_side(&cp, seg, side ); if (WallAnims[w->clip_num].open_sound > -1 ) - digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( WallAnims[w->clip_num].open_sound, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } } @@ -950,7 +950,7 @@ void do_door_close(int door_num) vms_vector cp; compute_center_point_on_side(&cp, seg, side ); if (WallAnims[w->clip_num].close_sound > -1 ) - digi_link_sound_to_pos( WallAnims[Walls[seg->sides[side].wall_num].clip_num].close_sound, seg-Segments, side, &cp, 0, F1_0 ); + digi_link_sound_to_pos( WallAnims[Walls[seg->sides[side].wall_num].clip_num].close_sound, SEGMENT_NUMBER(seg), side, &cp, 0, F1_0 ); } d->time += FrameTime; @@ -1049,7 +1049,7 @@ int wall_hit_process(segment *seg, int side, fix damage, int playernum, object * wall *w; fix show_message; - Assert (seg-Segments != -1); + Assert( SEGMENT_NUMBER(seg) != -1 ); // If it is not a "wall" then just return. if ( seg->sides[side].wall_num < 0 ) @@ -1058,7 +1058,7 @@ int wall_hit_process(segment *seg, int side, fix damage, int playernum, object * w = &Walls[seg->sides[side].wall_num]; if ( Newdemo_state == ND_STATE_RECORDING ) - newdemo_record_wall_hit_process( seg-Segments, side, damage, playernum ); + newdemo_record_wall_hit_process( SEGMENT_NUMBER(seg), side, damage, playernum ); if (w->type == WALL_BLASTABLE) { if (obj->ctype.laser_info.parent_type == OBJ_PLAYER) @@ -1108,7 +1108,7 @@ int wall_hit_process(segment *seg, int side, fix damage, int playernum, object * if (w->type == WALL_DOOR) { - if ((w->flags & WALL_DOOR_LOCKED ) && !(special_boss_opening_allowed(seg-Segments, side)) ) { + if ( (w->flags & WALL_DOOR_LOCKED ) && !(special_boss_opening_allowed(SEGMENT_NUMBER(seg), side)) ) { if ( playernum==Player_num ) if (show_message) HUD_init_message(TXT_CANT_OPEN_DOOR); @@ -1120,7 +1120,7 @@ int wall_hit_process(segment *seg, int side, fix damage, int playernum, object * wall_open_door(seg, side); #ifdef NETWORK if (Game_mode & GM_MULTI) - multi_send_door_open(seg-Segments, side,w->flags); + multi_send_door_open(SEGMENT_NUMBER(seg), side, w->flags); #endif } return WHP_DOOR; @@ -1137,9 +1137,9 @@ void wall_toggle(segment *seg, int side) { int wall_num; - if (seg - Segments > Highest_segment_index) + if (SEGMENT_NUMBER(seg) > Highest_segment_index) { - Warning("Can't toggle side %d of segment %d - nonexistent segment!\n", side, seg-Segments); + Warning("Can't toggle side %d of segment %d - nonexistent segment!\n", side, SEGMENT_NUMBER(seg)); return; } Assert( side < MAX_SIDES_PER_SEGMENT ); @@ -1152,7 +1152,7 @@ void wall_toggle(segment *seg, int side) } if ( Newdemo_state == ND_STATE_RECORDING ) - newdemo_record_wall_toggle(seg-Segments, side ); + newdemo_record_wall_toggle( SEGMENT_NUMBER(seg), side ); if (Walls[wall_num].type == WALL_BLASTABLE) wall_destroy(seg, side); @@ -1468,7 +1468,7 @@ void kill_stuck_objects(int wallnum) // -- unused -- object *objp = &Objects[Stuck_objects[i].objnum]; // -- unused -- // -- unused -- if ((objp->type == OBJ_WEAPON) && (objp->id == FLARE_ID)) { -// -- unused -- if (Walls[Stuck_objects[i].wallnum].segnum == segp-Segments) +// -- unused -- if (Walls[Stuck_objects[i].wallnum].segnum == SEGMENT_NUMBER(segp)) // -- unused -- if (Walls[Stuck_objects[i].wallnum].sidenum == sidenum) // -- unused -- return OBJECT_NUMBER(objp); // -- unused -- } @@ -1541,7 +1541,7 @@ void bng_process_segment(object *objp, fix damage, segment *segp, int depth, sby compute_center_point_on_side(&pnt, segp, sidenum); dist = vm_vec_dist_quick(&pnt, &objp->pos); if (dist < damage/2) { - dist = find_connected_distance(&pnt, segp-Segments, &objp->pos, objp->segnum, MAX_BLAST_GLASS_DEPTH, WID_RENDPAST_FLAG); + dist = find_connected_distance(&pnt, SEGMENT_NUMBER(segp), &objp->pos, objp->segnum, MAX_BLAST_GLASS_DEPTH, WID_RENDPAST_FLAG); if ((dist > 0) && (dist < damage/2)) check_effect_blowup(segp, sidenum, &pnt, &Objects[objp->ctype.laser_info.parent_num], 1); } -- 2.39.2