win32 stuck input fix among other minor changes

git-svn-id: https://svn.eduke32.com/eduke32@1642 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2010-05-16 22:53:08 +00:00
parent 9d27282ccd
commit 65b29ab092
19 changed files with 198 additions and 103 deletions

View File

@ -110,7 +110,7 @@ void setmousepresscallback(void (*callback)(int32_t,int32_t));
void setjoypresscallback(void (*callback)(int32_t,int32_t)); void setjoypresscallback(void (*callback)(int32_t,int32_t));
const char *getkeyname(int32_t num); const char *getkeyname(int32_t num);
const char *getjoyname(int32_t what, int32_t num); // what: 0=axis, 1=button, 2=hat const char *getjoyname(int32_t what, int32_t num); // what: 0=axis, 1=button, 2=hat
char *strtolower(char *str, int32_t len); char *Bstrtolower(char *str);
char bgetchar(void); char bgetchar(void);
#define bkbhit() (keyasciififoplc != keyasciififoend) #define bkbhit() (keyasciififoplc != keyasciififoend)

View File

@ -73,20 +73,20 @@ extern "C" {
// so we give up on __intX for them. // so we give up on __intX for them.
#if (_MSC_VER < 1300) #if (_MSC_VER < 1300)
typedef signed char int8_t; typedef signed char int8_t;
typedef short int16_t; typedef signed short int16_t;
typedef int int32_t; typedef signed int int32_t;
typedef unsigned char uint8_t; typedef unsigned char uint8_t;
typedef unsigned short uint16_t; typedef unsigned short uint16_t;
typedef unsigned int uint32_t; typedef unsigned int uint32_t;
#else #else
typedef signed __int8 int8_t; typedef signed __int8 int8_t;
typedef __int16 int16_t; typedef signed __int16 int16_t;
typedef __int32 int32_t; typedef signed __int32 int32_t;
typedef unsigned __int8 uint8_t; typedef unsigned __int8 uint8_t;
typedef unsigned __int16 uint16_t; typedef unsigned __int16 uint16_t;
typedef unsigned __int32 uint32_t; typedef unsigned __int32 uint32_t;
#endif #endif
typedef __int64 int64_t; typedef signed __int64 int64_t;
typedef unsigned __int64 uint64_t; typedef unsigned __int64 uint64_t;
@ -112,10 +112,10 @@ typedef uint64_t uint_fast64_t;
// 7.18.1.4 Integer types capable of holding object pointers // 7.18.1.4 Integer types capable of holding object pointers
#ifdef _WIN64 // [ #ifdef _WIN64 // [
typedef __int64 intptr_t; typedef signed __int64 intptr_t;
typedef unsigned __int64 uintptr_t; typedef unsigned __int64 uintptr_t;
#else // _WIN64 ][ #else // _WIN64 ][
typedef _W64 int intptr_t; typedef _W64 signed int intptr_t;
typedef _W64 unsigned int uintptr_t; typedef _W64 unsigned int uintptr_t;
#endif // _WIN64 ] #endif // _WIN64 ]

View File

@ -3,8 +3,9 @@
#include "compat.h" #include "compat.h"
void RI_PollDevices(); void RI_PollDevices(BOOL loop);
int32_t RI_CaptureInput(int32_t grab, HWND target); void RI_ProcessMessage(MSG *msg);
BOOL RI_CaptureInput(BOOL grab, HWND target);
#ifndef VK_LBUTTON #ifndef VK_LBUTTON
#define VK_LBUTTON 0x01 #define VK_LBUTTON 0x01

View File

@ -52,16 +52,23 @@ struct glinfo_t glinfo =
}; };
#endif #endif
char *strtolower(char *str, int32_t len) char *Bstrtolower(char *str)
{ {
int32_t i = 0; if (!str) return NULL;
{
int32_t i = 0, len = Bstrlen(str);
if (len <= 0) return str; if (len <= 0) return str;
do do
{ {
*(str+i) = Btolower(*(str+i)); *(str+i) = Btolower(*(str+i));
i++; i++;
} }
while (--len); while (--len);
}
return str; return str;
} }

View File

@ -323,6 +323,26 @@ int32_t findfrompath(const char *fn, char **where)
*where = Bstrdup(fn); *where = Bstrdup(fn);
return 0; return 0;
} }
else
{
char *tfn = Bstrtolower(Bstrdup(fn));
if (access(tfn, F_OK) >= 0)
{
*where = tfn;
return 0;
}
Bstrupr(tfn);
if (access(tfn, F_OK) >= 0)
{
*where = tfn;
return 0;
}
Bfree(tfn);
}
} }
for (pfn = (char*)fn; toupperlookup[*pfn] == '/'; pfn++); for (pfn = (char*)fn; toupperlookup[*pfn] == '/'; pfn++);
@ -348,6 +368,8 @@ int32_t findfrompath(const char *fn, char **where)
for (sp = searchpathhead; sp; sp = sp->next) for (sp = searchpathhead; sp; sp = sp->next)
{ {
char *tfn = Bstrdup(ffn);
strcpy(pfn, sp->path); strcpy(pfn, sp->path);
strcat(pfn, ffn); strcat(pfn, ffn);
//initprintf("Trying %s\n", pfn); //initprintf("Trying %s\n", pfn);
@ -355,8 +377,35 @@ int32_t findfrompath(const char *fn, char **where)
{ {
*where = pfn; *where = pfn;
Bfree(ffn); Bfree(ffn);
Bfree(tfn);
return 0; return 0;
} }
//Check with all lowercase
strcpy(pfn, sp->path);
Bstrtolower(tfn);
strcat(pfn, tfn);
if (access(pfn, F_OK) >= 0)
{
*where = pfn;
Bfree(ffn);
Bfree(tfn);
return 0;
}
//Check again with uppercase
strcpy(pfn, sp->path);
Bstrupr(tfn);
strcat(pfn, tfn);
if (access(pfn, F_OK) >= 0)
{
*where = pfn;
Bfree(ffn);
Bfree(tfn);
return 0;
}
Bfree(tfn);
} }
Bfree(pfn); Bfree(ffn); Bfree(pfn); Bfree(ffn);
return -1; return -1;

View File

@ -334,13 +334,11 @@ int32_t loadgldriver(const char *driver)
#endif #endif
} }
initprintf("Loading %s\n",driver);
#if defined RENDERTYPESDL #if defined RENDERTYPESDL
if (SDL_GL_LoadLibrary(driver)) return -1; if (SDL_GL_LoadLibrary(driver)) goto fail;
#elif defined _WIN32 #elif defined _WIN32
hGLDLL = LoadLibrary(driver); hGLDLL = LoadLibrary(driver);
if (!hGLDLL) return -1; if (!hGLDLL) goto fail;
#endif #endif
gldriver = Bstrdup(driver); gldriver = Bstrdup(driver);
@ -471,6 +469,10 @@ int32_t loadgldriver(const char *driver)
if (err) unloadgldriver(); if (err) unloadgldriver();
return err; return err;
fail:
initprintf("Failed loading \"%s\"\n",driver);
return -1;
} }
int32_t loadglextensions(void) int32_t loadglextensions(void)
@ -921,14 +923,12 @@ int32_t loadglulibrary(const char *driver)
#endif #endif
} }
initprintf("Loading %s\n",driver);
#if defined _WIN32 #if defined _WIN32
hGLUDLL = LoadLibrary(driver); hGLUDLL = LoadLibrary(driver);
if (!hGLUDLL) return -1; if (!hGLUDLL) goto fail;
#else #else
gluhandle = dlopen(driver, RTLD_NOW|RTLD_GLOBAL); gluhandle = dlopen(driver, RTLD_NOW|RTLD_GLOBAL);
if (!gluhandle) return -1; if (!gluhandle) goto fail;
#endif #endif
glulibrary = Bstrdup(driver); glulibrary = Bstrdup(driver);
@ -951,6 +951,10 @@ int32_t loadglulibrary(const char *driver)
if (err) unloadglulibrary(); if (err) unloadglulibrary();
return err; return err;
fail:
initprintf("Failed loading \"%s\"\n",driver);
return -1;
} }
int32_t unloadglulibrary(void) int32_t unloadglulibrary(void)

View File

@ -1816,7 +1816,7 @@ static symbol_t *addnewsymbol(const char *name)
} }
} }
hash_add(&h_osd, name, osdnumsymbols); hash_add(&h_osd, name, osdnumsymbols);
name = strtolower(Bstrdup(name), Bstrlen(name)); name = Bstrtolower(Bstrdup(name));
hash_add(&h_osd, name, osdnumsymbols); hash_add(&h_osd, name, osdnumsymbols);
Bfree((void *)name); Bfree((void *)name);
osdsymbptrs[osdnumsymbols++] = newsymb; osdsymbptrs[osdnumsymbols++] = newsymb;
@ -1857,7 +1857,7 @@ static symbol_t *findexactsymbol(const char *name)
} }
// try it again // try it again
lname = strtolower(lname, Bstrlen(name)); Bstrtolower(lname);
i = hash_find(&h_osd,lname); i = hash_find(&h_osd,lname);
Bfree(lname); Bfree(lname);

View File

@ -80,7 +80,6 @@ static inline void RI_ProcessMouse(const RAWMOUSE* rmouse)
static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd) static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd)
{ {
uint8_t key = rkbd->MakeCode, VKey = rkbd->VKey; uint8_t key = rkbd->MakeCode, VKey = rkbd->VKey;
uint8_t buf[2];
// for some reason rkbd->MakeCode is wrong for these // for some reason rkbd->MakeCode is wrong for these
// even though rkbd->VKey is right... // even though rkbd->VKey is right...
@ -147,6 +146,10 @@ static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd)
if (rkbd->Flags & RI_KEY_BREAK) return; if (rkbd->Flags & RI_KEY_BREAK) return;
if (((keyasciififoend+1)&(KEYFIFOSIZ-1)) == keyasciififoplc) return; if (((keyasciififoend+1)&(KEYFIFOSIZ-1)) == keyasciififoplc) return;
if ((keyasciififoend - keyasciififoplc) > 0) return; if ((keyasciififoend - keyasciififoplc) > 0) return;
{
uint8_t buf[2];
if (ToAscii(VKey, key, &KeyboardState[0], (LPWORD)&buf[0], 0) != 1) return; if (ToAscii(VKey, key, &KeyboardState[0], (LPWORD)&buf[0], 0) != 1) return;
if ((OSD_OSDKey() < 128) && (Btolower(scantoasc[OSD_OSDKey()]) == Btolower(buf[0]))) return; if ((OSD_OSDKey() < 128) && (Btolower(scantoasc[OSD_OSDKey()]) == Btolower(buf[0]))) return;
if (OSD_HandleChar(buf[0]) == 0) return; if (OSD_HandleChar(buf[0]) == 0) return;
@ -154,9 +157,10 @@ static inline void RI_ProcessKeyboard(const RAWKEYBOARD* rkbd)
keyasciififo[keyasciififoend] = buf[0]; keyasciififo[keyasciififoend] = buf[0];
keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1)); keyasciififoend = ((keyasciififoend+1)&(KEYFIFOSIZ-1));
} }
}
// keyboard is always captured regardless of what we tell this function // keyboard is always captured regardless of what we tell this function
int32_t RI_CaptureInput(int32_t grab, HWND target) BOOL RI_CaptureInput(BOOL grab, HWND target)
{ {
RAWINPUTDEVICE raw[2]; RAWINPUTDEVICE raw[2];
@ -175,7 +179,25 @@ int32_t RI_CaptureInput(int32_t grab, HWND target)
return (RegisterRawInputDevices(raw, 2, sizeof(raw[0])) == FALSE); return (RegisterRawInputDevices(raw, 2, sizeof(raw[0])) == FALSE);
} }
void RI_PollDevices() void RI_ProcessMessage(MSG *msg)
{
if (GET_RAWINPUT_CODE_WPARAM(msg->wParam) == RIM_INPUT)
{
UINT dwSize = sizeof(RAWINPUT);
RAWINPUT raw;
GetRawInputData((HRAWINPUT)msg->lParam, RID_INPUT, &raw, &dwSize, sizeof(RAWINPUTHEADER));
if (raw.header.dwType == RIM_TYPEKEYBOARD)
RI_ProcessKeyboard(&raw.data.keyboard);
else if (raw.header.dwType == RIM_TYPEMOUSE)
RI_ProcessMouse(&raw.data.mouse);
}
DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
}
void RI_PollDevices(BOOL loop)
{ {
int32_t i; int32_t i;
MSG msg; MSG msg;
@ -193,23 +215,8 @@ void RI_PollDevices()
MWheel = 0; MWheel = 0;
while (PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_REMOVE | PM_QS_INPUT)) while (loop && PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_REMOVE | PM_QS_INPUT))
{ RI_ProcessMessage(&msg);
if (GET_RAWINPUT_CODE_WPARAM(msg.wParam) == RIM_INPUT)
{
UINT dwSize = sizeof(RAWINPUT);
RAWINPUT raw;
GetRawInputData((HRAWINPUT)msg.lParam, RID_INPUT, &raw, &dwSize, sizeof(RAWINPUTHEADER));
if (raw.header.dwType == RIM_TYPEKEYBOARD)
RI_ProcessKeyboard(&raw.data.keyboard);
else if (raw.header.dwType == RIM_TYPEMOUSE)
RI_ProcessMouse(&raw.data.mouse);
}
DefWindowProc(msg.hwnd, msg.message, msg.wParam, msg.lParam);
}
if (mousegrab && appactive) if (mousegrab && appactive)
{ {

View File

@ -491,7 +491,7 @@ static int32_t set_windowpos(const osdfuncparm_t *parm)
// initsystem() -- init systems // initsystem() -- init systems
// //
static void print_os_version(void) static void printsysversion(void)
{ {
const char *ver = ""; const char *ver = "";
@ -528,7 +528,7 @@ static void print_os_version(void)
break; break;
} }
initprintf("OS: Windows %s (%lu.%lu.%lu) %s\n", ver, osv.dwMajorVersion, osv.dwMinorVersion, initprintf("Running under Windows %s (build %lu.%lu.%lu) %s\n", ver, osv.dwMajorVersion, osv.dwMinorVersion,
osv.dwPlatformId == VER_PLATFORM_WIN32_NT ? osv.dwBuildNumber : osv.dwBuildNumber&0xffff, osv.dwPlatformId == VER_PLATFORM_WIN32_NT ? osv.dwBuildNumber : osv.dwBuildNumber&0xffff,
osv.szCSDVersion); osv.szCSDVersion);
@ -559,7 +559,7 @@ int32_t initsystem(void)
frameplace=0; frameplace=0;
lockcount=0; lockcount=0;
print_os_version(); printsysversion();
#if defined(USE_OPENGL) && defined(POLYMOST) #if defined(USE_OPENGL) && defined(POLYMOST)
if (loadgldriver(getenv("BUILD_GLDRV"))) if (loadgldriver(getenv("BUILD_GLDRV")))
@ -664,7 +664,7 @@ int32_t handleevents(void)
//if (frameplace && fullscreen) printf("Offscreen buffer is locked!\n"); //if (frameplace && fullscreen) printf("Offscreen buffer is locked!\n");
RI_PollDevices(); RI_PollDevices(TRUE);
if (bDInputInited) if (bDInputInited)
DI_PollJoysticks(); DI_PollJoysticks();
@ -676,6 +676,13 @@ int32_t handleevents(void)
if (startwin_idle((void*)&msg) > 0) continue; if (startwin_idle((void*)&msg) > 0) continue;
if (msg.message == WM_INPUT)
{
RI_PollDevices(FALSE);
RI_ProcessMessage(&msg);
continue;
}
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessage(&msg); DispatchMessage(&msg);
} }
@ -829,9 +836,10 @@ inline void idle_waitevent(void)
if (PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_QS_INPUT)) if (PeekMessage(&msg, 0, WM_INPUT, WM_INPUT, PM_QS_INPUT))
{ {
RI_PollDevices(); RI_PollDevices(TRUE);
return; return;
} }
Sleep(10); Sleep(10);
} }
while (--i); while (--i);

View File

@ -9589,7 +9589,9 @@ int32_t ExtInit(void)
#if defined(POLYMOST) && defined(USE_OPENGL) #if defined(POLYMOST) && defined(USE_OPENGL)
glusetexcache = -1; glusetexcache = -1;
if (Bstrcmp(setupfilename, "mapster32.cfg"))
initprintf("Using config file '%s'.\n",setupfilename); initprintf("Using config file '%s'.\n",setupfilename);
if (loadsetup(setupfilename) < 0) initprintf("Configuration file not found, using defaults.\n"), rv = 1; if (loadsetup(setupfilename) < 0) initprintf("Configuration file not found, using defaults.\n"), rv = 1;
if (glusetexcache == -1) if (glusetexcache == -1)

View File

@ -61,7 +61,7 @@ int32_t CONFIG_FunctionNameToNum(char * func)
if (i < 0) if (i < 0)
{ {
char *str = strtolower(Bstrdup(func),Bstrlen(func)); char *str = Bstrtolower(Bstrdup(func));
i = hash_find(&h_gamefuncs,str); i = hash_find(&h_gamefuncs,str);
Bfree(str); Bfree(str);

View File

@ -124,7 +124,7 @@ extern int32_t g_scriptVersion, g_Shareware, g_gameType;
#include "namesdyn.h" #include "namesdyn.h"
#define TICRATE (120) #define TICRATE (120)
#define GAMETICSPERSEC 26 #define GAMETICSPERSEC 26 // used as a constant to satisfy all of the calculations written with ticrate = 26 in mind
#define TICSPERFRAME 4 // this used to be TICRATE/GAMETICSPERSEC which was 4.615~ truncated to 4 by integer division #define TICSPERFRAME 4 // this used to be TICRATE/GAMETICSPERSEC which was 4.615~ truncated to 4 by integer division
#define REALGAMETICSPERSEC 30 #define REALGAMETICSPERSEC 30

View File

@ -4884,7 +4884,7 @@ int32_t drawing_ror = 0;
void G_SE40(int32_t smoothratio) void G_SE40(int32_t smoothratio)
{ {
if (getrendermode() != 4 && ror_sprite != -1) if (ror_sprite != -1)
{ {
int32_t x, y, z; int32_t x, y, z;
int16_t sect; int16_t sect;
@ -4956,6 +4956,11 @@ void G_SE40(int32_t smoothratio)
} }
} }
#ifdef POLYMER
if (getrendermode() == 4)
polymer_setanimatesprites(G_DoSpriteAnimations, ud.camera.x, ud.camera.y, ud.cameraang, smoothratio);
#endif
drawrooms(sprite[sprite2].x + x, sprite[sprite2].y + y, drawrooms(sprite[sprite2].x + x, sprite[sprite2].y + y,
z + renderz, ud.cameraang, ud.camerahoriz, sect); z + renderz, ud.cameraang, ud.camerahoriz, sect);
drawing_ror = 1 + level; drawing_ror = 1 + level;
@ -5040,7 +5045,6 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
ud.camerasect = p->cursectnum; ud.camerasect = p->cursectnum;
G_DoInterpolations(smoothratio); G_DoInterpolations(smoothratio);
G_AnimateCamSprite(); G_AnimateCamSprite();
if (ud.camerasprite >= 0) if (ud.camerasprite >= 0)
@ -5053,15 +5057,17 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
ud.cameraang = actor[ud.camerasprite].tempang+ ud.cameraang = actor[ud.camerasprite].tempang+
mulscale16((int32_t)(((s->ang+1024-actor[ud.camerasprite].tempang)&2047)-1024),smoothratio); mulscale16((int32_t)(((s->ang+1024-actor[ud.camerasprite].tempang)&2047)-1024),smoothratio);
G_SE40(smoothratio);
#ifdef POLYMER #ifdef POLYMER
if (getrendermode() == 4) if (getrendermode() == 4)
polymer_setanimatesprites(G_DoSpriteAnimations, s->x, s->y, ud.cameraang, smoothratio); polymer_setanimatesprites(G_DoSpriteAnimations, s->x, s->y, ud.cameraang, smoothratio);
#endif #endif
G_SE40(smoothratio);
drawrooms(s->x,s->y,s->z-(4<<8),ud.cameraang,s->yvel,s->sectnum); drawrooms(s->x,s->y,s->z-(4<<8),ud.cameraang,s->yvel,s->sectnum);
G_DoSpriteAnimations(s->x,s->y,ud.cameraang,smoothratio); G_DoSpriteAnimations(s->x,s->y,ud.cameraang,smoothratio);
drawmasks(); drawmasks();
} }
else else
@ -5231,13 +5237,12 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
gotpic[MIRROR>>3] &= ~(1<<(MIRROR&7)); gotpic[MIRROR>>3] &= ~(1<<(MIRROR&7));
} }
G_SE40(smoothratio);
#ifdef POLYMER #ifdef POLYMER
if (getrendermode() == 4) if (getrendermode() == 4)
{
polymer_setanimatesprites(G_DoSpriteAnimations, ud.camera.x,ud.camera.y,ud.cameraang,smoothratio); polymer_setanimatesprites(G_DoSpriteAnimations, ud.camera.x,ud.camera.y,ud.cameraang,smoothratio);
}
#endif #endif
G_SE40(smoothratio);
drawrooms(ud.camera.x,ud.camera.y,ud.camera.z,ud.cameraang,ud.camerahoriz,ud.camerasect); drawrooms(ud.camera.x,ud.camera.y,ud.camera.z,ud.cameraang,ud.camerahoriz,ud.camerasect);
@ -5273,6 +5278,7 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
} }
G_DoSpriteAnimations(ud.camera.x,ud.camera.y,ud.cameraang,smoothratio); G_DoSpriteAnimations(ud.camera.x,ud.camera.y,ud.cameraang,smoothratio);
drawing_ror = 0; drawing_ror = 0;
drawmasks(); drawmasks();
@ -11083,7 +11089,7 @@ void app_main(int32_t argc,const char **argv)
int32_t i = 0, j; int32_t i = 0, j;
char cwd[BMAX_PATH]; char cwd[BMAX_PATH];
// extern char datetimestring[]; // extern char datetimestring[];
ENetCallbacks callbacks = { Bmalloc, Bfree, NULL }; ENetCallbacks callbacks = { Bmalloc, Bfree, NULL, NULL };
#ifdef RENDERTYPEWIN #ifdef RENDERTYPEWIN
if (argc > 1) if (argc > 1)
@ -11222,7 +11228,7 @@ void app_main(int32_t argc,const char **argv)
hash_init(&h_gamefuncs); hash_init(&h_gamefuncs);
for (i=NUMGAMEFUNCTIONS-1; i>=0; i--) for (i=NUMGAMEFUNCTIONS-1; i>=0; i--)
{ {
char *str = strtolower(Bstrdup(gamefunctions[i]),Bstrlen(gamefunctions[i])); char *str = Bstrtolower(Bstrdup(gamefunctions[i]));
hash_add(&h_gamefuncs,gamefunctions[i],i); hash_add(&h_gamefuncs,gamefunctions[i],i);
hash_add(&h_gamefuncs,str,i); hash_add(&h_gamefuncs,str,i);
Bfree(str); Bfree(str);
@ -11291,6 +11297,7 @@ void app_main(int32_t argc,const char **argv)
exit(1); exit(1);
} }
if (Bstrcmp(setupfilename, SETUPFILENAME))
initprintf("Using config file '%s'.\n",setupfilename); initprintf("Using config file '%s'.\n",setupfilename);
ScanGroups(); ScanGroups();
@ -11465,7 +11472,7 @@ CLEAN_DIRECTORY:
if (i == -1) if (i == -1)
initprintf("Warning: could not find main group file '%s'!\n",g_grpNamePtr); initprintf("Warning: could not find main group file '%s'!\n",g_grpNamePtr);
else else
initprintf("Using group file '%s' as main group file.\n", g_grpNamePtr); initprintf("Using '%s' as main group file.\n", g_grpNamePtr);
if (!g_noAutoLoad && !ud.config.NoAutoLoad) if (!g_noAutoLoad && !ud.config.NoAutoLoad)
{ {

View File

@ -1663,13 +1663,13 @@ static void C_GetNextVarType(int32_t type)
/*initprintf("found xxx label of '%s'\n", label+(g_numLabels<<6));*/ /*initprintf("found xxx label of '%s'\n", label+(g_numLabels<<6));*/
if (i == g_iSpriteVarID) if (i == g_iSpriteVarID)
lLabelID=C_GetLabelNameOffset(&actorH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&actorH,Bstrtolower(label+(g_numLabels<<6)));
else if (i == g_iSectorVarID) else if (i == g_iSectorVarID)
lLabelID=C_GetLabelNameOffset(&sectorH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&sectorH,Bstrtolower(label+(g_numLabels<<6)));
else if (i == g_iWallVarID) else if (i == g_iWallVarID)
lLabelID=C_GetLabelNameOffset(&wallH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&wallH,Bstrtolower(label+(g_numLabels<<6)));
else if (i == g_iPlayerVarID) else if (i == g_iPlayerVarID)
lLabelID=C_GetLabelNameOffset(&playerH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&playerH,Bstrtolower(label+(g_numLabels<<6)));
else if (i == g_iActorVarID) else if (i == g_iActorVarID)
lLabelID=GetDefID(label+(g_numLabels<<6)); lLabelID=GetDefID(label+(g_numLabels<<6));
@ -2174,7 +2174,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameOffset(&projectileH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&projectileH,Bstrtolower(label+(g_numLabels<<6)));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3153,7 +3153,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameID(SectorLabels,&sectorH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameID(SectorLabels,&sectorH,Bstrtolower(label+(g_numLabels<<6)));
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3288,7 +3288,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameID(WallLabels,&wallH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameID(WallLabels,&wallH,Bstrtolower(label+(g_numLabels<<6)));
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3355,7 +3355,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameOffset(&playerH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&playerH,Bstrtolower(label+(g_numLabels<<6)));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3436,7 +3436,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameOffset(&inputH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&inputH,Bstrtolower(label+(g_numLabels<<6)));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3487,7 +3487,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameID(UserdefsLabels,&userdefH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameID(UserdefsLabels,&userdefH,Bstrtolower(label+(g_numLabels<<6)));
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3691,7 +3691,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameOffset(&actorH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&actorH,Bstrtolower(label+(g_numLabels<<6)));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -3770,7 +3770,7 @@ static int32_t C_ParseCommand(void)
C_GetNextLabelName(); C_GetNextLabelName();
//printf("found xxx label of '%s'\n", label+(g_numLabels<<6)); //printf("found xxx label of '%s'\n", label+(g_numLabels<<6));
lLabelID=C_GetLabelNameOffset(&tspriteH,strtolower(label+(g_numLabels<<6),Bstrlen(label+(g_numLabels<<6)))); lLabelID=C_GetLabelNameOffset(&tspriteH,Bstrtolower(label+(g_numLabels<<6)));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -5118,7 +5118,7 @@ repeatcase:
keydefaults[j*3][i] = '\0'; keydefaults[j*3][i] = '\0';
hash_add(&h_gamefuncs,gamefunctions[j],j); hash_add(&h_gamefuncs,gamefunctions[j],j);
{ {
char *str = strtolower(Bstrdup(gamefunctions[j]),Bstrlen(gamefunctions[j])); char *str = Bstrtolower(Bstrdup(gamefunctions[j]));
hash_add(&h_gamefuncs,str,j); hash_add(&h_gamefuncs,str,j);
Bfree(str); Bfree(str);
} }
@ -5976,7 +5976,6 @@ static void C_InitProjectiles(void)
int8_t shade, xrepeat, yrepeat, pal; // 4b int8_t shade, xrepeat, yrepeat, pal; // 4b
int8_t velmult; // 1b int8_t velmult; // 1b
uint8_t clipdist; // 1b uint8_t clipdist; // 1b
int8_t filler[6]; // 6b
} defaultprojectile_t; } defaultprojectile_t;
defaultprojectile_t DefaultProjectile = defaultprojectile_t DefaultProjectile =
@ -5986,7 +5985,7 @@ static void C_InitProjectiles(void)
}; };
// this will only happen if I forget to update this function... // this will only happen if I forget to update this function...
if (sizeof(projectile_t) != sizeof(DefaultProjectile) || offsetof(projectile_t, filler) != offsetof(defaultprojectile_t, filler)) if (offsetof(projectile_t, filler) != sizeof(DefaultProjectile))
G_GameExit("ERROR: C_InitProjectiles(): projectile_t mismatch!"); G_GameExit("ERROR: C_InitProjectiles(): projectile_t mismatch!");
for (i=MAXTILES-1; i>=0; i--) for (i=MAXTILES-1; i>=0; i--)

View File

@ -682,15 +682,18 @@ void __fastcall Gv_SetVar(register int32_t id, register int32_t lValue, register
} }
badvarid: badvarid:
OSD_Printf(CON_ERROR "Gv_SetVar(): tried to set invalid gamevar ID (%d) from sprite %d (%d), player %d\n",g_errorLineNum,keyw[g_tw],id,vm.g_i,sprite[vm.g_i].picnum,vm.g_p); OSD_Printf(CON_ERROR "Gv_SetVar(): tried to set invalid gamevar ID (%d) from sprite %d (%d), player %d\n",
g_errorLineNum,keyw[g_tw],id,vm.g_i,sprite[vm.g_i].picnum,vm.g_p);
return; return;
badplayer: badplayer:
OSD_Printf(CON_ERROR "Gv_SetVar(): invalid player (%d) for per-player gamevar %s from sprite %d, player %d\n",g_errorLineNum,keyw[g_tw],iPlayer,aGameVars[id].szLabel,vm.g_i,vm.g_p); OSD_Printf(CON_ERROR "Gv_SetVar(): invalid player (%d) for per-player gamevar %s from sprite %d, player %d\n",
g_errorLineNum,keyw[g_tw],iPlayer,aGameVars[id].szLabel,vm.g_i,vm.g_p);
return; return;
badactor: badactor:
OSD_Printf(CON_ERROR "Gv_SetVar(): invalid sprite (%d) for per-actor gamevar %s from sprite %d (%d), player %d\n",g_errorLineNum,keyw[g_tw],iActor,aGameVars[id].szLabel,vm.g_i,sprite[vm.g_i].picnum,vm.g_p); OSD_Printf(CON_ERROR "Gv_SetVar(): invalid sprite (%d) for per-actor gamevar %s from sprite %d (%d), player %d\n",
g_errorLineNum,keyw[g_tw],iActor,aGameVars[id].szLabel,vm.g_i,sprite[vm.g_i].picnum,vm.g_p);
return; return;
} }

View File

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
#include "duke3d.h" #include "duke3d.h"
const char *s_buildDate = "20100427"; const char *s_buildDate = "20100514";
char *MusicPtr = NULL; char *MusicPtr = NULL;
int32_t g_musicSize; int32_t g_musicSize;

View File

@ -93,7 +93,7 @@ int32_t ScanGroups(void)
return 0; return 0;
} }
initprintf("Scanning for GRP files...\n"); initprintf("Scanning for game data...\n");
LoadGroupsCache(); LoadGroupsCache();
@ -196,9 +196,12 @@ int32_t ScanGroups(void)
Bfree(buf); Bfree(buf);
return 0; return 0;
} }
initprintf("Found no recognized GRP files!\n");
initprintf("Found no recognized game data!\n");
if (buf) if (buf)
Bfree(buf); Bfree(buf);
return 0; return 0;
} }

View File

@ -917,7 +917,7 @@ static void C_GetNextVarType(int32_t type)
textptr++; textptr++;
/// now pointing at 'xxx' /// now pointing at 'xxx'
C_GetNextLabelName(); C_GetNextLabelName();
lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, Bstrtolower(tlabel));
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -1018,11 +1018,11 @@ static void C_GetNextVarType(int32_t type)
C_GetNextLabelName(); C_GetNextLabelName();
/*initprintf("found xxx label of '%s'\n", label+(g_numLabels*MAXLABELLEN));*/ /*initprintf("found xxx label of '%s'\n", label+(g_numLabels*MAXLABELLEN));*/
if (id == g_iSpriteVarID || id==3) if (id == g_iSpriteVarID || id==3)
lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, Bstrtolower(tlabel));
else if (id == g_iSectorVarID) else if (id == g_iSectorVarID)
lLabelID = C_GetLabelNameID(SectorLabels, &sectorH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(SectorLabels, &sectorH, Bstrtolower(tlabel));
else if (id == g_iWallVarID) else if (id == g_iWallVarID)
lLabelID = C_GetLabelNameID(WallLabels, &wallH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(WallLabels, &wallH, Bstrtolower(tlabel));
//printf("LabelID is %d\n",lLabelID); //printf("LabelID is %d\n",lLabelID);
if (lLabelID == -1) if (lLabelID == -1)
{ {
@ -2233,11 +2233,11 @@ repeatcase:
//printf("found xxx label of '%s'\n", label+(g_numLabels*MAXLABELLEN)); //printf("found xxx label of '%s'\n", label+(g_numLabels*MAXLABELLEN));
if (tw==CON_GETSECTOR || tw==CON_SETSECTOR) if (tw==CON_GETSECTOR || tw==CON_SETSECTOR)
lLabelID = C_GetLabelNameID(SectorLabels, &sectorH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(SectorLabels, &sectorH, Bstrtolower(tlabel));
else if (tw==CON_GETWALL || tw==CON_SETWALL) else if (tw==CON_GETWALL || tw==CON_SETWALL)
lLabelID = C_GetLabelNameID(WallLabels, &wallH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(WallLabels, &wallH, Bstrtolower(tlabel));
else // if (tw==CON_GETSPRITE || tw==CON_SETSPRITE || tw==CON_GETTSPR || tw==CON_SETTSPR) else // if (tw==CON_GETSPRITE || tw==CON_SETSPRITE || tw==CON_GETTSPR || tw==CON_SETTSPR)
lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, strtolower(tlabel,Bstrlen(tlabel))); lLabelID = C_GetLabelNameID(SpriteLabels, &spriteH, Bstrtolower(tlabel));
if (lLabelID == -1) if (lLabelID == -1)
{ {

View File

@ -790,7 +790,7 @@ void P_ResetStatus(int32_t snum)
if ((aplWeaponWorksLike[p->curr_weapon][snum] == PISTOL_WEAPON) && if ((aplWeaponWorksLike[p->curr_weapon][snum] == PISTOL_WEAPON) &&
(aplWeaponReload[p->curr_weapon][snum] > aplWeaponTotalTime[p->curr_weapon][snum])) (aplWeaponReload[p->curr_weapon][snum] > aplWeaponTotalTime[p->curr_weapon][snum]))
p->kickback_pic = aplWeaponTotalTime[p->curr_weapon][snum]+1; p->kickback_pic = aplWeaponTotalTime[p->curr_weapon][snum];
else p->kickback_pic = 0; else p->kickback_pic = 0;
p->weapon_pos = 6; p->weapon_pos = 6;
@ -820,8 +820,8 @@ void P_ResetWeapons(int32_t snum)
p->ammo_amount[weapon] = 0; p->ammo_amount[weapon] = 0;
p->weapon_pos = 6; p->weapon_pos = 6;
p->kickback_pic = 5;
p->curr_weapon = PISTOL_WEAPON; p->curr_weapon = PISTOL_WEAPON;
p->kickback_pic = aplWeaponTotalTime[p->curr_weapon][snum];
p->gotweapon = ((1<<PISTOL_WEAPON) | (1<<KNEE_WEAPON) | (1<<HANDREMOTE_WEAPON)); p->gotweapon = ((1<<PISTOL_WEAPON) | (1<<KNEE_WEAPON) | (1<<HANDREMOTE_WEAPON));
p->ammo_amount[PISTOL_WEAPON] = min(p->max_ammo_amount[PISTOL_WEAPON], 48); p->ammo_amount[PISTOL_WEAPON] = min(p->max_ammo_amount[PISTOL_WEAPON], 48);
p->last_weapon = -1; p->last_weapon = -1;
@ -867,7 +867,12 @@ static void resetprestat(int32_t snum,int32_t g)
p->max_actors_killed = 0; p->max_actors_killed = 0;
p->lastrandomspot = 0; p->lastrandomspot = 0;
p->weapon_pos = 6; p->weapon_pos = 6;
p->kickback_pic = 5;
if ((aplWeaponWorksLike[p->curr_weapon][snum] == PISTOL_WEAPON) &&
(aplWeaponReload[p->curr_weapon][snum] > aplWeaponTotalTime[p->curr_weapon][snum]))
p->kickback_pic = aplWeaponTotalTime[p->curr_weapon][snum];
else p->kickback_pic = 0;
p->last_weapon = -1; p->last_weapon = -1;
p->weapreccnt = 0; p->weapreccnt = 0;
p->interface_toggle_flag = 0; p->interface_toggle_flag = 0;