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,6 +50,8 @@ 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

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