Subversion Repositories eduke32

Rev

Rev 3758 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5 Plagman 1
//-------------------------------------------------------------------------
2
/*
1652 terminx 3
Copyright (C) 2010 EDuke32 developers and contributors
5 Plagman 4
 
1652 terminx 5
This file is part of EDuke32.
5 Plagman 6
 
7
EDuke32 is free software; you can redistribute it and/or
8
modify it under the terms of the GNU General Public License version 2
9
as published by the Free Software Foundation.
10
 
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14
 
15
See the GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20
*/
21
//-------------------------------------------------------------------------
22
 
3084 terminx 23
// FIXME: this file is the single worst fucking mess in all of EDuke32
24
 
5 Plagman 25
#include "duke3d.h"
2290 helixhorne 26
#include "net.h"
27
#include "player.h"
5 Plagman 28
#include "mouse.h"
2728 hendricks2 29
#include "joystick.h"
5 Plagman 30
#include "osd.h"
911 terminx 31
#include "osdcmds.h"
1215 terminx 32
#include "gamedef.h"
1677 terminx 33
#include "gameexec.h"
34
#include "savegame.h"
35
#include "premap.h"
1678 terminx 36
#include "demo.h"
1707 terminx 37
#include "crc32.h"
2556 helixhorne 38
#include "common.h"
2726 hendricks2 39
#include "common_game.h"
2728 hendricks2 40
#include "input.h"
3084 terminx 41
#include "menus.h"
1707 terminx 42
 
5 Plagman 43
#include <sys/stat.h>
44
 
45
extern char inputloc;
1205 terminx 46
int16_t g_skillSoundID=-1;
2728 hendricks2 47
int32_t probey=0; // the row number on which the menu cursor is positioned
1205 terminx 48
static int32_t lastsavehead=0,last_menu_pos=0,last_menu,sh,onbar,buttonstat;
49
static int32_t last_zero,last_fifty,last_onehundred,last_twoohtwo,last_threehundred = 0;
5 Plagman 50
 
2728 hendricks2 51
// ugly hack to get around inadequacies of calling CONTROL_GetInput() in M_Probe() and still have gamefuncs function throughout menus
52
// A previous solution was to add CONTROL_GetInput(&minfo); in M_DisplayMenus but that hurt mouse aiming
53
#define AdvanceTrigger  0x01
54
#define ReturnTrigger   0x02
55
#define EscapeTrigger   0x04
56
#define ProbeTriggers(x) (menutriggers&x)
57
#define ProbeTriggersClear(x) (menutriggers&=~x)
58
static int32_t menutriggers=0;
59
 
147 terminx 60
static char menunamecnt;
5 Plagman 61
 
2556 helixhorne 62
static fnlist_t fnlist;
63
static CACHE1D_FIND_REC *finddirshigh=NULL, *findfileshigh=NULL;
1205 terminx 64
static int32_t currentlist=0;
5 Plagman 65
 
2556 helixhorne 66
static void set_findhighs(void)
67
{
68
    finddirshigh = fnlist.finddirs;
69
    findfileshigh = fnlist.findfiles;
70
    currentlist = 0;
71
    if (findfileshigh)
72
        currentlist = 1;
73
}
74
 
75
 
1205 terminx 76
static int32_t function, whichkey;
77
static int32_t changesmade, newvidmode, curvidmode, newfullscreen;
78
static int32_t vidsets[16] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };
79
static int32_t curvidset, newvidset = 0;
80
static int32_t soundbits, soundvoices, soundrate;
2284 helixhorne 81
#define NUMDOUBLEMBTNS 3  // # of mouse buttons that can be double-clicked (mouse1 - mouse3)
82
#define NUMSINGLEMBTNS 4  // # of mouse buttons that can only be single-clicked (the rest)
83
#define NUMMOUSEFUNCTIONS (NUMDOUBLEMBTNS*2+NUMSINGLEMBTNS)
3527 helixhorne 84
// NOTE: NUMMOUSEFUNCTIONS must equal MAXMOUSEBUTTONS!!!
85
static const char *mousebuttonnames[NUMMOUSEFUNCTIONS==MAXMOUSEBUTTONS ? MAXMOUSEBUTTONS : -1] =
2796 helixhorne 86
{ "Mouse1", "Mouse2", "Mouse3", "Mouse4", "Wheel Up",
87
  "Wheel Down", "Mouse5", "Mouse6", "Mouse7", "Mouse8"
88
};
5 Plagman 89
 
1205 terminx 90
extern int32_t voting;
147 terminx 91
 
921 terminx 92
#define USERMAPENTRYLENGTH 25
93
 
1604 terminx 94
#define mgametext(x,y,t,s,dabits) G_PrintGameText(2,STARTALPHANUM, x,y,t,s,0,dabits,0, 0, xdim-1, ydim-1, 65536)
95
#define mgametextpal(x,y,t,s,p) G_PrintGameText(2,STARTALPHANUM, x,y,t,s,p,26,0, 0, xdim-1, ydim-1, 65536)
1037 terminx 96
 
3084 terminx 97
void M_ChangeMenu(int32_t cm)
5 Plagman 98
{
3266 helixhorne 99
    if (G_HaveEvent(EVENT_CHANGEMENU))
3101 hendricks2 100
        cm = VM_OnEvent(EVENT_CHANGEMENU, g_player[myconnectindex].ps->i, myconnectindex, -1, cm);
5 Plagman 101
 
3101 hendricks2 102
    if (cm >= 0)
3084 terminx 103
    {
3101 hendricks2 104
        g_currentMenu = cm;
105
 
106
        switch (g_currentMenu)
107
        {
108
        case MENU_MAIN:
109
            probey = last_zero;
110
            break;
111
        case MENU_MAIN_INGAME:
112
            probey = last_fifty;
113
            break;
114
        case MENU_EPISODE:
115
            probey = last_onehundred;
116
            break;
117
        case MENU_OPTIONS:
118
            probey = last_twoohtwo;
119
            break;
120
        case MENU_SKILL:
121
            probey = 1;
122
            break;
123
        default:
124
            if (cm >= MENU_LOAD && cm < MENU_STORY)
125
                probey = last_threehundred;
126
            else if ((cm >= 1000 && cm <= 1009))
127
                return;
128
            else probey = 0;
129
            break;
130
        }
131
 
132
        lastsavehead = -1;
3084 terminx 133
    }
3101 hendricks2 134
}
3084 terminx 135
 
3101 hendricks2 136
static void M_LinearPanels(int32_t firstMenu, int32_t lastMenu)
137
{
138
    int32_t changedMenu = g_currentMenu;
139
 
140
    if (I_PanelUp())
141
    {
142
        I_PanelUpClear();
143
 
144
        S_PlaySound(KICK_HIT);
145
        changedMenu--;
146
        if (changedMenu < firstMenu) changedMenu = lastMenu;
147
        M_ChangeMenu(changedMenu);
148
    }
149
    else if (I_PanelDown())
150
    {
151
        I_PanelDownClear();
152
 
153
        S_PlaySound(KICK_HIT);
154
        changedMenu++;
155
        if (changedMenu > lastMenu) changedMenu = firstMenu;
156
        M_ChangeMenu(changedMenu);
157
    }
5 Plagman 158
}
159
 
2728 hendricks2 160
#define LMB (buttonstat&LEFT_MOUSE)
161
#define RMB (buttonstat&RIGHT_MOUSE)
162
#define WHEELUP (buttonstat&WHEELUP_MOUSE)
163
#define WHEELDOWN (buttonstat&WHEELDOWN_MOUSE)
5 Plagman 164
 
484 terminx 165
static ControlInfo minfo;
5 Plagman 166
 
1205 terminx 167
static int16_t mi, mii;
5 Plagman 168
 
1205 terminx 169
static int32_t probe_(int32_t type,int32_t x,int32_t y,int32_t i,int32_t n)
5 Plagman 170
{
1355 terminx 171
    int16_t centre;
5 Plagman 172
 
1631 terminx 173
    CONTROL_GetInput(&minfo);
174
    mi += (minfo.dpitch+minfo.dz);
175
    mii += minfo.dyaw;
176
 
2728 hendricks2 177
    menutriggers = 0;
178
 
333 terminx 179
    if (x == (320>>1))
5 Plagman 180
        centre = 320>>2;
181
    else centre = 0;
182
 
2728 hendricks2 183
    if (!buttonstat || buttonstat == WHEELUP_MOUSE || buttonstat == WHEELDOWN_MOUSE)
5 Plagman 184
    {
2728 hendricks2 185
        if (KB_KeyPressed(sc_UpArrow) || KB_KeyPressed(sc_kpad_8) || mi < -8192 || WHEELUP || BUTTON(gamefunc_Move_Forward) || (JOYSTICK_GetHat(0)&HAT_UP))
5 Plagman 186
        {
411 terminx 187
            mi = mii = 0;
333 terminx 188
            KB_ClearKeyDown(sc_UpArrow);
189
            KB_ClearKeyDown(sc_kpad_8);
410 terminx 190
            MOUSE_ClearButton(WHEELUP_MOUSE);
2728 hendricks2 191
            CONTROL_ClearButton(gamefunc_Move_Forward);
192
            JOYSTICK_ClearHat(0);
2313 helixhorne 193
 
1143 terminx 194
            S_PlaySound(KICK_HIT);
5 Plagman 195
 
196
            probey--;
2313 helixhorne 197
            if (probey < 0)
198
                probey = n-1;
5 Plagman 199
        }
2313 helixhorne 200
        if (KB_KeyPressed(sc_PgUp))
5 Plagman 201
        {
2313 helixhorne 202
            // n is >= NUMGAMEFUNCTIONS from mouse/keyboard setup
203
            int32_t step = (n >= NUMGAMEFUNCTIONS) ? 13/2 : n/2;
204
 
205
            KB_ClearKeyDown(sc_PgUp);
206
 
207
            S_PlaySound(KICK_HIT);
208
 
209
//            if (probey == 0) probey = n-1; else
210
            probey = max(0, probey-step);
211
        }
212
        if (KB_KeyPressed(sc_Home))
213
        {
214
            // does not get in the way of special HOME handling in user map list
215
            KB_ClearKeyDown(sc_Home);
216
 
217
            S_PlaySound(KICK_HIT);
218
 
219
            probey = 0;
220
        }
221
 
2728 hendricks2 222
        if (KB_KeyPressed(sc_DownArrow) || KB_KeyPressed(sc_kpad_2) || mi > 8192 || WHEELDOWN || BUTTON(gamefunc_Move_Backward) || (JOYSTICK_GetHat(0)&HAT_DOWN))
2313 helixhorne 223
        {
411 terminx 224
            mi = mii = 0;
333 terminx 225
            KB_ClearKeyDown(sc_DownArrow);
226
            KB_ClearKeyDown(sc_kpad_2);
227
            KB_ClearKeyDown(sc_PgDn);
410 terminx 228
            MOUSE_ClearButton(WHEELDOWN_MOUSE);
2728 hendricks2 229
            CONTROL_ClearButton(gamefunc_Move_Backward);
230
            JOYSTICK_ClearHat(0);
2313 helixhorne 231
 
1143 terminx 232
            S_PlaySound(KICK_HIT);
2313 helixhorne 233
 
5 Plagman 234
            probey++;
2313 helixhorne 235
            if (probey >= n)
236
                probey = 0;
5 Plagman 237
        }
2313 helixhorne 238
        if (KB_KeyPressed(sc_PgDn))
239
        {
240
            int32_t step = (n >= NUMGAMEFUNCTIONS) ? 13/2 : n/2;
241
 
242
            KB_ClearKeyDown(sc_PgDn);
243
 
244
            S_PlaySound(KICK_HIT);
245
 
246
//            if (probey == n-1) probey = 0; else
247
            probey = min(n-1, probey+step);
248
        }
249
        if (KB_KeyPressed(sc_End))
250
        {
251
            // does not get in the way of special END handling in user map list
252
            KB_ClearKeyDown(sc_End);
253
 
254
            S_PlaySound(KICK_HIT);
255
 
256
            probey = n-1;
257
        }
5 Plagman 258
    }
259
 
2313 helixhorne 260
    // XXX: check for probey < 0 needed here? (we have M_Probe(..., 0) calls)
261
 
262
    if (probey >= n)  // not sure if still necessary
5 Plagman 263
        probey = 0;
264
 
1667 terminx 265
    if (x || y)
5 Plagman 266
    {
1667 terminx 267
        if (centre)
268
        {
2308 helixhorne 269
            //        rotatesprite_fs(((320>>1)+(centre)+54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10);
270
            //        rotatesprite_fs(((320>>1)-(centre)-54)<<16,(y+(probey*i)-4)<<16,65536L,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10);
5 Plagman 271
 
2308 helixhorne 272
            rotatesprite_fs(((320>>1)+(centre>>1)+70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+6-((6+(totalclock>>3))%7),sh,0,10);
273
            rotatesprite_fs(((320>>1)-(centre>>1)-70)<<16,(y+(probey*i)-4)<<16,65536L>>type,0,SPINNINGNUKEICON+((totalclock>>3)%7),sh,0,10);
1667 terminx 274
        }
275
        else
2308 helixhorne 276
            rotatesprite_fs((x<<16)-((tilesizx[BIGFNTCURSOR]-4)<<(16-type)),(y+(probey*i)-(4>>type))<<16,65536L>>type,0,SPINNINGNUKEICON+(((totalclock>>3))%7),sh,0,10);
5 Plagman 277
    }
278
 
2728 hendricks2 279
    if (I_AdvanceTrigger() && !onbar)
5 Plagman 280
    {
3084 terminx 281
        if (g_currentMenu != MENU_SKILL)
1143 terminx 282
            S_PlaySound(PISTOL_BODYHIT);
2728 hendricks2 283
 
284
        menutriggers |= AdvanceTrigger;
285
 
286
        I_AdvanceTriggerClear();
287
 
5 Plagman 288
        return(probey);
289
    }
2728 hendricks2 290
    else if (I_ReturnTrigger())
5 Plagman 291
    {
2728 hendricks2 292
        S_PlaySound(EXITMENUSOUND);
293
 
294
        menutriggers |= ReturnTrigger;
295
 
296
        I_ReturnTriggerClear();
297
 
5 Plagman 298
        onbar = 0;
299
        return(-1);
300
    }
301
    else
302
    {
2728 hendricks2 303
        if (onbar == 0)
304
            return(-probey-2);
305
 
3084 terminx 306
        if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || (LMB && (WHEELUP || mii < -256)) || BUTTON(gamefunc_Turn_Left) ||
307
            BUTTON(gamefunc_Strafe_Left) || (JOYSTICK_GetHat(0)&HAT_LEFT))
5 Plagman 308
            return(probey);
3084 terminx 309
        else if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || (LMB && (WHEELDOWN || mii > 256)) || BUTTON(gamefunc_Turn_Right) ||
310
            BUTTON(gamefunc_Strafe_Right) || (JOYSTICK_GetHat(0)&HAT_RIGHT))
5 Plagman 311
            return(probey);
2728 hendricks2 312
 
419 terminx 313
        return(-probey-2);
5 Plagman 314
    }
315
}
1205 terminx 316
static inline int32_t M_Probe(int32_t x,int32_t y,int32_t i,int32_t n)
335 terminx 317
{
318
    return probe_(0,x,y,i,n);
319
}
398 terminx 320
 
1205 terminx 321
static inline int32_t probesm(int32_t x,int32_t y,int32_t i,int32_t n)
335 terminx 322
{
323
    return probe_(1,x,y,i,n);
324
}
5 Plagman 325
 
2728 hendricks2 326
// see menutriggers for why this is a sorry hack
327
// calling CONTROL_GetFunctionInput(); from input.c also would not work
328
// and probe_() must remain static
329
static int32_t Menu_EnterText(int32_t x,int32_t y,char *t,int32_t dalen,int32_t c)
330
{
331
    int32_t probeysave = probey;
332
    int32_t probeoutputx = M_Probe(0,0,0,1);
333
    probey = probeysave;
334
 
335
    if (ProbeTriggers(AdvanceTrigger) || I_AdvanceTrigger())
336
    {
337
        I_AdvanceTriggerClear();
338
        return (1);
339
    }
340
 
341
    if (probeoutputx == -1)
342
    {
343
        I_ReturnTriggerClear();
344
        return (-1);
345
    }
346
 
347
    return G_EnterText(x, y, t, dalen, c);
348
}
349
 
1205 terminx 350
int32_t menutext_(int32_t x,int32_t y,int32_t s,int32_t p,char *t,int32_t bits)
5 Plagman 351
{
1205 terminx 352
    int16_t i, ac, centre;
353
//    int32_t ht = usehightile;
5 Plagman 354
 
355
    y -= 12;
356
 
357
    i = centre = 0;
358
 
333 terminx 359
    if (x == (320>>1))
5 Plagman 360
    {
333 terminx 361
        while (*(t+i))
5 Plagman 362
        {
331 terminx 363
            if (*(t+i) == ' ')
5 Plagman 364
            {
365
                centre += 5;
366
                i++;
367
                continue;
368
            }
369
            ac = 0;
331 terminx 370
            if (*(t+i) >= '0' && *(t+i) <= '9')
5 Plagman 371
                ac = *(t+i) - '0' + BIGALPHANUM-10;
331 terminx 372
            else if (*(t+i) >= 'a' && *(t+i) <= 'z')
5 Plagman 373
                ac = toupper(*(t+i)) - 'A' + BIGALPHANUM;
331 terminx 374
            else if (*(t+i) >= 'A' && *(t+i) <= 'Z')
5 Plagman 375
                ac = *(t+i) - 'A' + BIGALPHANUM;
331 terminx 376
            else switch (*(t+i))
5 Plagman 377
                {
337 terminx 378
                case '-':
379
                    ac = BIGALPHANUM-11;
380
                    break;
381
                case '.':
382
                    ac = BIGPERIOD;
383
                    break;
384
                case '\'':
385
                    ac = BIGAPPOS;
386
                    break;
387
                case ',':
388
                    ac = BIGCOMMA;
389
                    break;
390
                case '!':
2631 helixhorne 391
                    ac = BIGX_;
337 terminx 392
                    break;
393
                case '?':
394
                    ac = BIGQ;
395
                    break;
396
                case ';':
397
                    ac = BIGSEMI;
398
                    break;
399
                case ':':
400
                    ac = BIGSEMI;
401
                    break;
402
                default:
403
                    centre += 5;
404
                    i++;
405
                    continue;
335 terminx 406
                }
407
 
408
            centre += tilesizx[ac]-1;
409
            i++;
410
        }
411
    }
412
 
413
    if (centre)
414
        x = (320-centre-10)>>1;
415
 
991 terminx 416
//    usehightile = (ht && r_downsize < 3);
335 terminx 417
    while (*t)
418
    {
419
        if (*t == ' ')
420
        {
421
            x+=5;
422
            t++;
423
            continue;
424
        }
425
        ac = 0;
426
        if (*t >= '0' && *t <= '9')
427
            ac = *t - '0' + BIGALPHANUM-10;
428
        else if (*t >= 'a' && *t <= 'z')
429
            ac = toupper(*t) - 'A' + BIGALPHANUM;
430
        else if (*t >= 'A' && *t <= 'Z')
431
            ac = *t - 'A' + BIGALPHANUM;
432
        else switch (*t)
433
            {
337 terminx 434
            case '-':
435
                ac = BIGALPHANUM-11;
436
                break;
437
            case '.':
438
                ac = BIGPERIOD;
439
                break;
440
            case ',':
441
                ac = BIGCOMMA;
442
                break;
443
            case '!':
2631 helixhorne 444
                ac = BIGX_;
337 terminx 445
                break;
446
            case '\'':
447
                ac = BIGAPPOS;
448
                break;
449
            case '?':
450
                ac = BIGQ;
451
                break;
452
            case ';':
453
                ac = BIGSEMI;
454
                break;
455
            case ':':
456
                ac = BIGCOLIN;
457
                break;
458
            default:
459
                x += 5;
460
                t++;
461
                continue;
5 Plagman 462
            }
463
 
2308 helixhorne 464
        rotatesprite_fs(x<<16,y<<16,65536L,0,ac,s,p,bits);
5 Plagman 465
 
466
        x += tilesizx[ac];
467
        t++;
468
    }
991 terminx 469
//    usehightile = ht;
5 Plagman 470
    return (x);
471
}
472
 
2358 helixhorne 473
 
474
// This function depends on the 'onbar' variable which should be set to the
475
// 'probey' indices where there's a slider bar.
2359 helixhorne 476
static void sliderbar(int32_t type, int32_t x,int32_t y,int32_t *p,int32_t dainc,int32_t damodify,int32_t s, int32_t pa, int32_t min, int32_t max)
5 Plagman 477
{
1205 terminx 478
    int32_t xloc;
5 Plagman 479
    char rev;
480
 
335 terminx 481
    if (dainc < 0)
482
    {
483
        dainc = -dainc;
484
        rev = 1;
485
    }
5 Plagman 486
    else rev = 0;
487
    y-=2;
488
 
331 terminx 489
    if (damodify)
5 Plagman 490
    {
3084 terminx 491
        if (*p >= min && *p <= max && (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || (LMB && (WHEELUP || mii < -256)) ||
492
            BUTTON(gamefunc_Turn_Left) || BUTTON(gamefunc_Strafe_Left) || (JOYSTICK_GetHat(0)&HAT_LEFT)))         // && onbar) )
5 Plagman 493
        {
916 terminx 494
            KB_ClearKeyDown(sc_LeftArrow);
495
            KB_ClearKeyDown(sc_kpad_4);
496
            MOUSE_ClearButton(WHEELUP_MOUSE);
2728 hendricks2 497
            CONTROL_ClearButton(gamefunc_Turn_Left);
498
            CONTROL_ClearButton(gamefunc_Strafe_Left);
499
            JOYSTICK_ClearHat(0);
916 terminx 500
            mii = 0;
501
            if (!rev)
5 Plagman 502
                *p -= dainc;
916 terminx 503
            else *p += dainc;
504
            if (*p < min)
505
                *p = min;
506
            if (*p > max)
507
                *p = max;
1143 terminx 508
            S_PlaySound(KICK_HIT);
5 Plagman 509
        }
3084 terminx 510
        if (*p <= max && *p >= min && (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || (LMB && (WHEELDOWN || mii > 256)) ||
511
            BUTTON(gamefunc_Turn_Right) || BUTTON(gamefunc_Strafe_Right) || (JOYSTICK_GetHat(0)&HAT_RIGHT)))        //&& onbar) )
5 Plagman 512
        {
916 terminx 513
            KB_ClearKeyDown(sc_RightArrow);
514
            KB_ClearKeyDown(sc_kpad_6);
515
            MOUSE_ClearButton(WHEELDOWN_MOUSE);
2728 hendricks2 516
            CONTROL_ClearButton(gamefunc_Turn_Right);
517
            CONTROL_ClearButton(gamefunc_Strafe_Right);
518
            JOYSTICK_ClearHat(0);
916 terminx 519
            mii = 0;
520
            if (!rev)
5 Plagman 521
                *p += dainc;
916 terminx 522
            else *p -= dainc;
523
            if (*p > max)
524
                *p = max;
525
            if (*p < min)
526
                *p = min;
1143 terminx 527
            S_PlaySound(KICK_HIT);
5 Plagman 528
        }
529
    }
530
 
531
    xloc = *p;
2308 helixhorne 532
    rotatesprite_fs((x<<16)+(22<<(16-type)),(y<<16)-(3<<(16-type)),65536L>>type,0,SLIDEBAR,s,pa,10);
331 terminx 533
    if (rev == 0)
2308 helixhorne 534
        rotatesprite_fs((x<<16)+((scale(64,xloc-min,max-min)+1)<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10);
5 Plagman 535
    else
2308 helixhorne 536
        rotatesprite_fs((x<<16)+((65-scale(64,xloc-min,max-min))<<(16-type)),(y<<16)+(1<<(16-type)),65536L>>type,0,SLIDEBAR+1,s,pa,10);
5 Plagman 537
}
538
 
2359 helixhorne 539
#define bar(x,y,p,dainc,damodify,s,pa) sliderbar(0,x,y,p,dainc,damodify,s,pa,0,63);
540
#define barsm(x,y,p,dainc,damodify,s,pa) sliderbar(1,x,y,p,dainc,damodify,s,pa,0,63);
5 Plagman 541
 
1205 terminx 542
static void modval(int32_t min, int32_t max,int32_t *p,int32_t dainc,int32_t damodify)
5 Plagman 543
{
544
    char rev;
545
 
335 terminx 546
    if (dainc < 0)
547
    {
548
        dainc = -dainc;
549
        rev = 1;
550
    }
5 Plagman 551
    else rev = 0;
552
 
331 terminx 553
    if (damodify)
5 Plagman 554
    {
331 terminx 555
        if (rev == 0)
5 Plagman 556
        {
3084 terminx 557
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || (LMB && minfo.dyaw < -256) || BUTTON(gamefunc_Turn_Left) ||
558
                BUTTON(gamefunc_Strafe_Left) || (JOYSTICK_GetHat(0)&HAT_LEFT))        // && onbar) )
5 Plagman 559
            {
333 terminx 560
                KB_ClearKeyDown(sc_LeftArrow);
561
                KB_ClearKeyDown(sc_kpad_4);
2728 hendricks2 562
                CONTROL_ClearButton(gamefunc_Turn_Left);
563
                CONTROL_ClearButton(gamefunc_Strafe_Left);
564
                JOYSTICK_ClearHat(0);
5 Plagman 565
 
566
                *p -= dainc;
331 terminx 567
                if (*p < min)
509 terminx 568
                {
511 terminx 569
                    *p = max;
509 terminx 570
                    if (damodify == 2)
571
                        *p = min;
511 terminx 572
                }
1143 terminx 573
                S_PlaySound(PISTOL_BODYHIT);
5 Plagman 574
            }
3084 terminx 575
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || (LMB && minfo.dyaw > 256) || BUTTON(gamefunc_Turn_Right) ||
576
                BUTTON(gamefunc_Strafe_Right) || (JOYSTICK_GetHat(0)&HAT_RIGHT))       //&& onbar) )
5 Plagman 577
            {
333 terminx 578
                KB_ClearKeyDown(sc_RightArrow);
579
                KB_ClearKeyDown(sc_kpad_6);
2728 hendricks2 580
                CONTROL_ClearButton(gamefunc_Turn_Right);
581
                CONTROL_ClearButton(gamefunc_Strafe_Right);
582
                JOYSTICK_ClearHat(0);
5 Plagman 583
 
584
                *p += dainc;
331 terminx 585
                if (*p > max)
509 terminx 586
                {
511 terminx 587
                    *p = min;
509 terminx 588
                    if (damodify == 2)
589
                        *p = max;
511 terminx 590
                }
1143 terminx 591
                S_PlaySound(PISTOL_BODYHIT);
5 Plagman 592
            }
593
        }
594
        else
595
        {
3084 terminx 596
            if (KB_KeyPressed(sc_RightArrow) || KB_KeyPressed(sc_kpad_6) || (LMB && minfo.dyaw > 256) || BUTTON(gamefunc_Turn_Right) ||
597
                BUTTON(gamefunc_Strafe_Right) || (JOYSTICK_GetHat(0)&HAT_RIGHT))      //&& onbar ))
5 Plagman 598
            {
333 terminx 599
                KB_ClearKeyDown(sc_RightArrow);
600
                KB_ClearKeyDown(sc_kpad_6);
2728 hendricks2 601
                CONTROL_ClearButton(gamefunc_Turn_Right);
602
                CONTROL_ClearButton(gamefunc_Strafe_Right);
603
                JOYSTICK_ClearHat(0);
5 Plagman 604
 
605
                *p -= dainc;
331 terminx 606
                if (*p < min)
509 terminx 607
                {
511 terminx 608
                    *p = max;
509 terminx 609
                    if (damodify == 2)
610
                        *p = min;
511 terminx 611
                }
1143 terminx 612
                S_PlaySound(PISTOL_BODYHIT);
5 Plagman 613
            }
3084 terminx 614
            if (KB_KeyPressed(sc_LeftArrow) || KB_KeyPressed(sc_kpad_4) || (LMB && minfo.dyaw < -256) || BUTTON(gamefunc_Turn_Left) ||
615
                BUTTON(gamefunc_Strafe_Left) || (JOYSTICK_GetHat(0)&HAT_LEFT))      // && onbar) )
5 Plagman 616
            {
333 terminx 617
                KB_ClearKeyDown(sc_LeftArrow);
618
                KB_ClearKeyDown(sc_kpad_4);
2728 hendricks2 619
                CONTROL_ClearButton(gamefunc_Turn_Left);
620
                CONTROL_ClearButton(gamefunc_Strafe_Left);
621
                JOYSTICK_ClearHat(0);
5 Plagman 622
 
623
                *p += dainc;
331 terminx 624
                if (*p > max)
509 terminx 625
                {
511 terminx 626
                    *p = min;
509 terminx 627
                    if (damodify == 2)
628
                        *p = max;
511 terminx 629
                }
1143 terminx 630
                S_PlaySound(PISTOL_BODYHIT);
5 Plagman 631
            }
632
        }
633
    }
634
}
635
 
482 terminx 636
#define UNSELMENUSHADE 10
637
#define DISABLEDMENUSHADE 20
1034 terminx 638
#define MENUHIGHLIGHT(x) probey==x?(sintable[(totalclock<<5)&2047]>>12):UNSELMENUSHADE
78 terminx 639
// #define MENUHIGHLIGHT(x) probey==x?-(sintable[(totalclock<<4)&2047]>>12):probey-x>=0?(probey-x)<<2:-((probey-x)<<2)
640
 
5 Plagman 641
#define SHX(X) 0
642
// ((x==X)*(-sh))
643
// ((x==X)?1:2)
2928 helixhorne 644
//#define MWIN(X) rotatesprite( 320<<15,200<<15,X,0,MENUSCREEN,-16,0,10+64,0,0,xdim-1,ydim-1)
645
//#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)
5 Plagman 646
 
2207 helixhorne 647
//extern int32_t G_LoadSaveHeader(char spot,struct savehead_ *saveh);
5 Plagman 648
 
1677 terminx 649
#pragma pack(push,1)
2207 helixhorne 650
static savehead_t savehead;
651
//static struct savehead_ savehead;
1677 terminx 652
#pragma pack(pop)
653
 
1346 terminx 654
//static int32_t volnum,levnum,plrskl,numplr;
5 Plagman 655
//static char brdfn[BMAX_PATH];
656
 
3084 terminx 657
static void M_DrawBackground(void)
658
{
659
    rotatesprite_fs(160<<16,200<<15,65536L,0,MENUSCREEN,16,0,10+64);
660
}
661
 
662
 
3180 helixhorne 663
static void M_DrawTopBar(const char *caption)
3084 terminx 664
{
665
    rotatesprite_fs(160<<16,19<<16,65536L,0,MENUBAR,16,0,10);
666
    menutext(160,24,0,0,caption);
667
}
668
 
1143 terminx 669
static void M_DisplaySaveGameList(void)
5 Plagman 670
{
1205 terminx 671
    int32_t x, c = 160;
5 Plagman 672
 
673
    c += 64;
1229 terminx 674
    for (x = 0; x <= 108; x += 12)
2308 helixhorne 675
        rotatesprite_fs((c+91-64)<<16,(x+56)<<16,65536L,0,TEXTBOX,24,0,10);
5 Plagman 676
 
2308 helixhorne 677
    rotatesprite_fs(22<<16,97<<16,65536L,0,WINDOWBORDER2,24,0,10);
678
    rotatesprite_fs(180<<16,97<<16,65536L,1024,WINDOWBORDER2,24,0,10);
679
    rotatesprite_fs(99<<16,50<<16,65536L,512,WINDOWBORDER1,24,0,10);
680
    rotatesprite_fs(103<<16,144<<16,65536L,1024+512,WINDOWBORDER1,24,0,10);
5 Plagman 681
 
1229 terminx 682
    for (x=0; x<=9; x++)
2188 helixhorne 683
    {
684
        if (ud.savegame[x][0])
685
        {
3156 helixhorne 686
            if (g_oldverSavegame[x] && g_currentMenu!=360+x)
687
            {
688
                // old version and not entering new name
689
                char buf[sizeof(ud.savegame[0])];
690
                Bmemcpy(buf, ud.savegame[x], sizeof(ud.savegame[0]));
691
                minitext(c,48+(12*x),buf,13,10+16);
692
            }
693
            else
694
            {
695
                minitext(c,48+(12*x),ud.savegame[x],2,10+16);
696
            }
2188 helixhorne 697
        }
698
    }
5 Plagman 699
}
700
 
1587 terminx 701
extern int32_t g_quitDeadline;
5 Plagman 702
 
1205 terminx 703
void G_CheckPlayerColor(int32_t *color, int32_t prev_color)
59 terminx 704
{
1205 terminx 705
    int32_t i, disallowed[] = { 1, 2, 3, 4, 5, 6, 7, 8, 17, 18, 19, 20, 22 };
59 terminx 706
 
1229 terminx 707
    for (i=0; i<(signed)(sizeof(disallowed)/sizeof(disallowed[0])); i++)
335 terminx 708
    {
709
        while (*color == disallowed[i])
710
        {
331 terminx 711
            if (*color > prev_color)
59 terminx 712
                (*color)++;
713
            else (*color)--;
714
            i=0;
715
        }
716
    }
717
}
718
 
2188 helixhorne 719
static void Menus_LoadSave_DisplayCommon1(void)
720
{
721
    if (lastsavehead != probey)
2207 helixhorne 722
        G_LoadSaveHeaderNew(probey, &savehead);
2188 helixhorne 723
    lastsavehead = probey;
724
 
2308 helixhorne 725
    rotatesprite_fs(101<<16,97<<16,65536L>>1,512,TILE_LOADSHOT,-32,0,4+10+64);
2188 helixhorne 726
 
3156 helixhorne 727
    if (g_oldverSavegame[probey])
2188 helixhorne 728
    {
3048 helixhorne 729
        menutext(53,70,0,0,"Version");
730
        menutext(48,90,0,0,"Mismatch");
731
 
732
        Bsprintf(tempbuf,"Saved: %d.%d.%d %d-bit", savehead.majorver, savehead.minorver,
733
                 savehead.bytever, 8*savehead.ptrsize);
734
        mgametext(31,104,tempbuf,0,2+8+16);
735
        Bsprintf(tempbuf,"Our: %d.%d.%d %d-bit", SV_MAJOR_VER, SV_MINOR_VER, BYTEVERSION,
736
                 (int32_t)(8*sizeof(intptr_t)));
3052 helixhorne 737
        mgametext(31+16,QUOTE_SAVE_BAD_VERSION,tempbuf,0,2+8+16);
2188 helixhorne 738
    }
739
}
740
 
3084 terminx 741
void Menu_Main(void)
742
{
743
    int32_t margin = MENU_MARGIN_CENTER;
744
    int32_t x;
745
 
746
    enum
747
    {
748
        M_MAIN_EPISODE,
749
        M_MAIN_OPTIONS,
750
        M_MAIN_LOAD,
751
        M_MAIN_STORY,
752
        M_MAIN_CREDITS,
753
        M_MAIN_QUIT
754
    };
755
 
756
 
757
    rotatesprite_fs(margin<<16,28<<16,65536L,0,INGAMEDUKETHREEDEE,0,0,10);
758
 
759
    if (PLUTOPAK)   // JBF 20030804
760
        rotatesprite_fs((margin+100)<<16,36<<16,65536L,0,PLUTOPAKSPRITE+2,(sintable[(totalclock<<4)&2047]>>11),0,2+8);
761
 
762
    menutext(margin,67,MENUHIGHLIGHT(0),0,"New Game");
763
 
764
    //    menutext(c,67+16,0,1,"NETWORK GAME");
765
 
766
    menutext(margin,67+16/*+16*/,MENUHIGHLIGHT(1),0,"Options");
767
    menutext(margin,67+16+16/*+16*/,MENUHIGHLIGHT(2),0,"Load Game");
768
 
769
    if (!VOLUMEALL)
770
        menutext(margin,67+16+16+16/*+16*/,MENUHIGHLIGHT(3),0,"How To Order");
771
    else
772
        menutext(margin,67+16+16+16/*+16*/,MENUHIGHLIGHT(3),0,"Help");
773
 
774
    menutext(margin,67+16+16+16+16/*+16*/,MENUHIGHLIGHT(4),0,"Credits");
775
    menutext(margin,67+16+16+16+16+16/*+16*/,MENUHIGHLIGHT(5),0,"Quit");
776
 
777
    x = M_Probe(margin,67,16,6);
778
 
779
    if (x >= 0)
780
    {
781
        if ((g_netServer || ud.multimode > 1) && x == 0 && ud.recstat != 2)
782
        {
783
            last_zero = 0;
784
            M_ChangeMenu(600);
785
        }
786
        else
787
        {
788
            last_zero = x;
789
            switch (x)
790
            {
791
            case M_MAIN_EPISODE:
792
                M_ChangeMenu(MENU_EPISODE);
793
                break;
794
                //case 1: break;//ChangeToMenu(20001);break;   // JBF 20031128: I'm taking over the TEN menu option
795
            case M_MAIN_OPTIONS:
796
                M_ChangeMenu(MENU_OPTIONS);
797
                break;   // JBF 20031205: was 200
798
            case M_MAIN_LOAD:
799
                M_ChangeMenu(MENU_LOAD);
800
                break;
801
            case M_MAIN_STORY:
802
                KB_FlushKeyboardQueue();
803
                M_ChangeMenu(MENU_STORY);
804
                break;
805
            case M_MAIN_CREDITS:
806
                M_ChangeMenu(MENU_CREDITS);
807
                break;
808
            case M_MAIN_QUIT:
809
                M_ChangeMenu(MENU_QUIT);
810
                break;
811
            }
812
        }
813
    }
814
 
815
    if (KB_KeyPressed(sc_Q)) M_ChangeMenu(MENU_QUIT);
816
 
817
    if (x == -1 && (g_player[myconnectindex].ps->gm &MODE_GAME || ud.recstat == 2))
818
    {
819
        g_player[myconnectindex].ps->gm &= ~MODE_MENU;
820
        if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
821
        {
822
            ready2send = 1;
823
            totalclock = ototalclock;
824
        }
825
    }
826
}
827
 
1143 terminx 828
void M_DisplayMenus(void)
77 terminx 829
{
5 Plagman 830
    CACHE1D_FIND_REC *dir;
3084 terminx 831
    int32_t margin, x,i;
1205 terminx 832
    int32_t l,m;
2796 helixhorne 833
    const char *p = NULL;
5 Plagman 834
 
1205 terminx 835
    Net_GetPackets();
5 Plagman 836
 
837
    {
331 terminx 838
        if (buttonstat != 0 && !onbar)
5 Plagman 839
        {
840
            x = MOUSE_GetButtons()<<3;
333 terminx 841
            if (x) buttonstat = x<<3;
5 Plagman 842
            else buttonstat = 0;
843
        }
844
        else
845
            buttonstat = MOUSE_GetButtons();
846
    }
847
 
564 terminx 848
    if ((g_player[myconnectindex].ps->gm&MODE_MENU) == 0)
5 Plagman 849
    {
850
        walock[TILE_LOADSHOT] = 1;
851
        return;
852
    }
3266 helixhorne 853
    if (G_HaveEvent(EVENT_DISPLAYMENU))
2656 terminx 854
        VM_OnEvent(EVENT_DISPLAYMENU, g_player[screenpeek].ps->i, screenpeek, -1, 0);
5 Plagman 855
 
564 terminx 856
    g_player[myconnectindex].ps->gm &= (0xff-MODE_TYPE);
857
    g_player[myconnectindex].ps->fta = 0;
5 Plagman 858
 
2312 helixhorne 859
//    x = 0;
5 Plagman 860
 
861
    sh = 4-(sintable[(totalclock<<4)&2047]>>11);
471 terminx 862
 
2312 helixhorne 863
    // black translucent background
2333 helixhorne 864
    if ((g_player[myconnectindex].ps->gm&MODE_GAME) || ud.recstat==2)
2358 helixhorne 865
        if (g_currentMenu != 231 && g_currentMenu != 232)  // not in 'color correction' menu
866
            fade_screen_black(1);
471 terminx 867
 
3084 terminx 868
    if (!(g_currentMenu >= 1000 && g_currentMenu <= 2999 && g_currentMenu >= MENU_LOAD && g_currentMenu <= 369))
1143 terminx 869
        G_UpdateScreenArea();
5 Plagman 870
 
438 terminx 871
    if (KB_KeyPressed(sc_Q))
75 terminx 872
    {
1143 terminx 873
        switch (g_currentMenu)
438 terminx 874
        {
3084 terminx 875
        case MENU_SELECTMAP:
876
        case MENU_KEYBOARDASSIGN:
438 terminx 877
        case 360:
878
        case 361:
879
        case 362:
880
        case 363:
881
        case 364:
882
        case 365:
883
        case 366:
884
        case 367:
885
        case 368:
886
        case 369:
3084 terminx 887
        case MENU_QUIT:
888
        case MENU_QUITTOTITLE:
889
        case MENU_QUIT2:
438 terminx 890
        case 603:
3084 terminx 891
        case MENU_ADULTPASSWORD:
438 terminx 892
        case 20003:
893
        case 20005:
894
            break;
895
        default:
1143 terminx 896
            if (g_currentMenu >= 0)
438 terminx 897
            {
1143 terminx 898
                last_menu = g_currentMenu;
482 terminx 899
                last_menu_pos = probey;
3084 terminx 900
                M_ChangeMenu(MENU_QUIT2);
438 terminx 901
            }
902
            break;
903
        }
75 terminx 904
    }
471 terminx 905
 
1143 terminx 906
    switch (g_currentMenu)
5 Plagman 907
    {
337 terminx 908
    case 25000:
2540 hendricks2 909
        mgametext(160,90,"Select a save spot before",0,2+8+16);
910
        mgametext(160,90+9,"you quick restore.",0,2+8+16);
5 Plagman 911
 
1143 terminx 912
        x = M_Probe(186,124,0,1);
337 terminx 913
        if (x >= -1)
914
        {
1587 terminx 915
            if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
5 Plagman 916
            {
337 terminx 917
                ready2send = 1;
918
                totalclock = ototalclock;
5 Plagman 919
            }
564 terminx 920
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
337 terminx 921
        }
922
        break;
5 Plagman 923
 
3084 terminx 924
    case MENU_BUYDUKE:
1143 terminx 925
        x = M_Probe(326,190,0,1);
2540 hendricks2 926
        mgametext(160,41-8,"You are playing the shareware",0,2+8+16);
927
        mgametext(160,50-8,"version of Duke Nukem 3D.  While",0,2+8+16);
928
        mgametext(160,59-8,"this version is really cool, you",0,2+8+16);
3803 terminx 929
        mgametext(160,68-8,"are missing over 75% of the total",0,2+8+16);
2540 hendricks2 930
        mgametext(160,77-8,"game, along with other great extras",0,2+8+16);
931
        mgametext(160,86-8,"and games, which you'll get when",0,2+8+16);
932
        mgametext(160,95-8,"you order the complete version and",0,2+8+16);
933
        mgametext(160,104-8,"get the final three episodes.",0,2+8+16);
5 Plagman 934
 
2540 hendricks2 935
        mgametext(160,104+8,"Please read the 'How To Order' item",0,2+8+16);
936
        mgametext(160,113+8,"on the main menu or visit",0,2+8+16);
937
        mgametext(160,122+8,"http://www.eduke32.com",0,2+8+16);
938
        mgametext(160,131+8,"to upgrade to the full registered",0,2+8+16);
939
        mgametext(160,139+8,"version of Duke Nukem 3D.",0,2+8+16);
940
        mgametext(160,148+16,"Press any key...",0,2+8+16);
5 Plagman 941
 
3084 terminx 942
        if (x >= -1) M_ChangeMenu(MENU_EPISODE);
337 terminx 943
        break;
5 Plagman 944
 
337 terminx 945
    case 20001:
3084 terminx 946
        M_DrawTopBar("Network Game");
5 Plagman 947
 
1143 terminx 948
        x = M_Probe(160,100-18,18,3);
5 Plagman 949
 
3084 terminx 950
        if (x == -1) M_ChangeMenu(MENU_MAIN);
951
        else if (x == 2) M_ChangeMenu(20010);
952
        else if (x == 1) M_ChangeMenu(20020);
953
        else if (x == 0) M_ChangeMenu(20002);
5 Plagman 954
 
2540 hendricks2 955
        menutext(160,100-18,MENUHIGHLIGHT(0),0,"Player Setup");
956
        menutext(160,100,MENUHIGHLIGHT(1),0,"Join Game");
957
        menutext(160,100+18,MENUHIGHLIGHT(2),0,"Host Game");
337 terminx 958
        break;
5 Plagman 959
 
337 terminx 960
    case 20002:
961
    case 20003:
3084 terminx 962
        M_DrawTopBar("Player Setup");
963
        margin = MENU_MARGIN_REGULAR;
337 terminx 964
        {
3084 terminx 965
            int32_t io, ii, yy = 37, d=margin+140, enabled;
2796 helixhorne 966
            const char *opts[] =
559 terminx 967
            {
968
                "Name",
969
                "-",
970
                "Color",
971
                "-",
972
                "Team",
973
                "-",
974
                "-",
975
                "Auto aim",
976
                "Mouse aim",
977
                "-",
978
                "-",
896 terminx 979
                "Switch weapons on pickup",
980
                "Switch weapons when empty",
559 terminx 981
                "-",
982
                "-",
983
                "Multiplayer macros",
984
                NULL
985
            };
471 terminx 986
 
987
            x = ud.color;
988
 
989
            if (probey == 2)
1143 terminx 990
                x = G_GetTeamPalette(ud.team);
482 terminx 991
 
2308 helixhorne 992
            rotatesprite_fs((260)<<16,(24+(tilesizy[APLAYER]>>1))<<16,49152L,0,1441-((((4-(totalclock>>4)))&3)*5),0,x,10);
471 terminx 993
 
994
            for (ii=io=0; opts[ii]; ii++)
335 terminx 995
            {
471 terminx 996
                if (opts[ii][0] == '-' && !opts[ii][1])
997
                {
998
                    if (io <= probey) yy += 4;
999
                    continue;
1000
                }
1001
                if (io < probey) yy += 8;
1002
                io++;
268 terminx 1003
            }
5 Plagman 1004
 
482 terminx 1005
 
1143 terminx 1006
            if (g_currentMenu == 20002)
335 terminx 1007
            {
3084 terminx 1008
                x = probesm(margin,yy+5,0,io);
56 terminx 1009
 
471 terminx 1010
                if (x == -1)
1011
                {
3084 terminx 1012
                    M_ChangeMenu(MENU_OPTIONS);
471 terminx 1013
                    probey = 3;
1014
                    break;
1015
                }
5 Plagman 1016
 
471 terminx 1017
                for (ii=io=0; opts[ii]; ii++)
1018
                {
1019
                    if (opts[ii][0] == '-' && !opts[ii][1])
1020
                        continue;
1021
                    enabled = 1;
1022
                    switch (io)
1023
                    {
1024
                    case 0:
1025
                        if (x == io)
1026
                        {
1143 terminx 1027
                            strcpy(buf, szPlayerName);
471 terminx 1028
                            inputloc = strlen(buf);
3101 hendricks2 1029
                            M_ChangeMenu(20003);
56 terminx 1030
 
2728 hendricks2 1031
                            I_AdvanceTriggerClear();
471 terminx 1032
                        }
1033
                        break;
58 terminx 1034
 
471 terminx 1035
                    case 1:
482 terminx 1036
                        i = ud.color;
471 terminx 1037
                        if (x == io)
1038
                        {
1039
                            ud.color++;
1040
                            if (ud.color > 23)
1041
                                ud.color = 0;
1205 terminx 1042
                            G_CheckPlayerColor((int32_t *)&ud.color,-1);
471 terminx 1043
                        }
1205 terminx 1044
                        modval(0,23,(int32_t *)&ud.color,1,probey==1);
1045
                        G_CheckPlayerColor((int32_t *)&ud.color,i);
471 terminx 1046
                        if (ud.color != i)
1143 terminx 1047
                            G_UpdatePlayerFromMenu();
471 terminx 1048
                        break;
268 terminx 1049
 
471 terminx 1050
                    case 2:
1051
                        i = ud.team;
1052
                        if (x == io)
1053
                        {
1054
                            ud.team++;
1055
                            if (ud.team == 4)
1056
                                ud.team = 0;
482 terminx 1057
                        }
1205 terminx 1058
                        modval(0,3,(int32_t *)&ud.team,1,probey==2);
471 terminx 1059
                        if (ud.team != i)
1143 terminx 1060
                            G_UpdatePlayerFromMenu();
471 terminx 1061
                        break;
53 terminx 1062
 
471 terminx 1063
                    case 3:
563 terminx 1064
                        i = ud.config.AutoAim;
471 terminx 1065
                        if (x == io)
563 terminx 1066
                            ud.config.AutoAim = (ud.config.AutoAim == 2) ? 0 : ud.config.AutoAim+1;
1205 terminx 1067
                        modval(0,2,(int32_t *)&ud.config.AutoAim,1,probey==3);
563 terminx 1068
                        if (ud.config.AutoAim != i)
1143 terminx 1069
                            G_UpdatePlayerFromMenu();
471 terminx 1070
                        break;
1071
 
1072
                    case 4:
1073
                        i = ud.mouseaiming;
1074
                        if (x == io)
1075
                            ud.mouseaiming = !ud.mouseaiming;
1205 terminx 1076
                        modval(0,1,(int32_t *)&ud.mouseaiming,1,probey==4);
471 terminx 1077
                        if (ud.mouseaiming != i)
1143 terminx 1078
                            G_UpdatePlayerFromMenu();
471 terminx 1079
                        break;
482 terminx 1080
 
471 terminx 1081
                    case 5:
1082
                        i = 0;
1083
                        if (ud.weaponswitch & 1)
2975 hendricks2 1084
                        {
471 terminx 1085
                            i = 1;
2975 hendricks2 1086
                            if (ud.weaponswitch & 4)
1087
                                i = 2;
1088
                        }
1089
                        l = i;
471 terminx 1090
                        if (x == io)
2975 hendricks2 1091
                            i = (i == 2) ? 0 : i+1;
1092
                        modval(0,2,(int32_t *)&i,1,probey==5);
1093
                        if (i != l)
471 terminx 1094
                        {
2975 hendricks2 1095
                            if (i > 0)
1096
                            {
1097
                                ud.weaponswitch |= 1;
1098
                                if (i == 2)
1099
                                    ud.weaponswitch |= 4;
1100
                                else
1101
                                    ud.weaponswitch &= ~4;
1102
                            }
1103
                            else
1104
                                ud.weaponswitch &= ~(1|4);
1105
 
1143 terminx 1106
                            G_UpdatePlayerFromMenu();
471 terminx 1107
                        }
1108
                        break;
1109
                    case 6:
1110
                        i = 0;
1111
                        if (ud.weaponswitch & 2)
1112
                            i = 1;
1113
                        if (x == io)
1114
                            i = 1-i;
1205 terminx 1115
                        modval(0,1,(int32_t *)&i,1,probey==6);
471 terminx 1116
                        if ((ud.weaponswitch & 2 && !i) || (!(ud.weaponswitch & 2) && i))
1117
                        {
1118
                            ud.weaponswitch ^= 2;
1143 terminx 1119
                            G_UpdatePlayerFromMenu();
482 terminx 1120
                        }
471 terminx 1121
                        break;
1122
                    case 7:
1123
                        if (x == io)
1124
                        {
3084 terminx 1125
                            M_ChangeMenu(20004);
471 terminx 1126
                        }
1127
                        break;
1128
 
1129
                    default:
1130
                        break;
1131
                    }
1132
                    io++;
1133
                }
57 terminx 1134
            }
471 terminx 1135
            else
1136
            {
2728 hendricks2 1137
                // because OSD_StripColors needs a valid target and tempbuf is used in _EnterText()
1100 terminx 1138
                char dummybuf[64];
2728 hendricks2 1139
                x = Menu_EnterText(d-50,37,buf,30,0);
337 terminx 1140
 
1625 terminx 1141
                while (Bstrlen(OSD_StripColors(dummybuf,buf)) > 10)
471 terminx 1142
                {
1143
                    buf[Bstrlen(buf)-1] = '\0';
1144
                    inputloc--;
1145
                }
1146
 
1147
                if (x)
1148
                {
1149
                    if (x == 1)
1150
                    {
1143 terminx 1151
                        if (buf[0] && Bstrcmp(szPlayerName,buf))
471 terminx 1152
                        {
1143 terminx 1153
                            Bstrcpy(szPlayerName,buf);
1573 terminx 1154
                            Net_SendClientInfo();
471 terminx 1155
                        }
1156
                        // send name update
1157
                    }
2728 hendricks2 1158
                    I_AdvanceTriggerClear();
471 terminx 1159
 
3101 hendricks2 1160
                    M_ChangeMenu(20002);
471 terminx 1161
                }
337 terminx 1162
            }
151 terminx 1163
 
471 terminx 1164
            yy = 37;
337 terminx 1165
            {
471 terminx 1166
                for (ii=io=0; opts[ii]; ii++)
335 terminx 1167
                {
471 terminx 1168
                    if (opts[ii][0] == '-' && !opts[ii][1])
335 terminx 1169
                    {
471 terminx 1170
                        yy += 4;
1171
                        continue;
101 terminx 1172
                    }
471 terminx 1173
                    enabled = 1;
1174
                    switch (io)
1175
                    {
1176
                    case 0:
1143 terminx 1177
                        if (g_currentMenu == 20002)
471 terminx 1178
                        {
1143 terminx 1179
                            mgametext(d-50,yy,szPlayerName,MENUHIGHLIGHT(io),2+8+16);
471 terminx 1180
                        }
1181
                        break;
335 terminx 1182
 
471 terminx 1183
                    case 1:
726 terminx 1184
                    {
2796 helixhorne 1185
                        const char *s[] =
1186
                            { "Auto","","","","","","","","","Blue","Red","Green","Gray","Dark gray","Dark green","Brown",
1187
                              "Dark blue","","","","","Bright red","","Yellow","",""
1188
                            };
887 terminx 1189
                        mgametext(d-50,yy,s[ud.color],MENUHIGHLIGHT(io),2+8+16);
726 terminx 1190
                    }
1191
                    break;
5 Plagman 1192
 
471 terminx 1193
                    case 2:
726 terminx 1194
                    {
2796 helixhorne 1195
                        const char *s[] = { "Blue", "Red", "Green", "Gray" };
887 terminx 1196
                        mgametext(d-50,yy,s[ud.team],MENUHIGHLIGHT(io),2+8+16);
726 terminx 1197
                    }
1198
                    break;
5 Plagman 1199
 
471 terminx 1200
                    case 3:
726 terminx 1201
                    {
2796 helixhorne 1202
                        const char *s[] = { "Off", "All weapons", "Bullets only" };
887 terminx 1203
                        mgametext(d-50,yy,s[ud.config.AutoAim],MENUHIGHLIGHT(io),2+8+16);
726 terminx 1204
                    }
1205
                    break;
53 terminx 1206
 
471 terminx 1207
                    case 4:
887 terminx 1208
                        mgametext(d-50,yy,ud.mouseaiming?"Hold button":"Toggle on/off",MENUHIGHLIGHT(io),2+8+16);
471 terminx 1209
                        break;
54 terminx 1210
 
471 terminx 1211
                    case 5:
2975 hendricks2 1212
                    {
1213
                        const char *s[] = { "Off", "All weapons", "Fav priority" };
1214
                        i = 0;
1215
                        if (ud.weaponswitch & 1)
1216
                        {
1217
                            i = 1;
1218
                            if (ud.weaponswitch & 4)
1219
                                i = 2;
1220
                        }
3014 hendricks2 1221
                        mgametext(d+45,yy,s[i],MENUHIGHLIGHT(io),2+8+16);
2975 hendricks2 1222
                    }
471 terminx 1223
                        break;
482 terminx 1224
 
471 terminx 1225
                    case 6:
3014 hendricks2 1226
                        mgametext(d+45,yy,ud.weaponswitch&2?"On":"Off",MENUHIGHLIGHT(io),2+8+16);
471 terminx 1227
                        break;
1124 terminx 1228
 
471 terminx 1229
                    default:
1230
                        break;
1231
                    }
3084 terminx 1232
                    mgametextpal(margin,yy, opts[ii], enabled?MENUHIGHLIGHT(io):DISABLEDMENUSHADE, 10);
471 terminx 1233
                    io++;
1234
                    yy += 8;
1235
                }
1236
            }
5 Plagman 1237
 
471 terminx 1238
            break;
1239
        }
337 terminx 1240
    case 20004:
1241
    case 20005:
3084 terminx 1242
        M_DrawTopBar("Multiplayer Macros");
88 terminx 1243
 
1143 terminx 1244
        if (g_currentMenu == 20004)
337 terminx 1245
        {
1246
            x = probesm(24,45,8,10);
1247
            if (x == -1)
88 terminx 1248
            {
3084 terminx 1249
                M_ChangeMenu(20002);
1514 terminx 1250
                probey = 7;
88 terminx 1251
            }
337 terminx 1252
            else if (x >= 0 && x <= 9)
88 terminx 1253
            {
337 terminx 1254
                strcpy(buf, ud.ridecule[x]);
1255
                inputloc = strlen(buf);
482 terminx 1256
                last_menu_pos = probey;
3101 hendricks2 1257
                M_ChangeMenu(20005);
2728 hendricks2 1258
                I_AdvanceTriggerClear();
337 terminx 1259
            }
1260
        }
1261
        else
1262
        {
2728 hendricks2 1263
            x = Menu_EnterText(26,40+(8*probey),buf,34,0);
337 terminx 1264
            if (x)
1265
            {
1266
                if (x == 1)
335 terminx 1267
                {
482 terminx 1268
                    Bstrcpy(ud.ridecule[last_menu_pos],buf);
88 terminx 1269
                }
2728 hendricks2 1270
                I_AdvanceTriggerClear();
3101 hendricks2 1271
                M_ChangeMenu(20004);
88 terminx 1272
            }
337 terminx 1273
        }
1229 terminx 1274
        for (i=0; i<10; i++)
337 terminx 1275
        {
1143 terminx 1276
            if (g_currentMenu == 20005 && i == last_menu_pos) continue;
887 terminx 1277
            mgametextpal(26,40+(i<<3),ud.ridecule[i],MENUHIGHLIGHT(i),0);
337 terminx 1278
        }
91 terminx 1279
 
2540 hendricks2 1280
        mgametext(160,144,"Activate in-game with SHIFT-F#",0,2+8+16);
91 terminx 1281
 
337 terminx 1282
        break;
88 terminx 1283
 
383 terminx 1284
#if 0
337 terminx 1285
    case 20010:
3084 terminx 1286
        M_DrawTopBar("Host Network Game");
5 Plagman 1287
 
1143 terminx 1288
        x = M_Probe(46,50,80,2);
5 Plagman 1289
 
337 terminx 1290
        if (x == -1)
1291
        {
1143 terminx 1292
            ChangeToMenu(20001);
337 terminx 1293
            probey = 2;
1294
        }
1143 terminx 1295
        else if (x == 0) ChangeToMenu(20011);
5 Plagman 1296
 
2540 hendricks2 1297
        menutext(40,50,0,0,        "Game Options");
1298
        minitext(90,60,            "Game Type"    ,2,26);
1299
        minitext(90,60+8,          "Episode"      ,2,26);
1300
        minitext(90,60+8+8,        "Level"        ,2,26);
1301
        minitext(90,60+8+8+8,      "Monsters"     ,2,26);
337 terminx 1302
        if (ud.m_coop == 0)
2540 hendricks2 1303
            minitext(90,60+8+8+8+8,    "Markers"      ,2,26);
337 terminx 1304
        else if (ud.m_coop == 1)
2540 hendricks2 1305
            minitext(90,60+8+8+8+8,    "Friendly Fire",2,26);
1306
        minitext(90,60+8+8+8+8+8,  "User Map"     ,2,26);
5 Plagman 1307
 
1143 terminx 1308
        mgametext(90+60,60,GametypeNames[ud.m_coop],0,26);
5 Plagman 1309
 
1143 terminx 1310
        minitext(90+60,60+8,      EpisodeNames[ud.m_volume_number],0,26);
381 terminx 1311
        minitext(90+60,60+8+8,    level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number],0,26);
337 terminx 1312
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1143 terminx 1313
            minitext(90+60,60+8+8+8,  SkillNames[ud.m_player_skill],0,26);
2540 hendricks2 1314
        else minitext(90+60,60+8+8+8,  "None",0,28);
337 terminx 1315
        if (ud.m_coop == 0)
1316
        {
2540 hendricks2 1317
            if (ud.m_marker) minitext(90+60,60+8+8+8+8,"On",0,26);
1318
            else minitext(90+60,60+8+8+8+8,"Off",0,26);
337 terminx 1319
        }
1320
        else if (ud.m_coop == 1)
1321
        {
2540 hendricks2 1322
            if (ud.m_ffire) minitext(90+60,60+8+8+8+8,"On",0,26);
1323
            else minitext(90+60,60+8+8+8+8,"Off",0,26);
337 terminx 1324
        }
1325
 
2540 hendricks2 1326
        menutext(40,50+80,0,0,"Launch Game");
337 terminx 1327
        break;
1328
 
1329
    case 20011:
1330
        c = (320>>1) - 120;
3084 terminx 1331
        M_DrawTopBar("Net Game Options");
337 terminx 1332
 
1143 terminx 1333
        x = M_Probe(c,57-8,16,8);
337 terminx 1334
 
1335
        switch (x)
1336
        {
1337
        case -1:
1143 terminx 1338
            ChangeToMenu(20010);
337 terminx 1339
            break;
1340
        case 0:
1341
            ud.m_coop++;
1342
            if (ud.m_coop == 3) ud.m_coop = 0;
1343
            break;
1344
        case 1:
1345
            if (!VOLUMEONE)
335 terminx 1346
            {
337 terminx 1347
                ud.m_volume_number++;
1143 terminx 1348
                if (ud.m_volume_number == g_numVolumes) ud.m_volume_number = 0;
337 terminx 1349
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1350
                    ud.m_level_number = 0;
1351
                if (ud.m_level_number > 10) ud.m_level_number = 0;
335 terminx 1352
            }
337 terminx 1353
            break;
1354
        case 2:
1355
            ud.m_level_number++;
1356
            if (!VOLUMEONE)
335 terminx 1357
            {
337 terminx 1358
                if (ud.m_volume_number == 0 && ud.m_level_number > 6)
1359
                    ud.m_level_number = 0;
335 terminx 1360
            }
337 terminx 1361
            else
1362
            {
1363
                if (ud.m_volume_number == 0 && ud.m_level_number > 5)
1364
                    ud.m_level_number = 0;
1365
            }
1366
            if (ud.m_level_number > 10) ud.m_level_number = 0;
1367
            break;
1368
        case 3:
1369
            if (ud.m_monsters_off == 1 && ud.m_player_skill > 0)
1370
                ud.m_monsters_off = 0;
5 Plagman 1371
 
337 terminx 1372
            if (ud.m_monsters_off == 0)
1373
            {
1374
                ud.m_player_skill++;
1375
                if (ud.m_player_skill > 3)
1376
                {
1377
                    ud.m_player_skill = 0;
1378
                    ud.m_monsters_off = 1;
1379
                }
1380
            }
1381
            else ud.m_monsters_off = 0;
1382
 
335 terminx 1383
            break;
5 Plagman 1384
 
337 terminx 1385
        case 4:
1386
            if (ud.m_coop == 0)
1387
                ud.m_marker = !ud.m_marker;
1388
            break;
5 Plagman 1389
 
337 terminx 1390
        case 5:
1391
            if (ud.m_coop == 1)
1392
                ud.m_ffire = !ud.m_ffire;
1393
            break;
5 Plagman 1394
 
337 terminx 1395
        case 6:
1396
            // pick the user map
1397
            break;
5 Plagman 1398
 
337 terminx 1399
        case 7:
1143 terminx 1400
            ChangeToMenu(20010);
337 terminx 1401
            break;
1402
        }
5 Plagman 1403
 
337 terminx 1404
        c += 40;
5 Plagman 1405
 
2540 hendricks2 1406
        //         if(ud.m_coop==1) mgametext(c+70,57-7-9,"Cooperative Play",0,2+8+16);
1407
        //         else if(ud.m_coop==2) mgametext(c+70,57-7-9,"DukeMatch (No Spawn)",0,2+8+16);
1408
        //         else mgametext(c+70,57-7-9,"DukeMatch (Spawn)",0,2+8+16);
1143 terminx 1409
        mgametext(c+70,57-7-9,GametypeNames[ud.m_coop],0,26);
5 Plagman 1410
 
1143 terminx 1411
        mgametext(c+70,57+16-7-9,EpisodeNames[ud.m_volume_number],0,2+8+16);
5 Plagman 1412
 
887 terminx 1413
        mgametext(c+70,57+16+16-7-9,&level_names[MAXLEVELS*ud.m_volume_number+ud.m_level_number][0],0,2+8+16);
5 Plagman 1414
 
337 terminx 1415
        if (ud.m_monsters_off == 0 || ud.m_player_skill > 0)
1143 terminx 1416
            mgametext(c+70,57+16+16+16-7-9,SkillNames[ud.m_player_skill],0,2+8+16);
2540 hendricks2 1417
        else mgametext(c+70,57+16+16+16-7-9,"None",0,2+8+16);
5 Plagman 1418
 
337 terminx 1419
        if (ud.m_coop == 0)
1420
        {
1421
            if (ud.m_marker)
2540 hendricks2 1422
                mgametext(c+70,57+16+16+16+16-7-9,"On",0,2+8+16);
1423
            else mgametext(c+70,57+16+16+16+16-7-9,"Off",0,2+8+16);
337 terminx 1424
        }
5 Plagman 1425
 
337 terminx 1426
        if (ud.m_coop == 1)
1427
        {
1428
            if (ud.m_ffire)
2540 hendricks2 1429
                mgametext(c+70,57+16+16+16+16+16-7-9,"On",0,2+8+16);
1430
            else mgametext(c+70,57+16+16+16+16+16-7-9,"Off",0,2+8+16);
337 terminx 1431
        }
5 Plagman 1432
 
337 terminx 1433
        c -= 44;
5 Plagman 1434
 
2540 hendricks2 1435
        menutext(c,57-9,MENUHIGHLIGHT(0),PHX(-2),"Game Type");
5 Plagman 1436
 
2540 hendricks2 1437
        sprintf(tempbuf,"Episode %d",ud.m_volume_number+1);
337 terminx 1438
        menutext(c,57+16-9,MENUHIGHLIGHT(1),PHX(-3),tempbuf);
5 Plagman 1439
 
2540 hendricks2 1440
        sprintf(tempbuf,"Level %d",ud.m_level_number+1);
337 terminx 1441
        menutext(c,57+16+16-9,MENUHIGHLIGHT(2),PHX(-4),tempbuf);
5 Plagman 1442
 
2540 hendricks2 1443
        menutext(c,57+16+16+16-9,MENUHIGHLIGHT(3),PHX(-5),"Monsters");
5 Plagman 1444
 
337 terminx 1445
        if (ud.m_coop == 0)
2540 hendricks2 1446
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),PHX(-6),"Markers");
337 terminx 1447
        else
2540 hendricks2 1448
            menutext(c,57+16+16+16+16-9,MENUHIGHLIGHT(4),1,"Markers");
5 Plagman 1449
 
337 terminx 1450
        if (ud.m_coop == 1)
2540 hendricks2 1451
            menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),PHX(-6),"Fr. Fire");
1452
        else menutext(c,57+16+16+16+16+16-9,MENUHIGHLIGHT(5),1,"Fr. Fire");
5 Plagman 1453
 
337 terminx 1454
        if (VOLUMEALL)
1455
        {
2540 hendricks2 1456
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),boardfilename[0] == 0,"User Map");
337 terminx 1457
            if (boardfilename[0] != 0)
887 terminx 1458
                mgametext(c+70+44,57+16+16+16+16+16,boardfilename,0,2+8+16);
337 terminx 1459
        }
1460
        else
1461
        {
2540 hendricks2 1462
            menutext(c,57+16+16+16+16+16+16-9,MENUHIGHLIGHT(6),1,"User Map");
337 terminx 1463
        }
5 Plagman 1464
 
2540 hendricks2 1465
        menutext(c,57+16+16+16+16+16+16+16-9,MENUHIGHLIGHT(7),PHX(-8),"Accept");
337 terminx 1466
        break;
5 Plagman 1467
 
337 terminx 1468
    case 20020:
1469
    case 20021: // editing server
1470
    case 20022: // editing port
3084 terminx 1471
        M_DrawTopBar("Join Network Game");
5 Plagman 1472
 
1143 terminx 1473
        if (g_currentMenu == 20020)
337 terminx 1474
        {
1143 terminx 1475
            x = M_Probe(46,50,20,3);
5 Plagman 1476
 
337 terminx 1477
            if (x == -1)
335 terminx 1478
            {
1143 terminx 1479
                ChangeToMenu(20001);
337 terminx 1480
                probey = 1;
335 terminx 1481
            }
337 terminx 1482
            else if (x == 0)
335 terminx 1483
            {
337 terminx 1484
                strcpy(buf, "localhost");
1485
                inputloc = strlen(buf);
3101 hendricks2 1486
                M_ChangeMenu(20021);
335 terminx 1487
            }
337 terminx 1488
            else if (x == 1)
335 terminx 1489
            {
337 terminx 1490
                strcpy(buf, "19014");
1491
                inputloc = strlen(buf);
3101 hendricks2 1492
                M_ChangeMenu(20022);
337 terminx 1493
            }
1494
            else if (x == 2)
559 terminx 1495
                {}
2728 hendricks2 1496
            I_AdvanceTriggerClear();
337 terminx 1497
        }
1143 terminx 1498
        else if (g_currentMenu == 20021)
337 terminx 1499
        {
2728 hendricks2 1500
            x = Menu_EnterText(40+100,50-9,buf,31,0);
337 terminx 1501
            if (x)
1502
            {
1503
                if (x == 1)
335 terminx 1504
                {
1143 terminx 1505
                    //strcpy(szPlayerName,buf);
5 Plagman 1506
                }
337 terminx 1507
 
2728 hendricks2 1508
                I_AdvanceTriggerClear();
337 terminx 1509
 
3101 hendricks2 1510
                M_ChangeMenu(20020);
335 terminx 1511
            }
337 terminx 1512
        }
1143 terminx 1513
        else if (g_currentMenu == 20022)
337 terminx 1514
        {
2728 hendricks2 1515
            x = Menu_EnterText(40+100,50+20-9,buf,5,997);
337 terminx 1516
            if (x)
335 terminx 1517
            {
337 terminx 1518
                if (x == 1)
335 terminx 1519
                {
1143 terminx 1520
                    //strcpy(szPlayerName,buf);
335 terminx 1521
                }
5 Plagman 1522
 
2728 hendricks2 1523
                I_AdvanceTriggerClear();
5 Plagman 1524
 
3101 hendricks2 1525
                M_ChangeMenu(20020);
5 Plagman 1526
            }
337 terminx 1527
        }
5 Plagman 1528
 
2540 hendricks2 1529
        menutext(40,50,0,0,"Server");
1143 terminx 1530
        if (g_currentMenu != 20021) mgametext(40+100,50-9,"server",0,2+8+16);
5 Plagman 1531
 
2540 hendricks2 1532
        menutext(40,50+20,0,0,"Port");
1143 terminx 1533
        if (g_currentMenu != 20022)
337 terminx 1534
        {
1535
            sprintf(tempbuf,"%d",19014);
887 terminx 1536
            mgametext(40+100,50+20-9,tempbuf,0,2+8+16);
337 terminx 1537
        }
5 Plagman 1538
 
2540 hendricks2 1539
        menutext(160,50+20+20,0,0,"Connect");
5 Plagman 1540
 
1541
 
337 terminx 1542
        // ADDRESS
1543
        // PORT
1544
        // CONNECT
1545
        break;
383 terminx 1546
#endif
337 terminx 1547
    case 15001:
1548
    case 15000:
5 Plagman 1549
 
887 terminx 1550
        mgametext(160,90,"LOAD last game:",0,2+8+16);
5 Plagman 1551
 
1221 terminx 1552
        Bsprintf(tempbuf,"\"%s\"",ud.savegame[g_lastSaveSlot]);
887 terminx 1553
        mgametext(160,99,tempbuf,0,2+8+16);
5 Plagman 1554
 
887 terminx 1555
        mgametext(160,99+9,"(Y/N)",0,2+8+16);
5 Plagman 1556
 
2728 hendricks2 1557
        x = M_Probe(186,124+9,0,0);
1558
 
1559
        if (x == -1 || KB_KeyPressed(sc_N))
337 terminx 1560
        {
564 terminx 1561
            if (sprite[g_player[myconnectindex].ps->i].extra <= 0)
5 Plagman 1562
            {
1143 terminx 1563
                if (G_EnterLevel(MODE_GAME)) G_BackToMenu();
337 terminx 1564
                return;
1565
            }
5 Plagman 1566
 
337 terminx 1567
            KB_ClearKeyDown(sc_N);
5 Plagman 1568
 
564 terminx 1569
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
1587 terminx 1570
            if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
337 terminx 1571
            {
1572
                ready2send = 1;
1573
                totalclock = ototalclock;
5 Plagman 1574
            }
337 terminx 1575
        }
5 Plagman 1576
 
2728 hendricks2 1577
        if (ProbeTriggers(AdvanceTrigger) || I_AdvanceTrigger() || KB_KeyPressed(sc_Y))
337 terminx 1578
        {
2728 hendricks2 1579
            I_AdvanceTriggerClear();
1580
            ProbeTriggersClear(AdvanceTrigger);
1581
            KB_ClearKeyDown(sc_Y);
1582
 
337 terminx 1583
            KB_FlushKeyboardQueue();
1584
            KB_ClearKeysDown();
1585
            FX_StopAllSounds();
3102 terminx 1586
            S_ClearSoundLocks();
337 terminx 1587
 
2999 helixhorne 1588
            G_LoadPlayerMaybeMulti(g_lastSaveSlot);
337 terminx 1589
        }
5 Plagman 1590
 
337 terminx 1591
        break;
1592
 
3084 terminx 1593
    case MENU_ADULTMODE:
1594
    case MENU_ADULTPASSWORD:
337 terminx 1595
 
3084 terminx 1596
        margin = 60;
1597
        M_DrawTopBar("Adult Mode");
337 terminx 1598
 
1143 terminx 1599
        x = M_Probe(60,50+16,16,2);
337 terminx 1600
        if (x == -1)
1601
        {
3084 terminx 1602
            M_ChangeMenu(MENU_GAMESETUP);
337 terminx 1603
            probey = 0;
335 terminx 1604
            break;
337 terminx 1605
        }
5 Plagman 1606
 
3084 terminx 1607
        menutext(margin,50+16,MENUHIGHLIGHT(0),0,"Adult Mode");
1608
        menutext(margin,50+16+16,MENUHIGHLIGHT(1),0,"Enter Password");
5 Plagman 1609
 
3084 terminx 1610
        menutext(margin+160+40,50+16,MENUHIGHLIGHT(0),0,ud.lockout?"Off":"On");
5 Plagman 1611
 
3084 terminx 1612
        if (g_currentMenu == MENU_ADULTPASSWORD)
337 terminx 1613
        {
2540 hendricks2 1614
            mgametext(160,50+16+16+16+16-12,"Enter Password",0,2+8+16);
2728 hendricks2 1615
            x = Menu_EnterText((320>>1),50+16+16+16+16,buf,19, 998);
337 terminx 1616
 
1617
            if (x)
335 terminx 1618
            {
337 terminx 1619
                if (ud.pwlockout[0] == 0 || ud.lockout == 0)
1620
                    strcpy(&ud.pwlockout[0],buf);
1621
                else if (strcmp(buf,&ud.pwlockout[0]) == 0)
1622
                {
1623
                    ud.lockout = 0;
1624
                    buf[0] = 0;
2235 helixhorne 1625
#if 0
1229 terminx 1626
                    for (x=0; x<g_numAnimWalls; x++)
337 terminx 1627
                        if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
1628
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
1629
                                wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1630
                            if (wall[animwall[x].wallnum].extra >= 0)
1631
                                wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
2235 helixhorne 1632
#endif
337 terminx 1633
                }
3101 hendricks2 1634
                M_ChangeMenu(MENU_ADULTMODE);
2728 hendricks2 1635
                I_AdvanceTriggerClear();
337 terminx 1636
            }
1637
        }
1638
        else
1639
        {
1640
            if (x == 0)
5 Plagman 1641
            {
337 terminx 1642
                if (ud.lockout == 1)
5 Plagman 1643
                {
337 terminx 1644
                    if (ud.pwlockout[0] == 0)
5 Plagman 1645
                    {
1646
                        ud.lockout = 0;
2235 helixhorne 1647
#if 0
1229 terminx 1648
                        for (x=0; x<g_numAnimWalls; x++)
333 terminx 1649
                            if (wall[animwall[x].wallnum].picnum != W_SCREENBREAK &&
5 Plagman 1650
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+1 &&
333 terminx 1651
                                    wall[animwall[x].wallnum].picnum != W_SCREENBREAK+2)
1652
                                if (wall[animwall[x].wallnum].extra >= 0)
5 Plagman 1653
                                    wall[animwall[x].wallnum].picnum = wall[animwall[x].wallnum].extra;
2235 helixhorne 1654
#endif
5 Plagman 1655
                    }
1656
                    else
1657
                    {
337 terminx 1658
                        buf[0] = 0;
3101 hendricks2 1659
                        M_ChangeMenu(MENU_ADULTPASSWORD);
337 terminx 1660
                        inputloc = 0;
1661
                        KB_FlushKeyboardQueue();
5 Plagman 1662
                    }
1663
                }
337 terminx 1664
                else
1665
                {
1666
                    ud.lockout = 1;
335 terminx 1667
 
1229 terminx 1668
                    for (x=0; x<g_numAnimWalls; x++)
2297 helixhorne 1669
                        switch (DYNAMICTILEMAP(wall[animwall[x].wallnum].picnum))
337 terminx 1670
                        {
1671
                        case FEMPIC1__STATIC:
1672
                            wall[animwall[x].wallnum].picnum = BLANKSCREEN;
1673
                            break;
1674
                        case FEMPIC2__STATIC:
1675
                        case FEMPIC3__STATIC:
1676
                            wall[animwall[x].wallnum].picnum = SCREENBREAK6;
1677
                            break;
1678
                        }
5 Plagman 1679
                }
1680
            }
1681
 
337 terminx 1682
            else if (x == 1)
1683
            {
3101 hendricks2 1684
                M_ChangeMenu(MENU_ADULTPASSWORD);
337 terminx 1685
                inputloc = 0;
1686
                KB_FlushKeyboardQueue();
1687
            }
1688
        }
5 Plagman 1689
 
337 terminx 1690
        break;
5 Plagman 1691
 
337 terminx 1692
    case 1000:
1693
    case 1001:
1694
    case 1002:
1695
    case 1003:
1696
    case 1004:
1697
    case 1005:
1698
    case 1006:
1699
    case 1007:
1700
    case 1008:
1701
    case 1009:
5 Plagman 1702
 
3084 terminx 1703
        M_DrawBackground();
1704
        M_DrawTopBar("Load Game");
2308 helixhorne 1705
        rotatesprite_fs(101<<16,97<<16,65536>>1,512,TILE_LOADSHOT,-32,0,4+10+64);
5 Plagman 1706
 
1143 terminx 1707
        M_DisplaySaveGameList();
5 Plagman 1708
 
2540 hendricks2 1709
        Bsprintf(tempbuf,"Players: %-2d                      ",savehead.numplayers);
887 terminx 1710
        mgametext(160,156,tempbuf,0,2+8+16);
5 Plagman 1711
 
2540 hendricks2 1712
        Bsprintf(tempbuf,"Episode: %-2d / Level: %-2d / Skill: %-2d",
2207 helixhorne 1713
                 1+savehead.volnum, 1+savehead.levnum, savehead.skill);
887 terminx 1714
        mgametext(160,168,tempbuf,0,2+8+16);
5 Plagman 1715
 
337 terminx 1716
        if (savehead.volnum == 0 && savehead.levnum == 7)
887 terminx 1717
            mgametext(160,180,savehead.boardfn,0,2+8+16);
5 Plagman 1718
 
887 terminx 1719
        mgametext(160,90,"LOAD game:",0,2+8+16);
1221 terminx 1720
        Bsprintf(tempbuf,"\"%s\"",ud.savegame[g_currentMenu-1000]);
887 terminx 1721
        mgametext(160,99,tempbuf,0,2+8+16);
1722
        mgametext(160,99+9,"(Y/N)",0,2+8+16);
337 terminx 1723
 
2728 hendricks2 1724
        x = M_Probe(186,124+9,0,0);
1725
 
1726
        if (ProbeTriggers(AdvanceTrigger) || I_AdvanceTrigger() || KB_KeyPressed(sc_Y))
337 terminx 1727
        {
2728 hendricks2 1728
            I_AdvanceTriggerClear();
1729
            ProbeTriggersClear(AdvanceTrigger);
1730
            KB_ClearKeyDown(sc_Y);
1731
 
1143 terminx 1732
            g_lastSaveSlot = g_currentMenu-1000;
337 terminx 1733
 
1734
            KB_FlushKeyboardQueue();
1735
            KB_ClearKeysDown();
1587 terminx 1736
            if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
5 Plagman 1737
            {
337 terminx 1738
                ready2send = 1;
1739
                totalclock = ototalclock;
1740
            }
5 Plagman 1741
 
2999 helixhorne 1742
            G_LoadPlayerMaybeMulti(g_lastSaveSlot);
1552 terminx 1743
 
5 Plagman 1744
            break;
337 terminx 1745
        }
410 terminx 1746
 
2728 hendricks2 1747
        if (x == -1 || KB_KeyPressed(sc_N))
337 terminx 1748
        {
1749
            KB_ClearKeyDown(sc_N);
564 terminx 1750
            if (g_player[myconnectindex].ps->gm&MODE_GAME)
5 Plagman 1751
            {
564 terminx 1752
                g_player[myconnectindex].ps->gm &= ~MODE_MENU;
1587 terminx 1753
                if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
5 Plagman 1754
                {
1755
                    ready2send = 1;
1756
                    totalclock = ototalclock;
1757
                }
428 terminx 1758
            }
1759
            else
1760
            {
3084 terminx 1761
                M_ChangeMenu(MENU_LOAD);
410 terminx 1762
                probey = last_threehundred;
5 Plagman 1763
            }
337 terminx 1764
        }
5 Plagman 1765
 
337 terminx 1766
        break;
1767
 
1768
    case 1500:
1769
 
2728 hendricks2 1770
        x = M_Probe(186,124,0,0);
1771
 
1772
        if (ProbeTriggers(AdvanceTrigger) || I_AdvanceTrigger() || KB_KeyPressed(sc_Y))
337 terminx 1773
        {
2728 hendricks2 1774
            I_AdvanceTriggerClear();
1775
            ProbeTriggersClear(AdvanceTrigger);
1776
            KB_ClearKeyDown(sc_Y);
337 terminx 1777
            KB_FlushKeyboardQueue();
3084 terminx 1778
            M_ChangeMenu(MENU_EPISODE);
337 terminx 1779
        }
2728 hendricks2 1780
        if (x == -1 || KB_KeyPressed(sc_N))
337 terminx 1781
        {
1782
            KB_ClearKeyDown(sc_N);
1587 terminx 1783
            if ((!g_netServer && ud.multimode < 2) && ud.recstat != 2)
337 terminx 1784
            {
1785
                ready2send = 1;
1786
                totalclock = ototalclock;
1787
            }
564 terminx 1788
            g_player[myconnectindex].ps->gm &= ~MODE_MENU;
335 terminx 1789
            break;
337 terminx 1790
        }
887 terminx 1791
        mgametext(160,90,"ABORT this game?",0,2+8+16);
1792
        mgametext(160,90+9,"(Y/N)",0,2+8+16);
5 Plagman 1793
 
337 terminx 1794
        break;
5 Plagman 1795
 
337 terminx 1796
    case 2000:
1797
    case 2001:
1798
    case 2002:
1799
    case 2003:
1800
    case 2004:
1801
    case 2005:
1802
    case 2006:
1803
    case 2007:
1804
    case 2008:
1805
    case 2009:
5 Plagman 1806
 
3084 terminx 1807
        M_DrawBackground();
1808
        M_DrawTopBar("Save Game");
5 Plagman 1809
 
2308 helixhorne 1810
        rotatesprite_fs(101<<16,97<<16,65536L>>1,512,TILE_LOADSHOT,-32,0,4+10+64);
2540 hendricks2 1811
        Bsprintf(tempbuf,"Players: %-2d                      ",ud.multimode);
887 terminx 1812
        mgametext(160,156,tempbuf,0,2+8+16);
5 Plagman 1813
 
2540 hendricks2 1814
        Bsprintf(tempbuf,"Episode: %-2d / Level: %-2d / Skill: %-2d",1+ud.volume_number,1+ud.level_number,ud.player_skill);
887 terminx 1815
        mgametext(160,168,tempbuf,0,2+8+16);
5 Plagman 1816
 
337 terminx 1817
        if (ud.volume_number == 0 && ud.level_number == 7)
887 terminx 1818
            mgametext(160,180,boardfilename,0,2+8+16);
5 Plagman 1819
 
1143 terminx 1820
        M_DisplaySaveGameList();
5 Plagman 1821
 
887 terminx 1822
        mgametext(160,90,"OVERWRITE previous SAVED game?",0,2+8+16);
1823
        mgametext(160,90+9,"(Y/N)",0,2+8+16);
5 Plagman 1824
 
2728 hendricks2 1825
        x = M_Probe(186,124,0,0);
1826
 
1827
        if (ProbeTriggers(AdvanceTrigger) || I_AdvanceTrigger() || KB_KeyPressed(sc_Y))
337 terminx 1828
        {
2728 hendricks2 1829
            I_AdvanceTriggerClear();
1830
            ProbeTriggersClear(AdvanceTrigger);
1831
            KB_ClearKeyDown(sc_Y);
1832
 
1143 terminx 1833
            inputloc = strlen(&ud.savegame[g_currentMenu-2000][0]);
5 Plagman 1834
 
3084 terminx 1835
            M_ChangeMenu(g_currentMenu-2000+360);
5 Plagman 1836
 
337 terminx 1837
            KB_FlushKeyboardQueue();
5 Plagman 1838
            break;
337 terminx 1839
        }
2728 hendricks2 1840
        if (x == -1 || KB_KeyPressed(sc_N))
337 terminx 1841
        {
1842
            KB_ClearKeyDown(sc_N);
3084 terminx 1843
            M_ChangeMenu(351);
337 terminx 1844
        }
5 Plagman 1845
 
337 terminx 1846
        break;
5 Plagman 1847
 
3084 terminx 1848
    case MENU_CREDITS:
1849
    case MENU_CREDITS2:
1850
    case MENU_CREDITS3:
1851
    case MENU_CREDITS4:
1852
    case MENU_CREDITS5:
1853
    case MENU_CREDITS6:
1854
    case MENU_CREDITS7:
1855
    case MENU_CREDITS8:
1856
    case MENU_CREDITS9:
1857
    case MENU_CREDITS10:
1858
        margin = MENU_MARGIN_CENTER;
337 terminx 1859
        if (!VOLUMEALL || !PLUTOPAK)
1860
        {
3084 terminx 1861
            //M_DrawBackground();
1862
            switch (g_currentMenu)
1863
            {
1864
            case MENU_CREDITS9:
1865
            case MENU_CREDITS10:
1866
                M_DrawTopBar("About EDuke32");
1867
                break;
1868
            default:
1869
                M_DrawTopBar("Credits");
1870
                break;
1871
            }
5 Plagman 1872
 
3084 terminx 1873
            l = 9;
337 terminx 1874
        }
1875
        else
1876
        {
3084 terminx 1877
            l = 4;
337 terminx 1878
        }
5 Plagman 1879
 
3101 hendricks2 1880
        M_LinearPanels(MENU_CREDITS, MENU_CREDITS+l);
337 terminx 1881
 
1143 terminx 1882
        x = M_Probe(0,0,0,1);
482 terminx 1883
 
1884
        if (x == -1)
1885
        {
3084 terminx 1886
            M_ChangeMenu(MENU_MAIN);
482 terminx 1887
            break;
1888
        }
1889
 
337 terminx 1890
        if (!VOLUMEALL || !PLUTOPAK)
1891
        {
1143 terminx 1892
            switch (g_currentMenu)
335 terminx 1893
            {
3084 terminx 1894
            case MENU_CREDITS:
1895
                mgametext(margin,40,                      "Original Concept",0,2+8+16);
1896
                mgametext(margin,40+9,                    "Todd Replogle",0,2+8+16);
1897
                mgametext(margin,40+9+9,                  "Allen H. Blum III",0,2+8+16);
5 Plagman 1898
 
3084 terminx 1899
                mgametext(margin,40+9+9+9+9,              "Produced & Directed By",0,2+8+16);
1900
                mgametext(margin,40+9+9+9+9+9,            "Greg Malone",0,2+8+16);
5 Plagman 1901
 
3084 terminx 1902
                mgametext(margin,40+9+9+9+9+9+9+9,        "Executive Producer",0,2+8+16);
1903
                mgametext(margin,40+9+9+9+9+9+9+9+9,      "George Broussard",0,2+8+16);
5 Plagman 1904
 
3084 terminx 1905
                mgametext(margin,40+9+9+9+9+9+9+9+9+9+9,  "BUILD Engine",0,2+8+16);
1906
                mgametext(margin,40+9+9+9+9+9+9+9+9+9+9+9,"Ken Silverman",0,2+8+16);
337 terminx 1907
                break;
3084 terminx 1908
            case MENU_CREDITS2:
1909
                mgametext(margin,40,                      "Game Programming",0,2+8+16);
1910
                mgametext(margin,40+9,                    "Todd Replogle",0,2+8+16);
5 Plagman 1911
 
3084 terminx 1912
                mgametext(margin,40+9+9+9,                "3D Engine/Tools/Net",0,2+8+16);
1913
                mgametext(margin,40+9+9+9+9,              "Ken Silverman",0,2+8+16);
5 Plagman 1914
 
3084 terminx 1915
                mgametext(margin,40+9+9+9+9+9+9,          "Network Layer/Setup Program",0,2+8+16);
1916
                mgametext(margin,40+9+9+9+9+9+9+9,        "Mark Dochtermann",0,2+8+16);
337 terminx 1917
                break;
3084 terminx 1918
            case MENU_CREDITS3:
1919
                mgametext(margin,40,                      "Map Design",0,2+8+16);
1920
                mgametext(margin,40+9,                    "Allen H. Blum III",0,2+8+16);
1921
                mgametext(margin,40+9+9,                  "Richard Gray",0,2+8+16);
5 Plagman 1922
 
3084 terminx 1923
                mgametext(margin,40+9+9+9+9,              "3D Modeling",0,2+8+16);
1924
                mgametext(margin,40+9+9+9+9+9,            "Chuck Jones",0,2+8+16);
1925
                mgametext(margin,40+9+9+9+9+9+9,          "Sapphire Corporation",0,2+8+16);
5 Plagman 1926
 
3084 terminx 1927
                mgametext(margin,40+9+9+9+9+9+9+9+9,      "Artwork",0,2+8+16);
1928
                mgametext(margin,40+9+9+9+9+9+9+9+9+9,    "Dirk Jones, Stephen Hornback",0,2+8+16);
1929
                mgametext(margin,40+9+9+9+9+9+9+9+9+9+9,  "James Storey, David Demaret",0,2+8+16);
1930
                mgametext(margin,40+9+9+9+9+9+9+9+9+9+9+9,"Douglas R. Wood",0,2+8+16);
337 terminx 1931
                break;
3084 terminx 1932
            case MENU_CREDITS4:
1933
                mgametext(margin,40,                      "Sound Engine",0,2+8+16);
1934
                mgametext(margin,40+9,                    "Jim Dose",0,2+8+16);
5 Plagman 1935
 
3084 terminx 1936
                mgametext(margin,40+9+9+9,                "Sound & Music Development",0,2+8+16);
1937
                mgametext(margin,40+9+9+9+9,              "Robert Prince",0,2+8+16);
1938
                mgametext(margin,40+9+9+9+9+9,            "Lee Jackson",0,2+8+16);
5 Plagman 1939
 
3084 terminx 1940
                mgametext(margin,40+9+9+9+9+9+9+9,        "Voice Talent",0,2+8+16);
1941
                mgametext(margin,40+9+9+9+9+9+9+9+9,      "Lani Minella - Voice Producer",0,2+8+16);
1942
                mgametext(margin,40+9+9+9+9+9+9+9+9+9,    "Jon St. John as \"Duke Nukem\"",0,2+8+16);
337 terminx 1943
                break;
3084 terminx 1944
            case MENU_CREDITS5:
1945
                mgametext(margin,60,                      "Graphic Design",0,2+8+16);
1946
                mgametext(margin,60+9,                    "Packaging, Manual, Ads",0,2+8+16);
1947
                mgametext(margin,60+9+9,                  "Robert M. Atkins",0,2+8+16);
1948
                mgametext(margin,60+9+9+9,                "Michael Hadwin",0,2+8+16);
5 Plagman 1949
 
3084 terminx 1950
                mgametext(margin,60+9+9+9+9+9,            "Special Thanks To",0,2+8+16);
1951
                mgametext(margin,60+9+9+9+9+9+9,          "Steven Blackburn, Tom Hall",0,2+8+16);
1952
                mgametext(margin,60+9+9+9+9+9+9+9,        "Scott Miller, Joe Siegler",0,2+8+16);
1953
                mgametext(margin,60+9+9+9+9+9+9+9+9,      "Terry Nagy, Colleen Compton",0,2+8+16);
1954
                mgametext(margin,60+9+9+9+9+9+9+9+9+9,    "HASH, Inc., FormGen, Inc.",0,2+8+16);
337 terminx 1955
                break;
3084 terminx 1956
            case MENU_CREDITS6:
1957
                mgametext(margin,49,                      "The 3D Realms Beta Testers",0,2+8+16);
5 Plagman 1958
 
3084 terminx 1959
                mgametext(margin,49+9+9,                  "Nathan Anderson, Wayne Benner",0,2+8+16);
1960
                mgametext(margin,49+9+9+9,                "Glenn Brensinger, Rob Brown",0,2+8+16);
1961
                mgametext(margin,49+9+9+9+9,              "Erik Harris, Ken Heckbert",0,2+8+16);
1962
                mgametext(margin,49+9+9+9+9+9,            "Terry Herrin, Greg Hively",0,2+8+16);
1963
                mgametext(margin,49+9+9+9+9+9+9,          "Hank Leukart, Eric Baker",0,2+8+16);
1964
                mgametext(margin,49+9+9+9+9+9+9+9,        "Jeff Rausch, Kelly Rogers",0,2+8+16);
1965
                mgametext(margin,49+9+9+9+9+9+9+9+9,      "Mike Duncan, Doug Howell",0,2+8+16);
1966
                mgametext(margin,49+9+9+9+9+9+9+9+9+9,    "Bill Blair",0,2+8+16);
337 terminx 1967
                break;
3084 terminx 1968
            case MENU_CREDITS7:
1969
                mgametext(margin,32,                      "Company Product Support",0,2+8+16);
5 Plagman 1970
 
3084 terminx 1971
                mgametext(margin,32+9+9,                  "The following companies were cool",0,2+8+16);
1972
                mgametext(margin,32+9+9+9,                "enough to give us lots of stuff",0,2+8+16);
1973
                mgametext(margin,32+9+9+9+9,              "during the making of Duke Nukem 3D.",0,2+8+16);
5 Plagman 1974
 
3084 terminx 1975
                mgametext(margin,32+9+9+9+9+9+9,          "Altec Lansing Multimedia",0,2+8+16);
1976
                mgametext(margin,32+9+9+9+9+9+9+9,        "for tons of speakers and the",0,2+8+16);
1977
                mgametext(margin,32+9+9+9+9+9+9+9+9,      "THX-licensed sound system.",0,2+8+16);
1978
                mgametext(margin,32+9+9+9+9+9+9+9+9+9,    "For info call 1-800-548-0620",0,2+8+16);
5 Plagman 1979
 
3084 terminx 1980
                mgametext(margin,32+9+9+9+9+9+9+9+9+9+9+9,"Creative Labs, Inc.",0,2+8+16);
5 Plagman 1981
 
3084 terminx 1982
                mgametext(margin,32+9+9+9+9+9+9+9+9+9+9+9+9+9,"Thanks for the hardware, guys.",0,2+8+16);
337 terminx 1983
                break;
3084 terminx 1984
            case MENU_CREDITS8:
1985
                mgametext(margin,50,                      "Duke Nukem is a trademark of",0,2+8+16);
1986
                mgametext(margin,50+9,                    "3D Realms Entertainment",0,2+8+16);
5 Plagman 1987
 
3084 terminx 1988
                mgametext(margin,50+9+9+9,                "Duke Nukem",0,2+8+16);
1989
                mgametext(margin,50+9+9+9+9,              "(C) 1996 3D Realms Entertainment",0,2+8+16);
5 Plagman 1990
 
337 terminx 1991
                if (VOLUMEONE)
1992
                {
3084 terminx 1993
                    mgametext(margin,106,                     "Please read LICENSE.DOC for shareware",0,2+8+16);
1994
                    mgametext(margin,106+9,                   "distribution grants and restrictions.",0,2+8+16);
337 terminx 1995
                }
5 Plagman 1996
 
3084 terminx 1997
                mgametext(margin,VOLUMEONE?134:115,       "Made in Dallas, Texas USA",0,2+8+16);
5 Plagman 1998
                break;
3084 terminx 1999
            case MENU_CREDITS9:
337 terminx 2000
                l = 10;
2001
                goto cheat_for_port_credits;
3084 terminx 2002
            case MENU_CREDITS10:
2003
                l = 10;
2004
                goto cheat_for_port_credits2;
5 Plagman 2005
            }
337 terminx 2006
            break;
2007
        }
5 Plagman 2008
 
337 terminx 2009
        // Plutonium pak menus
1143 terminx 2010
        switch (g_currentMenu)
337 terminx 2011
        {
3084 terminx 2012
        case MENU_CREDITS:
2013
        case MENU_CREDITS2:
2014
        case MENU_CREDITS3:
2015
            rotatesprite_fs(160<<16,200<<15,65536L,0,2504+g_currentMenu-MENU_CREDITS,0,0,10+64);
337 terminx 2016
            break;
3084 terminx 2017
        case MENU_CREDITS4:   // JBF 20031220
2018
            M_DrawBackground();
2019
            M_DrawTopBar("About EDuke32");
5 Plagman 2020
 
2021
cheat_for_port_credits:
3803 terminx 2022
            if (g_scriptVersion != 14) l = (-2);
2540 hendricks2 2023
            mgametext(160,38-l,"Programming and Project Management",0,2+8+16);
337 terminx 2024
            p = "Richard \"TerminX\" Gobeille";
2025
            minitext(161-(Bstrlen(p)<<1), 39+10-l, p, 4, 10+16+128);
2026
            minitext(160-(Bstrlen(p)<<1), 38+10-l, p, 8, 10+16+128);
5 Plagman 2027
 
3084 terminx 2028
            mgametext(160,58-l,"Polymer Rendering System",0,2+8+16);
1552 terminx 2029
            p = "Pierre-Loup \"Plagman\" Griffais";