mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-24 10:40:46 +00:00
Beginnings of support for selecting mods in the startup window... win32 only for now
git-svn-id: https://svn.eduke32.com/eduke32@984 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
9778af6489
commit
132db81381
12 changed files with 155 additions and 46 deletions
|
@ -1798,7 +1798,8 @@ static int kpegrend(const char *kfilebuf, int kfilength,
|
|||
{
|
||||
while (curbits < 24) //Getbits
|
||||
{
|
||||
ch = *kfileptr++; if (ch == 255) kfileptr++;
|
||||
ch = *kfileptr++;
|
||||
if (ch == 255) kfileptr++;
|
||||
num = (num<<8)+((int)ch); curbits += 8;
|
||||
}
|
||||
i = ((num>>(curbits-10))&1023);
|
||||
|
|
|
@ -88,7 +88,7 @@
|
|||
* deterministic/repeatable when the configuration otherwise is the same).
|
||||
*/
|
||||
#ifndef INIT_HTAB
|
||||
# define INIT_HTAB 0
|
||||
# define INIT_HTAB 1
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -471,7 +471,7 @@ static int daskinloader(int filh, intptr_t *fptr, int *bpl, int *sizx, int *sizy
|
|||
int r, g, b;
|
||||
|
||||
picfillen = kfilelength(filh);
|
||||
picfil = (char *)malloc(picfillen); if (!picfil) { return -1; }
|
||||
picfil = (char *)malloc(picfillen+1); if (!picfil) { return -1; }
|
||||
kread(filh, picfil, picfillen);
|
||||
|
||||
// tsizx/y = replacement texture's natural size
|
||||
|
|
|
@ -594,6 +594,7 @@ extern char *duke3dgrp;
|
|||
extern void check_valid_color(int *color,int prev_color);
|
||||
extern palette_t crosshair_colors;
|
||||
extern palette_t default_crosshair_colors;
|
||||
extern char mod_dir[BMAX_PATH];
|
||||
|
||||
int32 CONFIG_ReadSetup(void)
|
||||
{
|
||||
|
@ -649,6 +650,8 @@ int32 CONFIG_ReadSetup(void)
|
|||
SCRIPT_GetString(ud.config.scripthandle, "Misc","SelectedGRP",&duke3dgrp[0]);
|
||||
}
|
||||
|
||||
SCRIPT_GetString(ud.config.scripthandle, "Misc","ModDir",&mod_dir[0]);
|
||||
|
||||
SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "Shadows",&ud.shadows);
|
||||
|
||||
if (!NAM)
|
||||
|
@ -1110,6 +1113,7 @@ void CONFIG_WriteSetup(void)
|
|||
|
||||
|
||||
SCRIPT_PutString(ud.config.scripthandle, "Misc","SelectedGRP",&duke3dgrp[0]);
|
||||
SCRIPT_PutString(ud.config.scripthandle, "Misc","ModDir",&mod_dir[0]);
|
||||
{
|
||||
char commmacro[] = "CommbatMacro# ";
|
||||
|
||||
|
|
|
@ -112,7 +112,8 @@ char *duke3dgrp = defaultduke3dgrp;
|
|||
char *duke3dgrpstring = NULL;
|
||||
static char defaultconfilename[BMAX_PATH] = {"EDUKE.CON"};
|
||||
static char *confilename = defaultconfilename;
|
||||
static char *duke3ddef = "duke3d.def";
|
||||
char *duke3ddef = "duke3d.def";
|
||||
char mod_dir[BMAX_PATH] = "";
|
||||
|
||||
extern int lastvisinc;
|
||||
|
||||
|
|
|
@ -92,6 +92,7 @@ char *textptr;
|
|||
int error,warning;
|
||||
|
||||
extern char *duke3dgrpstring;
|
||||
extern char *duke3ddef;
|
||||
|
||||
enum labeltypes
|
||||
{
|
||||
|
@ -468,6 +469,7 @@ const char *keyw[] =
|
|||
"gettimedate", // 332
|
||||
"activatecheat", // 333
|
||||
"setgamepalette", // 334
|
||||
"setdefname", // 335
|
||||
"<null>"
|
||||
};
|
||||
|
||||
|
@ -901,7 +903,6 @@ const memberlabel_t inputlabels[]=
|
|||
|
||||
char *bitptr;
|
||||
|
||||
|
||||
#define BITPTR_DONTFUCKWITHIT 0
|
||||
#define BITPTR_POINTER 1
|
||||
|
||||
|
@ -1660,7 +1661,7 @@ static int transnum(int type)
|
|||
Bfree(gl);
|
||||
}
|
||||
if (labeltype[i] != LABEL_DEFINE && labelcode[i] >= (intptr_t)&script[0] && labelcode[i] < (intptr_t)&script[g_ScriptSize])
|
||||
bitptr[(scriptptr-script)] = 1;
|
||||
bitptr[(scriptptr-script)] = BITPTR_POINTER;
|
||||
else bitptr[(scriptptr-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
*(scriptptr++) = labelcode[i];
|
||||
textptr += l;
|
||||
|
@ -2455,6 +2456,7 @@ static int parsecommand(void)
|
|||
|
||||
for (j=0;j<4;j++)
|
||||
{
|
||||
bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
*(parsing_actor+j) = 0;
|
||||
if (j == 3)
|
||||
{
|
||||
|
@ -2499,6 +2501,10 @@ static int parsecommand(void)
|
|||
}
|
||||
break;
|
||||
}
|
||||
// bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
if (*(scriptptr-1) >= (intptr_t)&script[0] && *(scriptptr-1) < (intptr_t)&script[g_ScriptSize])
|
||||
bitptr[(parsing_actor+j-script)] = BITPTR_POINTER;
|
||||
else bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
*(parsing_actor+j) = *(scriptptr-1);
|
||||
}
|
||||
}
|
||||
|
@ -2664,7 +2670,10 @@ static int parsecommand(void)
|
|||
}
|
||||
break;
|
||||
}
|
||||
bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
// bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
if (*(scriptptr-1) >= (intptr_t)&script[0] && *(scriptptr-1) < (intptr_t)&script[g_ScriptSize])
|
||||
bitptr[(parsing_actor+j-script)] = BITPTR_POINTER;
|
||||
else bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
|
||||
*(parsing_actor+j) = *(scriptptr-1);
|
||||
}
|
||||
}
|
||||
|
@ -4572,6 +4581,27 @@ repeatcase:
|
|||
}
|
||||
return 0;
|
||||
|
||||
case CON_SETDEFNAME:
|
||||
{
|
||||
scriptptr--;
|
||||
while (isaltok(*textptr) == 0)
|
||||
{
|
||||
if (*textptr == 0x0a) line_number++;
|
||||
textptr++;
|
||||
if (*textptr == 0) break;
|
||||
}
|
||||
j = 0;
|
||||
while (isaltok(*textptr))
|
||||
{
|
||||
tempbuf[j] = *(textptr++);
|
||||
j++;
|
||||
}
|
||||
tempbuf[j] = '\0';
|
||||
duke3ddef = Bstrdup(tempbuf);
|
||||
initprintf("Using DEF file: %s.\n",duke3ddef);
|
||||
}
|
||||
return 0;
|
||||
|
||||
case CON_DEFINEGAMETYPE:
|
||||
scriptptr--;
|
||||
transnum(LABEL_DEFINE);
|
||||
|
|
|
@ -845,4 +845,5 @@ enum keywords
|
|||
CON_GETTIMEDATE, // 332
|
||||
CON_ACTIVATECHEAT, // 333
|
||||
CON_SETGAMEPALETTE, // 334
|
||||
CON_SETDEFNAME, // 335
|
||||
};
|
||||
|
|
|
@ -683,7 +683,7 @@ void SetGameVarID(int id, int lValue, int iActor, int iPlayer)
|
|||
{
|
||||
if (iPlayer < 0 || iPlayer > MAXPLAYERS-1)
|
||||
{
|
||||
OSD_Printf(OSD_ERROR "SetGameVarID(): invalid player (%d) for per-player gamevar %s from sprite %d (%d), player %d\n",iPlayer,aGameVars[id].szLabel,g_i,sprite[g_i].picnum,g_p);
|
||||
OSD_Printf(OSD_ERROR "SetGameVarID(): invalid player (%d) for per-player gamevar %s from sprite %d, player %d\n",iPlayer,aGameVars[id].szLabel,g_i,g_p);
|
||||
return;
|
||||
}
|
||||
// for the current player
|
||||
|
|
|
@ -50,6 +50,8 @@ FONT 8, "MS Shell Dlg"
|
|||
BEGIN
|
||||
CONTROL "&Game:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 5, 100, 8
|
||||
CONTROL "", IDGDATA, "LISTBOX", LBS_NOINTEGRALHEIGHT | LBS_USETABSTOPS | LBS_STANDARD | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 15, 226, 70
|
||||
CONTROL "&Mod:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 90, 100, 8
|
||||
CONTROL "", IDGGAMEDIR, "COMBOBOX", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 10, 99, 226, 156
|
||||
END
|
||||
|
||||
#define FILEVER 1,4,9,9
|
||||
|
|
|
@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
extern char *bitptr;
|
||||
|
||||
#define BITPTR_POINTER 1
|
||||
|
||||
void readsavenames(void)
|
||||
{
|
||||
int dummy,j;
|
||||
|
@ -641,7 +643,7 @@ int saveplayer(int spot)
|
|||
scriptptrs = Bcalloc(1, g_ScriptSize * sizeof(scriptptrs));
|
||||
for (i=0;i<g_ScriptSize;i++)
|
||||
{
|
||||
if (bitptr[i])
|
||||
if (bitptr[i] == BITPTR_POINTER)
|
||||
// if ((intptr_t)script[i] >= (intptr_t)(&script[0]) && (intptr_t)script[i] < (intptr_t)(&script[g_ScriptSize]))
|
||||
{
|
||||
scriptptrs[i] = 1;
|
||||
|
|
|
@ -35,6 +35,7 @@ static struct
|
|||
char selectedgrp[BMAX_PATH+1];
|
||||
int game;
|
||||
int crcval; // for finding the grp in the list again
|
||||
char *gamedir;
|
||||
}
|
||||
settings;
|
||||
|
||||
|
@ -45,9 +46,30 @@ static HWND pages[3] =
|
|||
};
|
||||
static int done = -1, mode = TAB_CONFIG;
|
||||
|
||||
static CACHE1D_FIND_REC *finddirs=NULL;
|
||||
static int numdirs=0;
|
||||
|
||||
void clearfilenames(void)
|
||||
{
|
||||
klistfree(finddirs);
|
||||
finddirs = NULL;
|
||||
numdirs = 0;
|
||||
}
|
||||
|
||||
int getfilenames(char *path)
|
||||
{
|
||||
CACHE1D_FIND_REC *r;
|
||||
|
||||
clearfilenames();
|
||||
finddirs = klistpath(path,"*",CACHE1D_FIND_DIR);
|
||||
for (r = finddirs; r; r=r->next) numdirs++;
|
||||
return(0);
|
||||
}
|
||||
|
||||
#define POPULATE_VIDEO 1
|
||||
#define POPULATE_CONFIG 2
|
||||
#define POPULATE_GAME 4
|
||||
#define POPULATE_MODS 8
|
||||
|
||||
static void PopulateForm(int pgs)
|
||||
{
|
||||
|
@ -148,6 +170,25 @@ static void PopulateForm(int pgs)
|
|||
if (!Bstrcasecmp(fg->name, settings.selectedgrp))(void)ListBox_SetCurSel(hwnd, j);
|
||||
}
|
||||
}
|
||||
|
||||
if (pgs & POPULATE_MODS)
|
||||
{
|
||||
CACHE1D_FIND_REC *dirs = NULL;
|
||||
|
||||
hwnd = GetDlgItem(pages[TAB_GAME], IDGGAMEDIR);
|
||||
|
||||
getfilenames("/");
|
||||
(void)ComboBox_ResetContent(hwnd);
|
||||
j = ComboBox_AddString(hwnd, "None");
|
||||
(void)ComboBox_SetItemData(hwnd, j, 0);
|
||||
for (dirs=finddirs,i=1; dirs != NULL; dirs=dirs->next,i++)
|
||||
{
|
||||
Bsprintf(buf, "%s", dirs->name);
|
||||
j = ComboBox_AddString(hwnd, buf);
|
||||
(void)ComboBox_SetItemData(hwnd, j, i);
|
||||
if (Bstrcmp(dirs->name,settings.gamedir) == 0)(void)ComboBox_SetCurSel(hwnd, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK ConfigPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
|
@ -216,6 +257,25 @@ static INT_PTR CALLBACK GamePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPA
|
|||
}
|
||||
return TRUE;
|
||||
}
|
||||
case IDGGAMEDIR:
|
||||
if (HIWORD(wParam) == CBN_SELCHANGE)
|
||||
{
|
||||
int i,j;
|
||||
CACHE1D_FIND_REC *dir = NULL;
|
||||
i = ComboBox_GetCurSel((HWND)lParam);
|
||||
if (i != CB_ERR) i = ComboBox_GetItemData((HWND)lParam, i);
|
||||
if (i != CB_ERR)
|
||||
{
|
||||
for (j=0,dir=finddirs;dir != NULL;dir=dir->next,j++)
|
||||
if (j == i)
|
||||
{
|
||||
if (i==0) settings.gamedir = NULL;
|
||||
else settings.gamedir = dir->prev->name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -252,6 +312,7 @@ static void EnableConfig(int n)
|
|||
EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), n);
|
||||
|
||||
EnableWindow(GetDlgItem(pages[TAB_GAME], IDGDATA), n);
|
||||
EnableWindow(GetDlgItem(pages[TAB_GAME], IDGGAMEDIR), n);
|
||||
}
|
||||
|
||||
static INT_PTR CALLBACK startup_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
|
@ -567,6 +628,7 @@ int startwin_idle(void *v)
|
|||
}
|
||||
|
||||
extern char *duke3dgrp, *duke3dgrpstring;
|
||||
extern char mod_dir[BMAX_PATH];
|
||||
|
||||
int startwin_run(void)
|
||||
{
|
||||
|
@ -591,6 +653,7 @@ int startwin_run(void)
|
|||
settings.game = g_GameType;
|
||||
// settings.crcval = 0;
|
||||
strncpy(settings.selectedgrp, duke3dgrp, BMAX_PATH);
|
||||
settings.gamedir = mod_dir;
|
||||
PopulateForm(-1);
|
||||
|
||||
while (done < 0)
|
||||
|
@ -625,6 +688,11 @@ int startwin_run(void)
|
|||
ud.config.UseJoystick = settings.usejoy;
|
||||
duke3dgrp = settings.selectedgrp;
|
||||
g_GameType = settings.game;
|
||||
if (settings.gamedir)
|
||||
{
|
||||
addsearchpath(settings.gamedir);
|
||||
Bstrcpy(mod_dir,settings.gamedir);
|
||||
}
|
||||
|
||||
for (i = 0; i<numgrpfiles; i++) if (settings.crcval == grpfiles[i].crcval) break;
|
||||
if (i != numgrpfiles)
|
||||
|
|
|
@ -24,4 +24,4 @@
|
|||
|
||||
// game page
|
||||
#define IDGDATA 100
|
||||
|
||||
#define IDGGAMEDIR 101
|
||||
|
|
Loading…
Reference in a new issue