From 8a6839e8a19a73d1ed8e460b937cc6e8097bb919 Mon Sep 17 00:00:00 2001 From: zicodxx Date: Thu, 30 Jun 2011 12:23:38 +0200 Subject: [PATCH] changed variables and pointer carrying vertex indexes from short to int to handle levels with over 900 segments properly --- CHANGELOG.txt | 4 ++++ editor/group.c | 6 +++--- editor/ksegsize.c | 2 +- editor/meddraw.c | 28 ++++++++++++++-------------- editor/segment.c | 6 +++--- editor/seguvs.c | 4 ++-- include/editor/editor.h | 6 +++--- main/automap.c | 34 +++++++++++++++++----------------- main/fireball.c | 2 +- main/gamecntl.c | 1 - main/gameseg.c | 6 +++--- main/gameseg.h | 2 +- main/lighting.c | 12 ++++++------ main/render.c | 16 ++++++++-------- main/render.h | 4 ++-- main/segment.h | 8 ++++---- 16 files changed, 72 insertions(+), 69 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index af5ab4423..293a367a3 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20110630 +-------- +editor/group.c, editor/ksegsize.c, editor/meddraw.c, editor/segment.c, editor/seguvs.c, include/editor/editor.h, main/automap.c, main/fireball.c, main/gamecntl.c, main/gameseg.c, main/gameseg.h, main/lighting.c, main/render.c, main/render.h, main/segment.h: changed variables and pointer carrying vertex indexes from short to int to handle levels with over 900 segments properly + 20110628 -------- main/state.c: Fixed possible memory corruption when saving Current_mission_filename which is not necessarily a 9 byte long allocated string; Bit safer string handling with snprintf; Fixed set but unused variables like a boss diff --git a/editor/group.c b/editor/group.c index 572464e37..0712851b0 100644 --- a/editor/group.c +++ b/editor/group.c @@ -443,7 +443,7 @@ void duplicate_group(sbyte *vertex_ids, short *segment_ids, int num_segments) { int v,s,ss,new_vertex_id,new_segment_id,sidenum; short new_segment_ids[MAX_SEGMENTS]; - short new_vertex_ids[MAX_VERTICES]; // If new_vertex_ids[v] != -1, then vertex v has been remapped to new_vertex_ids[v] + int new_vertex_ids[MAX_VERTICES]; // If new_vertex_ids[v] != -1, then vertex v has been remapped to new_vertex_ids[v] short new_object_ids[MAX_OBJECTS]; // duplicate vertices @@ -1046,7 +1046,7 @@ static char current_tmap_list[MAX_TEXTURES][13]; // and new_segment in that order, marking their file offset. // 2. Go through all the fields and fill in the offset, size, and sizeof // values in the headers. -int med_save_group( char *filename, short *vertex_ids, short *segment_ids, int num_vertices, int num_segments) +int med_save_group( char *filename, int *vertex_ids, short *segment_ids, int num_vertices, int num_segments) { PHYSFS_file * SaveFile; int header_offset, editor_offset, vertex_offset, segment_offset, texture_offset; @@ -1184,7 +1184,7 @@ static char old_tmap_list[MAX_TEXTURES][13]; // ----------------------------------------------------------------------------- // Load group will: //int med_load_group(char * filename) -int med_load_group( char *filename, short *vertex_ids, short *segment_ids, int *num_vertices, int *num_segments) +int med_load_group( char *filename, int *vertex_ids, short *segment_ids, int *num_vertices, int *num_segments) { int segnum, vertnum; char ErrorMessage[200]; diff --git a/editor/ksegsize.c b/editor/ksegsize.c index 99413f548..e57877dc9 100644 --- a/editor/ksegsize.c +++ b/editor/ksegsize.c @@ -45,7 +45,7 @@ void validate_modified_segments(void) v0 = Modified_vertices[v]; for (seg = 0; seg <= Highest_segment_index; seg++) { - short *vp = Segments[seg].verts; + int *vp = Segments[seg].verts; if (Segments[seg].segnum != -1) for (w=0; w v1) swap(v0,v1); @@ -301,7 +301,7 @@ int find_edge_num(int v0,int v1) int find_edge(int v0,int v1,seg_edge **edge_ptr) { long vv; - short hash,oldhash; + int hash,oldhash; int ret; vv = (v1<<16) + v0; @@ -363,7 +363,7 @@ void add_edge(int v0,int v1,ubyte type) //adds a segment's edges to the edge list void add_edges(segment *seg) { - short *svp; + int *svp; int nv; g3s_codes cc; @@ -428,7 +428,7 @@ void add_edges(segment *seg) // ---------------------------------------------------------------------------- void draw_trigger_side(segment *seg,int side) { - short *svp; + int *svp; int nv; g3s_codes cc; @@ -445,7 +445,7 @@ void draw_trigger_side(segment *seg,int side) // ---------------------------------------------------------------------------- void draw_wall_side(segment *seg,int side) { - short *svp; + int *svp; int nv; g3s_codes cc; @@ -721,7 +721,7 @@ void free_vert(int vert_num) void draw_coordinate_axes(void) { int i; - short Axes_verts[16]; + int Axes_verts[16]; vms_vector tvec,xvec,yvec,zvec; for (i=0; i<16; i++) diff --git a/editor/segment.c b/editor/segment.c index a60ebe4eb..c2f7af2f6 100644 --- a/editor/segment.c +++ b/editor/segment.c @@ -249,7 +249,7 @@ int ToggleBottom(void) // ---------------------------------------------------------------------------- // Return a pointer to the list of vertex indices for the current segment in vp and // the number of vertices in *nv. -void med_get_vertex_list(segment *s,int *nv,short **vp) +void med_get_vertex_list(segment *s,int *nv,int **vp) { *vp = s->verts; *nv = MAX_VERTICES_PER_SEGMENT; @@ -1018,7 +1018,7 @@ int med_attach_segment(segment *destseg, segment *newseg, int destside, int news // ------------------------------------------------------------------------------- // Delete a vertex, sort of. // Decrement the vertex count. If the count goes to 0, then the vertex is free (has been deleted). -void delete_vertex(short v) +void delete_vertex(int v) { Assert(v < MAX_VERTICES); // abort if vertex is not in array Vertices Assert(Vertex_active[v] >= 1); // abort if trying to delete a non-existent vertex @@ -1754,7 +1754,7 @@ void med_copy_segment(segment *dsp,segment *ssp) // ----------------------------------------------------------------------------- // Create coordinate axes in orientation of specified segment, stores vertices at *vp. -void create_coordinate_axes_from_segment(segment *sp,short *vertnums) +void create_coordinate_axes_from_segment(segment *sp,int *vertnums) { vms_matrix rotmat; vms_vector t; diff --git a/editor/seguvs.c b/editor/seguvs.c index ef3021006..a30075ae5 100644 --- a/editor/seguvs.c +++ b/editor/seguvs.c @@ -117,7 +117,7 @@ fix get_average_light_at_vertex(int vnum, short *segs) for (segnum=0; segnum<=Highest_segment_index; segnum++) { segment *segp = &Segments[segnum]; - short *vp = segp->verts; + int *vp = segp->verts; for (relvnum=0; relvnumhighest_edge_index = -1; am->max_edges = Num_segments*12; MALLOC(am->edges, Edge_info, am->max_edges); - MALLOC(am->drawingListBright, short, am->max_edges); + MALLOC(am->drawingListBright, int, am->max_edges); if (!am->edges || !am->drawingListBright) { if (am->edges) @@ -1077,7 +1077,7 @@ void draw_all_edges(automap *am) static int automap_find_edge(automap *am, int v0,int v1,Edge_info **edge_ptr) { long vv, evv; - short hash,oldhash; + int hash, oldhash; int ret, ev0, ev1; vv = (v1<<16) + v0; @@ -1087,8 +1087,8 @@ static int automap_find_edge(automap *am, int v0,int v1,Edge_info **edge_ptr) ret = -1; while (ret==-1) { - ev0 = (int)(am->edges[hash].verts[0]); - ev1 = (int)(am->edges[hash].verts[1]); + ev0 = am->edges[hash].verts[0]; + ev1 = am->edges[hash].verts[1]; evv = (ev1<<16)+ev0; if (am->edges[hash].num_faces == 0 ) ret=0; else if (evv == vv) ret=1; @@ -1108,10 +1108,10 @@ static int automap_find_edge(automap *am, int v0,int v1,Edge_info **edge_ptr) } -void add_one_edge( automap *am, short va, short vb, ubyte color, ubyte side, short segnum, int hidden, int grate, int no_fade ) { +void add_one_edge( automap *am, int va, int vb, ubyte color, ubyte side, int segnum, int hidden, int grate, int no_fade ) { int found; Edge_info *e; - short tmp; + int tmp; if ( am->num_edges >= am->max_edges) { // GET JOHN! (And tell him that his @@ -1165,11 +1165,11 @@ void add_one_edge( automap *am, short va, short vb, ubyte color, ubyte side, sho e->flags |= EF_NO_FADE; } -void add_one_unknown_edge( automap *am, short va, short vb ) +void add_one_unknown_edge( automap *am, int va, int vb ) { int found; Edge_info *e; - short tmp; + int tmp; if ( va > vb ) { tmp = va; @@ -1196,7 +1196,7 @@ void add_segment_edges(automap *am, segment *seg) int ttype,trigger_num; for (sn=0;snchildren[sn] == -1) { diff --git a/main/fireball.c b/main/fireball.c index 3af9ae4f2..fb8a4672f 100644 --- a/main/fireball.c +++ b/main/fireball.c @@ -1336,7 +1336,7 @@ void do_exploding_wall_frame() //now create all the next explosions for (e=old_count;eHighest_vertex_index) { @@ -639,7 +639,7 @@ g3s_lrgb compute_seg_dynamic_light(int segnum) { g3s_lrgb sum, seg_lrgb; segment *seg; - short *verts; + int *verts; seg = &Segments[segnum]; diff --git a/main/render.c b/main/render.c index 5b002b89b..102f96dd7 100644 --- a/main/render.c +++ b/main/render.c @@ -195,7 +195,7 @@ void flash_frame() // they are used for our hideously hacked in headlight system. // vp is a pointer to vertex ids. // tmap1, tmap2 are texture map ids. tmap2 is the pasty one. -void render_face(int segnum, int sidenum, int nv, short *vp, int tmap1, int tmap2, uvl *uvlp, int wid_flags) +void render_face(int segnum, int sidenum, int nv, int *vp, int tmap1, int tmap2, uvl *uvlp, int wid_flags) { // -- Using new headlight system...fix face_light; grs_bitmap *bm; @@ -347,7 +347,7 @@ void render_face(int segnum, int sidenum, int nv, short *vp, int tmap1, int tmap // ---------------------------------------------------------------------------- // Only called if editor active. // Used to determine which face was clicked on. -void check_face(int segnum, int sidenum, int facenum, int nv, short *vp, int tmap1, int tmap2, uvl *uvlp) +void check_face(int segnum, int sidenum, int facenum, int nv, int *vp, int tmap1, int tmap2, uvl *uvlp) { int i; @@ -400,7 +400,7 @@ extern fix Obj_light_xlate[16]; // Check for normal facing. If so, render faces on side dictated by sidep->type. void render_side(segment *segp, int sidenum) { - short vertnum_list[4]; + int vertnum_list[4]; side *sidep = &segp->sides[sidenum]; vms_vector tvec; fix v_dot_n0, v_dot_n1; @@ -721,7 +721,7 @@ void render_start_frame() } //Given a lit of point numbers, rotate any that haven't been rotated this frame -g3s_codes rotate_list(int nv,short *pointnumlist) +g3s_codes rotate_list(int nv,int *pointnumlist) { int i,pnum; g3s_point *pnt; @@ -761,7 +761,7 @@ g3s_codes rotate_list(int nv,short *pointnumlist) } //Given a lit of point numbers, project any that haven't been projected -void project_list(int nv,short *pointnumlist) +void project_list(int nv,int *pointnumlist) { int i,pnum; @@ -1028,14 +1028,14 @@ int Edge_to_sides[8][8][2] = { //given an edge, tell what side is on that edge -int find_seg_side(segment *seg,short *verts,int notside) +int find_seg_side(segment *seg,int *verts,int notside) { int i; int vv0=-1,vv1=-1; int side0,side1; int *eptr; int v0,v1; - short *vp; + int *vp; //@@ check_check(); @@ -1085,7 +1085,7 @@ int find_seg_side(segment *seg,short *verts,int notside) int find_joining_side_norms(vms_vector *norm0_0,vms_vector *norm0_1,vms_vector *norm1_0,vms_vector *norm1_1,vms_vector **pnt0,vms_vector **pnt1,segment *seg,int s0,int s1) { segment *seg0,*seg1; - short edge_verts[2]; + int edge_verts[2]; int notside0,notside1; int edgeside0,edgeside1; diff --git a/main/render.h b/main/render.h index 43eeac3c9..0af1f09b6 100644 --- a/main/render.h +++ b/main/render.h @@ -93,10 +93,10 @@ void render_start_frame(void); // Given a list of point numbers, rotate any that haven't been rotated // this frame -g3s_codes rotate_list(int nv, short *pointnumlist); +g3s_codes rotate_list(int nv, int *pointnumlist); // Given a list of point numbers, project any that haven't been projected -void project_list(int nv, short *pointnumlist); +void project_list(int nv, int *pointnumlist); extern void render_mine(int start_seg_num, fix eye_offset, int window_num); diff --git a/main/segment.h b/main/segment.h index 76ae83f34..bf536e7a4 100644 --- a/main/segment.h +++ b/main/segment.h @@ -99,7 +99,7 @@ typedef struct segment { #endif side sides[MAX_SIDES_PER_SEGMENT]; // 6 sides short children[MAX_SIDES_PER_SEGMENT]; // indices of 6 children segments, front, left, top, right, bottom, back - short verts[MAX_VERTICES_PER_SEGMENT]; // vertex ids of 4 front and 4 back vertices + int verts[MAX_VERTICES_PER_SEGMENT]; // vertex ids of 4 front and 4 back vertices #ifdef EDITOR short group; // group number to which the segment belongs. short objects; // pointer to objects in this segment @@ -160,7 +160,7 @@ typedef struct { int num_segments; int num_vertices; short segments[MAX_SEGMENTS]; - short vertices[MAX_VERTICES]; + int vertices[MAX_VERTICES]; } group; // Globals from mglobal.c @@ -221,11 +221,11 @@ extern ubyte Light_subtracted[MAX_SEGMENTS]; // Return a pointer to the list of vertex indices for the current // segment in vp and the number of vertices in *nv. -extern void med_get_vertex_list(segment *s,int *nv,short **vp); +extern void med_get_vertex_list(segment *s,int *nv,int **vp); // Return a pointer to the list of vertex indices for face facenum in // vp and the number of vertices in *nv. -extern void med_get_face_vertex_list(segment *s,int side, int facenum,int *nv,short **vp); +extern void med_get_face_vertex_list(segment *s,int side, int facenum,int *nv,int **vp); // Set *nf = number of faces in segment s. extern void med_get_num_faces(segment *s,int *nf);