📄 gui.cpp
字号:
0, 10, 200, 5, false
},
{ CHECK, { "Graphics speedup (ND)","","","","","" },
{ 5,0,0,0,0,0 }, { 34,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, false
},
{ CHECK, { "Wait for retrace","Leading edge","","","","" },
{ 5,90,0,0,0,0 }, { 43,43,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ TEXT, { "Amount of CPU cycles to execute:","Sound Channel Output","Resolution","Color add/subtract (ND)","","" },
{ 5,5,5,5,0,0 }, { 53,79,103,129,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ TEXT, { "65c816","SPC (ND)","","","","" },
{ 5,5,0,0,0,0 }, { 63,71,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ SLIDER, { "%","","","","","" }, // 65c816 cycles
{ 50,0,0,0,0,0 }, { 63,0,0,0,0,0 }, 75, 0,
0, 10, 200, 5, false
},
{ SLIDER, { "%","","","","","" }, // SPC700 cycles
{ 50,0,0,0,0,0 }, { 71,0,0,0,0,0 }, 75, 0,
0, 10, 200, 5, false
},
{ CHECK, { "0","1","2","3","","" },
{ 5,20,35,50,0,0 }, { 87,87,87,87,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ CHECK, { "4","5","6","7","","" },
{ 65,80,95,110,0,0 }, { 87,87,87,87,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ BUTTON, { "Joypads...","","","","","" },
{ 115,0,0,0,0,0 }, { 98,0,0,0,0,0 }, 45, 15,
1, 0, 0, 0, false
},
{ RADIO, { "256x256","320x200","320x240","360x240","360x360","" },
{ 5,60,5,60,115,0 }, { 110,110,118,118,118,0 }, 0, 0,
5, 0, 0, 0, false
},
{ RADIO, { "Off","Pattern","Color Table","","","" },
{ 5,30,75,0,0,0 }, { 136,136,136,0,0,0 }, 0, 0,
3, 0, 0, 0, false
},
{ CHECK, { "BG1","BG2","BG3","BG4","Sprites","" },
{ 5,30,55,80,105,0 }, { 146,146,146,146,146,0 }, 0, 0,
5, 0, 0, 0, false
},
{ CHECK, { "Windowing","","","","","" },
{ 5,0,0,0,0,0 }, { 156,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, false
},
{ CHECK, { "Indirect HDMA","","","","","" },
{ 5,0,0,0,0,0 }, { 164,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, false
},
};
void ingamewindowproc (int msg, int cnum, int v1)
{
const static int cskip_auto = 0, cskipfr = 1, cautorate = 2, cspeedup = 3, cwaittrace = 4, ccpupercent = 7, cspcpercent = 8, csound1to4 = 9, csound5to8 = 10, cjoypads = 11, cgameres = 12, ccoloraddsub = 13, cbgs = 14, cwindowing = 15, cindirecthdma = 16;
switch (msg) {
case OPENWINDOW:
strcpy (ingamewindow.title+10, curgs->filename);
break;
case NEWGUIFRAME:
igc[cspeedup].disabled = true;
igc[cspcpercent].disabled = true;
igc[ccoloraddsub].disabled = true;
igc[csound1to4].disabled = true;
igc[csound5to8].disabled = true;
igc[cskip_auto].choice = curgs->autoreg;
igc[cskipfr].choice = curgs->frameskip;
igc[cautorate].choice = curgs->regpercent;
igc[cspeedup].choice = curgs->grspeedup;
igc[ccpupercent].choice = curgs->cpupercent;
igc[cspcpercent].choice = curgs->spcpercent;
igc[csound1to4].choice = curgs->soundch & 15;
igc[csound5to8].choice = curgs->soundch >> 4;
igc[cbgs].choice = curgs->bgs;
igc[cwaittrace].choice = waitretrace | (leadingedge << 1);
igc[cgameres].choice = gameres - 1;
igc[ccoloraddsub].choice = addsubmethod;
igc[cwindowing].choice = curgs->windowing;
igc[cindirecthdma].choice = curgs->indirecthdma;
break;
case CONTROLCHANGE:
curgs->autoreg = igc[cskip_auto].choice;
curgs->frameskip = igc[cskipfr].choice;
curgs->regpercent = igc[cautorate].choice;
curgs->grspeedup = igc[cspeedup].choice;
curgs->cpupercent = igc[ccpupercent].choice;
curgs->spcpercent = igc[cspcpercent].choice;
curgs->soundch = igc[csound1to4].choice | (igc[csound5to8].choice << 4);
curgs->bgs = igc[cbgs].choice;
curgs->windowing = igc[cwindowing].choice;
curgs->indirecthdma = igc[cindirecthdma].choice;
waitretrace = igc[cwaittrace].choice & 1;
leadingedge = ((igc[cwaittrace].choice & 2) != 0);
gameres = igc[cgameres].choice + 1;
addsubmethod = igc[ccoloraddsub].choice;
if (cnum == cjoypads)
showwindow (4);
break;
}
defwindowproc (ingamewindow, msg, cnum, v1);
}
struct guiwindow ingamewindow = {
"Settings: [?]",
igc, ingamewindowproc,
NUMINGAMECONTROLS,
false, 40, 10, 170, 178
};
struct guicontrol jpc [NUMJOYPADCONTROLS] = {
{ TEXT, { "Input device:","Directions","","","","" },
{ 5,5,5,5,0,0 }, { 15,51,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ RADIO, { "1","2","","","","" },
{ 70,85,0,0,0,0 }, { 15,15,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ RADIO, { "Keyboard 1","Keyboard 2","4+ Button Gamepad","Not connected","Extra 1","Extra 2" },
{ 5,5,5,105,105,105 }, { 25,33,41,25,33,41 }, 0, 0,
6, 0, 0, 0, false
},
{ TEXT, { "L","R","Select","Start","","" },
{ 98,168,105,143,0,0 }, { 55,55,85,85,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ TEXT, { "X","Y","A","B","","" },
{ 238,208,225,238,0,0 }, { 63,75,75,87,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Up
{ 35,0,0,0,0,0 }, { 61,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Down
{ 35,0,0,0,0,0 }, { 85,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Left
{ 5,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Right
{ 65,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // L
{ 105,0,0,0,0,0 }, { 53,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // R
{ 135,0,0,0,0,0 }, { 53,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Select
{ 105,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Start
{ 135,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // X
{ 205,0,0,0,0,0 }, { 61,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // Y
{ 175,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // A
{ 235,0,0,0,0,0 }, { 73,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ KEYCODE, { "","","","","","" }, // B
{ 205,0,0,0,0,0 }, { 85,0,0,0,0,0 }, 30, 11,
0, 0, 0, 0, false
},
{ BUTTON, { "Calibrate joystick...","","","","","" },
{ 175,0,0,0,0,0 }, { 24,0,0,0,0,0 }, 85, 16,
1, 0, 0, 0, false
}
};
void joypadwindowproc (int msg, int cnum, int v1)
{
const static int cplayer = 1, cinputtype = 2, cup = 5, cdown = 6, cleft = 7, cright = 8, cL = 9, cR = 10, cselect = 11, cstart = 12, cX = 13, cY = 14, cA = 15, cB = 16, ccalibrate = 17;
struct snesjoypad *curjoy = &joykey [pcontrol[jpc[cplayer].choice]];
switch (msg) {
case OPENWINDOW:
jpc[cinputtype].choice = pcontrol[jpc[cplayer].choice];
break;
case NEWGUIFRAME:
jpc[cup].choice = curjoy->up;
jpc[cdown].choice = curjoy->down;
jpc[cleft].choice = curjoy->left;
jpc[cright].choice = curjoy->right;
jpc[cselect].choice = curjoy->select;
jpc[cstart].choice = curjoy->start;
jpc[cL].choice = curjoy->l;
jpc[cR].choice = curjoy->r;
jpc[cX].choice = curjoy->x;
jpc[cY].choice = curjoy->y;
jpc[cA].choice = curjoy->a;
jpc[cB].choice = curjoy->b;
break;
case CONTROLCHANGE:
if (cnum == cplayer) {
jpc[cinputtype].choice = pcontrol[jpc[cplayer].choice];
break;
}
if (cnum == cinputtype) {
pcontrol[jpc[cplayer].choice] = jpc[cnum].choice;
break;
}
if (cnum == ccalibrate) {
resetjoysettings ();
messagebox ("Calibrate Joystick", "Twirl the joystick a few times and press space.");
addmessage ("X Range: %d-%d; Y Range: %d-%d", joyminx, joymaxx, joyminy, joymaxy);
messagebox ("Calibrate Joystick", "Center stick and press space.");
checkjoystick ();
joymidx = joyposx;
joymidy = joyposy;
addmessage ("Joystick center: %d, %d", joymidx, joymidy);
}
curjoy->up = jpc[cup].choice;
curjoy->down = jpc[cdown].choice;
curjoy->left = jpc[cleft].choice;
curjoy->right = jpc[cright].choice;
curjoy->select = jpc[cselect].choice;
curjoy->start = jpc[cstart].choice;
curjoy->l = jpc[cL].choice;
curjoy->r = jpc[cR].choice;
curjoy->x = jpc[cX].choice;
curjoy->y = jpc[cY].choice;
curjoy->a = jpc[cA].choice;
curjoy->b = jpc[cB].choice;
memset (&joykey [3], 0, sizeof (joykey [3]));
break;
}
defwindowproc (joypadwindow, msg, cnum, v1);
}
struct guiwindow joypadwindow = {
"Joypad input setup",
jpc, joypadwindowproc,
NUMJOYPADCONTROLS,
true, 5, 10, 270, 100
};
struct guicontrol gsc [NUMGUISETTINGCONTROLS] = {
{ SLIDER, { "","","","","","" }, // Color set: Window
{ 65,0,0,0,0,0 }, { 23,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Text
{ 65,0,0,0,0,0 }, { 31,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Control
{ 65,0,0,0,0,0 }, { 39,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Choice
{ 65,0,0,0,0,0 }, { 47,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Button
{ 65,0,0,0,0,0 }, { 55,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Button text
{ 65,0,0,0,0,0 }, { 63,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Title
{ 65,0,0,0,0,0 }, { 71,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Title text
{ 65,0,0,0,0,0 }, { 79,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Focus
{ 65,0,0,0,0,0 }, { 87,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ SLIDER, { "","","","","","" }, // Color set: Flash
{ 65,0,0,0,0,0 }, { 95,0,0,0,0,0 }, 85, 0,
0, 0, 15, 1, false
},
{ TEXT, { "Color Sets","Background","Resolution","","","" },
{ 5,5,5,5,0,0 }, { 15,127,155,0,0,0 }, 0, 0,
3, 0, 0, 0, false
},
{ BUTTON, { "Default","Valentine","Christmas","Autumn","Cool","Yellow" },
{ 5,57,109,5,57,109 }, { 104,104,104,115,115,115 }, 52, 11,
6, 0, 0, 0, false
},
{ RADIO, { "Black","Rainbow","Game","Dim game","","" },
{ 60,95,20,60,0,0 }, { 127,127,137,137,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ TEXT, { "Window","Text","Control","Choice","Button", "Button Text" },
{ 5,5,5,5,5,5 }, { 25,33,41,49,57,65 }, 0, 0,
6, 0, 0, 0, false
},
{ TEXT, { "Title","Title text","Focus","Flash","","" },
{ 5,5,5,5,0,0 }, { 73,81,89,97,0,0 }, 0, 0,
4, 0, 0, 0, false
},
{ TEXT, { "At menu, ESC","","","","","" },
{ 5,0,0,0,0,0 }, { 145,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, false
},
{ RADIO, { "Quits","Returns","","","","" },
{ 65,105,0,0,0,0 }, { 145,145,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ RADIO, { "256x256","320x200","320x240","360x240","360x360","" },
{ 5,60,115,5,60,0 }, { 163,163,163,171,171,0 }, 0, 0,
5, 0, 0, 0, false
}
};
void guisettingwindowproc (int msg, int cnum, int v1)
{
const static int cwindowset = 0, ctextset = 1, ccontrolset = 2, cchoiceset = 3, cbuttonset = 4, cbuttontextset = 5, ctitleset = 6, ctitletextset = 7, cfocusset = 8, cflashset = 9, csetselect = 11, cbackground = 12, cwhatesc = 16, cguires = 17;
switch (msg) {
case NEWGUIFRAME:
gsc[cguires].choice = guires-1;
gsc[cwhatesc].choice = !escquits;
gsc[cwindowset].choice = set.window;
gsc[ctextset].choice = set.text;
gsc[ccontrolset].choice = set.control;
gsc[cchoiceset].choice = set.choice;
gsc[cbuttonset].choice = set.button;
gsc[cbuttontextset].choice = set.buttontext;
gsc[ctitleset].choice = set.title;
gsc[ctitletextset].choice = set.titletext;
gsc[cfocusset].choice = set.focus;
gsc[cflashset].choice = set.flash;
gsc[cbackground].choice = background;
break;
case CONTROLCHANGE:
set.window = gsc[cwindowset].choice;
set.text = gsc[ctextset].choice;
set.control = gsc[ccontrolset].choice;
set.choice = gsc[cchoiceset].choice;
set.button = gsc[cbuttonset].choice;
set.buttontext = gsc[cbuttontextset].choice;
set.title = gsc[ctitleset].choice;
set.titletext = gsc[ctitletextset].choice;
set.focus = gsc[cfocusset].choice;
set.flash = gsc[cflashset].choice;
background = gsc[cbackground].choice;
escquits = !gsc[cwhatesc].choice;
guires = gsc[cguires].choice+1;
if (guires != vidmode) {
setvideomode (guires, false);
applycustompalette ();
}
if (cnum == csetselect) {
switch (v1) {
case 0: set = defset; break;
case 1: set = valentineset; break;
case 2: set = christmasset; break;
case 3: set = fallset; break;
case 4: set = coolset; break;
case 5: set = yellowset; break;
}
}
break;
}
defwindowproc (guisettingwindow, msg, cnum, v1);
}
struct guiwindow guisettingwindow = {
"GUI Settings",
gsc, guisettingwindowproc,
NUMGUISETTINGCONTROLS,
false, 40, 10, 165, 182
};
struct guicontrol ccc [NUMCHEATCODECONTROLS] = {
{ TEXT, { "Code","Description","New Code","Description","Look For:","Set to:" },
{ 7,100,5,5,5,5 }, { 15,15,73,86,112,125 }, 0, 0,
6, 0, 0, 0, false
},
{ LISTBOX, { NULL,NULL,NULL,NULL,NULL,NULL },
{ 5,0,0,0,0,0 }, { 23,0,0,0,0,0 }, 245, 43,
3, 0, 0, 0, false
},
{ INPUT, { "\0\01234567890123456789","","","","","" }, // New code
{ 55,0,0,0,0,0 }, { 69,0,0,0,0,0 }, 70, 13,
1, 0, 19, 0, false
},
{ INPUT, { "\0\0123456789012345678901234567890123456789","","","","","" }, // Description
{ 55,0,0,0,0,0 }, { 84,0,0,0,0,0 }, 120, 13,
1, 0, 40, 0, false
},
{ BUTTON, { "Add","","","","","" },
{ 130,0,0,0,0,0 }, { 69,0,0,0,0,0 }, 30, 13,
1, 0, 0, 0, false
},
{ BUTTON, { "Remove","","","","","" },
{ 165,0,0,0,0,0 }, { 69,0,0,0,0,0 }, 42, 13,
1, 0, 0, 0, false
},
{ BUTTON, { "Toggle","","","","","" },
{ 212,0,0,0,0,0 }, { 69,0,0,0,0,0 }, 38, 13,
1, 0, 0, 0, false
},
{ BUTTON, { "Display format","","","","","" },
{ 180,0,0,0,0,0 }, { 84,0,0,0,0,0 }, 70, 13,
1, 0, 0, 0, false
},
{ TEXT, { "Cheat Searcher","","","","","" },
{ 5,0,0,0,0,0 }, { 98,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, true
},
{ INPUT, { "\0\0123456","","","","","" }, // Look for
{ 55,0,0,0,0,0 }, { 110,0,0,0,0,0 }, 35, 11,
1, 0, 6, 0, false
},
{ INPUT, { "\0\0123456","","","","","" }, // Set to
{ 55,0,0,0,0,0 }, { 123,0,0,0,0,0 }, 35, 11,
1, 0, 6, 0, false
},
{ BUTTON, { "Reset & Find All","","","","","" },
{ 95,0,0,0,0,0 }, { 103,0,0,0,0,0 }, 80, 14,
1, 0, 0, 0, false
},
{ BUTTON, { "Search again","","","","","" },
{ 95,0,0,0,0,0 }, { 120,0,0,0,0,0 }, 80, 14,
1, 0, 0, 0, false
},
{ RADIO, { "Find Byte","Find Word","","","","" },
{ 180,180,0,0,0,0 }, { 103,112,0,0,0,0 }, 0, 0,
2, 0, 0, 0, false
},
{ CHECK, { "Find Near","","","","","" },
{ 180,0,0,0,0,0 }, { 127,0,0,0,0,0 }, 0, 0,
1, 0, 0, 0, false
},
{ BUTTON, { "bb.oooo=vvvvh","bb.oooo=vvvvh","bb.oooo=vvvvh","bb.oooo=vvvvh","bb.oooo=vvvvh","bb.oooo=vvvvh" },
{ 5,88,171,5,88,171 }, { 138,138,138,152,152,152 }, 79, 12,
6, 0, 0, 0, false
},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -