Fix crash if Num_walls=0
[btb/d2x.git] / main / gamemine.h
1 /* $Id: gamemine.h,v 1.9 2004-12-20 06:34:42 btb Exp $ */
2 /*
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
13 */
14
15 /*
16  *
17  * Header for gamemine.c
18  *
19  */
20
21
22 #ifndef _GAMEMINE_H
23 #define _GAMEMINE_H
24
25 #define MINE_VERSION        20  // Current version expected
26 #define COMPATIBLE_VERSION  16  // Oldest version that can safely be loaded.
27
28 #ifdef EDITOR
29 struct mtfi {
30         ushort  fileinfo_signature;
31         ushort  fileinfo_version;
32         int     fileinfo_sizeof;
33 };    // Should be same as first two fields below...
34
35 struct mfi {
36         ushort  fileinfo_signature;
37         ushort  fileinfo_version;
38         int     fileinfo_sizeof;
39         int     header_offset;      // Stuff common to game & editor
40         int     header_size;
41         int     editor_offset;      // Editor specific stuff
42         int     editor_size;
43         int     segment_offset;
44         int     segment_howmany;
45         int     segment_sizeof;
46         int     newseg_verts_offset;
47         int     newseg_verts_howmany;
48         int     newseg_verts_sizeof;
49         int     group_offset;
50         int     group_howmany;
51         int     group_sizeof;
52         int     vertex_offset;
53         int     vertex_howmany;
54         int     vertex_sizeof;
55         int     texture_offset;
56         int     texture_howmany;
57         int     texture_sizeof;
58         int     walls_offset;
59         int     walls_howmany;
60         int     walls_sizeof;
61         int     triggers_offset;
62         int     triggers_howmany;
63         int     triggers_sizeof;
64         int     links_offset;
65         int     links_howmany;
66         int     links_sizeof;
67         int     object_offset;      // Object info
68         int     object_howmany;
69         int     object_sizeof;
70         int     unused_offset;      // was: doors_offset
71         int     unused_howmamy;     // was: doors_howmany
72         int     unused_sizeof;      // was: doors_sizeof
73         short   level_shake_frequency, level_shake_duration;
74         // Shakes every level_shake_frequency seconds
75         // for level_shake_duration seconds (on average, random).  In 16ths second.
76         int     secret_return_segment;
77         vms_matrix secret_return_orient;
78
79         int     dl_indices_offset;
80         int     dl_indices_howmany;
81         int     dl_indices_sizeof;
82
83         int     delta_light_offset;
84         int     delta_light_howmany;
85         int     delta_light_sizeof;
86
87         int     segment2_offset;
88         int     segment2_howmany;
89         int     segment2_sizeof;
90 };
91 #endif // EDITOR
92
93 struct mh {
94         int num_vertices;
95         int num_segments;
96 };
97
98 struct me {
99         int current_seg;
100         int newsegment_offset;
101         int newsegment_size;
102         int Curside;
103         int Markedsegp;
104         int Markedside;
105         int Groupsegp[10];
106         int Groupside[10];
107         int num_groups;
108         int current_group;
109         //int num_objects;
110 };
111
112 extern struct mtfi mine_top_fileinfo;   // Should be same as first two fields below...
113 extern struct mfi mine_fileinfo;
114 extern struct mh mine_header;
115 extern struct me mine_editor;
116
117 // returns 1 if error, else 0
118 int game_load_mine(char * filename);
119
120 // loads from an already-open file
121 // returns 0=everything ok, 1=old version, -1=error
122 int load_mine_data(CFILE *LoadFile);
123 int load_mine_data_compiled(CFILE *LoadFile);
124
125 extern short tmap_xlate_table[];
126 extern fix Level_shake_frequency, Level_shake_duration;
127 extern int Secret_return_segment;
128 extern vms_matrix Secret_return_orient;
129
130 /* stuff for loading descent.pig of descent 1 */
131 extern short convert_d1_tmap_num(short d1_tmap_num);
132 extern int d1_tmap_num_unique(short d1_tmap_num); //is d1_tmap_num's texture only in d1?
133
134 #endif /* _GAMEMINE_H */