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:
terminx 2008-08-17 09:01:31 +00:00
parent 9778af6489
commit 132db81381
12 changed files with 155 additions and 46 deletions

View file

@ -1798,7 +1798,8 @@ static int kpegrend(const char *kfilebuf, int kfilength,
{ {
while (curbits < 24) //Getbits while (curbits < 24) //Getbits
{ {
ch = *kfileptr++; if (ch == 255) kfileptr++; ch = *kfileptr++;
if (ch == 255) kfileptr++;
num = (num<<8)+((int)ch); curbits += 8; num = (num<<8)+((int)ch); curbits += 8;
} }
i = ((num>>(curbits-10))&1023); i = ((num>>(curbits-10))&1023);

View file

@ -88,7 +88,7 @@
* deterministic/repeatable when the configuration otherwise is the same). * deterministic/repeatable when the configuration otherwise is the same).
*/ */
#ifndef INIT_HTAB #ifndef INIT_HTAB
# define INIT_HTAB 0 # define INIT_HTAB 1
#endif #endif
/* /*

View file

@ -471,7 +471,7 @@ static int daskinloader(int filh, intptr_t *fptr, int *bpl, int *sizx, int *sizy
int r, g, b; int r, g, b;
picfillen = kfilelength(filh); picfillen = kfilelength(filh);
picfil = (char *)malloc(picfillen); if (!picfil) { return -1; } picfil = (char *)malloc(picfillen+1); if (!picfil) { return -1; }
kread(filh, picfil, picfillen); kread(filh, picfil, picfillen);
// tsizx/y = replacement texture's natural size // tsizx/y = replacement texture's natural size

View file

@ -594,6 +594,7 @@ extern char *duke3dgrp;
extern void check_valid_color(int *color,int prev_color); extern void check_valid_color(int *color,int prev_color);
extern palette_t crosshair_colors; extern palette_t crosshair_colors;
extern palette_t default_crosshair_colors; extern palette_t default_crosshair_colors;
extern char mod_dir[BMAX_PATH];
int32 CONFIG_ReadSetup(void) 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","SelectedGRP",&duke3dgrp[0]);
} }
SCRIPT_GetString(ud.config.scripthandle, "Misc","ModDir",&mod_dir[0]);
SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "Shadows",&ud.shadows); SCRIPT_GetNumber(ud.config.scripthandle, "Screen Setup", "Shadows",&ud.shadows);
if (!NAM) 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","SelectedGRP",&duke3dgrp[0]);
SCRIPT_PutString(ud.config.scripthandle, "Misc","ModDir",&mod_dir[0]);
{ {
char commmacro[] = "CommbatMacro# "; char commmacro[] = "CommbatMacro# ";

View file

@ -112,7 +112,8 @@ char *duke3dgrp = defaultduke3dgrp;
char *duke3dgrpstring = NULL; char *duke3dgrpstring = NULL;
static char defaultconfilename[BMAX_PATH] = {"EDUKE.CON"}; static char defaultconfilename[BMAX_PATH] = {"EDUKE.CON"};
static char *confilename = defaultconfilename; static char *confilename = defaultconfilename;
static char *duke3ddef = "duke3d.def"; char *duke3ddef = "duke3d.def";
char mod_dir[BMAX_PATH] = "";
extern int lastvisinc; extern int lastvisinc;

View file

@ -92,6 +92,7 @@ char *textptr;
int error,warning; int error,warning;
extern char *duke3dgrpstring; extern char *duke3dgrpstring;
extern char *duke3ddef;
enum labeltypes enum labeltypes
{ {
@ -468,6 +469,7 @@ const char *keyw[] =
"gettimedate", // 332 "gettimedate", // 332
"activatecheat", // 333 "activatecheat", // 333
"setgamepalette", // 334 "setgamepalette", // 334
"setdefname", // 335
"<null>" "<null>"
}; };
@ -901,7 +903,6 @@ const memberlabel_t inputlabels[]=
char *bitptr; char *bitptr;
#define BITPTR_DONTFUCKWITHIT 0 #define BITPTR_DONTFUCKWITHIT 0
#define BITPTR_POINTER 1 #define BITPTR_POINTER 1
@ -1660,7 +1661,7 @@ static int transnum(int type)
Bfree(gl); Bfree(gl);
} }
if (labeltype[i] != LABEL_DEFINE && labelcode[i] >= (intptr_t)&script[0] && labelcode[i] < (intptr_t)&script[g_ScriptSize]) 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; else bitptr[(scriptptr-script)] = BITPTR_DONTFUCKWITHIT;
*(scriptptr++) = labelcode[i]; *(scriptptr++) = labelcode[i];
textptr += l; textptr += l;
@ -2455,6 +2456,7 @@ static int parsecommand(void)
for (j=0;j<4;j++) for (j=0;j<4;j++)
{ {
bitptr[(parsing_actor+j-script)] = BITPTR_DONTFUCKWITHIT;
*(parsing_actor+j) = 0; *(parsing_actor+j) = 0;
if (j == 3) if (j == 3)
{ {
@ -2499,6 +2501,10 @@ static int parsecommand(void)
} }
break; 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); *(parsing_actor+j) = *(scriptptr-1);
} }
} }
@ -2664,7 +2670,10 @@ static int parsecommand(void)
} }
break; 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); *(parsing_actor+j) = *(scriptptr-1);
} }
} }
@ -4572,6 +4581,27 @@ repeatcase:
} }
return 0; 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: case CON_DEFINEGAMETYPE:
scriptptr--; scriptptr--;
transnum(LABEL_DEFINE); transnum(LABEL_DEFINE);

View file

@ -845,4 +845,5 @@ enum keywords
CON_GETTIMEDATE, // 332 CON_GETTIMEDATE, // 332
CON_ACTIVATECHEAT, // 333 CON_ACTIVATECHEAT, // 333
CON_SETGAMEPALETTE, // 334 CON_SETGAMEPALETTE, // 334
CON_SETDEFNAME, // 335
}; };

View file

@ -683,7 +683,7 @@ void SetGameVarID(int id, int lValue, int iActor, int iPlayer)
{ {
if (iPlayer < 0 || iPlayer > MAXPLAYERS-1) 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; return;
} }
// for the current player // for the current player

View file

@ -50,44 +50,46 @@ FONT 8, "MS Shell Dlg"
BEGIN BEGIN
CONTROL "&Game:", -1, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 5, 5, 100, 8 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 "", 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 END
#define FILEVER 1,4,9,9 #define FILEVER 1,4,9,9
#define PRODUCTVER 1,4,9,9 #define PRODUCTVER 1,4,9,9
#define STRFILEVER "1.5.0devel\0" #define STRFILEVER "1.5.0devel\0"
#define STRPRODUCTVER "1.5.0devel\0" #define STRPRODUCTVER "1.5.0devel\0"
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION FILEVER FILEVERSION FILEVER
PRODUCTVERSION PRODUCTVER PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x3L FILEFLAGS 0x3L
#else #else
FILEFLAGS 0x2L FILEFLAGS 0x2L
#endif #endif
FILEOS 0x40004L FILEOS 0x40004L
FILETYPE 0x1L FILETYPE 0x1L
FILESUBTYPE 0x0L FILESUBTYPE 0x0L
BEGIN BEGIN
BLOCK "StringFileInfo" BLOCK "StringFileInfo"
BEGIN BEGIN
BLOCK "040904b0" BLOCK "040904b0"
BEGIN BEGIN
VALUE "FileDescription", "EDuke32" VALUE "FileDescription", "EDuke32"
VALUE "FileVersion", STRFILEVER VALUE "FileVersion", STRFILEVER
VALUE "InternalName", "EDuke32" VALUE "InternalName", "EDuke32"
VALUE "LegalCopyright", "Copyright © 1996, 2003 3D Realms Entertainment, 2004-2008 EDuke32 Team" VALUE "LegalCopyright", "Copyright © 1996, 2003 3D Realms Entertainment, 2004-2008 EDuke32 Team"
VALUE "LegalTrademarks", "Duke Nukem® is a Registered Trademark of Apogee Software, Ltd." VALUE "LegalTrademarks", "Duke Nukem® is a Registered Trademark of Apogee Software, Ltd."
VALUE "OriginalFilename", "eduke32.exe" VALUE "OriginalFilename", "eduke32.exe"
VALUE "ProductName", "EDuke32" VALUE "ProductName", "EDuke32"
VALUE "ProductVersion", STRPRODUCTVER VALUE "ProductVersion", STRPRODUCTVER
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
BEGIN BEGIN
VALUE "Translation", 0x409, 1200 VALUE "Translation", 0x409, 1200
END END
END END
1 24 "rsrc/manifest.game.xml" 1 24 "rsrc/manifest.game.xml"

View file

@ -26,6 +26,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern char *bitptr; extern char *bitptr;
#define BITPTR_POINTER 1
void readsavenames(void) void readsavenames(void)
{ {
int dummy,j; int dummy,j;
@ -641,7 +643,7 @@ int saveplayer(int spot)
scriptptrs = Bcalloc(1, g_ScriptSize * sizeof(scriptptrs)); scriptptrs = Bcalloc(1, g_ScriptSize * sizeof(scriptptrs));
for (i=0;i<g_ScriptSize;i++) 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])) // if ((intptr_t)script[i] >= (intptr_t)(&script[0]) && (intptr_t)script[i] < (intptr_t)(&script[g_ScriptSize]))
{ {
scriptptrs[i] = 1; scriptptrs[i] = 1;

View file

@ -35,6 +35,7 @@ static struct
char selectedgrp[BMAX_PATH+1]; char selectedgrp[BMAX_PATH+1];
int game; int game;
int crcval; // for finding the grp in the list again int crcval; // for finding the grp in the list again
char *gamedir;
} }
settings; settings;
@ -45,9 +46,30 @@ static HWND pages[3] =
}; };
static int done = -1, mode = TAB_CONFIG; 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_VIDEO 1
#define POPULATE_CONFIG 2 #define POPULATE_CONFIG 2
#define POPULATE_GAME 4 #define POPULATE_GAME 4
#define POPULATE_MODS 8
static void PopulateForm(int pgs) 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 (!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) 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; 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: default:
break; break;
} }
@ -252,6 +312,7 @@ static void EnableConfig(int n)
EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), n); EnableWindow(GetDlgItem(pages[TAB_CONFIG], IDCINPUTJOY), n);
EnableWindow(GetDlgItem(pages[TAB_GAME], IDGDATA), 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) 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 *duke3dgrp, *duke3dgrpstring;
extern char mod_dir[BMAX_PATH];
int startwin_run(void) int startwin_run(void)
{ {
@ -591,6 +653,7 @@ int startwin_run(void)
settings.game = g_GameType; settings.game = g_GameType;
// settings.crcval = 0; // settings.crcval = 0;
strncpy(settings.selectedgrp, duke3dgrp, BMAX_PATH); strncpy(settings.selectedgrp, duke3dgrp, BMAX_PATH);
settings.gamedir = mod_dir;
PopulateForm(-1); PopulateForm(-1);
while (done < 0) while (done < 0)
@ -625,6 +688,11 @@ int startwin_run(void)
ud.config.UseJoystick = settings.usejoy; ud.config.UseJoystick = settings.usejoy;
duke3dgrp = settings.selectedgrp; duke3dgrp = settings.selectedgrp;
g_GameType = settings.game; 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; for (i = 0; i<numgrpfiles; i++) if (settings.crcval == grpfiles[i].crcval) break;
if (i != numgrpfiles) if (i != numgrpfiles)

View file

@ -24,4 +24,4 @@
// game page // game page
#define IDGDATA 100 #define IDGDATA 100
#define IDGGAMEDIR 101