Emit RPG_EXPLODE, PIPEBOMB_EXPODE and LASERTRIP_EXPLODE from the actual EXPLOSION2 sprite instead of whatever spawned EXPLOSION2, to prevent the sound from being owned by whatever sprite happens to spawn with the ID the RPG/pipebomb/whatever had before it was removed

Add brightness/gamma/contrast cvars to Mapster32

Fix bug with WEAPON_SEMIAUTO flag for custom weapons

Fix VM error with starttrack when specifying an invalid music track

Fix detection of 0x1a EOF characters in CON files

Fix a couple of additional sound issues

Fix crash in pushmove()

Fix Mapster32 textured 2D mode display being a few pixels off from the actual lines drawn

Fix crash when clicking "cancel" in Mapster32 startup window

Add Makefile detection to build with -march=pentium3 -mtune=generic on i686


git-svn-id: https://svn.eduke32.com/eduke32@1665 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2010-07-03 08:53:57 +00:00
parent a346acfccb
commit 013ac85e2d
21 changed files with 221 additions and 335 deletions

View file

@ -44,14 +44,16 @@ o=o
ifneq (0,$(RELEASE)) ifneq (0,$(RELEASE))
# Debugging disabled # Debugging disabled
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) -fno-stack-protector
LIBS=-lm
else else
# Debugging enabled # Debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS debug=-ggdb -O0 -DDEBUGGINGAIDS -fstack-protector-all
ifneq (0,$(KRANDDEBUG)) LIBS=-lm -lssp -Wl,--enable-auto-import
debug+=-fno-inline -fno-inline-functions -fno-inline-functions-called-once ifneq (0,$(KRANDDEBUG))
debug+=-DKRANDDEBUG=1 debug+=-fno-inline -fno-inline-functions -fno-inline-functions-called-once
endif debug+=-DKRANDDEBUG=1
endif
endif endif
ifneq (0,$(DEBUGANYWAY)) ifneq (0,$(DEBUGANYWAY))
@ -70,30 +72,12 @@ AS=nasm
RC=windres RC=windres
STRIP=strip STRIP=strip
GCC_MAJOR := $(shell $(CC) -dumpversion 2>&1 | cut -d'.' -f1)
GCC_MINOR := $(shell $(CC) -dumpversion 2>&1 | cut -d'.' -f2)
ifeq (4,$(GCC_MAJOR))
ifneq (0,$(GCC_MINOR))
# debug += -ftree-vectorize
ifneq (1,$(GCC_MINOR))
ifneq (2,$(GCC_MINOR))
# debug += -finline-small-functions -fpredictive-commoning
endif
endif
ifeq (5,$(GCC_MINOR))
# debug += -flto
endif
endif
endif
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \ OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \
-funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \ -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
-I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include -D_FORTIFY_SOURCE=2 \ -I$(INC) -I$(EINC) -I$(SRC)/jmact -I$(JAUDIOLIBDIR)/include -I$(ENETDIR)/include -D_FORTIFY_SOURCE=2 \
-fjump-tables -fno-stack-protector -fjump-tables $(ARCH)
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
OURCXXFLAGS=-fno-exceptions -fno-rtti OURCXXFLAGS=-fno-exceptions -fno-rtti
LIBS=-lm
NASMFLAGS = -s NASMFLAGS = -s
EXESUFFIX= EXESUFFIX=
@ -244,7 +228,7 @@ endif
mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB) mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB)
$(LINK_STATUS) $(LINK_STATUS)
if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB); then $(LINK_OK); else $(LINK_FAILED); fi if $(CC) $(CFLAGS) $(OURCFLAGS) -o $@ $^ $(LIBS) $(STDCPPLIB) $(MISCLINKOPTS); then $(LINK_OK); else $(LINK_FAILED); fi
ifeq (1,$(RELEASE)) ifeq (1,$(RELEASE))
ifeq (0,$(DEBUGANYWAY)) ifeq (0,$(DEBUGANYWAY))
$(STRIP) mapster32$(EXESUFFIX) $(STRIP) mapster32$(EXESUFFIX)

View file

@ -70,14 +70,16 @@ asm=nasm
# Debugging and release # Debugging and release
# #
ifneq ($(RELEASE),0) ifneq ($(RELEASE),0)
# Debugging disabled # Debugging disabled
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) -fno-stack-protector
LIBS=-lm
else else
# Debugging enabled # Debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS -DNOSDLPARACHUTE debug=-ggdb -O0 -DDEBUGGINGAIDS -DNOSDLPARACHUTE -fstack-protector-all
ifneq (0,$(KRANDDEBUG)) LIBS=-lm -lssp -Wl,--enable-auto-import
debug+=-DKRANDDEBUG=1 ifneq (0,$(KRANDDEBUG))
endif debug+=-DKRANDDEBUG=1
endif
endif endif
ifneq (0,$(DEBUGANYWAY)) ifneq (0,$(DEBUGANYWAY))
@ -91,31 +93,11 @@ RC=windres
AR=ar AR=ar
RANLIB=ranlib RANLIB=ranlib
GCC_MAJOR := $(shell $(CC) -dumpversion 2>&1 | cut -d'.' -f1)
GCC_MINOR := $(shell $(CC) -dumpversion 2>&1 | cut -d'.' -f2)
ifeq (4,$(GCC_MAJOR))
# debug += -ftree-vectorize
ifneq (0,$(GCC_MINOR))
ifneq (1,$(GCC_MINOR))
ifneq (2,$(GCC_MINOR))
# this should only enable for 4.3.0 and later
# debug += -finline-small-functions -fpredictive-commoning
endif
endif
ifeq (5,$(GCC_MINOR))
# debug += -flto
endif
endif
endif
OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \ OURCFLAGS=$(debug) -W -Wall -Wimplicit -Werror-implicit-function-declaration \
-Wno-char-subscripts -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \ -Wno-char-subscripts -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
-DKSFORBUILD -I$(INC) -D_FORTIFY_SOURCE=2 \ -DKSFORBUILD -I$(INC) -D_FORTIFY_SOURCE=2 \
-fjump-tables -fno-stack-protector -fjump-tables $(ARCH)
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
OURCXXFLAGS=-fno-exceptions -fno-rtti OURCXXFLAGS=-fno-exceptions -fno-rtti
LIBS=
ASFLAGS=-s #-g ASFLAGS=-s #-g
EXESUFFIX= EXESUFFIX=
@ -171,7 +153,6 @@ EDITOROBJS=$(OBJ)/build.$o \
ifeq ($(PLATFORM),LINUX) ifeq ($(PLATFORM),LINUX)
ASFLAGS+= -f elf ASFLAGS+= -f elf
LIBS+= -lm
endif endif
ifeq ($(PLATFORM),DARWIN) ifeq ($(PLATFORM),DARWIN)
ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o \ ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o \
@ -183,20 +164,16 @@ endif
ifeq ($(PLATFORM),BSD) ifeq ($(PLATFORM),BSD)
ASFLAGS+= -f elf ASFLAGS+= -f elf
OURCFLAGS+= -I/usr/X11R6/include OURCFLAGS+= -I/usr/X11R6/include
LIBS+= -lm
endif endif
ifeq ($(PLATFORM),WINDOWS) ifeq ($(PLATFORM),WINDOWS)
OURCFLAGS+= -DUNDERSCORES -I$(DXROOT)/include -I$(FMODROOTWIN)/inc # -I$(ENETROOT)/include OURCFLAGS+= -DUNDERSCORES -I$(DXROOT)/include -I$(FMODROOTWIN)/inc # -I$(ENETROOT)/include
LIBS+= -lm -lwsock32 -lws2_32 -lwinmm #-L$(ENETROOT) LIBS+= -lwsock32 -lws2_32 -lwinmm #-L$(ENETROOT)
ASFLAGS+= -DUNDERSCORES -f win32 ASFLAGS+= -DUNDERSCORES -f win32
endif endif
ifeq ($(PLATFORM),BEOS) ifeq ($(PLATFORM),BEOS)
ASFLAGS+= -f elf ASFLAGS+= -f elf
TARGETOPTS+= -DNOASM TARGETOPTS+= -DNOASM
endif endif
ifeq ($(PLATFORM),SUNOS)
LIBS+= -lm
endif
ifeq ($(PLATFORM),SYLLABLE) ifeq ($(PLATFORM),SYLLABLE)
ASFLAGS+= -f elf ASFLAGS+= -f elf
endif endif

View file

@ -16,9 +16,16 @@ SDL_FRAMEWORK = 0
# Overridden for OSes that don't have the cutdown stdc++ that is supc++ # Overridden for OSes that don't have the cutdown stdc++ that is supc++
STDCPPLIB=-lsupc++ STDCPPLIB=-lsupc++
BUILDCFLAGS= BUILDCFLAGS=
ifndef ARCH
ifeq ($(findstring i686, $(shell uname -m)), i686)
ARCH=-march=pentium3 -mtune=generic -mmmx # -msse2 -mfpmath=sse,387 -malign-double -mstackrealign
else
ARCH=
endif
endif
# Detect the platform if it wasn't explicitly given to us from # Detect the platform if it wasn't explicitly given to us from
# the outside world. This allows cross-compilation by overriding # the outside world. This allows cross-compilation by overriding
# CC and giving us PLATFORM specifically. # CC and giving us PLATFORM specifically.

View file

@ -149,12 +149,14 @@ void showframe(int32_t);
int32_t setpalette(int32_t start, int32_t num); int32_t setpalette(int32_t start, int32_t num);
//int32_t getpalette(int32_t start, int32_t num, char *dapal); //int32_t getpalette(int32_t start, int32_t num, char *dapal);
int32_t setgamma(void); int32_t setgamma(void);
double vid_gamma, vid_contrast, vid_brightness; extern double vid_gamma, vid_contrast, vid_brightness;
#define DEFAULT_GAMMA 1.0 #define DEFAULT_GAMMA 1.0
#define DEFAULT_CONTRAST 1.0 #define DEFAULT_CONTRAST 1.0
#define DEFAULT_BRIGHTNESS 0.0 #define DEFAULT_BRIGHTNESS 0.0
#define GAMMA_CALC (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15))
int32_t switchrendermethod(int32_t,int32_t); // 0 = software, 1 = opengl | bool = reinit int32_t switchrendermethod(int32_t,int32_t); // 0 = software, 1 = opengl | bool = reinit
int32_t wm_msgbox(char *name, char *fmt, ...); int32_t wm_msgbox(char *name, char *fmt, ...);

View file

@ -25,6 +25,8 @@ void(*keypresscallback)(int32_t,int32_t) = 0;
void(*mousepresscallback)(int32_t,int32_t) = 0; void(*mousepresscallback)(int32_t,int32_t) = 0;
void(*joypresscallback)(int32_t,int32_t) = 0; void(*joypresscallback)(int32_t,int32_t) = 0;
extern int16_t brightness;
// //
// set{key|mouse|joy}presscallback() -- sets a callback which gets notified when keys are pressed // set{key|mouse|joy}presscallback() -- sets a callback which gets notified when keys are pressed
// //
@ -270,25 +272,37 @@ int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
#endif #endif
#endif #endif
static int32_t osdcmd_vars(const osdfuncparm_t *parm) static int32_t osdcmd_cvar_set_baselayer(const osdfuncparm_t *parm)
{ {
int32_t showval = (parm->numparms < 1); int32_t r = osdcmd_cvar_set(parm);
if (!Bstrcasecmp(parm->name, "r_scrcaptureformat")) if (r != OSDCMD_OK) return r;
{
const char *fmts[] = {"TGA", "PCX"}; /*
if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); } if (!Bstrcasecmp(parm->name, "r_scrcaptureformat"))
else
{ {
int32_t j; const char *fmts[] = {"TGA", "PCX"};
for (j=0; j<2; j++) if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); }
if (!Bstrcasecmp(parm->parms[0], fmts[j])) break; else
if (j == 2) return OSDCMD_SHOWHELP; {
captureformat = j; int32_t j;
for (j=0; j<2; j++)
if (!Bstrcasecmp(parm->parms[0], fmts[j])) break;
if (j == 2) return OSDCMD_SHOWHELP;
captureformat = j;
}
return OSDCMD_OK;
} }
return OSDCMD_OK; else */
if (!Bstrcasecmp(parm->name, "vid_gamma") || !Bstrcasecmp(parm->name, "vid_brightness") || !Bstrcasecmp(parm->name, "vid_contrast"))
{
setbrightness(GAMMA_CALC,palette,0);
return r;
} }
return OSDCMD_SHOWHELP;
return r;
} }
int32_t baselayer_init(void) int32_t baselayer_init(void)
@ -300,7 +314,10 @@ int32_t baselayer_init(void)
#ifdef SUPERBUILD #ifdef SUPERBUILD
{ "r_novoxmips","r_novoxmips: turn off/on the use of mipmaps when rendering 8-bit voxels",(void *)&novoxmips, CVAR_BOOL, 0, 1 }, { "r_novoxmips","r_novoxmips: turn off/on the use of mipmaps when rendering 8-bit voxels",(void *)&novoxmips, CVAR_BOOL, 0, 1 },
{ "r_voxels","r_voxels: enable/disable automatic sprite->voxel rendering",(void *)&usevoxels, CVAR_BOOL, 0, 1 }, { "r_voxels","r_voxels: enable/disable automatic sprite->voxel rendering",(void *)&usevoxels, CVAR_BOOL, 0, 1 },
{ "r_scrcaptureformat","r_scrcaptureformat: sets the output format for screenshots (TGA or PCX)",osdcmd_vars, CVAR_FUNCPTR, 0, 0 }, /* { "r_scrcaptureformat","r_scrcaptureformat: sets the output format for screenshots (TGA or PCX)",osdcmd_vars, CVAR_FUNCPTR, 0, 0 },*/
{ "vid_gamma","vid_gamma <gamma>: adjusts gamma ramp",(void *)&vid_gamma, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
{ "vid_contrast","vid_contrast <gamma>: adjusts gamma ramp",(void *)&vid_contrast, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
{ "vid_brightness","vid_brightness <gamma>: adjusts gamma ramp",(void *)&vid_brightness, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 },
#endif #endif
}; };
@ -310,7 +327,7 @@ int32_t baselayer_init(void)
continue; continue;
OSD_RegisterFunction(cvars_engine[i].name, cvars_engine[i].helpstr, OSD_RegisterFunction(cvars_engine[i].name, cvars_engine[i].helpstr,
cvars_engine[i].type == CVAR_FUNCPTR ? cvars_engine[i].var : osdcmd_cvar_set); (cvars_engine[i].type & CVAR_FUNCPTR) ? osdcmd_cvar_set_baselayer : osdcmd_cvar_set);
} }
#ifdef POLYMOST #ifdef POLYMOST

View file

@ -93,7 +93,6 @@ int32_t forcesetup = 1;
extern int32_t cachesize, artsize; extern int32_t cachesize, artsize;
static int16_t oldmousebstatus = 0; static int16_t oldmousebstatus = 0;
int16_t brightness = 0;
char game_executable[BMAX_PATH] = DEFAULT_GAME_LOCAL_EXEC; char game_executable[BMAX_PATH] = DEFAULT_GAME_LOCAL_EXEC;
int32_t zlock = 0x7fffffff, zmode = 0, whitecol, kensplayerheight = 32; int32_t zlock = 0x7fffffff, zmode = 0, whitecol, kensplayerheight = 32;
int16_t defaultspritecstat = 0; int16_t defaultspritecstat = 0;
@ -287,7 +286,7 @@ static int32_t osdcmd_vidmode(const osdfuncparm_t *parm)
begindrawing(); //{{{ begindrawing(); //{{{
CLEARLINES2D(0, ydim16+STATUS2DSIZ, 0); CLEARLINES2D(0, ydim16, 0);
ydim16 = ydim; ydim16 = ydim;
// drawline16(0,ydim-STATUS2DSIZ,xdim-1,ydim-STATUS2DSIZ,editorcolors[1]); // drawline16(0,ydim-STATUS2DSIZ,xdim-1,ydim-STATUS2DSIZ,editorcolors[1]);
@ -418,7 +417,11 @@ int32_t app_main(int32_t argc, const char **argv)
#if defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2) #if defined RENDERTYPEWIN || (defined RENDERTYPESDL && !defined __APPLE__ && defined HAVE_GTK2)
if (i || forcesetup || cmdsetup) if (i || forcesetup || cmdsetup)
{ {
if (quitevent || !startwin_run()) return -1; if (quitevent || !startwin_run())
{
uninitengine();
exit(0);
}
} }
#endif #endif
@ -483,8 +486,10 @@ int32_t app_main(int32_t argc, const char **argv)
if (cursectnum == -1) if (cursectnum == -1)
{ {
double gamma = vid_gamma; double gamma = vid_gamma, brightness = vid_brightness, contrast = vid_contrast;
vid_gamma = 1.0; vid_gamma = vid_contrast = 1.0;
vid_brightness = 0.0;
setbrightness(0,palette,0); setbrightness(0,palette,0);
if (setgamemode(fullscreen, xdim2d, ydim2d, 8) < 0) if (setgamemode(fullscreen, xdim2d, ydim2d, 8) < 0)
{ {
@ -496,7 +501,10 @@ int32_t app_main(int32_t argc, const char **argv)
overheadeditor(); overheadeditor();
keystatus[buildkeys[BK_MODE2D_3D]] = 0; keystatus[buildkeys[BK_MODE2D_3D]] = 0;
vid_gamma = gamma; vid_gamma = gamma;
setbrightness(brightness,palette,0); vid_contrast = contrast;
vid_brightness = brightness;
setbrightness(GAMMA_CALC,palette,0);
} }
else else
{ {
@ -507,7 +515,7 @@ int32_t app_main(int32_t argc, const char **argv)
Bprintf("%d * %d not supported in this graphics mode\n",xdim,ydim); Bprintf("%d * %d not supported in this graphics mode\n",xdim,ydim);
exit(0); exit(0);
} }
setbrightness(brightness,palette,0); setbrightness(GAMMA_CALC,palette,0);
} }
CANCEL: CANCEL:
quitflag = 0; quitflag = 0;
@ -1174,16 +1182,23 @@ void editinput(void)
} }
} }
if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter if (keystatus[buildkeys[BK_MODE2D_3D]]) // Enter
{ {
double gamma = vid_gamma;
vid_gamma = 1.0; double gamma = vid_gamma, contrast = vid_contrast, brightness = vid_brightness;
vid_gamma = vid_contrast = 1.0;
vid_brightness = 0.0;
setbrightness(0,palette,0); setbrightness(0,palette,0);
keystatus[buildkeys[BK_MODE2D_3D]] = 0; keystatus[buildkeys[BK_MODE2D_3D]] = 0;
overheadeditor(); overheadeditor();
keystatus[buildkeys[BK_MODE2D_3D]] = 0; keystatus[buildkeys[BK_MODE2D_3D]] = 0;
vid_gamma = gamma; vid_gamma = gamma;
setbrightness(brightness,palette,0); vid_contrast = contrast;
vid_brightness = brightness;
setbrightness(GAMMA_CALC,palette,0);
} }
} }
@ -1432,7 +1447,8 @@ void overheadeditor(void)
wall[newnumwalls].y = day; wall[newnumwalls].y = day;
} }
ydim16 = ydim - STATUS2DSIZ2; ydim16 = ydim;// - STATUS2DSIZ2;
midydim16 = ydim>>1;
tempint = numwalls; tempint = numwalls;
numwalls = newnumwalls; numwalls = newnumwalls;
@ -1447,19 +1463,13 @@ void overheadeditor(void)
if (graphicsmode) if (graphicsmode)
{ {
int32_t ii = xyaspect;
i = yxaspect;
Bmemset(show2dsector, 255, sizeof(show2dsector)); Bmemset(show2dsector, 255, sizeof(show2dsector));
setview(0, 0, xdim-1, ydim16-1); setview(0, 0, xdim-1, ydim16-1);
yxaspect = xyaspect = 65536;
if (graphicsmode == 2) if (graphicsmode == 2)
totalclocklock = totalclock; totalclocklock = totalclock;
drawmapview(pos.x, pos.y + scale((65536/zoom), ydim, 240), zoom, 1536); drawmapview(pos.x, pos.y, zoom, 1536);
yxaspect = i;
xyaspect = ii;
} }
draw2dgrid(pos.x,pos.y,ang,zoom,grid); draw2dgrid(pos.x,pos.y,ang,zoom,grid);
@ -4604,8 +4614,8 @@ CANCEL:
exit(0); exit(0);
} }
setbrightness(brightness,palette,0); setbrightness(GAMMA_CALC,palette,0);
pos.z = oposz; pos.z = oposz;
searchx = scale(searchx,xdimgame,xdim2d); searchx = scale(searchx,xdimgame,xdim2d);
searchy = scale(searchy,ydimgame,ydim2d-STATUS2DSIZ); searchy = scale(searchy,ydimgame,ydim2d-STATUS2DSIZ);
@ -5356,7 +5366,7 @@ static int32_t menuselect_pk(int32_t direction) // 20080104: jump to next (direc
static int32_t menuselect(void) static int32_t menuselect(void)
{ {
int32_t listsize = (ydim16-32)/9; int32_t listsize;
int32_t i; int32_t i;
char ch, buffer[96], /*PK*/ *chptr; char ch, buffer[96], /*PK*/ *chptr;
static char oldpath[BMAX_PATH]; static char oldpath[BMAX_PATH];
@ -5387,6 +5397,7 @@ static int32_t menuselect(void)
enddrawing(); enddrawing();
ydim16 = ydim-STATUS2DSIZ2; ydim16 = ydim-STATUS2DSIZ2;
listsize = (ydim16-32)/9;
do do
{ {

View file

@ -150,12 +150,9 @@ int32_t loadsetup(const char *fn)
#ifdef POLYMER #ifdef POLYMER
if (readconfig(fp, "rendmode", val, VL) > 0) { i = Batoi(val); glrendmode = i; } if (readconfig(fp, "rendmode", val, VL) > 0) { i = Batoi(val); glrendmode = i; }
#endif #endif
if (readconfig(fp, "brightness", val, VL) > 0) if (readconfig(fp, "vid_gamma", val, VL) > 0) vid_gamma = Bstrtod(val, NULL);
{ if (readconfig(fp, "vid_brightness", val, VL) > 0) vid_brightness = Bstrtod(val, NULL);
brightness = min(max(Batoi(val),0),15); if (readconfig(fp, "vid_contrast", val, VL) > 0) vid_contrast = Bstrtod(val, NULL);
vid_gamma = 1.0 + ((float)brightness / 10.0);
}
#ifdef RENDERTYPEWIN #ifdef RENDERTYPEWIN
if (readconfig(fp, "maxrefreshfreq", val, VL) > 0) maxrefreshfreq = Batoi(val); if (readconfig(fp, "maxrefreshfreq", val, VL) > 0) maxrefreshfreq = Batoi(val);
#endif #endif
@ -355,9 +352,9 @@ int32_t writesetup(const char *fn)
"\n" "\n"
#endif #endif
"; 3D mode brightness setting\n" "; 3D mode brightness setting\n"
"; 0 - lowest\n" "vid_gamma = %f\n"
"; 15 - highest\n" "vid_brightness = %f\n"
"brightness = %d\n" "vid_contrast = %f\n"
"\n" "\n"
"; Game executable used for map testing\n" "; Game executable used for map testing\n"
"gameexecutable = %s\n" "gameexecutable = %s\n"
@ -493,7 +490,7 @@ int32_t writesetup(const char *fn)
#ifdef RENDERTYPEWIN #ifdef RENDERTYPEWIN
maxrefreshfreq, windowpos, windowx, windowy, maxrefreshfreq, windowpos, windowx, windowy,
#endif #endif
brightness, game_executable, vid_gamma, vid_brightness, vid_contrast, game_executable,
#if 0 #if 0
option[7]>>4, option[2], option[7]>>4, option[2],
#endif #endif

View file

@ -9329,6 +9329,7 @@ int32_t pushmove(vec3_t *vect, int16_t *sectnum,
bad = -1; bad = -1;
k--; if (k <= 0) return(bad); k--; if (k <= 0) return(bad);
updatesector(vect->x,vect->y,sectnum); updatesector(vect->x,vect->y,sectnum);
if (*sectnum < 0) return -1;
} }
else else
{ {

View file

@ -165,7 +165,7 @@ int32_t OSD_RegisterCvar(const cvar_t *cvar)
cvars = (osdcvar_t *)Brealloc(cvars, (osdnumcvars + 1) * sizeof(osdcvar_t)); cvars = (osdcvar_t *)Brealloc(cvars, (osdnumcvars + 1) * sizeof(osdcvar_t));
hash_add(&h_cvars, cvar->name, osdnumcvars); hash_replace(&h_cvars, cvar->name, osdnumcvars);
switch (cvar->type & (CVAR_BOOL|CVAR_INT|CVAR_UINT|CVAR_FLOAT|CVAR_DOUBLE)) switch (cvar->type & (CVAR_BOOL|CVAR_INT|CVAR_UINT|CVAR_FLOAT|CVAR_DOUBLE))
{ {
@ -1841,11 +1841,13 @@ int32_t OSD_RegisterFunction(const char *name, const char *help, int32_t (*func)
if (symb) // allow this now for reusing an alias name if (symb) // allow this now for reusing an alias name
{ {
/*
if (symb->func != OSD_ALIAS && symb->func != OSD_UNALIASED) if (symb->func != OSD_ALIAS && symb->func != OSD_UNALIASED)
{ {
OSD_Printf("OSD_RegisterFunction(): \"%s\" is already defined\n", name); OSD_Printf("OSD_RegisterFunction(): \"%s\" is already defined\n", name);
return -1; return -1;
} }
*/
Bfree((char *)symb->help); Bfree((char *)symb->help);
symb->help = help; symb->help = help;
symb->func = func; symb->func = func;
@ -1918,9 +1920,9 @@ static symbol_t *addnewsymbol(const char *name)
newsymb->next = t; newsymb->next = t;
} }
} }
hash_add(&h_osd, name, osdnumsymbols); hash_replace(&h_osd, name, osdnumsymbols);
name = Bstrtolower(Bstrdup(name)); name = Bstrtolower(Bstrdup(name));
hash_add(&h_osd, name, osdnumsymbols); hash_replace(&h_osd, name, osdnumsymbols);
Bfree((void *)name); Bfree((void *)name);
osdsymbptrs[osdnumsymbols++] = newsymb; osdsymbptrs[osdnumsymbols++] = newsymb;
return newsymb; return newsymb;

View file

@ -4537,14 +4537,12 @@ static int32_t polymer_planeinlight(_prplane* plane, _prlight* light)
static void polymer_invalidateplanelights(_prplane* plane) static void polymer_invalidateplanelights(_prplane* plane)
{ {
int32_t i = 0; int32_t i = -1;
while (i < plane->lightcount) while (++i < plane->lightcount)
{ {
if (plane && (plane->lights[i] != -1) && (prlights[plane->lights[i]].flags.active)) if (plane && (plane->lights[i] != -1) && (prlights[plane->lights[i]].flags.active))
prlights[plane->lights[i]].flags.invalidate = 1; prlights[plane->lights[i]].flags.invalidate = 1;
i++;
} }
} }
@ -4561,21 +4559,15 @@ static void polymer_invalidatesectorlights(int16_t sectnum)
polymer_invalidateplanelights(&s->floor); polymer_invalidateplanelights(&s->floor);
polymer_invalidateplanelights(&s->ceil); polymer_invalidateplanelights(&s->ceil);
i = 0; i = sec->wallnum;
while (i < sec->wallnum)
{
w = prwalls[sec->wallptr + i];
if (!w) { while (i--)
i++; {
continue; if (!(w = prwalls[sec->wallptr + i])) continue;
}
polymer_invalidateplanelights(&w->wall); polymer_invalidateplanelights(&w->wall);
polymer_invalidateplanelights(&w->over); polymer_invalidateplanelights(&w->over);
polymer_invalidateplanelights(&w->mask); polymer_invalidateplanelights(&w->mask);
i++;
} }
} }

View file

@ -1663,12 +1663,12 @@ ACTOR_STATIC void G_MoveStandables(void)
if (T3 == 8) if (T3 == 8)
{ {
A_PlaySound(LASERTRIP_EXPLODE,i);
for (j=0; j<5; j++) RANDOMSCRAP; for (j=0; j<5; j++) RANDOMSCRAP;
x = s->extra; x = s->extra;
A_RadiusDamage(i, g_tripbombBlastRadius, x>>2,x>>1,x-(x>>2),x); A_RadiusDamage(i, g_tripbombBlastRadius, x>>2,x>>1,x-(x>>2),x);
j = A_Spawn(i,EXPLOSION2); j = A_Spawn(i,EXPLOSION2);
A_PlaySound(LASERTRIP_EXPLODE,j);
sprite[j].ang = s->ang; sprite[j].ang = s->ang;
sprite[j].xvel = 348; sprite[j].xvel = 348;
A_SetSprite(j,CLIPMASK0); A_SetSprite(j,CLIPMASK0);
@ -1838,9 +1838,9 @@ ACTOR_STATIC void G_MoveStandables(void)
sprite[j].pal = 2; sprite[j].pal = 2;
} }
A_Spawn(i,EXPLOSION2); j = A_Spawn(i,EXPLOSION2);
A_PlaySound(PIPEBOMB_EXPLODE,i); A_PlaySound(PIPEBOMB_EXPLODE,j);
A_PlaySound(GLASS_HEAVYBREAK,i); A_PlaySound(GLASS_HEAVYBREAK,j);
if (s->hitag > 0) if (s->hitag > 0)
{ {
@ -1854,9 +1854,9 @@ ACTOR_STATIC void G_MoveStandables(void)
} }
x = s->extra; x = s->extra;
A_Spawn(i,EXPLOSION2);
A_RadiusDamage(i, g_pipebombBlastRadius,x>>2, x-(x>>1),x-(x>>2), x); A_RadiusDamage(i, g_pipebombBlastRadius,x>>2, x-(x>>1),x-(x>>2), x);
A_PlaySound(PIPEBOMB_EXPLODE,i); j = A_Spawn(i,EXPLOSION2);
A_PlaySound(PIPEBOMB_EXPLODE,j);
goto DETONATE; goto DETONATE;
} }
@ -1958,17 +1958,17 @@ DETONATE:
s->z -= (32<<8); s->z -= (32<<8);
if ((t[3] == 1 && s->xrepeat) || s->lotag == -99)
{
x = s->extra;
A_Spawn(i,EXPLOSION2);
A_RadiusDamage(i,g_seenineBlastRadius,x>>2, x-(x>>1),x-(x>>2), x);
A_PlaySound(PIPEBOMB_EXPLODE,i);
}
if (s->xrepeat) if (s->xrepeat)
for (x=0; x<8; x++) RANDOMSCRAP; for (x=0; x<8; x++) RANDOMSCRAP;
if ((t[3] == 1 && s->xrepeat) || s->lotag == -99)
{
int32_t j = A_Spawn(i,EXPLOSION2);
x = s->extra;
A_RadiusDamage(i,g_seenineBlastRadius,x>>2, x-(x>>1),x-(x>>2), x);
A_PlaySound(PIPEBOMB_EXPLODE,j);
}
KILLIT(i); KILLIT(i);
} }
} }
@ -3027,6 +3027,7 @@ ACTOR_STATIC void G_MoveWeapons(void)
if (s->picnum == RPG) if (s->picnum == RPG)
{ {
k = A_Spawn(i,EXPLOSION2); k = A_Spawn(i,EXPLOSION2);
A_PlaySound(RPG_EXPLODE,k);
Bmemcpy(&sprite[k],&davect,sizeof(vec3_t)); Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
if (s->xrepeat < 10) if (s->xrepeat < 10)
@ -3045,7 +3046,6 @@ ACTOR_STATIC void G_MoveWeapons(void)
} }
} }
A_PlaySound(RPG_EXPLODE,i);
if (s->xrepeat >= 10) if (s->xrepeat >= 10)
{ {
@ -3788,7 +3788,8 @@ ACTOR_STATIC void G_MoveActors(void)
{ {
for (l=0; l<16; l++) for (l=0; l<16; l++)
RANDOMSCRAP; RANDOMSCRAP;
A_PlaySound(LASERTRIP_EXPLODE,i); j = A_Spawn(i,EXPLOSION2);
A_PlaySound(LASERTRIP_EXPLODE,j);
A_Spawn(i,PIGCOP); A_Spawn(i,PIGCOP);
g_player[myconnectindex].ps->actors_killed++; g_player[myconnectindex].ps->actors_killed++;
KILLIT(i); KILLIT(i);
@ -4503,6 +4504,8 @@ DETONATEB:
if (t[2] == 2) if (t[2] == 2)
{ {
int32_t j;
x = s->extra; x = s->extra;
m = 0; m = 0;
switch (DynamicTileMap[s->picnum]) switch (DynamicTileMap[s->picnum])
@ -4519,10 +4522,10 @@ DETONATEB:
} }
A_RadiusDamage(i, m,x>>2,x>>1,x-(x>>2),x); A_RadiusDamage(i, m,x>>2,x>>1,x-(x>>2),x);
A_Spawn(i,EXPLOSION2); j = A_Spawn(i,EXPLOSION2);
A_PlaySound(PIPEBOMB_EXPLODE,j);
if (s->zvel == 0) if (s->zvel == 0)
A_Spawn(i,EXPLOSION2BOT); A_Spawn(i,EXPLOSION2BOT);
A_PlaySound(PIPEBOMB_EXPLODE,i);
for (x=0; x<8; x++) for (x=0; x<8; x++)
RANDOMSCRAP; RANDOMSCRAP;
} }

View file

@ -78,7 +78,7 @@ sound_t g_sounds[MAXSOUNDS];
static int16_t g_definedsndnum[MAXSOUNDS]; // maps parse order index to g_sounds index static int16_t g_definedsndnum[MAXSOUNDS]; // maps parse order index to g_sounds index
static int16_t g_sndnum[MAXSOUNDS]; // maps current order index to g_sounds index static int16_t g_sndnum[MAXSOUNDS]; // maps current order index to g_sounds index
int32_t g_numsounds = 0; int32_t g_numsounds = 0;
static int32_t lastupdate, mousecol, mouseadd = 1, bstatus;
#if !defined(_WIN32) #if !defined(_WIN32)
static int32_t usecwd = 0; static int32_t usecwd = 0;
@ -2536,10 +2536,6 @@ static void ReadGamePalette()
ReadPaletteTable(); ReadPaletteTable();
} }
static char lockbyte4094;
static int32_t lastupdate, mousecol, mouseadd = 1, bstatus;
static void m32_showmouse(void) static void m32_showmouse(void)
{ {
int32_t i, col; int32_t i, col;
@ -3923,7 +3919,7 @@ ERROR_NOMEMORY:
static void Keys3d(void) static void Keys3d(void)
{ {
int32_t i,changedir,tsign; // ,count,nexti int32_t i = 0,changedir,tsign; // ,count,nexti
int32_t j, k, tempint = 0, hiz, loz; int32_t j, k, tempint = 0, hiz, loz;
int32_t hihit, lohit; int32_t hihit, lohit;
char smooshyalign=0, repeatpanalign=0; //, buffer[80]; char smooshyalign=0, repeatpanalign=0; //, buffer[80];
@ -3932,23 +3928,6 @@ static void Keys3d(void)
/* start Mapster32 */ /* start Mapster32 */
/*
if (sidemode != 0)
{
setviewback();
rotatesprite(320<<15,200<<15,65536,(horiz-100)<<2,4094,0,0,2+4,0,0,0,0);
lockbyte4094 = 0;
searchx = ydim-1-searchx;
searchx ^= searchy;
searchy ^= searchx;
searchx ^= searchy;
// overwritesprite(160L,170L,1153,0,1+2,0);
rotatesprite(160<<16,170<<16,65536,(100-horiz+1024)<<3,1153,0,0,2,0,0,0,0);
}
*/
if (g_numsounds > 0 && AmbienceToggle) if (g_numsounds > 0 && AmbienceToggle)
{ {
M32_MoveFX(); M32_MoveFX();
@ -5847,7 +5826,7 @@ static void Keys3d(void)
if (PRESSED_KEYSC(F11)) //F11 - brightness if (PRESSED_KEYSC(F11)) //F11 - brightness
{ {
extern int16_t brightness; static int16_t brightness;
brightness = brightness + (1-2*eitherSHIFT); brightness = brightness + (1-2*eitherSHIFT);
brightness &= 15; brightness &= 15;
@ -7291,21 +7270,6 @@ static int32_t osdcmd_sensitivity(const osdfuncparm_t *parm)
return OSDCMD_OK; return OSDCMD_OK;
} }
static int32_t osdcmd_gamma(const osdfuncparm_t *parm)
{
extern int16_t brightness;
if (parm->numparms != 1)
{
OSD_Printf("\"gamma\" \"%d\"\n",brightness);
return OSDCMD_SHOWHELP;
}
brightness = atoi(parm->parms[0]);
setbrightness(brightness,palette,0);
OSD_Printf("gamma %d\n",brightness);
return OSDCMD_OK;
}
static int32_t osdcmd_noclip(const osdfuncparm_t *parm) static int32_t osdcmd_noclip(const osdfuncparm_t *parm)
{ {
UNREFERENCED_PARAMETER(parm); UNREFERENCED_PARAMETER(parm);
@ -7645,8 +7609,6 @@ static int32_t registerosdcommands(void)
OSD_RegisterFunction("editorgridextent","editorgridextent: sets the size of the 2D mode editing grid",osdcmd_editorgridextent); OSD_RegisterFunction("editorgridextent","editorgridextent: sets the size of the 2D mode editing grid",osdcmd_editorgridextent);
OSD_RegisterFunction("gamma","gamma <value>: changes brightness", osdcmd_gamma);
OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile); OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile);
OSD_RegisterFunction("noclip","noclip: toggles clipping mode", osdcmd_noclip); OSD_RegisterFunction("noclip","noclip: toggles clipping mode", osdcmd_noclip);
@ -8919,20 +8881,8 @@ void ExtPreCheckKeys(void) // just before drawrooms
} }
if (floor_over_floor) SE40Code(pos.x,pos.y,pos.z,ang,horiz); if (floor_over_floor) SE40Code(pos.x,pos.y,pos.z,ang,horiz);
if (purpleon) clearview(255); if (purpleon) clearview(255);
if (sidemode)
{
lockbyte4094 = 1;
if (waloff[4094] == 0)
allocache(&waloff[4094],320L*200L,&lockbyte4094);
setviewtotile(4094,320L,200L);
searchx ^= searchy;
searchy ^= searchx;
searchx ^= searchy;
searchx = ydim-1-searchx;
}
return; return;
} }
begindrawing(); begindrawing();
@ -9475,12 +9425,9 @@ void ExtCheckKeys(void)
if (qsetmode == 200) //In 3D mode if (qsetmode == 200) //In 3D mode
{ {
Keys3d(); Keys3d();
if (sidemode != 1) editinput();
{ if (infobox&2)
editinput(); m32_showmouse();
if (infobox&2)
m32_showmouse();
}
} }
else Keys2d(); else Keys2d();
@ -9524,7 +9471,7 @@ void faketimerhandler(void)
// if (counter>=5) counter=0; // if (counter>=5) counter=0;
sampletimer(); sampletimer();
if (totalclock < ototalclock+TICSPERFRAME || qsetmode != 200 || sidemode != 1) if (totalclock < ototalclock+TICSPERFRAME || qsetmode != 200)
return; return;
ototalclock = totalclock; ototalclock = totalclock;
@ -9588,34 +9535,32 @@ void faketimerhandler(void)
if (horiz > 100) horiz--; if (horiz > 100) horiz--;
} }
extern int16_t brightness;
void SetBOSS1Palette(void) void SetBOSS1Palette(void)
{ {
if (acurpalette==3) return; if (acurpalette==3) return;
acurpalette=3; acurpalette=3;
setbrightness(brightness,BOSS1palette,0); setbrightness(GAMMA_CALC,BOSS1palette,0);
} }
void SetSLIMEPalette(void) void SetSLIMEPalette(void)
{ {
if (acurpalette==2) return; if (acurpalette==2) return;
acurpalette=2; acurpalette=2;
setbrightness(brightness,SLIMEpalette,0); setbrightness(GAMMA_CALC,SLIMEpalette,0);
} }
void SetWATERPalette(void) void SetWATERPalette(void)
{ {
if (acurpalette==1) return; if (acurpalette==1) return;
acurpalette=1; acurpalette=1;
setbrightness(brightness,WATERpalette,0); setbrightness(GAMMA_CALC,WATERpalette,0);
} }
void SetGAMEPalette(void) void SetGAMEPalette(void)
{ {
if (acurpalette==0) return; if (acurpalette==0) return;
acurpalette=0; acurpalette=0;
setbrightness(brightness,GAMEpalette,0); setbrightness(GAMMA_CALC,GAMEpalette,0);
} }
static void SearchSectors(int32_t dir) // <0: backwards, >=0: forwards static void SearchSectors(int32_t dir) // <0: backwards, >=0: forwards

View file

@ -37,8 +37,8 @@ extern int32_t S_LoadSound(uint32_t num);
extern int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos); extern int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos);
extern int32_t S_PlaySound(int32_t num); extern int32_t S_PlaySound(int32_t num);
extern int32_t A_PlaySound(uint32_t num,int32_t i); extern int32_t A_PlaySound(uint32_t num,int32_t i);
extern void S_StopSound(int32_t num);
extern void S_StopEnvSound(int32_t num,int32_t i); extern void S_StopEnvSound(int32_t num,int32_t i);
#define S_StopSound(num) S_StopEnvSound(num, -1)
extern void S_Update(void); extern void S_Update(void);
extern void S_Cleanup(void); extern void S_Cleanup(void);
extern void S_Callback(uint32_t num); extern void S_Callback(uint32_t num);

View file

@ -1191,6 +1191,7 @@ static int32_t C_SkipComments(void)
case ' ': case ' ':
case '\t': case '\t':
case '\r': case '\r':
case 0x1a:
textptr++; textptr++;
break; break;
case '/': case '/':
@ -1200,7 +1201,7 @@ static int32_t C_SkipComments(void)
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
initprintf("%s:%d: debug: got comment.\n",g_szScriptFileName,g_lineNumber); initprintf("%s:%d: debug: got comment.\n",g_szScriptFileName,g_lineNumber);
C_NextLine(); C_NextLine();
break; continue;
case '*': // beginning of a C style comment case '*': // beginning of a C style comment
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
initprintf("%s:%d: debug: got start of comment block.\n",g_szScriptFileName,g_lineNumber); initprintf("%s:%d: debug: got start of comment block.\n",g_szScriptFileName,g_lineNumber);
@ -1220,22 +1221,22 @@ static int32_t C_SkipComments(void)
initprintf("%s:%d: error: found `/*' with no `*/'.\n",g_szScriptFileName,g_lineNumber); initprintf("%s:%d: error: found `/*' with no `*/'.\n",g_szScriptFileName,g_lineNumber);
g_parsingActorPtr = 0;g_processingState = g_numBraces = 0; g_parsingActorPtr = 0;g_processingState = g_numBraces = 0;
g_numCompilerErrors++; g_numCompilerErrors++;
break; continue;
} }
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1) if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
initprintf("%s:%d: debug: got end of comment block.\n",g_szScriptFileName,g_lineNumber); initprintf("%s:%d: debug: got end of comment block.\n",g_szScriptFileName,g_lineNumber);
textptr+=2; textptr+=2;
break; continue;
} }
break; continue;
default: default:
if (ispecial(*textptr)) if (ispecial(*textptr))
{ {
textptr++; textptr++;
break; continue;
} }
case 0: // EOF case 0: // EOF
return ((g_scriptPtr-script) > (g_scriptSize-32)) ? C_SetScriptSize(g_scriptSize<<1) : 0; return ((g_scriptPtr-script) > (g_scriptSize-32)) ? C_SetScriptSize(g_scriptSize<<1) : 0;

View file

@ -4199,7 +4199,6 @@ nullquote:
if (MapInfo[(uint8_t)g_musicIndex].musicfn == NULL) if (MapInfo[(uint8_t)g_musicIndex].musicfn == NULL)
{ {
OSD_Printf(CON_ERROR "null music for map %d\n",g_errorLineNum,keyw[g_tw],g_musicIndex); OSD_Printf(CON_ERROR "null music for map %d\n",g_errorLineNum,keyw[g_tw],g_musicIndex);
insptr++;
continue; continue;
} }
S_PlayMusic(&MapInfo[(uint8_t)g_musicIndex].musicfn[0],g_musicIndex); S_PlayMusic(&MapInfo[(uint8_t)g_musicIndex].musicfn[0],g_musicIndex);

View file

@ -380,8 +380,10 @@ void Gv_ResetVars(void) /* this is called during a new game and nowhere else */
for (i=0; i<MAXGAMEVARS; i++) for (i=0; i<MAXGAMEVARS; i++)
{ {
if (aGameVars[i].szLabel != NULL && aGameVars[i].dwFlags & GAMEVAR_RESET) if (aGameVars[i].szLabel != NULL)
Gv_NewVar(aGameVars[i].szLabel,aGameVars[i].lDefault,aGameVars[i].dwFlags); Gv_NewVar(aGameVars[i].szLabel,
aGameVars[i].dwFlags & GAMEVAR_NODEFAULT ? aGameVars[i].val.lValue : aGameVars[i].lDefault,
aGameVars[i].dwFlags);
} }
for (i=0; i<MAXGAMEARRAYS; i++) for (i=0; i<MAXGAMEARRAYS; i++)

View file

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

View file

@ -93,7 +93,7 @@ int32_t mousxplc, mousyplc;
static int32_t ppointhighlight; static int32_t ppointhighlight;
//static int32_t counter=0; //static int32_t counter=0;
static uint8_t nosprites=0,purpleon=0,skill=4; static uint8_t nosprites=0,purpleon=0,skill=4;
static uint8_t framerateon=1,shadepreview=0,sidemode=0; static uint8_t framerateon=1,shadepreview=0;
static int32_t xvel, yvel, timoff; static int32_t xvel, yvel, timoff;
int32_t autosave=180; int32_t autosave=180;

View file

@ -1308,7 +1308,7 @@ static int32_t osdcmd_cvar_set_game(const osdfuncparm_t *parm)
} }
else if (!Bstrcasecmp(parm->name, "vid_gamma")) else if (!Bstrcasecmp(parm->name, "vid_gamma"))
{ {
ud.brightness = (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15)); ud.brightness = GAMMA_CALC;
ud.brightness <<= 2; ud.brightness <<= 2;
setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0); setbrightness(ud.brightness>>2,&g_player[myconnectindex].ps->palette[0],0);

View file

@ -3193,9 +3193,6 @@ void getinput(int32_t snum)
if (BUTTON(gamefunc_Jump) && p->on_ground) if (BUTTON(gamefunc_Jump) && p->on_ground)
jump_timer = 4; jump_timer = 4;
if (aplWeaponFlags[g_player[snum].ps->curr_weapon][snum] & WEAPON_SEMIAUTO && BUTTON(gamefunc_Fire))
CONTROL_ClearButton(gamefunc_Fire);
loc.bits = (jump_timer > 0 || BUTTON(gamefunc_Jump))<<SK_JUMP; loc.bits = (jump_timer > 0 || BUTTON(gamefunc_Jump))<<SK_JUMP;
if (jump_timer > 0) if (jump_timer > 0)
@ -3236,6 +3233,9 @@ void getinput(int32_t snum)
if (BUTTON(gamefunc_Dpad_Aiming)) if (BUTTON(gamefunc_Dpad_Aiming))
vel = 0; vel = 0;
if (aplWeaponFlags[g_player[snum].ps->curr_weapon][snum] & WEAPON_SEMIAUTO && BUTTON(gamefunc_Fire))
CONTROL_ClearButton(gamefunc_Fire);
loc.extbits = 0; loc.extbits = 0;
// if (apScriptGameEvent[EVENT_PROCESSINPUT] || apScriptGameEvent[EVENT_MOVEFORWARD]) // if (apScriptGameEvent[EVENT_PROCESSINPUT] || apScriptGameEvent[EVENT_MOVEFORWARD])
loc.extbits |= BUTTON(gamefunc_Move_Forward) || (vel > 0); loc.extbits |= BUTTON(gamefunc_Move_Forward) || (vel > 0);

View file

@ -338,23 +338,24 @@ void S_Cleanup(void)
{ {
int32_t j = num & (MAXSOUNDINSTANCES-1); int32_t j = num & (MAXSOUNDINSTANCES-1);
int32_t i;
num = (num - j) / MAXSOUNDINSTANCES; num = (num - j) / MAXSOUNDINSTANCES;
i = g_sounds[num].SoundOwner[j].i;
if (g_sounds[num].num > MAXSOUNDINSTANCES) if (g_sounds[num].num > MAXSOUNDINSTANCES)
OSD_Printf(OSD_ERROR "S_Cleanup(): num exceeds MAXSOUNDINSTANCES! g_sounds[%d].num %d wtf?\n", num, g_sounds[num].num); OSD_Printf(OSD_ERROR "S_Cleanup(): num exceeds MAXSOUNDINSTANCES! g_sounds[%d].num %d wtf?\n", num, g_sounds[num].num);
if (g_sounds[num].num > 0) if (g_sounds[num].num > 0)
{
int32_t i = g_sounds[num].SoundOwner[j].i;
// MUSICANDSFX uses t_data[0] to control restarting the sound
if (i != -1 && sprite[i].picnum == MUSICANDSFX && sector[sprite[i].sectnum].lotag < 3 && sprite[i].lotag < 999)
actor[i].t_data[0] = 0;
g_sounds[num].SoundOwner[j].i = -1;
g_sounds[num].SoundOwner[j].voice = 0;
g_sounds[num].num--; g_sounds[num].num--;
}
// MUSICANDSFX uses t_data[0] to control restarting the sound
if (i != -1 && sprite[i].picnum == MUSICANDSFX && sector[sprite[i].sectnum].lotag < 3 && sprite[i].lotag < 999)
actor[i].t_data[0] = 0;
g_sounds[num].SoundOwner[j].i = -1;
g_sounds[num].SoundOwner[j].voice = 0;
} }
g_soundlocks[num]--; g_soundlocks[num]--;
} }
@ -547,22 +548,22 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
(num * MAXSOUNDINSTANCES) + j); (num * MAXSOUNDINSTANCES) + j);
} }
if (voice > FX_Ok) if (voice <= FX_Ok)
{ {
g_sounds[num].SoundOwner[j].i = i; g_soundlocks[num]--;
g_sounds[num].num++; return -1;
g_sounds[num].SoundOwner[j].voice = voice;
return voice;
} }
g_soundlocks[num]--; g_sounds[num].num++;
return -1; g_sounds[num].SoundOwner[j].i = i;
g_sounds[num].SoundOwner[j].voice = voice;
return voice;
} }
int32_t S_PlaySound(int32_t num) int32_t S_PlaySound(int32_t num)
{ {
int32_t pitch,cx; int32_t pitch, cx;
int32_t voice; int32_t voice, j;
if (ud.config.FXDevice < 0) return -1; if (ud.config.FXDevice < 0) return -1;
if (ud.config.SoundToggle==0) return -1; if (ud.config.SoundToggle==0) return -1;
@ -591,6 +592,17 @@ int32_t S_PlaySound(int32_t num)
else g_soundlocks[num]++; else g_soundlocks[num]++;
} }
j = 0;
while (j < MAXSOUNDINSTANCES && g_sounds[num].SoundOwner[j].voice > 0)
j++;
if (j >= MAXSOUNDINSTANCES)
{
g_soundlocks[num]--;
return -1;
}
voice = (g_sounds[num].m&1) ? voice = (g_sounds[num].m&1) ?
FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1, FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
pitch,LOUDESTVOLUME,LOUDESTVOLUME,LOUDESTVOLUME,g_sounds[num].soundsiz, 65536 + num) : pitch,LOUDESTVOLUME,LOUDESTVOLUME,LOUDESTVOLUME,g_sounds[num].soundsiz, 65536 + num) :
@ -602,6 +614,9 @@ int32_t S_PlaySound(int32_t num)
return -1; return -1;
} }
g_sounds[num].num++;
g_sounds[num].SoundOwner[j].i = -1;
g_sounds[num].SoundOwner[j].voice = voice;
return voice; return voice;
} }
@ -611,115 +626,46 @@ int32_t A_PlaySound(uint32_t num, int32_t i)
return i < 0 ? S_PlaySound(num) : S_PlaySound3D(num, i, (vec3_t *)&sprite[i]); return i < 0 ? S_PlaySound(num) : S_PlaySound3D(num, i, (vec3_t *)&sprite[i]);
} }
void S_StopSound(int32_t num) void S_StopEnvSound(int32_t num, int32_t i)
{ {
int32_t iter = 0; int32_t j, iter = 0;
if (num < 0 || num > g_maxSoundPos || g_sounds[num].num <= 0) if (num < 0 || num > g_maxSoundPos || g_sounds[num].num <= 0)
return; return;
retry: do
if (iter > MAXSOUNDINSTANCES)
{ {
int32_t j=MAXSOUNDINSTANCES-1; if (iter++ > MAXSOUNDINSTANCES<<1)
initprintf(OSD_ERROR "S_StopSound(): too many iterations! The following IDs are still active for sound %d:\n", num);
for (; j>=0; j--)
if (g_sounds[num].SoundOwner[j].voice)
initprintf("slot %d, voice %d, sprite %d\n", j, g_sounds[num].SoundOwner[j].voice, g_sounds[num].SoundOwner[j].i);
return;
}
{
int32_t j=MAXSOUNDINSTANCES-1;
iter++;
for (; j>=0; j--)
{ {
if (g_sounds[num].SoundOwner[j].voice) initprintf(OSD_ERROR "S_StopEnvSound(): too many iterations! The following IDs are still active for sound %d:\n", num);
{ for (j=MAXSOUNDINSTANCES-1; j>=0; j--)
if (g_sounds[num].SoundOwner[j].voice <= FX_Ok || g_sounds[num].SoundOwner[j].voice > ud.config.NumVoices) if (g_sounds[num].SoundOwner[j].i == i)
{ initprintf(OSD_ERROR "slot %d, voice %d, sprite %d\n", j, g_sounds[num].SoundOwner[j].voice, g_sounds[num].SoundOwner[j].i);
initprintf(OSD_ERROR "S_StopSound(): bad voice %d for sound ID %d index %d!\n", g_sounds[num].SoundOwner[j].voice, num, j); return;
mutex_lock(&s_mutex);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
S_Cleanup();
goto retry;
}
if (FX_SoundActive(g_sounds[num].SoundOwner[j].voice))
FX_StopSound(g_sounds[num].SoundOwner[j].voice);
else
{
mutex_lock(&s_mutex);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
}
S_Cleanup();
goto retry;
}
} }
}
}
void S_StopEnvSound(int32_t num,int32_t i) for (j=MAXSOUNDINSTANCES-1; j>=0; j--)
{
int32_t iter = 0;
if (num < 0 || num > g_maxSoundPos || g_sounds[num].num <= 0)
return;
retry:
if (iter > MAXSOUNDINSTANCES)
{
int32_t j=MAXSOUNDINSTANCES-1;
initprintf(OSD_ERROR "S_StopEnvSound(): too many iterations! The following IDs are still active for sound %d:\n", num);
for (; j>=0; j--)
if (g_sounds[num].SoundOwner[j].i == i)
initprintf("slot %d, voice %d, sprite %d\n", j, g_sounds[num].SoundOwner[j].voice, g_sounds[num].SoundOwner[j].i);
return;
}
{
int32_t j=MAXSOUNDINSTANCES-1;
iter++;
for (; j>=0; j--)
{ {
if (g_sounds[num].SoundOwner[j].i == i) if (i == -1 || g_sounds[num].SoundOwner[j].i == i)
{ {
if (g_sounds[num].SoundOwner[j].voice <= FX_Ok || g_sounds[num].SoundOwner[j].voice > ud.config.NumVoices) if (g_sounds[num].SoundOwner[j].voice <= FX_Ok || g_sounds[num].SoundOwner[j].voice > ud.config.NumVoices)
{
initprintf(OSD_ERROR "S_StopEnvSound(): bad voice %d for sound ID %d index %d!\n", g_sounds[num].SoundOwner[j].voice, num, j); initprintf(OSD_ERROR "S_StopEnvSound(): bad voice %d for sound ID %d index %d!\n", g_sounds[num].SoundOwner[j].voice, num, j);
mutex_lock(&s_mutex); else if (FX_SoundActive(g_sounds[num].SoundOwner[j].voice))
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
S_Cleanup();
goto retry;
}
if (FX_SoundActive(g_sounds[num].SoundOwner[j].voice))
FX_StopSound(g_sounds[num].SoundOwner[j].voice); FX_StopSound(g_sounds[num].SoundOwner[j].voice);
else
{
// FX_SoundActive returning false could mean one of two things: we asked to stop the sound
// right when it was done playing, or we lost track of a voice somewhere (didn't get the callback)
// the first scenario resolves itself, and this addresses the second
mutex_lock(&s_mutex); // FX_SoundActive returning false could mean one of two things: we asked to stop the sound
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j; // right when it was done playing, or we lost track of a voice somewhere (didn't get the callback)
mutex_unlock(&s_mutex); // the first scenario resolves itself, and this addresses the second
}
mutex_lock(&s_mutex);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
S_Cleanup(); S_Cleanup();
goto retry; break;
} }
} }
} }
while (j >= 0);
} }
void S_Update(void) void S_Update(void)