X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fmenu.c;h=95fbbf660dc7fbfc2ad2b8019314c5171d332d58;hb=dbfaa4949fe7c5be64cf3e98b1875b711656ff67;hp=bd225a4acace832a199389b15cec09d546973d9c;hpb=2bb81ea2565c3627c954b5c37326db89b0048472;p=flatwaifu.git diff --git a/src/menu.c b/src/menu.c index bd225a4..95fbbf6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -27,7 +27,6 @@ #include "files.h" #include "memory.h" #include "error.h" -#include "keyb.h" #include "sound.h" #include "view.h" #include "player.h" @@ -40,8 +39,8 @@ #include "player.h" #include "sound.h" #include "music.h" +#include "input.h" -#include #include #define QSND_NUM 14 @@ -160,6 +159,8 @@ static void GMV_stop (void) { } void GMV_say (char *nm) { + // TODO fix this + /* int r,len; snd_t *p; byte *d; @@ -173,6 +174,7 @@ void GMV_say (char *nm) { for(d=(byte*)(p+1);len;--len,++d) *d^=128; voc=p; voc_ch=S_play(voc,-1,1024,255); + */ } static void GM_set (menu_t *m) { @@ -300,8 +302,8 @@ static void GM_command (int c) { F_freemus(); GMV_stop(); #ifndef DEMO - c=Z_sound(M_lock(qsnd[myrand(QSND_NUM)]),256);//for(c=(Z_sound(M_lock(qsnd[random2(QSND_NUM)]),256)+9)<<16,timer=0;timer=23) break; - c=get_keychar(lastkey);//c=keychar[(keys[0x2A] || keys[0x36])?1:0][lastkey]; - if(!c) break; - ibuf[icur]=c;ibuf[++icur]=0;GM_set(mnu); - }else { - switch(lastkey) { - case SDLK_ESCAPE://case 1: - if(!mnu) {GM_set(&main_mnu);Z_sound(msnd3,128);} - else {GM_set(NULL);Z_sound(msnd4,128);} - break; - case SDLK_F5: - if(mnu) break; - Z_sound(msnd3,128); - GMV_say("_GAMMA"); - GM_set(&gamma_mnu);break; - case SDLK_F4://case 0x3E: - if(mnu) break; - Z_sound(msnd3,128); - GMV_say("_VOLUME"); - GM_set(&vol_mnu);break; - case SDLK_F2://case 0x3C: - if(mnu) break; - if(g_st!=GS_GAME) break; - Z_sound(msnd3,128); - F_getsavnames();GM_set(&save_mnu);break; - case SDLK_F3://case 0x3D: - if(mnu) break; - Z_sound(msnd3,128); - F_getsavnames();GM_set(&load_mnu);break; - case SDLK_F10://case 0x44: - if(mnu) break; - Z_sound(msnd3,128); - GM_command(QUITGAME);break; - case SDLK_UP: case SDLK_KP8://case 0x48: case 0xC8: - if(!mnu) break; - if(mnu->type!=MENU) break; - if(--mnu->cur<0) mnu->cur=mnu->n-1; - GM_set(mnu); - Z_sound(msnd1,128);break; - case SDLK_DOWN: case SDLK_KP5: case SDLK_KP2://case 0x50: case 0xD0: case 0x4C: - if(!mnu) break; - if(mnu->type!=MENU) break; - if(++mnu->cur>=mnu->n) mnu->cur=0; - GM_set(mnu); - Z_sound(msnd1,128);break; - case SDLK_LEFT: case SDLK_RIGHT: case SDLK_KP4: case SDLK_KP6://case 0x4B: case 0x4D: case 0xCB: case 0xCD: - if(!mnu) break; - if(mnu->type!=MENU) break; - if(mnu->t[mnu->cur]t[mnu->cur]+((lastkey==SDLK_LEFT || lastkey==SDLK_KP4)?0:1));//GM_command(mnu->t[mnu->cur]+((lastkey==0x4B || lastkey==0xCB)?0:1)); - GM_set(mnu); - if(!movsndt) movsndt=Z_sound((lastkey==SDLK_LEFT || lastkey==SDLK_KP4)?msnd5:msnd6,255);//if(!movsndt) movsndt=Z_sound((lastkey==0x4B || lastkey==0xCB)?msnd5:msnd6,255); - break; - case SDLK_RETURN: case SDLK_SPACE: case SDLK_KP_ENTER://case 0x1C: case 0x39: case 0x9C: - if(!mnu) break; - if(mnu->type!=MENU) break; - if(mnu->t[mnu->cur]>=PL1CM) { - Z_sound(msnd2,128); - GM_command(PLCEND); - break; - } - if(mnu->t[mnu->cur]>=SVOLM) break; - Z_sound(msnd2,128); - GM_command(mnu->t[mnu->cur]); - break; - case SDLK_y://case 0x15: - if(!mnu) break; - if(mnu->type!=MSG) break; - Z_sound(msnd3,128); - GM_command(mnu->t[0]); - break; - case SDLK_n://case 0x31: - if(!mnu) break; - if(mnu->type!=MSG) break; - Z_sound(msnd4,128); - GM_command(mnu->t[1]); - break; - case SDLK_F1://case 0x3B: - if(shot_vga) {shot();Z_sound(msnd4,128);} - break; - } + if (input) { + switch (lastkey) { + case KEY_RETURN: + case KEY_KP_ENTER: + F_savegame(save_mnu.cur, ibuf); + input = 0; + GM_set(NULL); + break; + case KEY_ESCAPE: + input = 0; + GM_set(mnu); + break; + case KEY_BACKSPACE: + if (icur) { + icur -= 1; + ibuf[icur] = 0; + GM_set(mnu); + } + break; + default: + if (icur < 23) { + c = get_keychar(lastkey); + if (c != 0) { + ibuf[icur] = c; + icur += 1; + ibuf[icur] = 0; + GM_set(mnu); + } + } + break; + } + } else { + switch (lastkey) { + case KEY_ESCAPE: + if (mnu == NULL) { + GM_set(&main_mnu); + Z_sound(msnd3, 128); + } else { + GM_set(NULL); + Z_sound(msnd4, 128); + } + break; + case KEY_F5: + if (mnu == NULL) { + Z_sound(msnd3, 128); + GMV_say("_GAMMA"); + GM_set(&gamma_mnu); + } + break; + case KEY_F4: + if (mnu == NULL) { + Z_sound(msnd3, 128); + GMV_say("_VOLUME"); + GM_set(&vol_mnu); + } + break; + case KEY_F2: + if (mnu == NULL && g_st == GS_GAME) { + Z_sound(msnd3, 128); + F_getsavnames(); + GM_set(&save_mnu); + } + break; + case KEY_F3: + if (mnu == NULL) { + Z_sound(msnd3, 128); + F_getsavnames(); + GM_set(&load_mnu); + } + break; + case KEY_F10: + if (mnu == NULL) { + Z_sound(msnd3, 128); + GM_command(QUITGAME); + } + break; + case KEY_UP: + case KEY_KP_8: + if (mnu != NULL && mnu->type == MENU) { + mnu->cur -= 1; + if (mnu->cur < 0) { + mnu->cur = mnu->n - 1; + } + GM_set(mnu); + Z_sound(msnd1, 128); + } + break; + case KEY_DOWN: + case KEY_KP_5: + case KEY_KP_2: + if (mnu != NULL && mnu->type == MENU) { + mnu->cur += 1; + if (mnu->cur >= mnu->n) { + mnu->cur = 0; + } + GM_set(mnu); + Z_sound(msnd1, 128); + } + break; + case KEY_LEFT: + case KEY_RIGHT: + case KEY_KP_4: + case KEY_KP_6: + if (mnu != NULL && mnu->type == MENU && mnu->t[mnu->cur] >= SVOLM) { + GM_command(mnu->t[mnu->cur] + (lastkey == KEY_LEFT || lastkey == KEY_KP_4)); + GM_set(mnu); + if (!movsndt) { + movsndt = Z_sound(lastkey == KEY_LEFT || lastkey == KEY_KP_4 ? msnd5 : msnd6, 255); + } + } + break; + case KEY_RETURN: + case KEY_SPACE: + case KEY_KP_ENTER: + if (mnu != NULL && mnu->type == MENU) { + if (mnu->t[mnu->cur] >= PL1CM) { + Z_sound(msnd2, 128); + GM_command(PLCEND); + break; + } else if (mnu->t[mnu->cur] < SVOLM) { + Z_sound(msnd2,128); + GM_command(mnu->t[mnu->cur]); + } + } + break; + case KEY_Y: + if (mnu != NULL && mnu->type == MSG) { + Z_sound(msnd3, 128); + GM_command(mnu->t[0]); + } + break; + case KEY_N: + if (mnu != NULL && mnu->type == MSG) { + Z_sound(msnd4, 128); + GM_command(mnu->t[1]); + } + break; + case KEY_F1: + if (shot_vga) { + shot(); + Z_sound(msnd4, 128); + } + break; + } } - lastkey=0; - return((mnu)?1:0); + lastkey = KEY_UNKNOWN; + return mnu ? 1 : 0; } -static void G_keyf (int k, int press) { +void G_keyf (int key, int down) { int i; - - lastkey=k; - if(!_2pl || cheat) { - for(i=0;i<31;++i) cbuf[i]=cbuf[i+1]; - cbuf[31]=get_keychar(k); + if (down) { + lastkey = key; + if (!_2pl || cheat) { + for (i = 0; i < 31; ++i) { + cbuf[i] = cbuf[i + 1]; + } + cbuf[31] = get_keychar(key); + } } } @@ -545,5 +605,6 @@ void GM_init (void) { msnd4=Z_getsnd("SWTCHX"); msnd5=Z_getsnd("SUDI"); msnd6=Z_getsnd("TUDI"); - K_setkeyproc(G_keyf); + F_loadmus("MENU"); + S_startmusic(0); }