⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m_menu.c

📁 The source code of Doom legacy for windows
💻 C
📖 第 1 页 / 共 4 页
字号:
    // draw skin string    V_DrawString (mx+90, my+96, setupm_cvskin->string);    // draw text cursor for name    if (itemOn==0 &&        skullAnimCounter<4)   //blink cursor        V_DrawCharacter(mx+98+V_StringWidth(setupm_name),my,'_' | 0x80);    // anim the player in the box    if (--multi_tics<=0)    {        st = multi_state->nextstate;        if (st!=S_NULL)            multi_state = &states[st];        multi_tics = multi_state->tics;        if (multi_tics==-1)            multi_tics=15;    }    // skin 0 is default player sprite    sprdef    = &skins[R_SkinAvailable(setupm_cvskin->string)].spritedef;    sprframe  = &sprdef->spriteframes[ multi_state->frame & FF_FRAMEMASK];    lump  = sprframe->lumppat[0];    patch = W_CachePatchNum (lump, PU_CACHE);    // draw box around guy    M_DrawTextBox(mx+90,my+8, PLBOXW, PLBOXH);    if (setupm_cvcolor->value==0)        colormap = colormaps;    else        colormap = (byte *) translationtables - 256 + (setupm_cvcolor->value<<8);    // draw player sprite    V_DrawMappedPatch (mx+98+(PLBOXW*8/2),my+16+(PLBOXH*8)-8,0,patch,colormap);}//// Handle Setup MultiPlayer Menu//void M_HandleSetupMultiPlayer (int choice){    int      l;    boolean  exitmenu = false;  // exit to previous menu and send name change    int      myskin;    myskin  = setupm_cvskin->value;    switch( choice )    {      case KEY_DOWNARROW:        S_StartSound(NULL,sfx_pstop);        if (itemOn+1 >= SetupMultiPlayerDef.numitems)            itemOn = 0;        else itemOn++;        break;      case KEY_UPARROW:        S_StartSound(NULL,sfx_pstop);        if (!itemOn)            itemOn = SetupMultiPlayerDef.numitems-1;        else itemOn--;        break;      case KEY_LEFTARROW:        if (itemOn==2)       //player skin        {            S_StartSound(NULL,sfx_stnmov);            myskin--;        }        break;      case KEY_RIGHTARROW:        if (itemOn==2)       //player skin        {            S_StartSound(NULL,sfx_stnmov);            myskin++;        }        break;      case KEY_ENTER:        S_StartSound(NULL,sfx_stnmov);        exitmenu = true;        break;      case KEY_ESCAPE:        S_StartSound(NULL,sfx_swtchx);        exitmenu = true;        break;      case KEY_BACKSPACE:        if ( (l=strlen(setupm_name))!=0 && itemOn==0)        {            S_StartSound(NULL,sfx_stnmov);            setupm_name[l-1]=0;        }        break;      default:        if (choice < 32 || choice > 127 || itemOn!=0)            break;        l = strlen(setupm_name);        if (l<MAXPLAYERNAME-1)        {            S_StartSound(NULL,sfx_stnmov);            setupm_name[l]=choice;            setupm_name[l+1]=0;        }        break;    }    // check skin    if (myskin <0)        myskin = numskins-1;    if (myskin >numskins-1)        myskin = 0;    // check skin change    if (myskin != setupm_player->skin)        COM_BufAddText ( va("%s \"%s\"",setupm_cvskin->name ,skins[myskin].name));    if (exitmenu)    {        if (currentMenu->prevMenu)            M_SetupNextMenu (currentMenu->prevMenu);        else            M_ClearMenus (true);    }}boolean M_QuitMultiPlayerMenu(void){    int      l;    // send name if changed    if (strcmp(setupm_name, setupm_cvname->string))    {        // remove trailing whitespaces        for (l= strlen(setupm_name)-1;             l>=0 && setupm_name[l]==' '; l--)            setupm_name[l]=0;        COM_BufAddText ( va("%s \"%s\"",setupm_cvname->name ,setupm_name));            }    return true;}//===========================================================================//                              EPISODE SELECT//===========================================================================void M_Episode(int choice);enum{    ep1,    ep2,    ep3,    ep4,    ep5,    ep_end} episodes_e;menuitem_t EpisodeMenu[]={    {IT_CALL | IT_PATCH,"M_EPI1","Knee-Deep in the Dead", M_Episode,'k'},    {IT_CALL | IT_PATCH,"M_EPI2","The Shores of Hell"   , M_Episode,'t'},    {IT_CALL | IT_PATCH,"M_EPI3","Inferno"              , M_Episode,'i'},    {IT_CALL | IT_PATCH,"M_EPI4","Thy Flesh consumed"   , M_Episode,'t'},    {IT_CALL | IT_PATCH,"M_EPI5","Episode 5"            , M_Episode,'t'},};menu_t  EpiDef ={    "M_EPISOD",    "Which Episode?",    ep_end,             // # of menu items    &MainDef,           // previous menu    EpisodeMenu,        // menuitem_t ->    M_DrawGenericMenu,  // drawing routine ->    48,63,              // x,y    ep1                 // lastOn, flags};////      M_Episode//int     epi;void M_Episode(int choice){    if ( (gamemode == shareware)         && choice)    {        M_SetupNextMenu(&ReadDef1);        M_StartMessage(SWSTRING,NULL,MM_NOTHING);        return;    }    // Yet another hack...    if ( (gamemode == registered)         && (choice > 2))    {        I_Error("M_Episode: 4th episode requires UltimateDOOM\n");        choice = 0;    }    epi = choice;    M_SetupNextMenu(&NewDef);}//===========================================================================//                           NEW GAME FOR SINGLE PLAYER//===========================================================================void M_DrawNewGame(void);void M_ChooseSkill(int choice);enum{    killthings,    toorough,    hurtme,    violence,    nightmare,    newg_end} newgame_e;menuitem_t NewGameMenu[]={    {IT_CALL | IT_PATCH,"M_JKILL","I'm too young to die.",M_ChooseSkill, 'i'},    {IT_CALL | IT_PATCH,"M_ROUGH","Hey, not too rough."  ,M_ChooseSkill, 'h'},    {IT_CALL | IT_PATCH,"M_HURT" ,"Hurt me plenty."      ,M_ChooseSkill, 'h'},    {IT_CALL | IT_PATCH,"M_ULTRA","Ultra-Violence"       ,M_ChooseSkill, 'u'},    {IT_CALL | IT_PATCH,"M_NMARE","Nightmare!"           ,M_ChooseSkill, 'n'}};menu_t  NewDef ={    "M_NEWG",    "NEW GAME",    newg_end,           // # of menu items    &EpiDef,            // previous menu    NewGameMenu,        // menuitem_t ->    M_DrawNewGame,      // drawing routine ->    48,63,              // x,y    violence            // lastOn};void M_DrawNewGame(void){    patch_t* p;    //faB: testing with glide    p = W_CachePatchName("M_SKILL",PU_CACHE);    V_DrawScaledPatch ((BASEVIDWIDTH-p->width)/2,38,0,p);    //    V_DrawScaledPatch (54,38,0,W_CachePatchName("M_SKILL",PU_CACHE));    M_DrawGenericMenu();}void M_NewGame(int choice){    if( Playing() )    {        M_StartMessage(ALLREADYPLAYING,NULL,MM_NOTHING);        return;    }    if (netgame)    {        M_StartMessage(NEWGAME,NULL,MM_NOTHING);        return;    }    if ( gamemode == commercial )        M_SetupNextMenu(&NewDef);    else        M_SetupNextMenu(&EpiDef);    StartSplitScreenGame=false;}void M_VerifyNightmare(int ch);void M_ChooseSkill(int choice){    if (choice == nightmare)    {        M_StartMessage(NIGHTMARE,M_VerifyNightmare,MM_YESNO);        return;    }    G_DeferedInitNew(choice, G_BuildMapName(epi+1,1),StartSplitScreenGame);    M_ClearMenus (true);}void M_VerifyNightmare(int ch){    if (ch != 'y')        return;    G_DeferedInitNew (nightmare, G_BuildMapName(epi+1,1),StartSplitScreenGame);    M_ClearMenus (true);}//===========================================================================//                             OPTIONS MENU//===========================================================================//// M_Options////added:10-02-98: note: alphaKey member is the y offsetmenuitem_t OptionsMenu[]={    {IT_STRING | IT_CVAR,0,"Messages:"       ,&cv_showmessages    ,0},    {IT_STRING | IT_CVAR,0,"Always Run"      ,&cv_autorun         ,0},    {IT_STRING | IT_CVAR,0,"Crosshair"       ,&cv_crosshair       ,0},    {IT_STRING | IT_CVAR,0,"Autoaim"         ,&cv_autoaim         ,0},    {IT_STRING | IT_CVAR,0,"Control per key" ,&cv_controlperkey   ,0},    {IT_SUBMENU | IT_WHITESTRING,0,"Server options...",&ServerOptionsDef  ,70},    {IT_CALL    | IT_WHITESTRING,0,"Game Options..."  ,M_GameOption       ,0},    {IT_SUBMENU | IT_WHITESTRING,0,"Sound Volume..."  ,&SoundDef          ,0},    {IT_SUBMENU | IT_WHITESTRING,0,"Video Options..." ,&VideoOptionsDef   ,0},    {IT_SUBMENU | IT_WHITESTRING,0,"Mouse Options..." ,&MouseOptionsDef   ,0},    {IT_CALL    | IT_WHITESTRING,0,"Setup Controls...",M_SetupControlsMenu,0}};menu_t  OptionsDef ={    "M_OPTTTL",    "OPTIONS",    sizeof(OptionsMenu)/sizeof(menuitem_t),    &MainDef,    OptionsMenu,    M_DrawGenericMenu,    60,40,    0};////  A smaller 'Thermo', with range given as percents (0-100)//void M_DrawSlider (int x, int y, int range){    int i;    if (range < 0)        range = 0;    if (range > 100)        range = 100;    V_DrawScaledPatch (x-8, y, 0, W_CachePatchName( "M_SLIDEL" ,PU_CACHE) );    for (i=0 ; i<SLIDER_RANGE ; i++)        V_DrawScaledPatch (x+i*8, y, 0,                           W_CachePatchName( "M_SLIDEM" ,PU_CACHE) );    V_DrawScaledPatch (x+SLIDER_RANGE*8, y, 0,                       W_CachePatchName( "M_SLIDER" ,PU_CACHE) );    // draw the slider cursor    V_DrawMappedPatch (x + ((SLIDER_RANGE-1)*8*range)/100, y, 0,                       W_CachePatchName( "M_SLIDEC" ,PU_CACHE),                       whitemap);}//===========================================================================//                        Video OPTIONS MENU//===========================================================================//added:10-02-98: note: alphaKey member is the y offsetmenuitem_t VideoOptionsMenu[]={    {IT_STRING | IT_SUBMENU,0, "Video Modes..."   , &VidModeDef       , 0},#ifndef __DJGPP__    {IT_STRING | IT_CVAR,0,    "Fullscreen"       , &cv_fullscreen    , 0},#endif    {IT_STRING | IT_CVAR     | IT_CV_SLIDER     ,0,    "Brightness"       , &cv_usegamma      , 0},    {IT_STRING | IT_CVAR     | IT_CV_SLIDER     ,0,    "Screen Size"      , &cv_viewsize      , 0},    {IT_STRING | IT_CVAR,0,    "Scale Status Bar" , &cv_scalestatusbar, 0},    {IT_STRING | IT_CVAR,0,    "Translucency"     , &cv_translucency  , 0},    {IT_STRING | IT_CVAR,0,    "Splats"           , &cv_splats        , 0},    {IT_STRING | IT_CVAR,0,    "Screens Link"     , &cv_screenslink   , 0},    {IT_STRING | IT_CVAR,0,    "Wait Retrace"     , &cv_vidwait       , 0},#ifdef HWRENDER    //17/10/99: added by Hurdler    {IT_CALL|IT_WHITESTRING,0, "3D Card Options...", M_OpenGLOption    ,90},#endif};menu_t  VideoOptionsDef ={    "M_OPTTTL",    "OPTIONS",    sizeof(VideoOptionsMenu)/sizeof(menuitem_t),    &OptionsDef,    VideoOptionsMenu,    M_DrawGenericMenu,    60,40,    0};//===========================================================================//                        Mouse OPTIONS MENU//===========================================================================//added:24-03-00: note: alphaKey member is the y offsetmenuitem_t MouseOptionsMenu[]={    {IT_STRING | IT_CVAR,0,"Use Mouse",        &cv_usemouse        ,0},    {IT_STRING | IT_CVAR,0,"Always MouseLook", &cv_alwaysfreelook  ,0},    {IT_STRING | IT_CVAR,0,"Mouse Move"      , &cv_mousemove       ,0},    {IT_STRING | IT_CVAR,0,"Invert Mouse"    , &cv_invertmouse     ,0},    {IT_STRING | IT_CVAR     | IT_CV_SLIDER     ,0,"Mouse Speed"     , &cv_mousesens       ,0},    {IT_STRING | IT_CVAR     | IT_CV_SLIDER     ,0,"Mlook Speed"     , &cv_mlooksens       ,0}#ifdef __MACOS__        ,{IT_CALL   | IT_WHITESTRING,0,"Configure Input Sprocket..."  ,macConfigureInput     ,60}#endif};menu_t  MouseOptionsDef ={    "M_OPTTTL",    "OPTIONS",    sizeof(MouseOptionsMenu)/sizeof(menuitem_t),    &OptionsDef,    MouseOptionsMenu,    M_DrawGenericMenu,    60,40,    0};//===========================================================================//                        Game OPTIONS MENU//===========================================================================menuitem_t GameOptionsMenu[]={    {IT_STRING | IT_CVAR,0,"Item Respawn"        ,&cv_itemrespawn        ,0},    {IT_STRING | IT_CVAR,0,"Item Respawn time"   ,&cv_itemrespawntime    ,0},    {IT_STRING | IT_CVAR,0,"Monster Respawn"     ,&cv_respawnmonsters    ,0},    {IT_STRING | IT_CVAR,0,"Monster Respawn time",&cv_respawnmonsterstime,0},    {IT_STRING | IT_CVAR,0,"Fast Monsters"       ,&cv_fastmonsters       ,0},    {IT_STRING | IT_CVAR,0,"Gravity"             ,&cv_gravity            ,0},    {IT_STRING | IT_CVAR,0,"Solid corpse"        ,&cv_solidcorpse        ,0},    {IT_STRING | IT_CVAR,0,"BloodTime"           ,&cv_bloodtime          ,0},    {IT_CALL   | IT_WHITESTRING,0,"Network Options..."  ,M_NetOption     ,110}};menu_t  GameOptionDef ={    "M_OPTTTL",    "OPTIONS",    sizeof(GameOptionsMenu)/sizeof(menuitem_t),    &OptionsDef,    GameOptionsMenu,    M_DrawGenericMenu,    60,40,    0};void M_GameOption(int choice){    if(!server)    {        M_StartMessage("You are not the server\nYou can't change the options\n",NULL,MM_NOTHING);        return;    }    M_SetupNextMenu(&GameOptionDef);}//===========================================================================//                        Network OPTIONS MENU//===========================================================================menuitem_t NetOptionsMenu[]={    {IT_STRING | IT_CVAR,0,"Allow Jump"      ,&cv_allowjump       ,0},    //SoM: 3/28/2000    {IT_STRING | IT_CVAR,0,"Allow Rocket Jump",&cv_allowrocketjump,0},    {IT_STRING | IT_CVAR,0,"Allow autoaim"   ,&cv_allowautoaim    ,0},    {IT_STRING | IT_CVAR,0,"Allow turbo"     ,&cv_allowturbo      ,0},    {IT_STRING | IT_CVAR,0,"Allow exitlevel" ,&cv_allowexitlevel  ,0},    {IT_STRING | IT_CVAR,0,"Allow join player",&cv_allownewplayer ,0},    {IT_STRING | IT_CVAR,0,"Teamplay"        ,&cv_teamplay        ,0},    {IT_STRING | IT_CVAR,0,"TeamDamage"      ,&cv_teamdamage      ,0},    {IT_STRING | IT_CVAR,0,"Fraglimit"       ,&cv_fraglimit       ,0},    {IT_STRING | IT_CVAR,0,"Timelimit"       ,&cv_timelimit       ,0},    {IT_STRING | IT_CVAR,0,"Deathmatch Type" ,&cv_deathmatch      ,0},    {IT_STRING | IT_CVAR,0,"Maxplayers"      ,&cv_maxplayers      ,0},    {IT_CALL   | IT_WHITESTRING,0,"Games Options..." ,M_GameOption,0},};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -