Subversion Repositories eduke32

Rev

Rev 885 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 885 Rev 886
1
//-------------------------------------------------------------------------
1
//-------------------------------------------------------------------------
2
/*
2
/*
3
Copyright (C) 1996, 2003 - 3D Realms Entertainment
3
Copyright (C) 1996, 2003 - 3D Realms Entertainment
4
Copyright (C) 2000, 2003 - Matt Saettler (EDuke Enhancements)
4
Copyright (C) 2000, 2003 - Matt Saettler (EDuke Enhancements)
5
Copyright (C) 2004, 2007 - EDuke32 developers
5
Copyright (C) 2004, 2007 - EDuke32 developers
6

6

7
This file is part of EDuke32
7
This file is part of EDuke32
8

8

9
EDuke32 is free software; you can redistribute it and/or
9
EDuke32 is free software; you can redistribute it and/or
10
modify it under the terms of the GNU General Public License version 2
10
modify it under the terms of the GNU General Public License version 2
11
as published by the Free Software Foundation.
11
as published by the Free Software Foundation.
12

12

13
This program is distributed in the hope that it will be useful,
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
16

16

17
See the GNU General Public License for more details.
17
See the GNU General Public License for more details.
18

18

19
You should have received a copy of the GNU General Public License
19
You should have received a copy of the GNU General Public License
20
along with this program; if not, write to the Free Software
20
along with this program; if not, write to the Free Software
21
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
21
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
*/
22
*/
23
//-------------------------------------------------------------------------
23
//-------------------------------------------------------------------------
24
24
25
#include "duke3d.h"
25
#include "duke3d.h"
26
#include "mouse.h"
26
#include "mouse.h"
27
#include "osd.h"
27
#include "osd.h"
28
#include <sys/stat.h>
28
#include <sys/stat.h>
29
29
30
extern char inputloc;
30
extern char inputloc;
31
extern int recfilep;
31
extern int recfilep;
32
//extern char vgacompatible;
32
//extern char vgacompatible;
33
short globalskillsound=-1;
33
short globalskillsound=-1;
34
int probey=0;
34
int probey=0;
35
static int lastsavehead=0,last_menu_pos=0,last_menu,sh,onbar,buttonstat;
35
static int lastsavehead=0,last_menu_pos=0,last_menu,sh,onbar,buttonstat;
36
static int last_zero,last_fifty,last_onehundred,last_twoohtwo,last_threehundred = 0;
36
static int last_zero,last_fifty,last_onehundred,last_twoohtwo,last_threehundred = 0;
37
37
38
static char menunamecnt;
38
static char menunamecnt;
39
39
40
static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL;
40
static CACHE1D_FIND_REC *finddirs=NULL, *findfiles=NULL, *finddirshigh=NULL, *findfileshigh=NULL;
41
static int numdirs=0, numfiles=0;
41
static int numdirs=0, numfiles=0;
42
static int currentlist=0;
42
static int currentlist=0;
43
43
44
static int function, whichkey;
44
static int function, whichkey;
45
static int changesmade, newvidmode, curvidmode, newfullscreen;
45
static int changesmade, newvidmode, curvidmode, newfullscreen;
46
static int vidsets[16] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };
46
static int vidsets[16] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };
47
static int curvidset, newvidset = 0;
47
static int curvidset, newvidset = 0;
48
48
49
static char *mousebuttonnames[] = { "Left", "Right", "Middle", "Thumb", "Wheel Up", "Wheel Down" };
49
static char *mousebuttonnames[] = { "Left", "Right", "Middle", "Thumb", "Wheel Up", "Wheel Down" };
50
50
51
extern int voting;
51
extern int voting;
52
52
53
void cmenu(int cm)
53
void cmenu(int cm)
54
{
54
{
55
    current_menu = cm;
55
    current_menu = cm;
56
56
57
    if ((cm >= 1000 && cm <= 1009))
57
    if ((cm >= 1000 && cm <= 1009))
58
        return;
58
        return;
59
59
60
    if (cm == 0)
60
    if (cm == 0)
61
        probey = last_zero;
61
        probey = last_zero;
62
    else if (cm == 50)
62
    else if (cm == 50)
63
        probey = last_fifty;
63
        probey = last_fifty;
64
    else if (cm == 100)
64
    else if (cm == 100)
65
        probey = last_onehundred;
65
        probey = last_onehundred;
66
    else if (cm == 202)
66
    else if (cm == 202)
67
        probey = last_twoohtwo;
67
        probey = last_twoohtwo;
68
    else if (cm >= 300 && cm < 400)
68
    else if (cm >= 300 && cm < 400)
69
        probey = last_threehundred;
69
        probey = last_threehundred;
70
    else if (cm == 110)
70
    else if (cm == 110)
71
        probey = 1;
71
        probey = 1;
72
    else probey = 0;
72
    else probey = 0;
73
    lastsavehead = -1;
73
    lastsavehead = -1;
74
}
74
}
75
75
76
#if 0
76
#if 0
77
void savetemp(char *fn,int daptr,int dasiz)
77
void savetemp(char *fn,int daptr,int dasiz)
78
{
78
{
79
    FILE *fp;
79
    FILE *fp;
80
80
81
    if ((fp = fopen(fn,"wb")) == (FILE *)NULL)
81
    if ((fp = fopen(fn,"wb")) == (FILE *)NULL)
82
        return;
82
        return;
83
83
84
    fwrite((char *)daptr,dasiz,1,fp);
84
    fwrite((char *)daptr,dasiz,1,fp);
85
85
86
    fclose(fp);
86
    fclose(fp);
87
}
87
}
88
#endif
88
#endif
89
89
90
#define LMB (buttonstat&1)
90
#define LMB (buttonstat&1)
91
#define RMB (buttonstat&2)
91
#define RMB (buttonstat&2)
92
#define WHEELUP (buttonstat&16)
92
#define WHEELUP (buttonstat&16)
93
#define WHEELDOWN (buttonstat&32)
93
#define WHEELDOWN (buttonstat&32)
94
94
95
static ControlInfo minfo;
95
static ControlInfo minfo;
96
96
97
static short mi, mii;
97
static short mi, mii;
98
98
99
static int probe_(int type,int x,int y,int i,int n)
99
static int probe_(int type,int x,int y,int i,int n)
100
{
100
{
101
    short centre, s;
101
    short centre, s;
102
102
103
    s = 1+(CONTROL_GetMouseSensitivity()>>4);
103
    s = 1+(CONTROL_GetMouseSensitivity()>>4);
104
104
105
    {
105
    {
106
        CONTROL_GetInput(&minfo);
106
        CONTROL_GetInput(&minfo);
107
        mi += (minfo.dpitch+minfo.dz);
107
        mi += (minfo.dpitch+minfo.dz);
108
        mii += minfo.dyaw;
108
        mii += minfo.dyaw;
109
    }
109
    }
110
110
111
    if (x == (320>>1))
111
    if (x == (320>>1))
112
        centre = 320>>2;
112
        centre = 320>>2;
113
    else centre = 0;
113
    else centre = 0;
114
114
115
    if (!buttonstat || buttonstat == 16 || buttonstat == 32)
115
    if (!buttonstat || buttonstat == 16 || buttonstat == 32)
116
    {
116
    {
117
        if (KB_KeyPressed(sc_UpArrow) || KB_KeyPressed(sc_PgUp) || KB_KeyPressed(sc_kpad_8) || mi < -8192 || WHEELUP)
117
        if (KB_KeyPressed(sc_UpArrow) || KB_KeyPressed(sc_PgUp) || KB_KeyPressed(sc_kpad_8) || mi < -8192 || WHEELUP)
118
        {
118
        {
119
            mi = mii = 0;
119
            mi = mii = 0;
120
            KB_ClearKeyDown(sc_UpArrow);
120
            KB_ClearKeyDown(sc_UpArrow);
121
            KB_ClearKeyDown(sc_kpad_8);
121
            KB_ClearKeyDown(sc_kpad_8);
122
            KB_ClearKeyDown(sc_PgUp);
122
            KB_ClearKeyDown(sc_PgUp);
123
            MOUSE_ClearButton(WHEELUP_MOUSE);
123
            MOUSE_ClearButton(WHEELUP_MOUSE);
124
            sound(KICK_HIT);
124
            sound(KICK_HIT);
125
125
126
            probey--;
126
            probey--;
127
            if (probey < 0) probey = n-1;
127
            if (probey < 0) probey = n-1;
128
        }
128
        }
129
        if (KB_KeyPressed(sc_DownArrow) || KB_KeyPressed(sc_PgDn) || KB_KeyPressed(sc_kpad_2) || mi > 8192 || WHEELDOWN)
129
        if (KB_KeyPressed(sc_DownArrow) || KB_KeyPressed(sc_PgDn) || KB_KeyPressed(sc_kpad_2) || mi > 8192 || WHEELDOWN)
130
        {
130
        {
131
            mi = mii = 0;
131
            mi = mii = 0;
132
            KB_ClearKeyDown(sc_DownArrow);
132
            KB_ClearKeyDown(sc_DownArrow);
133
            KB_ClearKeyDown(sc_kpad_2);
133
            KB_ClearKeyDown(sc_kpad_2);
134
            KB_ClearKeyDown(sc_PgDn);
134
            KB_ClearKeyDown(sc_PgDn);
135
            MOUSE_ClearButton(WHEELDOWN_MOUSE);
135
            MOUSE_ClearButton(WHEELDOWN_MOUSE);
136
            sound(KICK_HIT);
136
            sound(KICK_HIT);
137
            probey++;
137
            probey++;
138
        }
138
        }
139
    }
139
    }
140
140
141
    if (probey >= n)
141
    if (probey >= n)
142
        probey = 0;
142
        probey = 0;
143
143
144
    if (centre)
144
    if (centre)
145
    {
145
    {
146
        //        rotatesprite(((320>>1)+(centre)+54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
146
        //        rotatesprite(((320>>1)+(centre)+54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
147
        //        rotatesprite(((320>>1)-(centre)-54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10,0,0,xdim-1,ydim-1);
147
        //        rotatesprite(((320>>1)-(centre)-54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10,0,0,xdim-1,ydim-1);
148
148
149
        rotatesprite(((320>>1)+(centre>>1)+70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
149
        rotatesprite(((320>>1)+(centre>>1)+70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
150
        rotatesprite(((320>>1)-(centre>>1)-70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10,0,0,xdim-1,ydim-1);
150
        rotatesprite(((320>>1)-(centre>>1)-70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10,0,0,xdim-1,ydim-1);
151
    }
151
    }
152
    else
152
    else
153
        rotatesprite((x<<16)-((tilesizx[BIGFNTCURSOR]-4)<<(16-type)),(y+(probey*i)-(4>>type))<<16,65536L>>type,0,SPINNINGNUKEICON+(((totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
153
        rotatesprite((x<<16)-((tilesizx[BIGFNTCURSOR]-4)<<(16-type)),(y+(probey*i)-(4>>type))<<16,65536L>>type,0,SPINNINGNUKEICON+(((totalclock>>3))%7),sh,0,10,0,0,xdim-1,ydim-1);
154
154
155
    if (KB_KeyPressed(sc_Space) || KB_KeyPressed(sc_kpad_Enter) || KB_KeyPressed(sc_Enter) || (LMB && !onbar))
155
    if (KB_KeyPressed(sc_Space) || KB_KeyPressed(sc_kpad_Enter) || KB_KeyPressed(sc_Enter) || (LMB && !onbar))
156
    {
156
    {
157
        if (current_menu != 110)
157
        if (current_menu != 110)
158
            sound(PISTOL_BODYHIT);
158
            sound(PISTOL_BODYHIT);
159
        KB_ClearKeyDown(sc_Enter);
159
        KB_ClearKeyDown(sc_Enter);
160
        KB_ClearKeyDown(sc_Space);
160
        KB_ClearKeyDown(sc_Space);
161
        KB_ClearKeyDown(sc_kpad_Enter);
161
        KB_ClearKeyDown(sc_kpad_Enter);
162
        MOUSE_ClearButton(LEFT_MOUSE);
162
        MOUSE_ClearButton(LEFT_MOUSE);
163
        return(probey);
163
        return(probey);
164
    }
164
    }
165
    else if (KB_KeyPressed(sc_Escape) || (RMB))
165
    else if (KB_KeyPressed(sc_Escape) || (RMB))
166
    {
166
    {
167
        onbar = 0;
167
        onbar = 0;
168
        KB_ClearKeyDown(sc_Escape);
168
        KB_ClearKeyDown(sc_Escape);
169
        sound(EXITMENUSOUND);
169
        sound(EXITMENUSOUND);
170
        MOUSE_ClearButton(RIGHT_MOUSE);
170
        MOUSE_ClearButton(RIGHT_MOUSE);
171
        return(-1);
171
        return(-1);
172
    }
172
    }
173
    else
173
    else
174
    {
174
    {
175
        if (onbar == 0) return(-probey-2);
175
        if (onbar == 0) return(-probey-2);
176
        if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && (WHEELUP || mii < -256)))
176
        if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && (WHEELUP || mii < -256)))
177
            return(probey);
177
            return(probey);
178
        else if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && (WHEELDOWN || mii > 256)))
178
        else if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && (WHEELDOWN || mii > 256)))
179
            return(probey);
179
            return(probey);
180
        return(-probey-2);
180
        return(-probey-2);
181
    }
181
    }
182
}
182
}
183
static inline int probe(int x,int y,int i,int n)
183
static inline int probe(int x,int y,int i,int n)
184
{
184
{
185
    return probe_(0,x,y,i,n);
185
    return probe_(0,x,y,i,n);
186
}
186
}
187
187
188
static inline int probesm(int x,int y,int i,int n)
188
static inline int probesm(int x,int y,int i,int n)
189
{
189
{
190
    return probe_(1,x,y,i,n);
190
    return probe_(1,x,y,i,n);
191
}
191
}
192
192
193
static int menutext_(int x,int y,short s,short p,char *t)
193
static int menutext_(int x,int y,short s,short p,char *t)
194
{
194
{
195
    short i, ac, centre;
195
    short i, ac, centre;
196
196
197
    y -= 12;
197
    y -= 12;
198
198
199
    i = centre = 0;
199
    i = centre = 0;
200
200
201
    if (x == (320>>1))
201
    if (x == (320>>1))
202
    {
202
    {
203
        while (*(t+i))
203
        while (*(t+i))
204
        {
204
        {
205
            if (*(t+i) == ' ')
205
            if (*(t+i) == ' ')
206
            {
206
            {
207
                centre += 5;
207
                centre += 5;
208
                i++;
208
                i++;
209
                continue;
209
                continue;
210
            }
210
            }
211
            ac = 0;
211
            ac = 0;
212
            if (*(t+i) >= '0' && *(t+i) <= '9')
212
            if (*(t+i) >= '0' && *(t+i) <= '9')
213
                ac = *(t+i) - '0' + BIGALPHANUM-10;
213
                ac = *(t+i) - '0' + BIGALPHANUM-10;
214
            else if (*(t+i) >= 'a' && *(t+i) <= 'z')
214
            else if (*(t+i) >= 'a' && *(t+i) <= 'z')
215
                ac = toupper(*(t+i)) - 'A' + BIGALPHANUM;
215
                ac = toupper(*(t+i)) - 'A' + BIGALPHANUM;
216
            else if (*(t+i) >= 'A' && *(t+i) <= 'Z')
216
            else if (*(t+i) >= 'A' && *(t+i) <= 'Z')
217
                ac = *(t+i) - 'A' + BIGALPHANUM;
217
                ac = *(t+i) - 'A' + BIGALPHANUM;
218
            else switch (*(t+i))
218
            else switch (*(t+i))
219
                {
219
                {
220
                case '-':
220
                case '-':
221
                    ac = BIGALPHANUM-11;
221
                    ac = BIGALPHANUM-11;
222
                    break;
222
                    break;
223
                case '.':
223
                case '.':
224
                    ac = BIGPERIOD;
224
                    ac = BIGPERIOD;
225
                    break;
225
                    break;
226
                case '\'':
226
                case '\'':
227
                    ac = BIGAPPOS;
227
                    ac = BIGAPPOS;
228
                    break;
228
                    break;
229
                case ',':
229
                case ',':
230
                    ac = BIGCOMMA;
230
                    ac = BIGCOMMA;
231
                    break;
231
                    break;
232
                case '!':
232
                case '!':
233
                    ac = BIGX;
233
                    ac = BIGX;
234
                    break;
234
                    break;
235
                case '?':
235
                case '?':
236
                    ac = BIGQ;
236
                    ac = BIGQ;
237
                    break;
237
                    break;
238
                case ';':
238
                case ';':
239
                    ac = BIGSEMI;
239
                    ac = BIGSEMI;
240
                    break;
240
                    break;
241
                case ':':
241
                case ':':
242
                    ac = BIGSEMI;
242
                    ac = BIGSEMI;
243
                    break;
243
                    break;
244
                default:
244
                default:
245
                    centre += 5;
245
                    centre += 5;
246
                    i++;
246
                    i++;
247
                    continue;
247
                    continue;
248
                }
248
                }
249
249
250
            centre += tilesizx[ac]-1;
250
            centre += tilesizx[ac]-1;
251
            i++;
251
            i++;
252
        }
252
        }
253
    }
253
    }
254
254
255
    if (centre)
255
    if (centre)
256
        x = (320-centre-10)>>1;
256
        x = (320-centre-10)>>1;
257
257
258
    while (*t)
258
    while (*t)
259
    {
259
    {
260
        if (*t == ' ')
260
        if (*t == ' ')
261
        {
261
        {
262
            x+=5;
262
            x+=5;
263
            t++;
263
            t++;
264
            continue;
264
            continue;
265
        }
265
        }
266
        ac = 0;
266
        ac = 0;
267
        if (*t >= '0' && *t <= '9')
267
        if (*t >= '0' && *t <= '9')
268
            ac = *t - '0' + BIGALPHANUM-10;
268
            ac = *t - '0' + BIGALPHANUM-10;
269
        else if (*t >= 'a' && *t <= 'z')
269
        else if (*t >= 'a' && *t <= 'z')
270
            ac = toupper(*t) - 'A' + BIGALPHANUM;
270
            ac = toupper(*t) - 'A' + BIGALPHANUM;
271
        else if (*t >= 'A' && *t <= 'Z')
271
        else if (*t >= 'A' && *t <= 'Z')
272
            ac = *t - 'A' + BIGALPHANUM;
272
            ac = *t - 'A' + BIGALPHANUM;
273
        else switch (*t)
273
        else switch (*t)
274
            {
274
            {
275
            case '-':
275
            case '-':
276
                ac = BIGALPHANUM-11;
276
                ac = BIGALPHANUM-11;
277
                break;
277
                break;
278
            case '.':
278
            case '.':
279
                ac = BIGPERIOD;
279
                ac = BIGPERIOD;
280
                break;
280
                break;
281
            case ',':
281
            case ',':
282
                ac = BIGCOMMA;
282
                ac = BIGCOMMA;
283
                break;
283
                break;
284
            case '!':
284
            case '!':
285
                ac = BIGX;
285
                ac = BIGX;
286
                break;
286
                break;
287
            case '\'':
287
            case '\'':
288
                ac = BIGAPPOS;
288
                ac = BIGAPPOS;
289
                break;
289
                break;
290
            case '?':
290
            case '?':
291
                ac = BIGQ;
291
                ac = BIGQ;
292
                break;
292
                break;
293
            case ';':
293
            case ';':
294
                ac = BIGSEMI;
294
                ac = BIGSEMI;
295
                break;
295
                break;
296
            case ':':
296
            case ':':
297
                ac = BIGCOLIN;
297
                ac = BIGCOLIN;
298
                break;
298
                break;
299
            default:
299
            default:
300
                x += 5;
300
                x += 5;
301
                t++;
301
                t++;
302
                continue;
302
                continue;
303
            }
303
            }
304
304
305
        rotatesprite(x<<16,y<<16,65536L,0,ac,s,p,10+16,0,0,xdim-1,ydim-1);
305
        rotatesprite(x<<16,y<<16,65536L,0,ac,s,p,10+16,0,0,xdim-1,ydim-1);
306
306
307
        x += tilesizx[ac];
307
        x += tilesizx[ac];
308
        t++;
308
        t++;
309
    }
309
    }
310
    return (x);
310
    return (x);
311
}
311
}
312
312
313
inline int menutext(int x,int y,int s,int p,const char *t)
313
inline int menutext(int x,int y,int s,int p,const char *t)
314
{
314
{
315
    return(menutext_(x,y,s,p,(char *)stripcolorcodes(t)));
315
    return(menutext_(x,y,s,p,(char *)stripcolorcodes(t)));
316
}
316
}
317
317
318
static void _bar(int type, int x,int y,int *p,int dainc,int damodify,int s, int pa, int min, int max)
318
static void _bar(int type, int x,int y,int *p,int dainc,int damodify,int s, int pa, int min, int max)
319
{
319
{
320
    int xloc;
320
    int xloc;
321
    char rev;
321
    char rev;
322
322
323
    if (dainc < 0)
323
    if (dainc < 0)
324
    {
324
    {
325
        dainc = -dainc;
325
        dainc = -dainc;
326
        rev = 1;
326
        rev = 1;
327
    }
327
    }
328
    else rev = 0;
328
    else rev = 0;
329
    y-=2;
329
    y-=2;
330
330
331
    if (damodify)
331
    if (damodify)
332
    {
332
    {
333
        if (rev == 0)
333
        if (rev == 0)
334
        {
334
        {
335
            if (*p > min && (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && (WHEELUP || mii < -256))))         // && onbar) )
335
            if (*p > min && (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && (WHEELUP || mii < -256))))         // && onbar) )
336
            {
336
            {
337
                KB_ClearKeyDown(sc_LeftArrow);
337
                KB_ClearKeyDown(sc_LeftArrow);
338
                KB_ClearKeyDown(sc_kpad_4);
338
                KB_ClearKeyDown(sc_kpad_4);
339
                MOUSE_ClearButton(WHEELUP_MOUSE);
339
                MOUSE_ClearButton(WHEELUP_MOUSE);
340
                mii = 0;
340
                mii = 0;
341
                *p -= dainc;
341
                *p -= dainc;
342
                if (*p < min)
342
                if (*p < min)
343
                    *p = min;
343
                    *p = min;
344
                sound(KICK_HIT);
344
                sound(KICK_HIT);
345
            }
345
            }
346
            if (*p < max && (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && (WHEELDOWN || mii > 256))))        //&& onbar) )
346
            if (*p < max && (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && (WHEELDOWN || mii > 256))))        //&& onbar) )
347
            {
347
            {
348
                KB_ClearKeyDown(sc_RightArrow);
348
                KB_ClearKeyDown(sc_RightArrow);
349
                KB_ClearKeyDown(sc_kpad_6);
349
                KB_ClearKeyDown(sc_kpad_6);
350
                MOUSE_ClearButton(WHEELDOWN_MOUSE);
350
                MOUSE_ClearButton(WHEELDOWN_MOUSE);
351
                mii = 0;
351
                mii = 0;
352
                *p += dainc;
352
                *p += dainc;
353
                if (*p > max)
353
                if (*p > max)
354
                    *p = max;
354
                    *p = max;
355
                sound(KICK_HIT);
355
                sound(KICK_HIT);
356
            }
356
            }
357
        }
357
        }
358
        else
358
        else
359
        {
359
        {
360
            if (*p > min && (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256)))        //&& onbar) )
360
            if (*p > min && (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256)))        //&& onbar) )
361
            {
361
            {
362
                KB_ClearKeyDown(sc_RightArrow);
362
                KB_ClearKeyDown(sc_RightArrow);
363
                KB_ClearKeyDown(sc_kpad_6);
363
                KB_ClearKeyDown(sc_kpad_6);
364
364
365
                *p -= dainc;
365
                *p -= dainc;
366
                if (*p < min)
366
                if (*p < min)
367
                    *p = min;
367
                    *p = min;
368
                sound(KICK_HIT);
368
                sound(KICK_HIT);
369
            }
369
            }
370
            if (*p < 64 && (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256)))         // && onbar) )
370
            if (*p < 64 && (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256)))         // && onbar) )
371
            {
371
            {
372
                KB_ClearKeyDown(sc_LeftArrow);
372
                KB_ClearKeyDown(sc_LeftArrow);
373
                KB_ClearKeyDown(sc_kpad_4);
373
                KB_ClearKeyDown(sc_kpad_4);
374
374
375
                *p += dainc;
375
                *p += dainc;
376
                if (*p > max)
376
                if (*p > max)
377
                    *p = max;
377
                    *p = max;
378
                sound(KICK_HIT);
378
                sound(KICK_HIT);
379
            }
379
            }
380
        }
380
        }
381
    }
381
    }
382
382
383
    xloc = *p;
383
    xloc = *p;
384
    rotatesprite((x<<16)+(22<<(16-type)),(y<<16)-(3<<(16-type)),65536L>>type,0,SLIDEBAR,s,pa,10,0,0,xdim-1,ydim-1);
384
    rotatesprite((x<<16)+(22<<(16-type)),(y<<16)-(3<<(16-type)),65536L>>type,0,SLIDEBAR,s,pa,10,0,0,xdim-1,ydim-1);
385
    if (rev == 0)
385
    if (rev == 0)
386
        rotatesprite((x<<16)+((scale(64,xloc-min,max-min)+1)<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10,0,0,xdim-1,ydim-1);
386
        rotatesprite((x<<16)+((scale(64,xloc-min,max-min)+1)<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10,0,0,xdim-1,ydim-1);
387
    else
387
    else
388
        rotatesprite((x<<16)+((65-scale(64,xloc-min,max-min))<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10,0,0,xdim-1,ydim-1);
388
        rotatesprite((x<<16)+((65-scale(64,xloc-min,max-min))<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10,0,0,xdim-1,ydim-1);
389
}
389
}
390
390
391
#define bar(x,y,p,dainc,damodify,s,pa) _bar(0,x,y,p,dainc,damodify,s,pa,0,63);
391
#define bar(x,y,p,dainc,damodify,s,pa) _bar(0,x,y,p,dainc,damodify,s,pa,0,63);
392
#define barsm(x,y,p,dainc,damodify,s,pa) _bar(1,x,y,p,dainc,damodify,s,pa,0,63);
392
#define barsm(x,y,p,dainc,damodify,s,pa) _bar(1,x,y,p,dainc,damodify,s,pa,0,63);
393
393
394
static void modval(int min, int max,int *p,int dainc,int damodify)
394
static void modval(int min, int max,int *p,int dainc,int damodify)
395
{
395
{
396
    char rev;
396
    char rev;
397
397
398
    if (dainc < 0)
398
    if (dainc < 0)
399
    {
399
    {
400
        dainc = -dainc;
400
        dainc = -dainc;
401
        rev = 1;
401
        rev = 1;
402
    }
402
    }
403
    else rev = 0;
403
    else rev = 0;
404
404
405
    if (damodify)
405
    if (damodify)
406
    {
406
    {
407
        if (rev == 0)
407
        if (rev == 0)
408
        {
408
        {
409
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256))        // && onbar) )
409
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256))        // && onbar) )
410
            {
410
            {
411
                KB_ClearKeyDown(sc_LeftArrow);
411
                KB_ClearKeyDown(sc_LeftArrow);
412
                KB_ClearKeyDown(sc_kpad_4);
412
                KB_ClearKeyDown(sc_kpad_4);
413
413
414
                *p -= dainc;
414
                *p -= dainc;
415
                if (*p < min)
415
                if (*p < min)
416
                {
416
                {
417
                    *p = max;
417
                    *p = max;
418
                    if (damodify == 2)
418
                    if (damodify == 2)
419
                        *p = min;
419
                        *p = min;
420
                }
420
                }
421
                sound(PISTOL_BODYHIT);
421
                sound(PISTOL_BODYHIT);
422
            }
422
            }
423
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256))       //&& onbar) )
423
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256))       //&& onbar) )
424
            {
424
            {
425
                KB_ClearKeyDown(sc_RightArrow);
425
                KB_ClearKeyDown(sc_RightArrow);
426
                KB_ClearKeyDown(sc_kpad_6);
426
                KB_ClearKeyDown(sc_kpad_6);
427
427
428
                *p += dainc;
428
                *p += dainc;
429
                if (*p > max)
429
                if (*p > max)
430
                {
430
                {
431
                    *p = min;
431
                    *p = min;
432
                    if (damodify == 2)
432
                    if (damodify == 2)
433
                        *p = max;
433
                        *p = max;
434
                }
434
                }
435
                sound(PISTOL_BODYHIT);
435
                sound(PISTOL_BODYHIT);
436
            }
436
            }
437
        }
437
        }
438
        else
438
        else
439
        {
439
        {
440
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256))      //&& onbar ))
440
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || ((buttonstat&1) && minfo.dyaw > 256))      //&& onbar ))
441
            {
441
            {
442
                KB_ClearKeyDown(sc_RightArrow);
442
                KB_ClearKeyDown(sc_RightArrow);
443
                KB_ClearKeyDown(sc_kpad_6);
443
                KB_ClearKeyDown(sc_kpad_6);
444
444
445
                *p -= dainc;
445
                *p -= dainc;
446
                if (*p < min)
446
                if (*p < min)
447
                {
447
                {
448
                    *p = max;
448
                    *p = max;
449
                    if (damodify == 2)
449
                    if (damodify == 2)
450
                        *p = min;
450
                        *p = min;
451
                }
451
                }
452
                sound(PISTOL_BODYHIT);
452
                sound(PISTOL_BODYHIT);
453
            }
453
            }
454
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256))      // && onbar) )
454
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || ((buttonstat&1) && minfo.dyaw < -256))      // && onbar) )
455
            {
455
            {
456
                KB_ClearKeyDown(sc_LeftArrow);
456
                KB_ClearKeyDown(sc_LeftArrow);
457
                KB_ClearKeyDown(sc_kpad_4);
457
                KB_ClearKeyDown(sc_kpad_4);
458
458
459
                *p += dainc;
459
                *p += dainc;
460
                if (*p > max)
460
                if (*p > max)
461
                {
461
                {
462
                    *p = min;
462
                    *p = min;
463
                    if (damodify == 2)
463
                    if (damodify == 2)
464
                        *p = max;
464
                        *p = max;
465
                }
465
                }
466
                sound(PISTOL_BODYHIT);
466
                sound(PISTOL_BODYHIT);
467
            }
467
            }
468
        }
468
        }
469
    }
469
    }
470
}
470
}
471
471
472
#define UNSELMENUSHADE 10
472
#define UNSELMENUSHADE 10
473
#define DISABLEDMENUSHADE 20
473
#define DISABLEDMENUSHADE 20
474
#define MENUHIGHLIGHT(x) probey==x?-(sintable[(totalclock<<4)&2047]>>12):UNSELMENUSHADE
474
#define MENUHIGHLIGHT(x) probey==x?-(sintable[(totalclock<<4)&2047]>>12):UNSELMENUSHADE
475
// #define MENUHIGHLIGHT(x) probey==x?-(sintable[(totalclock<<4)&2047]>>12):probey-x>=0?(probey-x)<<2:-((probey-x)<<2)
475
// #define MENUHIGHLIGHT(x) probey==x?-(sintable[(totalclock<<4)&2047]>>12):probey-x>=0?(probey-x)<<2:-((probey-x)<<2)
476
476
477
#define SHX(X) 0
477
#define SHX(X) 0
478
// ((x==X)*(-sh))
478
// ((x==X)*(-sh))
479
#define PHX(X) 0
479
#define PHX(X) 0
480
// ((x==X)?1:2)
480
// ((x==X)?1:2)
481
#define MWIN(X) rotatesprite( 320<<15,200<<15,X,0,MENUSCREEN,-16,0,10+64,0,0,xdim-1,ydim-1)
481
#define MWIN(X) rotatesprite( 320<<15,200<<15,X,0,MENUSCREEN,-16,0,10+64,0,0,xdim-1,ydim-1)
482
#define MWINXY(X,OX,OY) rotatesprite( ( 320+(OX) )<<15, ( 200+(OY) )<<15,X,0,MENUSCREEN,-16,0,10+64,0,0,xdim-1,ydim-1)
482
#define MWINXY(X,OX,OY) rotatesprite( ( 320+(OX) )<<15, ( 200+(OY) )<<15,X,0,MENUSCREEN,-16,0,10+64,0,0,xdim-1,ydim-1)
483
483
484
extern int loadpheader(char spot,struct savehead *saveh);
484
extern int loadpheader(char spot,struct savehead *saveh);
485
485
486
static struct savehead savehead;
486
static struct savehead savehead;
487
//static int32 volnum,levnum,plrskl,numplr;
487
//static int32 volnum,levnum,plrskl,numplr;
488
//static char brdfn[BMAX_PATH];
488
//static char brdfn[BMAX_PATH];
489
int lastsavedpos = -1;
489
int lastsavedpos = -1;
490
490
491
static void dispnames(void)
491
static void dispnames(void)
492
{
492
{
493
    int x, c = 160;
493
    int x, c = 160;
494
494
495
    c += 64;
495
    c += 64;
496
    for (x = 0;x <= 108;x += 12)
496
    for (x = 0;x <= 108;x += 12)
497
        rotatesprite((c+91-64)<<16,(x+56)<<16,65536L,0,TEXTBOX,24,0,10,0,0,xdim-1,ydim-1);
497
        rotatesprite((c+91-64)<<16,(x+56)<<16,65536L,0,TEXTBOX,24,0,10,0,0,xdim-1,ydim-1);
498
498
499
    rotatesprite(22<<16,97<<16,65536L,0,WINDOWBORDER2,24,0,10,0,0,xdim-1,ydim-1);
499
    rotatesprite(22<<16,97<<16,65536L,0,WINDOWBORDER2,24,0,10,0,0,xdim-1,ydim-1);
500
    rotatesprite(180<<16,97<<16,65536L,1024,WINDOWBORDER2,24,0,10,0,0,xdim-1,ydim-1);
500
    rotatesprite(180<<16,97<<16,65536L,1024,WINDOWBORDER2,24,0,10,0,0,xdim-1,ydim-1);
501
    rotatesprite(99<<16,50<<16,65536L,512,WINDOWBORDER1,24,0,10,0,0,xdim-1,ydim-1);
501
    rotatesprite(99<<16,50<<16,65536L,512,WINDOWBORDER1,24,0,10,0,0,xdim-1,ydim-1);
502
    rotatesprite(103<<16,144<<16,65536L,1024+512,WINDOWBORDER1,24,0,10,0,0,xdim-1,ydim-1);
502
    rotatesprite(103<<16,144<<16,65536L,1024+512,WINDOWBORDER1,24,0,10,0,0,xdim-1,ydim-1);
503
503
504
    for (x=0;x<=9;x++)
504
    for (x=0;x<=9;x++)
505
        minitext(c,48+(12*x),ud.savegame[x],2,10+16);
505
        minitext(c,48+(12*x),ud.savegame[x],2,10+16);
506
}
506
}
507
507
508
static void clearfilenames(void)
508
static void clearfilenames(void)
509
{
509
{
510
    klistfree(finddirs);
510
    klistfree(finddirs);
511
    klistfree(findfiles);
511
    klistfree(findfiles);
512
    finddirs = findfiles = NULL;
512
    finddirs = findfiles = NULL;
513
    numfiles = numdirs = 0;
513
    numfiles = numdirs = 0;
514
}
514
}
515
515
516
static int getfilenames(const char *path, char kind[])
516
static int getfilenames(const char *path, char kind[])
517
{
517
{
518
    CACHE1D_FIND_REC *r;
518
    CACHE1D_FIND_REC *r;
519
519
520
    clearfilenames();
520
    clearfilenames();
521
    finddirs = klistpath(path,"*",CACHE1D_FIND_DIR);
521
    finddirs = klistpath(path,"*",CACHE1D_FIND_DIR);
522
    findfiles = klistpath(path,kind,CACHE1D_FIND_FILE);
522
    findfiles = klistpath(path,kind,CACHE1D_FIND_FILE);
523
    for (r = finddirs; r; r=r->next) numdirs++;
523
    for (r = finddirs; r; r=r->next) numdirs++;
524
    for (r = findfiles; r; r=r->next) numfiles++;
524
    for (r = findfiles; r; r=r->next) numfiles++;
525
525
526
    finddirshigh = finddirs;
526
    finddirshigh = finddirs;
527
    findfileshigh = findfiles;
527
    findfileshigh = findfiles;
528
    currentlist = 0;
528
    currentlist = 0;
529
    if (findfileshigh) currentlist = 1;
529
    if (findfileshigh) currentlist = 1;
530
530
531
    return(0);
531
    return(0);
532
}
532
}
533
533
534
int quittimer = 0;
534
int quittimer = 0;
535
535
536
void check_valid_color(int *color, int prev_color)
536
void check_valid_color(int *color, int prev_color)
537
{
537
{
538
    int i, disallowed[] = { 1, 2, 3, 4, 5, 6, 7, 8, 17, 18, 19, 20, 22 };
538
    int i, disallowed[] = { 1, 2, 3, 4, 5, 6, 7, 8, 17, 18, 19, 20, 22 };
539
539
540
    for (i=0;i<(signed)(sizeof(disallowed)/sizeof(disallowed[0]));i++)
540
    for (i=0;i<(signed)(sizeof(disallowed)/sizeof(disallowed[0]));i++)
541
    {
541
    {
542
        while (*color == disallowed[i])
542
        while (*color == disallowed[i])
543
        {
543
        {
544
            if (*color > prev_color)
544
            if (*color > prev_color)
545
                (*color)++;
545
                (*color)++;
546
            else (*color)--;
546
            else (*color)--;
547
            i=0;
547
            i=0;
548
        }
548
        }
549
    }
549
    }
550
}
550
}
551
551
552
void sendquit(void)
552
void sendquit(void)
553
{
553
{
554
    if (gamequit == 0 && (numplayers > 1))
554
    if (gamequit == 0 && (numplayers > 1))
555
    {
555
    {
556
        if (g_player[myconnectindex].ps->gm&MODE_GAME)
556
        if (g_player[myconnectindex].ps->gm&MODE_GAME)
557
        {
557
        {
558
            gamequit = 1;
558
            gamequit = 1;
559
            quittimer = totalclock+120;
559
            quittimer = totalclock+120;
560
        }
560
        }
561
        else
561
        else
562
        {
562
        {
563
            int i;
563
            int i;
564
564
565
            tempbuf[0] = 254;
565
            tempbuf[0] = 254;
566
            tempbuf[1] = myconnectindex;
566
            tempbuf[1] = myconnectindex;
567
567
568
            for (i=connecthead;i >= 0;i=connectpoint2[i])
568
            for (i=connecthead;i >= 0;i=connectpoint2[i])
569
            {
569
            {
570
                if (i != myconnectindex) sendpacket(i,tempbuf,2);
570
                if (i != myconnectindex) sendpacket(i,tempbuf,2);
571
                if ((!networkmode) && (myconnectindex != connecthead)) break; //slaves in M/S mode only send to master
571
                if ((!networkmode) && (myconnectindex != connecthead)) break; //slaves in M/S mode only send to master
572
            }
572
            }
573
            gameexit(" ");
573
            gameexit(" ");
574
        }
574
        }
575
    }
575
    }
576
    else if (numplayers < 2)
576
    else if (numplayers < 2)
577
        gameexit(" ");
577
        gameexit(" ");
578
578
579
    if ((totalclock > quittimer) && (gamequit == 1))
579
    if ((totalclock > quittimer) && (gamequit == 1))
580
        gameexit("Timed out.");
580
        gameexit("Timed out.");
581
}
581
}
582
582
583
void menus(void)
583
void menus(void)
584
{
584
{
585
    CACHE1D_FIND_REC *dir;
585
    CACHE1D_FIND_REC *dir;
586
    int c,x,i;
586
    int c,x,i;
587
    int l,m;
587
    int l,m;
588
    char *p = NULL;
588
    char *p = NULL;
589
589
590
    getpackets();
590
    getpackets();
591
591
592
    {
592
    {
593
        if (buttonstat != 0 && !onbar)
593
        if (buttonstat != 0 && !onbar)
594
        {
594
        {
595
            x = MOUSE_GetButtons()<<3;
595
            x = MOUSE_GetButtons()<<3;
596
            if (x) buttonstat = x<<3;
596
            if (x) buttonstat = x<<3;
597
            else buttonstat = 0;
597
            else buttonstat = 0;
598
        }
598
        }
599
        else
599
        else
600
            buttonstat = MOUSE_GetButtons();
600
            buttonstat = MOUSE_GetButtons();
601
    }
601
    }
602
602
603
    if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
603
    if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
604
    {
604
    {
605
        walock[TILE_LOADSHOT] = 1;
605
        walock[TILE_LOADSHOT] = 1;
606
        return;
606
        return;
607
    }
607
    }
608
    OnEvent(EVENT_DISPLAYMENU, g_player[screenpeek].ps->i, screenpeek, -1);
608
    OnEvent(EVENT_DISPLAYMENU, g_player[screenpeek].ps->i, screenpeek, -1);
609
609
610
    g_player[myconnectindex].ps->gm &= (0xff-MODE_TYPE);
610
    g_player[myconnectindex].ps->gm &= (0xff-MODE_TYPE);
611
    g_player[myconnectindex].ps->fta = 0;
611
    g_player[myconnectindex].ps->fta = 0;
612
612
613
    x = 0;
613
    x = 0;
614
614
615
    sh = 4-(sintable[(totalclock<<4)&2047]>>11);
615
    sh = 4-(sintable[(totalclock<<4)&2047]>>11);
616
616
617
    if (bpp > 8)
617
    if (bpp > 8)
618
    {
618
    {
619
        int x,y=0;
619
        int x,y=0;
620
        for (;y<ydim;y+=tilesizy[BIGHOLE])
620
        for (;y<ydim;y+=tilesizy[BIGHOLE])
621
            for (x=0;x<xdim;x+=tilesizx[BIGHOLE])
621
            for (x=0;x<xdim;x+=tilesizx[BIGHOLE])
622
                rotatesprite(x<<16,y<<16,65536L,0,BIGHOLE,80,0,1+8+16,0,0,xdim-1,ydim-1);
622
                rotatesprite(x<<16,y<<16,65536L,0,BIGHOLE,80,0,1+8+16,0,0,xdim-1,ydim-1);
623
    }
623
    }
624
624
625
    if (!(current_menu >= 1000 && current_menu <= 2999 && current_menu >= 300 && current_menu <= 369))
625
    if (!(current_menu >= 1000 && current_menu <= 2999 && current_menu >= 300 && current_menu <= 369))
626
        vscrn();
626
        vscrn();
627
627
628
    if (KB_KeyPressed(sc_Q))
628
    if (KB_KeyPressed(sc_Q))
629
    {
629
    {
630
        switch (current_menu)
630
        switch (current_menu)
631
        {
631
        {
632
        case 102:
632
        case 102:
633
        case 210:
633
        case 210:
634
        case 360:
634
        case 360:
635
        case 361:
635
        case 361:
636
        case 362:
636
        case 362:
637
        case 363:
637
        case 363:
638
        case 364:
638
        case 364:
639
        case 365:
639
        case 365:
640
        case 366:
640
        case 366:
641
        case 367:
641
        case 367:
642
        case 368:
642
        case 368:
643
        case 369:
643
        case 369:
644
        case 500:
644
        case 500:
645
        case 501:
645
        case 501:
646
        case 502:
646
        case 502:
647
        case 603:
647
        case 603:
648
        case 10001:
648
        case 10001:
649
        case 20003:
649
        case 20003:
650
        case 20005:
650
        case 20005:
651
            break;
651
            break;
652
        default:
652
        default:
653
            if (current_menu >= 0)
653
            if (current_menu >= 0)
654
            {
654
            {
655
                last_menu = current_menu;
655
                last_menu = current_menu;
656
                last_menu_pos = probey;
656
                last_menu_pos = probey;
657
                cmenu(502);
657
                cmenu(502);
658
            }
658
            }
659
            break;
659
            break;
660
        }
660
        }
661
    }
661
    }
662
662
663
    switch (current_menu)
663
    switch (current_menu)
664
    {
664
    {
665
    case 25000:
665
    case 25000:
666
        gametext(160,90,"SELECT A SAVE SPOT BEFORE",0,2+8+16);
666
        gametext(160,90,"SELECT A SAVE SPOT BEFORE",0,2+8+16);
667
        gametext(160,90+9,"YOU QUICK RESTORE.",0,2+8+16);
667
        gametext(160,90+9,"YOU QUICK RESTORE.",0,2+8+16);
668
668
669
        x = probe(186,124,0,1);
669
        x = probe(186,124,0,1);
670
        if (x >= -1)
670
        if (x >= -1)
671
        {
671
        {
672
            if (ud.multimode < 2 && ud.recstat != 2)
672
            if (ud.multimode < 2 && ud.recstat != 2)
673
            {
673
            {
674
                ready2send = 1;
674
                ready2send = 1;
675
                totalclock = ototalclock;
675
                totalclock = ototalclock;
676
            }
676
            }
677
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
677
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
678
        }
678
        }
679
        break;
679
        break;
680
680
681
    case 20000:
681
    case 20000:
682
        x = probe(326,190,0,1);
682
        x = probe(326,190,0,1);
683
        gametext(160,50-8,"YOU ARE PLAYING THE SHAREWARE",0,2+8+16);
683
        gametext(160,50-8,"YOU ARE PLAYING THE SHAREWARE",0,2+8+16);
684
        gametext(160,59-8,"VERSION OF DUKE NUKEM 3D.  WHILE",0,2+8+16);
684
        gametext(160,59-8,"VERSION OF DUKE NUKEM 3D.  WHILE",0,2+8+16);
685
        gametext(160,68-8,"THIS VERSION IS REALLY COOL, YOU",0,2+8+16);
685
        gametext(160,68-8,"THIS VERSION IS REALLY COOL, YOU",0,2+8+16);
686
        gametext(160,77-8,"ARE MISSING OVER 75%% OF THE TOTAL",0,2+8+16);
686
        gametext(160,77-8,"ARE MISSING OVER 75%% OF THE TOTAL",0,2+8+16);
687
        gametext(160,86-8,"GAME, ALONG WITH OTHER GREAT EXTRAS",0,2+8+16);
687
        gametext(160,86-8,"GAME, ALONG WITH OTHER GREAT EXTRAS",0,2+8+16);
688
        gametext(160,95-8,"AND GAMES, WHICH YOU'LL GET WHEN",0,2+8+16);
688
        gametext(160,95-8,"AND GAMES, WHICH YOU'LL GET WHEN",0,2+8+16);
689
        gametext(160,104-8,"YOU ORDER THE COMPLETE VERSION AND",0,2+8+16);
689
        gametext(160,104-8,"YOU ORDER THE COMPLETE VERSION AND",0,2+8+16);
690
        gametext(160,113-8,"GET THE FINAL TWO EPISODES.",0,2+8+16);
690
        gametext(160,113-8,"GET THE FINAL TWO EPISODES.",0,2+8+16);
691
691
692
        gametext(160,113+8,"PLEASE READ THE 'HOW TO ORDER' ITEM",0,2+8+16);
692
        gametext(160,113+8,"PLEASE READ THE 'HOW TO ORDER' ITEM",0,2+8+16);
693
        gametext(160,122+8,"ON THE MAIN MENU IF YOU WISH TO",0,2+8+16);
693
        gametext(160,122+8,"ON THE MAIN MENU IF YOU WISH TO",0,2+8+16);
694
        gametext(160,131+8,"UPGRADE TO THE FULL REGISTERED",0,2+8+16);
694
        gametext(160,131+8,"UPGRADE TO THE FULL REGISTERED",0,2+8+16);
695
        gametext(160,140+8,"VERSION OF DUKE NUKEM 3D.",0,2+8+16);
695
        gametext(160,140+8,"VERSION OF DUKE NUKEM 3D.",0,2+8+16);
696
        gametext(160,149+16,"PRESS ANY KEY...",0,2+8+16);
696
        gametext(160,149+16,"PRESS ANY KEY...",0,2+8+16);
697
697
698
        if (x >= -1) cmenu(100);
698
        if (x >= -1) cmenu(100);
699
        break;
699
        break;
700
700
701
    case 20001:
701
    case 20001:
702
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
702
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
703
        menutext(160,24,0,0,"NETWORK GAME");
703
        menutext(160,24,0,0,"NETWORK GAME");
704
704
705
        x = probe(160,100-18,18,3);
705
        x = probe(160,100-18,18,3);
706
706
707
        if (x == -1) cmenu(0);
707
        if (x == -1) cmenu(0);
708
        else if (x == 2) cmenu(20010);
708
        else if (x == 2) cmenu(20010);
709
        else if (x == 1) cmenu(20020);
709
        else if (x == 1) cmenu(20020);
710
        else if (x == 0) cmenu(20002);
710
        else if (x == 0) cmenu(20002);
711
711
712
        menutext(160,100-18,MENUHIGHLIGHT(0),0,"PLAYER SETUP");
712
        menutext(160,100-18,MENUHIGHLIGHT(0),0,"PLAYER SETUP");
713
        menutext(160,100,MENUHIGHLIGHT(1),0,"JOIN GAME");
713
        menutext(160,100,MENUHIGHLIGHT(1),0,"JOIN GAME");
714
        menutext(160,100+18,MENUHIGHLIGHT(2),0,"HOST GAME");
714
        menutext(160,100+18,MENUHIGHLIGHT(2),0,"HOST GAME");
715
        break;
715
        break;
716
716
717
    case 20002:
717
    case 20002:
718
    case 20003:
718
    case 20003:
719
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
719
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
720
        menutext(160,24,0,0,"PLAYER SETUP");
720
        menutext(160,24,0,0,"PLAYER SETUP");
721
        c = (320>>1)-120;
721
        c = (320>>1)-120;
722
        {
722
        {
723
            int io, ii, yy = 37, d=c+140, enabled;
723
            int io, ii, yy = 37, d=c+140, enabled;
724
            char *opts[] =
724
            char *opts[] =
725
            {
725
            {
726
                "Name",
726
                "Name",
727
                "-",
727
                "-",
728
                "Color",
728
                "Color",
729
                "-",
729
                "-",
730
                "Team",
730
                "Team",
731
                "-",
731
                "-",
732
                "-",
732
                "-",
733
                "Auto aim",
733
                "Auto aim",
734
                "Mouse aim",
734
                "Mouse aim",
735
                "-",
735
                "-",
736
                "-",
736
                "-",
737
                "Switch weapon on pickup",
737
                "Switch weapon on pickup",
738
                "Switch weapon when empty",
738
                "Switch weapon when empty",
739
                "-",
739
                "-",
740
                "-",
740
                "-",
741
                "Network packets/sec",
741
                "Network packets/sec",
742
                "-",
742
                "-",
743
                "-",
743
                "-",
744
                "Multiplayer macros",
744
                "Multiplayer macros",
745
                NULL
745
                NULL
746
            };
746
            };
747
747
748
            x = ud.color;
748
            x = ud.color;
749
749
750
            if (probey == 2)
750
            if (probey == 2)
751
                x = getteampal(ud.team);
751
                x = getteampal(ud.team);
752
752
753
            rotatesprite((260)<<16,(24+(tilesizy[APLAYER]>>1))<<16,49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,x,10,0,0,xdim-1,ydim-1);
753
            rotatesprite((260)<<16,(24+(tilesizy[APLAYER]>>1))<<16,49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,x,10,0,0,xdim-1,ydim-1);
754
754
755
            for (ii=io=0; opts[ii]; ii++)
755
            for (ii=io=0; opts[ii]; ii++)
756
            {
756
            {
757
                if (opts[ii][0] == '-' && !opts[ii][1])
757
                if (opts[ii][0] == '-' && !opts[ii][1])
758
                {
758
                {
759
                    if (io <= probey) yy += 4;
759
                    if (io <= probey) yy += 4;
760
                    continue;
760
                    continue;
761
                }
761
                }
762
                if (io < probey) yy += 8;
762
                if (io < probey) yy += 8;
763
                io++;
763
                io++;
764
            }
764
            }
765
765
766
766
767
            if (current_menu == 20002)
767
            if (current_menu == 20002)
768
            {
768
            {
769
                x = probesm(c,yy+5,0,io);
769
                x = probesm(c,yy+5,0,io);
770
770
771
                if (x == -1)
771
                if (x == -1)
772
                {
772
                {
773
                    cmenu(202);
773
                    cmenu(202);
774
                    probey = 3;
774
                    probey = 3;
775
                    break;
775
                    break;
776
                }
776
                }
777
777
778
                for (ii=io=0; opts[ii]; ii++)
778
                for (ii=io=0; opts[ii]; ii++)
779
                {
779
                {
780
                    if (opts[ii][0] == '-' && !opts[ii][1])
780
                    if (opts[ii][0] == '-' && !opts[ii][1])
781
                        continue;
781
                        continue;
782
                    enabled = 1;
782
                    enabled = 1;
783
                    switch (io)
783
                    switch (io)
784
                    {
784
                    {
785
                    case 0:
785
                    case 0:
786
                        if (x == io)
786
                        if (x == io)
787
                        {
787
                        {
788
                            strcpy(buf, myname);
788
                            strcpy(buf, myname);
789
                            inputloc = strlen(buf);
789
                            inputloc = strlen(buf);
790
                            current_menu = 20003;
790
                            current_menu = 20003;
791
791
792
                            KB_ClearKeyDown(sc_Enter);
792
                            KB_ClearKeyDown(sc_Enter);
793
                            KB_ClearKeyDown(sc_kpad_Enter);
793
                            KB_ClearKeyDown(sc_kpad_Enter);
794
                            KB_FlushKeyboardQueue();
794
                            KB_FlushKeyboardQueue();
795
                        }
795
                        }
796
                        break;
796
                        break;
797
797
798
                    case 1:
798
                    case 1:
799
                        i = ud.color;
799
                        i = ud.color;
800
                        if (x == io)
800
                        if (x == io)
801
                        {
801
                        {
802
                            ud.color++;
802
                            ud.color++;
803
                            if (ud.color > 23)
803
                            if (ud.color > 23)
804
                                ud.color = 0;
804
                                ud.color = 0;
805
                            check_valid_color((int *)&ud.color,-1);
805
                            check_valid_color((int *)&ud.color,-1);
806
                        }
806
                        }
807
                        modval(0,23,(int *)&ud.color,1,probey==1);
807
                        modval(0,23,(int *)&ud.color,1,probey==1);
808
                        check_valid_color((int *)&ud.color,i);
808
                        check_valid_color((int *)&ud.color,i);
809
                        if (ud.color != i)
809
                        if (ud.color != i)
810
                            updateplayer();
810
                            updateplayer();
811
                        break;
811
                        break;
812
812
813
                    case 2:
813
                    case 2:
814
                        i = ud.team;
814
                        i = ud.team;
815
                        if (x == io)
815
                        if (x == io)
816
                        {
816
                        {
817
                            ud.team++;
817
                            ud.team++;
818
                            if (ud.team == 4)
818
                            if (ud.team == 4)
819
                                ud.team = 0;
819
                                ud.team = 0;
820
                        }
820
                        }
821
                        modval(0,3,(int *)&ud.team,1,probey==2);
821
                        modval(0,3,(int *)&ud.team,1,probey==2);
822
                        if (ud.team != i)
822
                        if (ud.team != i)
823
                            updateplayer();
823
                            updateplayer();
824
                        break;
824
                        break;
825
825
826
                    case 3:
826
                    case 3:
827
                        i = ud.config.AutoAim;
827
                        i = ud.config.AutoAim;
828
                        if (x == io)
828
                        if (x == io)
829
                            ud.config.AutoAim = (ud.config.AutoAim == 2) ? 0 : ud.config.AutoAim+1;
829
                            ud.config.AutoAim = (ud.config.AutoAim == 2) ? 0 : ud.config.AutoAim+1;
830
                        modval(0,2,(int *)&ud.config.AutoAim,1,probey==3);
830
                        modval(0,2,(int *)&ud.config.AutoAim,1,probey==3);
831
                        if (ud.config.AutoAim != i)
831
                        if (ud.config.AutoAim != i)
832
                            updateplayer();
832
                            updateplayer();
833
                        break;
833
                        break;
834
834
835
                    case 4:
835
                    case 4:
836
                        i = ud.mouseaiming;
836
                        i = ud.mouseaiming;
837
                        if (x == io)
837
                        if (x == io)
838
                            ud.mouseaiming = !ud.mouseaiming;
838
                            ud.mouseaiming = !ud.mouseaiming;
839
                        modval(0,1,(int *)&ud.mouseaiming,1,probey==4);
839
                        modval(0,1,(int *)&ud.mouseaiming,1,probey==4);
840
                        if (ud.mouseaiming != i)
840
                        if (ud.mouseaiming != i)
841
                            updateplayer();
841
                            updateplayer();
842
                        break;
842
                        break;
843
843
844
                    case 5:
844
                    case 5:
845
                        i = 0;
845
                        i = 0;
846
                        if (ud.weaponswitch & 1)
846
                        if (ud.weaponswitch & 1)
847
                            i = 1;
847
                            i = 1;
848
                        if (x == io)
848
                        if (x == io)
849
                            i = 1-i;
849
                            i = 1-i;
850
                        modval(0,1,(int *)&i,1,probey==5);
850
                        modval(0,1,(int *)&i,1,probey==5);
851
                        if ((ud.weaponswitch & 1 && !i) || (!(ud.weaponswitch & 1) && i))
851
                        if ((ud.weaponswitch & 1 && !i) || (!(ud.weaponswitch & 1) && i))
852
                        {
852
                        {
853
                            ud.weaponswitch ^= 1;
853
                            ud.weaponswitch ^= 1;
854
                            updateplayer();
854
                            updateplayer();
855
                        }
855
                        }
856
                        break;
856
                        break;
857
                    case 6:
857
                    case 6:
858
                        i = 0;
858
                        i = 0;
859
                        if (ud.weaponswitch & 2)
859
                        if (ud.weaponswitch & 2)
860
                            i = 1;
860
                            i = 1;
861
                        if (x == io)
861
                        if (x == io)
862
                            i = 1-i;
862
                            i = 1-i;
863
                        modval(0,1,(int *)&i,1,probey==6);
863
                        modval(0,1,(int *)&i,1,probey==6);
864
                        if ((ud.weaponswitch & 2 && !i) || (!(ud.weaponswitch & 2) && i))
864
                        if ((ud.weaponswitch & 2 && !i) || (!(ud.weaponswitch & 2) && i))
865
                        {
865
                        {
866
                            ud.weaponswitch ^= 2;
866
                            ud.weaponswitch ^= 2;
867
                            updateplayer();
867
                            updateplayer();
868
                        }
868
                        }
869
                        break;
869
                        break;
870
                    case 7:
870
                    case 7:
871
                        if (x == io)
871
                        if (x == io)
872
                            packetrate = min(max(((packetrate/50)*50)+50,50),1000);
872
                            packetrate = min(max(((packetrate/50)*50)+50,50),1000);
873
                        modval(50,1000,(int *)&packetrate,10,probey==7?2:0);
873
                        modval(50,1000,(int *)&packetrate,10,probey==7?2:0);
874
                        break;
874
                        break;
875
                    case 8:
875
                    case 8:
876
                        if (x == io)
876
                        if (x == io)
877
                        {
877
                        {
878
                            cmenu(20004);
878
                            cmenu(20004);
879
                        }
879
                        }
880
                        break;
880
                        break;
881
881
882
                    default:
882
                    default:
883
                        break;
883
                        break;
884
                    }
884
                    }
885
                    io++;
885
                    io++;
886
                }
886
                }
887
            }
887
            }
888
            else
888
            else
889
            {
889
            {
890
                x = strget(d-50,37,buf,30,0);
890
                x = strget(d-50,37,buf,30,0);
891
891
892
                while (Bstrlen(stripcolorcodes(buf)) > 10)
892
                while (Bstrlen(stripcolorcodes(buf)) > 10)
893
                {
893
                {
894
                    buf[Bstrlen(buf)-1] = '\0';
894
                    buf[Bstrlen(buf)-1] = '\0';
895
                    inputloc--;
895
                    inputloc--;
896
                }
896
                }
897
897
898
                if (x)
898
                if (x)
899
                {
899
                {
900
                    if (x == 1)
900
                    if (x == 1)
901
                    {
901
                    {
902
                        if (buf[0] && Bstrcmp(myname,buf))
902
                        if (buf[0] && Bstrcmp(myname,buf))
903
                        {
903
                        {
904
                            Bstrcpy(myname,buf);
904
                            Bstrcpy(myname,buf);
905
                            updateplayer();
905
                            updateplayer();
906
                        }
906
                        }
907
                        // send name update
907
                        // send name update
908
                    }
908
                    }
909
                    KB_ClearKeyDown(sc_Enter);
909
                    KB_ClearKeyDown(sc_Enter);
910
                    KB_ClearKeyDown(sc_kpad_Enter);
910
                    KB_ClearKeyDown(sc_kpad_Enter);
911
                    KB_FlushKeyboardQueue();
911
                    KB_FlushKeyboardQueue();
912
912
913
                    current_menu = 20002;
913
                    current_menu = 20002;
914
                }
914
                }
915
            }
915
            }
916
916
917
            yy = 37;
917
            yy = 37;
918
            {
918
            {
919
                for (ii=io=0; opts[ii]; ii++)
919
                for (ii=io=0; opts[ii]; ii++)
920
                {
920
                {
921
                    if (opts[ii][0] == '-' && !opts[ii][1])
921
                    if (opts[ii][0] == '-' && !opts[ii][1])
922
                    {
922
                    {
923
                        yy += 4;
923
                        yy += 4;
924
                        continue;
924
                        continue;
925
                    }
925
                    }
926
                    enabled = 1;
926
                    enabled = 1;
927
                    switch (io)
927
                    switch (io)
928
                    {
928
                    {
929
                    case 0:
929
                    case 0:
930
                        if (current_menu == 20002)
930
                        if (current_menu == 20002)
931
                        {
931
                        {
932
                            gametext(d-50,yy,myname,MENUHIGHLIGHT(io),2+8+16);
932
                            gametext(d-50,yy,myname,MENUHIGHLIGHT(io),2+8+16);
933
                        }
933
                        }
934
                        break;
934
                        break;
935
935
936
                    case 1:
936
                    case 1:
937
                    {
937
                    {
938
                        char *s[] = { "Auto","","","","","","","","","Blue","Red","Green","Gray","Dark gray","Dark green","Brown",
938
                        char *s[] = { "Auto","","","","","","","","","Blue","Red","Green","Gray","Dark gray","Dark green","Brown",
939
                                      "Dark blue","","","","","Bright red","","Yellow","",""
939
                                      "Dark blue","","","","","Bright red","","Yellow","",""
940
                                    };
940
                                    };
941
                        gametext(d-50,yy,s[ud.color],MENUHIGHLIGHT(io),2+8+16);
941
                        gametext(d-50,yy,s[ud.color],MENUHIGHLIGHT(io),2+8+16);
942
                    }
942
                    }
943
                    break;
943
                    break;
944
944
945
                    case 2:
945
                    case 2:
946
                    {
946
                    {
947
                        char *s[] = { "Blue", "Red", "Green", "Gray" };
947
                        char *s[] = { "Blue", "Red", "Green", "Gray" };
948
                        gametext(d-50,yy,s[ud.team],MENUHIGHLIGHT(io),2+8+16);
948
                        gametext(d-50,yy,s[ud.team],MENUHIGHLIGHT(io),2+8+16);
949
                    }
949
                    }
950
                    break;
950
                    break;
951
951
952
                    case 3:
952
                    case 3:
953
                    {
953
                    {
954
                        char *s[] = { "Off", "All weapons", "Hitscan only" };
954
                        char *s[] = { "Off", "All weapons", "Hitscan only" };
955
                        gametext(d-50,yy,s[ud.config.AutoAim],MENUHIGHLIGHT(io),2+8+16);
955
                        gametext(d-50,yy,s[ud.config.AutoAim],MENUHIGHLIGHT(io),2+8+16);
956
                    }
956
                    }
957
                    break;
957
                    break;
958
958
959
                    case 4:
959
                    case 4:
960
                        gametext(d-50,yy,ud.mouseaiming?"Hold button":"Toggle on/off",MENUHIGHLIGHT(io),2+8+16);
960
                        gametext(d-50,yy,ud.mouseaiming?"Hold button":"Toggle on/off",MENUHIGHLIGHT(io),2+8+16);
961
                        break;
961
                        break;
962
962
963
                    case 5:
963
                    case 5:
964
                        gametext(d+70,yy,ud.weaponswitch&1?"On":"Off",MENUHIGHLIGHT(io),2+8+16);
964
                        gametext(d+70,yy,ud.weaponswitch&1?"On":"Off",MENUHIGHLIGHT(io),2+8+16);
965
                        break;
965
                        break;
966
966
967
                    case 6:
967
                    case 6:
968
                        gametext(d+70,yy,ud.weaponswitch&2?"On":"Off",MENUHIGHLIGHT(io),2+8+16);
968
                        gametext(d+70,yy,ud.weaponswitch&2?"On":"Off",MENUHIGHLIGHT(io),2+8+16);
969
                        break;
969
                        break;
970
                    case 7:
970
                    case 7:
971
                        Bsprintf(tempbuf,"%d",packetrate);
971
                        Bsprintf(tempbuf,"%d",packetrate);
972
                        gametext(d+70,yy,tempbuf,MENUHIGHLIGHT(io),2+8+16);
972
                        gametext(d+70,yy,tempbuf,MENUHIGHLIGHT(io),2+8+16);
973
                        break;
973
                        break;
974
                    default:
974
                    default:
975
                        break;
975
                        break;
976
                    }
976
                    }
977
                    gametextpal(c,yy, opts[ii], enabled?MENUHIGHLIGHT(io):DISABLEDMENUSHADE, 10);
977
                    gametextpal(c,yy, opts[ii], enabled?MENUHIGHLIGHT(io):DISABLEDMENUSHADE, 10);
978
                    io++;
978
                    io++;
979
                    yy += 8;
979
                    yy += 8;
980
                }
980
                }
981
            }
981
            }
982
982
983
            break;
983
            break;
984
        }
984
        }
985
    case 20004:
985
    case 20004:
986
    case 20005:
986
    case 20005:
987
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
987
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
988
        menutext(160,24,0,0,"MULTIPLAYER MACROS");
988
        menutext(160,24,0,0,"MULTIPLAYER MACROS");
989
989
990
        if (current_menu == 20004)
990
        if (current_menu == 20004)
991
        {
991
        {
992
            x = probesm(24,45,8,10);
992
            x = probesm(24,45,8,10);
993
            if (x == -1)
993
            if (x == -1)
994
            {
994
            {
995
                cmenu(20002);
995
                cmenu(20002);
996
                probey = 8;
996
                probey = 8;
997
            }
997
            }
998
            else if (x >= 0 && x <= 9)
998
            else if (x >= 0 && x <= 9)
999
            {
999
            {
1000
                strcpy(buf, ud.ridecule[x]);
1000
                strcpy(buf, ud.ridecule[x]);
1001
                inputloc = strlen(buf);
1001
                inputloc = strlen(buf);
1002
                last_menu_pos = probey;
1002
                last_menu_pos = probey;
1003
                current_menu = 20005;
1003
                current_menu = 20005;
1004
                KB_ClearKeyDown(sc_Enter);
1004
                KB_ClearKeyDown(sc_Enter);
1005
                KB_ClearKeyDown(sc_kpad_Enter);
1005
                KB_ClearKeyDown(sc_kpad_Enter);
1006
                KB_FlushKeyboardQueue();
1006
                KB_FlushKeyboardQueue();
1007
            }
1007
            }
1008
        }
1008
        }
1009
        else
1009
        else
1010
        {
1010
        {
1011
            x = strget(26,40+(8*probey),buf,34,0);
1011
            x = strget(26,40+(8*probey),buf,34,0);
1012
            if (x)
1012
            if (x)
1013
            {
1013
            {
1014
                if (x == 1)
1014
                if (x == 1)
1015
                {
1015
                {
1016
                    Bstrcpy(ud.ridecule[last_menu_pos],buf);
1016
                    Bstrcpy(ud.ridecule[last_menu_pos],buf);
1017
                }
1017
                }
1018
                KB_ClearKeyDown(sc_Enter);
1018
                KB_ClearKeyDown(sc_Enter);
1019
                KB_ClearKeyDown(sc_kpad_Enter);
1019
                KB_ClearKeyDown(sc_kpad_Enter);
1020
                KB_FlushKeyboardQueue();
1020
                KB_FlushKeyboardQueue();
1021
                current_menu = 20004;
1021
                current_menu = 20004;
1022
            }
1022
            }
1023
        }
1023
        }
1024
        for (i=0;i<10;i++)
1024
        for (i=0;i<10;i++)
1025
        {
1025
        {
1026
            if (current_menu == 20005 && i == last_menu_pos) continue;
1026
            if (current_menu == 20005 && i == last_menu_pos) continue;
1027
            gametextpal(26,40+(i<<3),ud.ridecule[i],MENUHIGHLIGHT(i),0);
1027
            gametextpal(26,40+(i<<3),ud.ridecule[i],MENUHIGHLIGHT(i),0);
1028
        }
1028
        }
1029
1029
1030
        gametext(160,144,"ACTIVATE IN-GAME WITH SHIFT-F#",0,2+8+16);
1030
        gametext(160,144,"ACTIVATE IN-GAME WITH SHIFT-F#",0,2+8+16);
1031
1031
1032
        break;
1032
        break;
1033
1033
1034
#if 0
1034
#if 0
1035
    case 20010:
1035
    case 20010:
1036
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1036
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1037
        menutext(160,24,0,0,"HOST NETWORK GAME");
1037
        menutext(160,24,0,0,"HOST NETWORK GAME");
1038
1038
1039
        x = probe(46,50,80,2);
1039
        x = probe(46,50,80,2);
1040
1040
1041
        if (x == -1)
1041
        if (x == -1)
1042
        {
1042
        {
1043
            cmenu(20001);
1043
            cmenu(20001);
1044
            probey = 2;
1044
            probey = 2;
1045
        }
1045
        }
1046
        else if (x == 0) cmenu(20011);
1046
        else if (x == 0) cmenu(20011);
1047
1047
1048
        menutext(40,50,0,0,        "GAME OPTIONS");
1048
        menutext(40,50,0,0,        "GAME OPTIONS");
1049
        minitext(90,60,            "GAME TYPE"    ,2,26);
1049
        minitext(90,60,            "GAME TYPE"    ,2,26);
1050
        minitext(90,60+8,          "EPISODE"      ,2,26);
1050
        minitext(90,60+8,          "EPISODE"      ,2,26);
1051
        minitext(90,60+8+8,        "LEVEL"        ,2,26);
1051
        minitext(90,60+8+8,        "LEVEL"        ,2,26);
1052
        minitext(90,60+8+8+8,      "MONSTERS"     ,2,26);
1052
        minitext(90,60+8+8+8,      "MONSTERS"     ,2,26);
1053
        if (ud.m_coop == 0)
1053
        if (ud.m_coop == 0)
1054
            minitext(90,60+8+8+8+8,    "MARKERS"      ,2,26);
1054
            minitext(90,60+8+8+8+8,    "MARKERS"      ,2,26);
1055
        else if (ud.m_coop == 1)
1055
        else if (ud.m_coop == 1)
1056
            minitext(90,60+8+8+8+8,    "FRIENDLY FIRE",2,26);
1056
            minitext(90,60+8+8+8+8,    "FRIENDLY FIRE",2,26);
1057
        minitext(90,60+8+8+8+8+8,  "USER MAP"     ,2,26);
1057
        minitext(90,60+8+8+8+8+8,  "USER MAP"     ,2,26);
1058
1058
1059
        gametext(90+60,60,gametype_names[ud.m_coop],0,26);
1059
        gametext(90+60,60,gametype_names[ud.m_coop],0,26);
1060
1060
1061
        minitext(90+60,60+8,      volume_names[ud.m_volume_number],0,26);
1061
        minitext(90+60,60+8,      volume_names[ud.m_volume_number],0,26);
1062
        minitext(90+60,60+8+8,    level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number],0,26);
1062
        minitext(90+60,60+8+8,    level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number],0,26);
1063
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1063
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1064
            minitext(90+60,60+8+8+8,  skill_names[ud.m_player_skill],0,26);
1064
            minitext(90+60,60+8+8+8,  skill_names[ud.m_player_skill],0,26);
1065
        else minitext(90+60,60+8+8+8,  "NONE",0,28);
1065
        else minitext(90+60,60+8+8+8,  "NONE",0,28);
1066
        if (ud.m_coop == 0)
1066
        if (ud.m_coop == 0)
1067
        {
1067
        {
1068
            if (ud.m_marker) minitext(90+60,60+8+8+8+8,"ON",0,26);
1068
            if (ud.m_marker) minitext(90+60,60+8+8+8+8,"ON",0,26);
1069
            else minitext(90+60,60+8+8+8+8,"OFF",0,26);
1069
            else minitext(90+60,60+8+8+8+8,"OFF",0,26);
1070
        }
1070
        }
1071
        else if (ud.m_coop == 1)
1071
        else if (ud.m_coop == 1)
1072
        {
1072
        {
1073
            if (ud.m_ffire) minitext(90+60,60+8+8+8+8,"ON",0,26);
1073
            if (ud.m_ffire) minitext(90+60,60+8+8+8+8,"ON",0,26);
1074
            else minitext(90+60,60+8+8+8+8,"OFF",0,26);
1074
            else minitext(90+60,60+8+8+8+8,"OFF",0,26);
1075
        }
1075
        }
1076
1076
1077
        menutext(40,50+80,0,0,"LAUNCH GAME");
1077
        menutext(40,50+80,0,0,"LAUNCH GAME");
1078
        break;
1078
        break;
1079
1079
1080
    case 20011:
1080
    case 20011:
1081
        c = (320>>1) - 120;
1081
        c = (320>>1) - 120;
1082
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1082
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1083
        menutext(160,24,0,0,"NET GAME OPTIONS");
1083
        menutext(160,24,0,0,"NET GAME OPTIONS");
1084
1084
1085
        x = probe(c,57-8,16,8);
1085
        x = probe(c,57-8,16,8);
1086
1086
1087
        switch (x)
1087
        switch (x)
1088
        {
1088
        {
1089
        case -1:
1089
        case -1:
1090
            cmenu(20010);
1090
            cmenu(20010);
1091
            break;
1091
            break;
1092
        case 0:
1092
        case 0:
1093
            ud.m_coop++;
1093
            ud.m_coop++;
1094
            if (ud.m_coop == 3) ud.m_coop = 0;
1094
            if (ud.m_coop == 3) ud.m_coop = 0;
1095
            break;
1095
            break;
1096
        case 1:
1096
        case 1:
1097
            if (!VOLUMEONE)
1097
            if (!VOLUMEONE)
1098
            {
1098
            {
1099
                ud.m_volume_number++;
1099
                ud.m_volume_number++;
1100
                if (ud.m_volume_number == num_volumes) ud.m_volume_number = 0;
1100
                if (ud.m_volume_number == num_volumes) ud.m_volume_number = 0;
1101
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1101
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1102
                    ud.m_level_number = 0;
1102
                    ud.m_level_number = 0;
1103
                if (ud.m_level_number > 10) ud.m_level_number = 0;
1103
                if (ud.m_level_number > 10) ud.m_level_number = 0;
1104
            }
1104
            }
1105
            break;
1105
            break;
1106
        case 2:
1106
        case 2:
1107
            ud.m_level_number++;
1107
            ud.m_level_number++;
1108
            if (!VOLUMEONE)
1108
            if (!VOLUMEONE)
1109
            {
1109
            {
1110
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1110
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1111
                    ud.m_level_number = 0;
1111
                    ud.m_level_number = 0;
1112
            }
1112
            }
1113
            else
1113
            else
1114
            {
1114
            {
1115
                if (ud.m_volume_number == 0 && ud.m_level_number > 5)
1115
                if (ud.m_volume_number == 0 && ud.m_level_number > 5)
1116
                    ud.m_level_number = 0;
1116
                    ud.m_level_number = 0;
1117
            }
1117
            }
1118
            if (ud.m_level_number > 10) ud.m_level_number = 0;
1118
            if (ud.m_level_number > 10) ud.m_level_number = 0;
1119
            break;
1119
            break;
1120
        case 3:
1120
        case 3:
1121
            if (ud.m_monsters_off == 1 && ud.m_player_skill > 0)
1121
            if (ud.m_monsters_off == 1 && ud.m_player_skill > 0)
1122
                ud.m_monsters_off = 0;
1122
                ud.m_monsters_off = 0;
1123
1123
1124
            if (ud.m_monsters_off == 0)
1124
            if (ud.m_monsters_off == 0)
1125
            {
1125
            {
1126
                ud.m_player_skill++;
1126
                ud.m_player_skill++;
1127
                if (ud.m_player_skill > 3)
1127
                if (ud.m_player_skill > 3)
1128
                {
1128
                {
1129
                    ud.m_player_skill = 0;
1129
                    ud.m_player_skill = 0;
1130
                    ud.m_monsters_off = 1;
1130
                    ud.m_monsters_off = 1;
1131
                }
1131
                }
1132
            }
1132
            }
1133
            else ud.m_monsters_off = 0;
1133
            else ud.m_monsters_off = 0;
1134
1134
1135
            break;
1135
            break;
1136
1136
1137
        case 4:
1137
        case 4:
1138
            if (ud.m_coop == 0)
1138
            if (ud.m_coop == 0)
1139
                ud.m_marker = !ud.m_marker;
1139
                ud.m_marker = !ud.m_marker;
1140
            break;
1140
            break;
1141
1141
1142
        case 5:
1142
        case 5:
1143
            if (ud.m_coop == 1)
1143
            if (ud.m_coop == 1)
1144
                ud.m_ffire = !ud.m_ffire;
1144
                ud.m_ffire = !ud.m_ffire;
1145
            break;
1145
            break;
1146
1146
1147
        case 6:
1147
        case 6:
1148
            // pick the user map
1148
            // pick the user map
1149
            break;
1149
            break;
1150
1150
1151
        case 7:
1151
        case 7:
1152
            cmenu(20010);
1152
            cmenu(20010);
1153
            break;
1153
            break;
1154
        }
1154
        }
1155
1155
1156
        c += 40;
1156
        c += 40;
1157
1157
1158
        //         if(ud.m_coop==1) gametext(c+70,57-7-9,"COOPERATIVE PLAY",0,2+8+16);
1158
        //         if(ud.m_coop==1) gametext(c+70,57-7-9,"COOPERATIVE PLAY",0,2+8+16);
1159
        //         else if(ud.m_coop==2) gametext(c+70,57-7-9,"DUKEMATCH (NO SPAWN)",0,2+8+16);
1159
        //         else if(ud.m_coop==2) gametext(c+70,57-7-9,"DUKEMATCH (NO SPAWN)",0,2+8+16);
1160
        //         else gametext(c+70,57-7-9,"DUKEMATCH (SPAWN)",0,2+8+16);
1160
        //         else gametext(c+70,57-7-9,"DUKEMATCH (SPAWN)",0,2+8+16);
1161
        gametext(c+70,57-7-9,gametype_names[ud.m_coop],0,26);
1161
        gametext(c+70,57-7-9,gametype_names[ud.m_coop],0,26);
1162
1162
1163
        gametext(c+70,57+16-7-9,volume_names[ud.m_volume_number],0,2+8+16);
1163
        gametext(c+70,57+16-7-9,volume_names[ud.m_volume_number],0,2+8+16);
1164
1164
1165
        gametext(c+70,57+16+16-7-9,&level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number][0],0,2+8+16);
1165
        gametext(c+70,57+16+16-7-9,&level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number][0],0,2+8+16);
1166
1166
1167
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1167
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1168
            gametext(c+70,57+16+16+16-7-9,skill_names[ud.m_player_skill],0,2+8+16);
1168
            gametext(c+70,57+16+16+16-7-9,skill_names[ud.m_player_skill],0,2+8+16);
1169
        else gametext(c+70,57+16+16+16-7-9,"NONE",0,2+8+16);
1169
        else gametext(c+70,57+16+16+16-7-9,"NONE",0,2+8+16);
1170
1170
1171
        if (ud.m_coop == 0)
1171
        if (ud.m_coop == 0)
1172
        {
1172
        {
1173
            if (ud.m_marker)
1173
            if (ud.m_marker)
1174
                gametext(c+70,57+16+16+16+16-7-9,"ON",0,2+8+16);
1174
                gametext(c+70,57+16+16+16+16-7-9,"ON",0,2+8+16);
1175
            else gametext(c+70,57+16+16+16+16-7-9,"OFF",0,2+8+16);
1175
            else gametext(c+70,57+16+16+16+16-7-9,"OFF",0,2+8+16);
1176
        }
1176
        }
1177
1177
1178
        if (ud.m_coop == 1)
1178
        if (ud.m_coop == 1)
1179
        {
1179
        {
1180
            if (ud.m_ffire)
1180
            if (ud.m_ffire)
1181
                gametext(c+70,57+16+16+16+16+16-7-9,"ON",0,2+8+16);
1181
                gametext(c+70,57+16+16+16+16+16-7-9,"ON",0,2+8+16);
1182
            else gametext(c+70,57+16+16+16+16+16-7-9,"OFF",0,2+8+16);
1182
            else gametext(c+70,57+16+16+16+16+16-7-9,"OFF",0,2+8+16);
1183
        }
1183
        }
1184
1184
1185
        c -= 44;
1185
        c -= 44;
1186
1186
1187
        menutext(c,57-9,MENUHIGHLIGHT(0),PHX(-2),"GAME TYPE");
1187
        menutext(c,57-9,MENUHIGHLIGHT(0),PHX(-2),"GAME TYPE");
1188
1188
1189
        sprintf(tempbuf,"EPISODE %d",ud.m_volume_number+1);
1189
        sprintf(tempbuf,"EPISODE %d",ud.m_volume_number+1);
1190
        menutext(c,57+16-9,MENUHIGHLIGHT(1),PHX(-3),tempbuf);
1190
        menutext(c,57+16-9,MENUHIGHLIGHT(1),PHX(-3),tempbuf);
1191
1191
1192
        sprintf(tempbuf,"LEVEL %d",ud.m_level_number+1);
1192
        sprintf(tempbuf,"LEVEL %d",ud.m_level_number+1);
1193
        menutext(c,57+16+16-9,MENUHIGHLIGHT(2),PHX(-4),tempbuf);
1193
        menutext(c,57+16+16-9,MENUHIGHLIGHT(2),PHX(-4),tempbuf);
1194
1194
1195
        menutext(c,57+16+16+16-9,MENUHIGHLIGHT(3),PHX(-5),"MONSTERS");
1195
        menutext(c,57+16+16+16-9,MENUHIGHLIGHT(3),PHX(-5),"MONSTERS");
1196
1196
1197
        if (ud.m_coop == 0)
1197
        if (ud.m_coop == 0)
1198
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),PHX(-6),"MARKERS");
1198
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),PHX(-6),"MARKERS");
1199
        else
1199
        else
1200
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),1,"MARKERS");
1200
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),1,"MARKERS");
1201
1201
1202
        if (ud.m_coop == 1)
1202
        if (ud.m_coop == 1)
1203
            menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),PHX(-6),"FR. FIRE");
1203
            menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),PHX(-6),"FR. FIRE");
1204
        else menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),1,"FR. FIRE");
1204
        else menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),1,"FR. FIRE");
1205
1205
1206
        if (VOLUMEALL)
1206
        if (VOLUMEALL)
1207
        {
1207
        {
1208
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),boardfilename[0] == 0,"USER MAP");
1208
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),boardfilename[0] == 0,"USER MAP");
1209
            if (boardfilename[0] != 0)
1209
            if (boardfilename[0] != 0)
1210
                gametext(c+70+44,57+16+16+16+16+16,boardfilename,0,2+8+16);
1210
                gametext(c+70+44,57+16+16+16+16+16,boardfilename,0,2+8+16);
1211
        }
1211
        }
1212
        else
1212
        else
1213
        {
1213
        {
1214
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),1,"USER MAP");
1214
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),1,"USER MAP");
1215
        }
1215
        }
1216
1216
1217
        menutext(c,57+16+16+16+16+16+16+16-9,MENUHIGHLIGHT(7),PHX(-8),"ACCEPT");
1217
        menutext(c,57+16+16+16+16+16+16+16-9,MENUHIGHLIGHT(7),PHX(-8),"ACCEPT");
1218
        break;
1218
        break;
1219
1219
1220
    case 20020:
1220
    case 20020:
1221
    case 20021: // editing server
1221
    case 20021: // editing server
1222
    case 20022: // editing port
1222
    case 20022: // editing port
1223
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1223
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1224
        menutext(160,24,0,0,"JOIN NETWORK GAME");
1224
        menutext(160,24,0,0,"JOIN NETWORK GAME");
1225
1225
1226
        if (current_menu == 20020)
1226
        if (current_menu == 20020)
1227
        {
1227
        {
1228
            x = probe(46,50,20,3);
1228
            x = probe(46,50,20,3);
1229
1229
1230
            if (x == -1)
1230
            if (x == -1)
1231
            {
1231
            {
1232
                cmenu(20001);
1232
                cmenu(20001);
1233
                probey = 1;
1233
                probey = 1;
1234
            }
1234
            }
1235
            else if (x == 0)
1235
            else if (x == 0)
1236
            {
1236
            {
1237
                strcpy(buf, "localhost");
1237
                strcpy(buf, "localhost");
1238
                inputloc = strlen(buf);
1238
                inputloc = strlen(buf);
1239
                current_menu = 20021;
1239
                current_menu = 20021;
1240
            }
1240
            }
1241
            else if (x == 1)
1241
            else if (x == 1)
1242
            {
1242
            {
1243
                strcpy(buf, "19014");
1243
                strcpy(buf, "19014");
1244
                inputloc = strlen(buf);
1244
                inputloc = strlen(buf);
1245
                current_menu = 20022;
1245
                current_menu = 20022;
1246
            }
1246
            }
1247
            else if (x == 2)
1247
            else if (x == 2)
1248
                {}
1248
                {}
1249
            KB_ClearKeyDown(sc_Enter);
1249
            KB_ClearKeyDown(sc_Enter);
1250
            KB_ClearKeyDown(sc_kpad_Enter);
1250
            KB_ClearKeyDown(sc_kpad_Enter);
1251
            KB_FlushKeyboardQueue();
1251
            KB_FlushKeyboardQueue();
1252
        }
1252
        }
1253
        else if (current_menu == 20021)
1253
        else if (current_menu == 20021)
1254
        {
1254
        {
1255
            x = strget(40+100,50-9,buf,31,0);
1255
            x = strget(40+100,50-9,buf,31,0);
1256
            if (x)
1256
            if (x)
1257
            {
1257
            {
1258
                if (x == 1)
1258
                if (x == 1)
1259
                {
1259
                {
1260
                    //strcpy(myname,buf);
1260
                    //strcpy(myname,buf);
1261
                }
1261
                }
1262
1262
1263
                KB_ClearKeyDown(sc_Enter);
1263
                KB_ClearKeyDown(sc_Enter);
1264
                KB_ClearKeyDown(sc_kpad_Enter);
1264
                KB_ClearKeyDown(sc_kpad_Enter);
1265
                KB_FlushKeyboardQueue();
1265
                KB_FlushKeyboardQueue();
1266
1266
1267
                current_menu = 20020;
1267
                current_menu = 20020;
1268
            }
1268
            }
1269
        }
1269
        }
1270
        else if (current_menu == 20022)
1270
        else if (current_menu == 20022)
1271
        {
1271
        {
1272
            x = strget(40+100,50+20-9,buf,5,997);
1272
            x = strget(40+100,50+20-9,buf,5,997);
1273
            if (x)
1273
            if (x)
1274
            {
1274
            {
1275
                if (x == 1)
1275
                if (x == 1)
1276
                {
1276
                {
1277
                    //strcpy(myname,buf);
1277
                    //strcpy(myname,buf);
1278
                }
1278
                }
1279
1279
1280
                KB_ClearKeyDown(sc_Enter);
1280
                KB_ClearKeyDown(sc_Enter);
1281
                KB_ClearKeyDown(sc_kpad_Enter);
1281
                KB_ClearKeyDown(sc_kpad_Enter);
1282
                KB_FlushKeyboardQueue();
1282
                KB_FlushKeyboardQueue();
1283
1283
1284
                current_menu = 20020;
1284
                current_menu = 20020;
1285
            }
1285
            }
1286
        }
1286
        }
1287
1287
1288
        menutext(40,50,0,0,"SERVER");
1288
        menutext(40,50,0,0,"SERVER");
1289
        if (current_menu != 20021) gametext(40+100,50-9,"server",0,2+8+16);
1289
        if (current_menu != 20021) gametext(40+100,50-9,"server",0,2+8+16);
1290
1290
1291
        menutext(40,50+20,0,0,"PORT");
1291
        menutext(40,50+20,0,0,"PORT");
1292
        if (current_menu != 20022)
1292
        if (current_menu != 20022)
1293
        {
1293
        {
1294
            sprintf(tempbuf,"%d",19014);
1294
            sprintf(tempbuf,"%d",19014);
1295
            gametext(40+100,50+20-9,tempbuf,0,2+8+16);
1295
            gametext(40+100,50+20-9,tempbuf,0,2+8+16);
1296
        }
1296
        }
1297
1297
1298
        menutext(160,50+20+20,0,0,"CONNECT");
1298
        menutext(160,50+20+20,0,0,"CONNECT");
1299
1299
1300
1300
1301
        // ADDRESS
1301
        // ADDRESS
1302
        // PORT
1302
        // PORT
1303
        // CONNECT
1303
        // CONNECT
1304
        break;
1304
        break;
1305
#endif
1305
#endif
1306
    case 15001:
1306
    case 15001:
1307
    case 15000:
1307
    case 15000:
1308
1308
1309
        gametext(160,90,"LOAD last game:",0,2+8+16);
1309
        gametext(160,90,"LOAD last game:",0,2+8+16);
1310
1310
1311
        sprintf(tempbuf,"\"%s\"",ud.savegame[lastsavedpos]);
1311
        sprintf(tempbuf,"\"%s\"",ud.savegame[lastsavedpos]);
1312
        gametext(160,99,tempbuf,0,2+8+16);
1312
        gametext(160,99,tempbuf,0,2+8+16);
1313
1313
1314
        gametext(160,99+9,"(Y/N)",0,2+8+16);
1314
        gametext(160,99+9,"(Y/N)",0,2+8+16);
1315
1315
1316
        if (KB_KeyPressed(sc_Escape) || KB_KeyPressed(sc_N) || RMB)
1316
        if (KB_KeyPressed(sc_Escape) || KB_KeyPressed(sc_N) || RMB)
1317
        {
1317
        {
1318
            if (sprite[g_player[myconnectindex].ps->i].extra <= 0)
1318
            if (sprite[g_player[myconnectindex].ps->i].extra <= 0)
1319
            {
1319
            {
1320
                if (enterlevel(MODE_GAME)) backtomenu();
1320
                if (enterlevel(MODE_GAME)) backtomenu();
1321
                return;
1321
                return;
1322
            }
1322
            }
1323
1323
1324
            KB_ClearKeyDown(sc_N);
1324
            KB_ClearKeyDown(sc_N);
1325
            KB_ClearKeyDown(sc_Escape);
1325
            KB_ClearKeyDown(sc_Escape);
1326
1326
1327
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
1327
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
1328
            if (ud.multimode < 2 && ud.recstat != 2)
1328
            if (ud.multimode < 2 && ud.recstat != 2)
1329
            {
1329
            {
1330
                ready2send = 1;
1330
                ready2send = 1;
1331
                totalclock = ototalclock;
1331
                totalclock = ototalclock;
1332
            }
1332
            }
1333
        }
1333
        }
1334
1334
1335
        if (KB_KeyPressed(sc_Space) || KB_KeyPressed(sc_Enter) || KB_KeyPressed(sc_kpad_Enter) || KB_KeyPressed(sc_Y) || LMB)
1335
        if (KB_KeyPressed(sc_Space) || KB_KeyPressed(sc_Enter) || KB_KeyPressed(sc_kpad_Enter) || KB_KeyPressed(sc_Y) || LMB)
1336
        {
1336
        {
1337
            KB_FlushKeyboardQueue();
1337
            KB_FlushKeyboardQueue();
1338
            KB_ClearKeysDown();
1338
            KB_ClearKeysDown();
1339
            FX_StopAllSounds();
1339
            FX_StopAllSounds();
1340
1340
1341
            if (ud.multimode > 1)
1341
            if (ud.multimode > 1)
1342
            {
1342
            {
1343
                loadplayer(-1-lastsavedpos);
1343
                loadplayer(-1-lastsavedpos);
1344
                g_player[myconnectindex].ps->gm = MODE_GAME;
1344
                g_player[myconnectindex].ps->gm = MODE_GAME;
1345
            }
1345
            }
1346
            else
1346
            else
1347
            {
1347
            {
1348
                c = loadplayer(lastsavedpos);
1348
                c = loadplayer(lastsavedpos);
1349
                if (c == 0)
1349
                if (c == 0)
1350
                    g_player[myconnectindex].ps->gm = MODE_GAME;
1350
                    g_player[myconnectindex].ps->gm = MODE_GAME;
1351
            }
1351
            }
1352
        }
1352
        }
1353
1353
1354
        probe(186,124+9,0,0);
1354
        probe(186,124+9,0,0);
1355
1355
1356
        break;
1356
        break;
1357
1357
1358
    case 10000:
1358
    case 10000:
1359
    case 10001:
1359
    case 10001:
1360
1360
1361
        c = 60;
1361
        c = 60;
1362
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1362
        rotatesprite(160<<16,19<<16,65536L,0,MENUBAR,16,0,10,0,0,xdim-1,ydim-1);
1363
        menutext(160,24,0,0,"ADULT MODE");
1363
        menutext(160,24,0,0,"ADULT MODE");
1364
1364
1365
        x = probe(60,50+16,16,2);
1365
        x = probe(60,50+16,16,2);
1366
        if (x == -1)
1366
        if (x == -1)
1367
        {
1367
        {
1368
            cmenu(201);
1368
            cmenu(201);
1369
            probey = 0;
1369
            probey = 0;
1370
            break;
1370
            break;
1371
        }
1371
        }
1372
1372
1373
        menutext(c,50+16,MENUHIGHLIGHT(0),PHX(-2),"ADULT MODE");
1373
        menutext(c,50+16,MENUHIGHLIGHT(0),PHX(-2),"ADULT MODE");
1374
        menutext(c,50+16+16,MENUHIGHLIGHT(1),PHX(-3),"ENTER PASSWORD");
1374
        menutext(c,50+16+16,MENUHIGHLIGHT(1),PHX(-3),"ENTER PASSWORD");
1375
1375
1376
        menutext(c+160+40,50+16,MENUHIGHLIGHT(0),0,ud.lockout?"OFF":"ON");
1376
        menutext(c+160+40,50+16,MENUHIGHLIGHT(0),0,ud.lockout?"OFF":"ON");
1377
1377
1378
        if (current_menu == 10001)
1378
        if (current_menu == 10001)
1379
        {
1379
        {
1380
            gametext(160,50+16+16+16+16-12,"ENTER PASSWORD",0,2+8+16);
1380
            gametext(160,50+16+16+16+16-12,"ENTER PASSWORD",0,2+8+16);
1381
            x = strget((320>>1),50+16+16+16+16,buf,19, 998);
1381
            x = strget((320>>1),50+16+16+16+16,buf,19, 998);
1382
1382
1383
            if (x)
1383
            if (x)
1384
            {
1384
            {
1385
                if (ud.pwlockout[0] == 0 || ud.lockout == 0)
1385
                if (ud.pwlockout[0] == 0 || ud.lockout == 0)
1386
                    strcpy(&ud.pwlockout[0],buf);
1386
                    strcpy(&ud.pwlockout[0],buf);
1387
                else if (strcmp(buf,&ud.pwlockout[0]) == 0)
1387
                else if (strcmp(buf,&ud.pwlockout[0]) == 0)
1388
                {
1388
                {
1389
                    ud.lockout = 0;
1389
                    ud.lockout = 0;
1390
                    buf[0] = 0;
1390
                    buf[0] = 0;
1391
1391
1392
                    for (x=0;x<numanimwalls;x++)
1392
                    for (x=0;x<numanimwalls;x++)
1393
                        if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
1393
                        if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
1394
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
1394
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
1395
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1395
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1396
                            if (wall[animwall[x].wallnum].extra >= 0)
1396
                            if (wall[animwall[x].wallnum].extra >= 0)
1397
                                wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
1397
                                wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
1398
1398
1399
                }
1399
                }
1400
                current_menu = 10000;
1400
                current_menu = 10000;
1401
                KB_ClearKeyDown(sc_Enter);
1401
                KB_ClearKeyDown(sc_Enter);
1402
                KB_ClearKeyDown(sc_kpad_Enter);
1402
                KB_ClearKeyDown(sc_kpad_Enter);
1403
                KB_FlushKeyboardQueue();
1403
                KB_FlushKeyboardQueue();
1404
            }
1404
            }
1405
        }
1405
        }
1406
        else
1406
        else
1407
        {
1407
        {
1408
            if (x == 0)
1408
            if (x == 0)
1409
            {
1409
            {
1410
                if (ud.lockout == 1)
1410
                if (ud.lockout == 1)
1411
                {
1411
                {
1412
                    if (ud.pwlockout[0] == 0)
1412
                    if (ud.pwlockout[0] == 0)
1413
                    {
1413
                    {
1414
                        ud.lockout = 0;
1414
                        ud.lockout = 0;
1415
                        for (x=0;x<numanimwalls;x++)
1415
                        for (x=0;x<numanimwalls;x++)
1416
                            if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
1416
                            if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
1417
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
1417
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
1418
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1418
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1419
                                if (wall[animwall[x].wallnum].extra >= 0)
1419
                                if (wall[animwall[x].wallnum].extra >= 0)
1420
                                    wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
1420
                                    wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
1421
                    }
1421
                    }
1422
                    else
1422
                    else
1423
                    {
1423
                    {
1424
                        buf[0] = 0;
1424
                        buf[0] = 0;
1425
                        current_menu = 10001;
1425
                        current_menu = 10001;
1426
                        inputloc = 0;
1426
                        inputloc = 0;
1427
                        KB_FlushKeyboardQueue();
1427
                        KB_FlushKeyboardQueue();
1428
                    }
1428
                    }
1429
                }
1429
                }
1430
                else
1430
                else
1431
                {
1431
                {
1432
                    ud.lockout = 1;
1432
                    ud.lockout = 1;
1433
1433
1434
                    for (x=0;x<numanimwalls;x++)
1434
                    for (x=0;x<numanimwalls;x++)
1435
                        switch (dynamictostatic[wall[animwall[x].wallnum].picnum])
1435
                        switch (dynamictostatic[wall[animwall[x].wallnum].picnum])
1436
                        {
1436
                        {
1437
                        case FEMPIC1__STATIC:
1437
                        case FEMPIC1__STATIC:
1438
                            wall[animwall[x].wallnum].picnum = BLANKSCREEN;
1438
                            wall[animwall[x].wallnum].picnum = BLANKSCREEN;
1439
                            break;
1439
                            break;
1440
                        case FEMPIC2__STATIC:
1440
                        case FEMPIC2__STATIC:
1441
                        case FEMPIC3__STATIC:
1441
                        case FEMPIC3__STATIC:
1442
                            wall[animwall[x].wallnum].picnum = SCREENBREAK6;
1442
                            wall[animwall[x].wallnum].picnum = SCREENBREAK6;
1443
                            break;
1443
                            break;
1444
                        }
1444
                        }
1445
                }
1445
                }
1446
            }
1446
            }
1447
1447
1448
            else if (x == 1)
1448
            else if (x == 1)
1449
            {
1449
            {
1450
                current_menu = 10001;
1450
                current_menu = 10001;
1451
                inputloc = 0;
1451
                inputloc = 0;
1452
                KB_FlushKeyboardQueue();
1452
                KB_FlushKeyboardQueue();
1453
            }
1453
            }
1454
        }
1454
        }
1455
1455
1456
        break;
1456
        break;
1457
1457
1458
    case 1000:
1458
    case 1000:
1459
    case 1001:
1459
    case 1001:
1460
    case 1002:
1460
    case 1002:
1461
    case 1003:
1461
    case 1003:
1462
    case 1004:
1462
    case 1004:
1463
    case