diff --git a/polymer/eduke32/Makefile b/polymer/eduke32/Makefile index 9b9f8e24d..224869d37 100644 --- a/polymer/eduke32/Makefile +++ b/polymer/eduke32/Makefile @@ -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) diff --git a/polymer/eduke32/build/Makefile b/polymer/eduke32/build/Makefile index 6b17df0d3..a563b098a 100644 --- a/polymer/eduke32/build/Makefile +++ b/polymer/eduke32/build/Makefile @@ -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 diff --git a/polymer/eduke32/build/Makefile.shared b/polymer/eduke32/build/Makefile.shared index ad14ca253..bd113348e 100644 --- a/polymer/eduke32/build/Makefile.shared +++ b/polymer/eduke32/build/Makefile.shared @@ -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. diff --git a/polymer/eduke32/build/include/baselayer.h b/polymer/eduke32/build/include/baselayer.h index 18370d7cb..9cec09ebb 100644 --- a/polymer/eduke32/build/include/baselayer.h +++ b/polymer/eduke32/build/include/baselayer.h @@ -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, ...); diff --git a/polymer/eduke32/build/src/baselayer.c b/polymer/eduke32/build/src/baselayer.c index 176d2d531..da7134fae 100644 --- a/polymer/eduke32/build/src/baselayer.c +++ b/polymer/eduke32/build/src/baselayer.c @@ -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 : adjusts gamma ramp",(void *)&vid_gamma, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 }, + { "vid_contrast","vid_contrast : adjusts gamma ramp",(void *)&vid_contrast, CVAR_DOUBLE|CVAR_FUNCPTR, 0, 10 }, + { "vid_brightness","vid_brightness : 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 diff --git a/polymer/eduke32/build/src/build.c b/polymer/eduke32/build/src/build.c index 148fda5bd..fab1df8bf 100644 --- a/polymer/eduke32/build/src/build.c +++ b/polymer/eduke32/build/src/build.c @@ -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 { diff --git a/polymer/eduke32/build/src/config.c b/polymer/eduke32/build/src/config.c index bb6eaeae7..6ac547252 100644 --- a/polymer/eduke32/build/src/config.c +++ b/polymer/eduke32/build/src/config.c @@ -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 diff --git a/polymer/eduke32/build/src/engine.c b/polymer/eduke32/build/src/engine.c index 396374e4a..4cbb26521 100644 --- a/polymer/eduke32/build/src/engine.c +++ b/polymer/eduke32/build/src/engine.c @@ -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 { diff --git a/polymer/eduke32/build/src/osd.c b/polymer/eduke32/build/src/osd.c index 942946f6d..0b33f98af 100644 --- a/polymer/eduke32/build/src/osd.c +++ b/polymer/eduke32/build/src/osd.c @@ -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; diff --git a/polymer/eduke32/build/src/polymer.c b/polymer/eduke32/build/src/polymer.c index cf2476008..444539106 100644 --- a/polymer/eduke32/build/src/polymer.c +++ b/polymer/eduke32/build/src/polymer.c @@ -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++; } } diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c index d66faad6f..ef1a5c9b8 100644 --- a/polymer/eduke32/source/actors.c +++ b/polymer/eduke32/source/actors.c @@ -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; } diff --git a/polymer/eduke32/source/astub.c b/polymer/eduke32/source/astub.c index cde77d551..d98b7049e 100644 --- a/polymer/eduke32/source/astub.c +++ b/polymer/eduke32/source/astub.c @@ -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 : changes brightness", osdcmd_gamma); - OSD_RegisterFunction("initgroupfile","initgroupfile : 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 diff --git a/polymer/eduke32/source/funct.h b/polymer/eduke32/source/funct.h index 4630201c0..52569df2b 100644 --- a/polymer/eduke32/source/funct.h +++ b/polymer/eduke32/source/funct.h @@ -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); diff --git a/polymer/eduke32/source/gamedef.c b/polymer/eduke32/source/gamedef.c index 175489dbf..78a5aeef7 100644 --- a/polymer/eduke32/source/gamedef.c +++ b/polymer/eduke32/source/gamedef.c @@ -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; diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c index b6c09e814..9742c78ef 100644 --- a/polymer/eduke32/source/gameexec.c +++ b/polymer/eduke32/source/gameexec.c @@ -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); diff --git a/polymer/eduke32/source/gamevars.c b/polymer/eduke32/source/gamevars.c index cb2684678..18872dea7 100644 --- a/polymer/eduke32/source/gamevars.c +++ b/polymer/eduke32/source/gamevars.c @@ -380,8 +380,10 @@ void Gv_ResetVars(void) /* this is called during a new game and nowhere else */ for (i=0; iname, "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); diff --git a/polymer/eduke32/source/player.c b/polymer/eduke32/source/player.c index 211612f5c..de92e3156 100644 --- a/polymer/eduke32/source/player.c +++ b/polymer/eduke32/source/player.c @@ -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))< 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); diff --git a/polymer/eduke32/source/sounds.c b/polymer/eduke32/source/sounds.c index 8e6926bba..0053ac567 100644 --- a/polymer/eduke32/source/sounds.c +++ b/polymer/eduke32/source/sounds.c @@ -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)