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))
# Debugging disabled
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL)
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) -fno-stack-protector
LIBS=-lm
else
# Debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS
ifneq (0,$(KRANDDEBUG))
debug+=-fno-inline -fno-inline-functions -fno-inline-functions-called-once
debug+=-DKRANDDEBUG=1
endif
debug=-ggdb -O0 -DDEBUGGINGAIDS -fstack-protector-all
LIBS=-lm -lssp -Wl,--enable-auto-import
ifneq (0,$(KRANDDEBUG))
debug+=-fno-inline -fno-inline-functions -fno-inline-functions-called-once
debug+=-DKRANDDEBUG=1
endif
endif
ifneq (0,$(DEBUGANYWAY))
@ -70,30 +72,12 @@ AS=nasm
RC=windres
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 \
-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 \
-fjump-tables -fno-stack-protector
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
-fjump-tables $(ARCH)
OURCXXFLAGS=-fno-exceptions -fno-rtti
LIBS=-lm
NASMFLAGS = -s
EXESUFFIX=
@ -244,7 +228,7 @@ endif
mapster32$(EXESUFFIX): $(EDITOROBJS) $(EOBJ)/$(EDITORLIB) $(EOBJ)/$(ENGINELIB) $(JAUDIOLIBDIR)/$(JAUDIOLIB) $(ENETDIR)/$(ENETLIB)
$(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 (0,$(DEBUGANYWAY))
$(STRIP) mapster32$(EXESUFFIX)

View file

@ -70,14 +70,16 @@ asm=nasm
# Debugging and release
#
ifneq ($(RELEASE),0)
# Debugging disabled
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL)
# Debugging disabled
debug=-fomit-frame-pointer -funswitch-loops -O$(OPTLEVEL) -fno-stack-protector
LIBS=-lm
else
# Debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS -DNOSDLPARACHUTE
ifneq (0,$(KRANDDEBUG))
debug+=-DKRANDDEBUG=1
endif
# Debugging enabled
debug=-ggdb -O0 -DDEBUGGINGAIDS -DNOSDLPARACHUTE -fstack-protector-all
LIBS=-lm -lssp -Wl,--enable-auto-import
ifneq (0,$(KRANDDEBUG))
debug+=-DKRANDDEBUG=1
endif
endif
ifneq (0,$(DEBUGANYWAY))
@ -91,31 +93,11 @@ RC=windres
AR=ar
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 \
-Wno-char-subscripts -funsigned-char -fno-strict-aliasing -DNO_GCC_BUILTINS \
-DKSFORBUILD -I$(INC) -D_FORTIFY_SOURCE=2 \
-fjump-tables -fno-stack-protector
# -march=pentium3 -mtune=generic -mmmx -m3dnow -msse -mfpmath=sse
-fjump-tables $(ARCH)
OURCXXFLAGS=-fno-exceptions -fno-rtti
LIBS=
ASFLAGS=-s #-g
EXESUFFIX=
@ -171,7 +153,6 @@ EDITOROBJS=$(OBJ)/build.$o \
ifeq ($(PLATFORM),LINUX)
ASFLAGS+= -f elf
LIBS+= -lm
endif
ifeq ($(PLATFORM),DARWIN)
ENGINEOBJS += $(OBJ)/StartupWinController.editor.$o \
@ -183,20 +164,16 @@ endif
ifeq ($(PLATFORM),BSD)
ASFLAGS+= -f elf
OURCFLAGS+= -I/usr/X11R6/include
LIBS+= -lm
endif
ifeq ($(PLATFORM),WINDOWS)
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
endif
ifeq ($(PLATFORM),BEOS)
ASFLAGS+= -f elf
TARGETOPTS+= -DNOASM
endif
ifeq ($(PLATFORM),SUNOS)
LIBS+= -lm
endif
ifeq ($(PLATFORM),SYLLABLE)
ASFLAGS+= -f elf
endif

View file

@ -16,9 +16,16 @@ SDL_FRAMEWORK = 0
# Overridden for OSes that don't have the cutdown stdc++ that is supc++
STDCPPLIB=-lsupc++
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
# the outside world. This allows cross-compilation by overriding
# 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 getpalette(int32_t start, int32_t num, char *dapal);
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_CONTRAST 1.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 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(*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
//
@ -270,25 +272,37 @@ int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
#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"))
{
const char *fmts[] = {"TGA", "PCX"};
if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); }
else
if (r != OSDCMD_OK) return r;
/*
if (!Bstrcasecmp(parm->name, "r_scrcaptureformat"))
{
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;
const char *fmts[] = {"TGA", "PCX"};
if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); }
else
{
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)
@ -300,7 +314,10 @@ int32_t baselayer_init(void)
#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_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
};
@ -310,7 +327,7 @@ int32_t baselayer_init(void)
continue;
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

View file

@ -93,7 +93,6 @@ int32_t forcesetup = 1;
extern int32_t cachesize, artsize;
static int16_t oldmousebstatus = 0;
int16_t brightness = 0;
char game_executable[BMAX_PATH] = DEFAULT_GAME_LOCAL_EXEC;
int32_t zlock = 0x7fffffff, zmode = 0, whitecol, kensplayerheight = 32;
int16_t defaultspritecstat = 0;
@ -287,7 +286,7 @@ static int32_t osdcmd_vidmode(const osdfuncparm_t *parm)
begindrawing(); //{{{
CLEARLINES2D(0, ydim16+STATUS2DSIZ, 0);
CLEARLINES2D(0, ydim16, 0);
ydim16 = ydim;
// 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 (i || forcesetup || cmdsetup)
{
if (quitevent || !startwin_run()) return -1;
if (quitevent || !startwin_run())
{
uninitengine();
exit(0);
}
}
#endif
@ -483,8 +486,10 @@ int32_t app_main(int32_t argc, const char **argv)
if (cursectnum == -1)
{
double gamma = vid_gamma;
vid_gamma = 1.0;
double gamma = vid_gamma, brightness = vid_brightness, contrast = vid_contrast;
vid_gamma = vid_contrast = 1.0;
vid_brightness = 0.0;
setbrightness(0,palette,0);
if (setgamemode(fullscreen, xdim2d, ydim2d, 8) < 0)
{
@ -496,7 +501,10 @@ int32_t app_main(int32_t argc, const char **argv)
overheadeditor();
keystatus[buildkeys[BK_MODE2D_3D]] = 0;
vid_gamma = gamma;
setbrightness(brightness,palette,0);
vid_contrast = contrast;
vid_brightness = brightness;
setbrightness(GAMMA_CALC,palette,0);
}
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);
exit(0);
}
setbrightness(brightness,palette,0);
setbrightness(GAMMA_CALC,palette,0);
}
CANCEL:
quitflag = 0;
@ -1174,16 +1182,23 @@ void editinput(void)
}
}
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);
keystatus[buildkeys[BK_MODE2D_3D]] = 0;
overheadeditor();
keystatus[buildkeys[BK_MODE2D_3D]] = 0;
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;
}
ydim16 = ydim - STATUS2DSIZ2;
ydim16 = ydim;// - STATUS2DSIZ2;
midydim16 = ydim>>1;
tempint = numwalls;
numwalls = newnumwalls;
@ -1447,19 +1463,13 @@ void overheadeditor(void)
if (graphicsmode)
{
int32_t ii = xyaspect;
i = yxaspect;
Bmemset(show2dsector, 255, sizeof(show2dsector));
setview(0, 0, xdim-1, ydim16-1);
yxaspect = xyaspect = 65536;
if (graphicsmode == 2)
totalclocklock = totalclock;
drawmapview(pos.x, pos.y + scale((65536/zoom), ydim, 240), zoom, 1536);
yxaspect = i;
xyaspect = ii;
drawmapview(pos.x, pos.y, zoom, 1536);
}
draw2dgrid(pos.x,pos.y,ang,zoom,grid);
@ -4604,8 +4614,8 @@ CANCEL:
exit(0);
}
setbrightness(brightness,palette,0);
setbrightness(GAMMA_CALC,palette,0);
pos.z = oposz;
searchx = scale(searchx,xdimgame,xdim2d);
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)
{
int32_t listsize = (ydim16-32)/9;
int32_t listsize;
int32_t i;
char ch, buffer[96], /*PK*/ *chptr;
static char oldpath[BMAX_PATH];
@ -5387,6 +5397,7 @@ static int32_t menuselect(void)
enddrawing();
ydim16 = ydim-STATUS2DSIZ2;
listsize = (ydim16-32)/9;
do
{

View file

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

View file

@ -9329,6 +9329,7 @@ int32_t pushmove(vec3_t *vect, int16_t *sectnum,
bad = -1;
k--; if (k <= 0) return(bad);
updatesector(vect->x,vect->y,sectnum);
if (*sectnum < 0) return -1;
}
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));
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))
{
@ -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->func != OSD_ALIAS && symb->func != OSD_UNALIASED)
{
OSD_Printf("OSD_RegisterFunction(): \"%s\" is already defined\n", name);
return -1;
}
*/
Bfree((char *)symb->help);
symb->help = help;
symb->func = func;
@ -1918,9 +1920,9 @@ static symbol_t *addnewsymbol(const char *name)
newsymb->next = t;
}
}
hash_add(&h_osd, name, osdnumsymbols);
hash_replace(&h_osd, name, osdnumsymbols);
name = Bstrtolower(Bstrdup(name));
hash_add(&h_osd, name, osdnumsymbols);
hash_replace(&h_osd, name, osdnumsymbols);
Bfree((void *)name);
osdsymbptrs[osdnumsymbols++] = newsymb;
return newsymb;

View file

@ -4537,14 +4537,12 @@ static int32_t polymer_planeinlight(_prplane* plane, _prlight* light)
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))
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->ceil);
i = 0;
while (i < sec->wallnum)
{
w = prwalls[sec->wallptr + i];
i = sec->wallnum;
if (!w) {
i++;
continue;
}
while (i--)
{
if (!(w = prwalls[sec->wallptr + i])) continue;
polymer_invalidateplanelights(&w->wall);
polymer_invalidateplanelights(&w->over);
polymer_invalidateplanelights(&w->mask);
i++;
}
}

View file

@ -1663,12 +1663,12 @@ ACTOR_STATIC void G_MoveStandables(void)
if (T3 == 8)
{
A_PlaySound(LASERTRIP_EXPLODE,i);
for (j=0; j<5; j++) RANDOMSCRAP;
x = s->extra;
A_RadiusDamage(i, g_tripbombBlastRadius, x>>2,x>>1,x-(x>>2),x);
j = A_Spawn(i,EXPLOSION2);
A_PlaySound(LASERTRIP_EXPLODE,j);
sprite[j].ang = s->ang;
sprite[j].xvel = 348;
A_SetSprite(j,CLIPMASK0);
@ -1838,9 +1838,9 @@ ACTOR_STATIC void G_MoveStandables(void)
sprite[j].pal = 2;
}
A_Spawn(i,EXPLOSION2);
A_PlaySound(PIPEBOMB_EXPLODE,i);
A_PlaySound(GLASS_HEAVYBREAK,i);
j = A_Spawn(i,EXPLOSION2);
A_PlaySound(PIPEBOMB_EXPLODE,j);
A_PlaySound(GLASS_HEAVYBREAK,j);
if (s->hitag > 0)
{
@ -1854,9 +1854,9 @@ ACTOR_STATIC void G_MoveStandables(void)
}
x = s->extra;
A_Spawn(i,EXPLOSION2);
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;
}
@ -1958,17 +1958,17 @@ DETONATE:
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)
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);
}
}
@ -3027,6 +3027,7 @@ ACTOR_STATIC void G_MoveWeapons(void)
if (s->picnum == RPG)
{
k = A_Spawn(i,EXPLOSION2);
A_PlaySound(RPG_EXPLODE,k);
Bmemcpy(&sprite[k],&davect,sizeof(vec3_t));
if (s->xrepeat < 10)
@ -3045,7 +3046,6 @@ ACTOR_STATIC void G_MoveWeapons(void)
}
}
A_PlaySound(RPG_EXPLODE,i);
if (s->xrepeat >= 10)
{
@ -3788,7 +3788,8 @@ ACTOR_STATIC void G_MoveActors(void)
{
for (l=0; l<16; l++)
RANDOMSCRAP;
A_PlaySound(LASERTRIP_EXPLODE,i);
j = A_Spawn(i,EXPLOSION2);
A_PlaySound(LASERTRIP_EXPLODE,j);
A_Spawn(i,PIGCOP);
g_player[myconnectindex].ps->actors_killed++;
KILLIT(i);
@ -4503,6 +4504,8 @@ DETONATEB:
if (t[2] == 2)
{
int32_t j;
x = s->extra;
m = 0;
switch (DynamicTileMap[s->picnum])
@ -4519,10 +4522,10 @@ DETONATEB:
}
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)
A_Spawn(i,EXPLOSION2BOT);
A_PlaySound(PIPEBOMB_EXPLODE,i);
for (x=0; x<8; x++)
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_sndnum[MAXSOUNDS]; // maps current order index to g_sounds index
int32_t g_numsounds = 0;
static int32_t lastupdate, mousecol, mouseadd = 1, bstatus;
#if !defined(_WIN32)
static int32_t usecwd = 0;
@ -2536,10 +2536,6 @@ static void ReadGamePalette()
ReadPaletteTable();
}
static char lockbyte4094;
static int32_t lastupdate, mousecol, mouseadd = 1, bstatus;
static void m32_showmouse(void)
{
int32_t i, col;
@ -3923,7 +3919,7 @@ ERROR_NOMEMORY:
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 hihit, lohit;
char smooshyalign=0, repeatpanalign=0; //, buffer[80];
@ -3932,23 +3928,6 @@ static void Keys3d(void)
/* 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)
{
M32_MoveFX();
@ -5847,7 +5826,7 @@ static void Keys3d(void)
if (PRESSED_KEYSC(F11)) //F11 - brightness
{
extern int16_t brightness;
static int16_t brightness;
brightness = brightness + (1-2*eitherSHIFT);
brightness &= 15;
@ -7291,21 +7270,6 @@ static int32_t osdcmd_sensitivity(const osdfuncparm_t *parm)
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)
{
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("gamma","gamma <value>: changes brightness", osdcmd_gamma);
OSD_RegisterFunction("initgroupfile","initgroupfile <path>: adds a grp file into the game filesystem", osdcmd_initgroupfile);
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 (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;
}
begindrawing();
@ -9475,12 +9425,9 @@ void ExtCheckKeys(void)
if (qsetmode == 200) //In 3D mode
{
Keys3d();
if (sidemode != 1)
{
editinput();
if (infobox&2)
m32_showmouse();
}
editinput();
if (infobox&2)
m32_showmouse();
}
else Keys2d();
@ -9524,7 +9471,7 @@ void faketimerhandler(void)
// if (counter>=5) counter=0;
sampletimer();
if (totalclock < ototalclock+TICSPERFRAME || qsetmode != 200 || sidemode != 1)
if (totalclock < ototalclock+TICSPERFRAME || qsetmode != 200)
return;
ototalclock = totalclock;
@ -9588,34 +9535,32 @@ void faketimerhandler(void)
if (horiz > 100) horiz--;
}
extern int16_t brightness;
void SetBOSS1Palette(void)
{
if (acurpalette==3) return;
acurpalette=3;
setbrightness(brightness,BOSS1palette,0);
setbrightness(GAMMA_CALC,BOSS1palette,0);
}
void SetSLIMEPalette(void)
{
if (acurpalette==2) return;
acurpalette=2;
setbrightness(brightness,SLIMEpalette,0);
setbrightness(GAMMA_CALC,SLIMEpalette,0);
}
void SetWATERPalette(void)
{
if (acurpalette==1) return;
acurpalette=1;
setbrightness(brightness,WATERpalette,0);
setbrightness(GAMMA_CALC,WATERpalette,0);
}
void SetGAMEPalette(void)
{
if (acurpalette==0) return;
acurpalette=0;
setbrightness(brightness,GAMEpalette,0);
setbrightness(GAMMA_CALC,GAMEpalette,0);
}
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_PlaySound(int32_t num);
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);
#define S_StopSound(num) S_StopEnvSound(num, -1)
extern void S_Update(void);
extern void S_Cleanup(void);
extern void S_Callback(uint32_t num);

View file

@ -1191,6 +1191,7 @@ static int32_t C_SkipComments(void)
case ' ':
case '\t':
case '\r':
case 0x1a:
textptr++;
break;
case '/':
@ -1200,7 +1201,7 @@ static int32_t C_SkipComments(void)
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
initprintf("%s:%d: debug: got comment.\n",g_szScriptFileName,g_lineNumber);
C_NextLine();
break;
continue;
case '*': // beginning of a C style comment
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
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);
g_parsingActorPtr = 0;g_processingState = g_numBraces = 0;
g_numCompilerErrors++;
break;
continue;
}
if (!(g_numCompilerErrors || g_numCompilerWarnings) && g_scriptDebug > 1)
initprintf("%s:%d: debug: got end of comment block.\n",g_szScriptFileName,g_lineNumber);
textptr+=2;
break;
continue;
}
break;
continue;
default:
if (ispecial(*textptr))
{
textptr++;
break;
continue;
}
case 0: // EOF
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)
{
OSD_Printf(CON_ERROR "null music for map %d\n",g_errorLineNum,keyw[g_tw],g_musicIndex);
insptr++;
continue;
}
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++)
{
if (aGameVars[i].szLabel != NULL && aGameVars[i].dwFlags & GAMEVAR_RESET)
Gv_NewVar(aGameVars[i].szLabel,aGameVars[i].lDefault,aGameVars[i].dwFlags);
if (aGameVars[i].szLabel != NULL)
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++)

View file

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

View file

@ -93,7 +93,7 @@ int32_t mousxplc, mousyplc;
static int32_t ppointhighlight;
//static int32_t counter=0;
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;
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"))
{
ud.brightness = (int32_t)(min(max((float)((vid_gamma-1.0)*10.0),0),15));
ud.brightness = GAMMA_CALC;
ud.brightness <<= 2;
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)
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;
if (jump_timer > 0)
@ -3236,6 +3233,9 @@ void getinput(int32_t snum)
if (BUTTON(gamefunc_Dpad_Aiming))
vel = 0;
if (aplWeaponFlags[g_player[snum].ps->curr_weapon][snum] & WEAPON_SEMIAUTO && BUTTON(gamefunc_Fire))
CONTROL_ClearButton(gamefunc_Fire);
loc.extbits = 0;
// if (apScriptGameEvent[EVENT_PROCESSINPUT] || apScriptGameEvent[EVENT_MOVEFORWARD])
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 i;
num = (num - j) / MAXSOUNDINSTANCES;
i = g_sounds[num].SoundOwner[j].i;
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);
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--;
}
// 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]--;
}
@ -547,22 +548,22 @@ int32_t S_PlaySound3D(int32_t num, int32_t i, const vec3_t *pos)
(num * MAXSOUNDINSTANCES) + j);
}
if (voice > FX_Ok)
if (voice <= FX_Ok)
{
g_sounds[num].SoundOwner[j].i = i;
g_sounds[num].num++;
g_sounds[num].SoundOwner[j].voice = voice;
return voice;
g_soundlocks[num]--;
return -1;
}
g_soundlocks[num]--;
return -1;
g_sounds[num].num++;
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 pitch,cx;
int32_t voice;
int32_t pitch, cx;
int32_t voice, j;
if (ud.config.FXDevice < 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]++;
}
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) ?
FX_PlayLoopedAuto(g_sounds[num].ptr, g_sounds[num].soundsiz, 0, -1,
pitch,LOUDESTVOLUME,LOUDESTVOLUME,LOUDESTVOLUME,g_sounds[num].soundsiz, 65536 + num) :
@ -602,6 +614,9 @@ int32_t S_PlaySound(int32_t num)
return -1;
}
g_sounds[num].num++;
g_sounds[num].SoundOwner[j].i = -1;
g_sounds[num].SoundOwner[j].voice = 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]);
}
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)
return;
retry:
if (iter > MAXSOUNDINSTANCES)
do
{
int32_t j=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 (iter++ > MAXSOUNDINSTANCES<<1)
{
if (g_sounds[num].SoundOwner[j].voice)
{
if (g_sounds[num].SoundOwner[j].voice <= FX_Ok || g_sounds[num].SoundOwner[j].voice > ud.config.NumVoices)
{
initprintf(OSD_ERROR "S_StopSound(): bad voice %d for sound ID %d index %d!\n", g_sounds[num].SoundOwner[j].voice, num, j);
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;
}
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].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);
return;
}
}
}
void S_StopEnvSound(int32_t num,int32_t i)
{
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--)
for (j=MAXSOUNDINSTANCES-1; 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)
{
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);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
S_Cleanup();
goto retry;
}
if (FX_SoundActive(g_sounds[num].SoundOwner[j].voice))
else if (FX_SoundActive(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);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
}
// 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);
dq[dnum++] = (num * MAXSOUNDINSTANCES) + j;
mutex_unlock(&s_mutex);
S_Cleanup();
goto retry;
break;
}
}
}
while (j >= 0);
}
void S_Update(void)