diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 04ee1c536..aef713382 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,13 @@ +October 13, 2008 +- Fixed: SDL builds did not shutdown the sound system at exit. +- Fixed: ThingCountSector and ThingCountNameSector did not remove enough + entries from the stack, and did not put the result in the right slot. +- Fixed: Teleport lines were prioritized over secret lines when deciding what + color to draw them on the automap. +- Fixed: Death-reverting morphs did not remove the morph item from the + player's inventory when death caused the morph to revert. +- Updated fmod_wrap.h for FMOD Ex 4.18. + October 7, 2008 (Changes by Graf Zahl) - Fixed: Cheats in demos must not access the weapon slots. - Fixed: S_ChannelEnded didn't check for a NULL SfxInfo. diff --git a/src/am_map.cpp b/src/am_map.cpp index 2476d93a6..a537fc5dd 100644 --- a/src/am_map.cpp +++ b/src/am_map.cpp @@ -1383,7 +1383,14 @@ void AM_drawWalls (bool allmap) } else { - if ((lines[i].special == Teleport || + if (lines[i].flags & ML_SECRET) + { // secret door + if (am_cheat != 0) + AM_drawMline(&l, SecretWallColor); + else + AM_drawMline(&l, WallColor); + } + else if ((lines[i].special == Teleport || lines[i].special == Teleport_NoFog || lines[i].special == Teleport_ZombieChanger || lines[i].special == Teleport_Line) && @@ -1400,13 +1407,6 @@ void AM_drawWalls (bool allmap) { // inter-level/game-ending teleporters AM_drawMline(&l, InterTeleportColor); } - else if (lines[i].flags & ML_SECRET) - { // secret door - if (am_cheat != 0) - AM_drawMline(&l, SecretWallColor); - else - AM_drawMline(&l, WallColor); - } else if (lines[i].special == Door_LockedRaise || lines[i].special == ACS_LockedExecute || lines[i].special == ACS_LockedExecuteDoor || diff --git a/src/g_shared/a_morph.cpp b/src/g_shared/a_morph.cpp index 825fed500..e5912c6f4 100644 --- a/src/g_shared/a_morph.cpp +++ b/src/g_shared/a_morph.cpp @@ -211,6 +211,15 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, bool force) mo->ObtainInventory (pmo); DObject::StaticPointerSubstitution (pmo, mo); + // Remove the morph power if the morph is being undone prematurely. + for (AInventory *item = mo->Inventory, *next = NULL; item != NULL; item = next) + { + next = item->Inventory; + if (item->IsKindOf(RUNTIME_CLASS(APowerMorph))) + { + item->Destroy(); + } + } if ((pmo->tid != 0) && (player->MorphStyle & MORPH_NEWTIDBEHAVIOUR)) { mo->tid = pmo->tid; diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 9949f7a4b..9dc01b3d4 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -3665,13 +3665,13 @@ int DLevelScript::RunScript () break; case PCD_THINGCOUNTNAMESECTOR: - STACK(2) = ThingCount (-1, STACK(3), STACK(2), STACK(1)); - sp--; + STACK(3) = ThingCount (-1, STACK(3), STACK(2), STACK(1)); + sp -= 2; break; case PCD_THINGCOUNTSECTOR: - STACK(2) = ThingCount (STACK(3), -1, STACK(2), STACK(1)); - sp--; + STACK(3) = ThingCount (STACK(3), -1, STACK(2), STACK(1)); + sp -= 2; break; case PCD_TAGWAIT: diff --git a/src/sdl/i_system.cpp b/src/sdl/i_system.cpp index 78318b10b..058664cbd 100644 --- a/src/sdl/i_system.cpp +++ b/src/sdl/i_system.cpp @@ -184,6 +184,7 @@ void I_Init (void) I_GetTime = I_GetTimePolled; I_WaitForTic = I_WaitForTicPolled; + atterm (I_ShutdownSound); I_InitSound (); } diff --git a/src/sound/fmod_wrap.h b/src/sound/fmod_wrap.h index 1c9c2d297..d80aabc19 100644 --- a/src/sound/fmod_wrap.h +++ b/src/sound/fmod_wrap.h @@ -97,13 +97,14 @@ namespace FMOD // Plug-in support FMOD_RESULT setPluginPath (const char *path) { return FMOD_System_SetPluginPath(this, path); } - FMOD_RESULT loadPlugin (const char *filename, FMOD_PLUGINTYPE *plugintype, int *index) { return FMOD_System_LoadPlugin(this, filename, plugintype, index); } + FMOD_RESULT loadPlugin (const char *filename, unsigned int *handle, unsigned int priority = 0) { return FMOD_System_LoadPlugin(this, filename, handle, priority); } + FMOD_RESULT unloadPlugin (unsigned int handle) { return FMOD_System_UnloadPlugin(this, handle); } FMOD_RESULT getNumPlugins (FMOD_PLUGINTYPE plugintype, int *numplugins) { return FMOD_System_GetNumPlugins(this, plugintype, numplugins); } - FMOD_RESULT getPluginInfo (FMOD_PLUGINTYPE plugintype, int index, char *name, int namelen, unsigned int *version) { return FMOD_System_GetPluginInfo(this, plugintype, index, name, namelen, version); } - FMOD_RESULT unloadPlugin (FMOD_PLUGINTYPE plugintype, int index) { return FMOD_System_UnloadPlugin(this, plugintype, index); } - FMOD_RESULT setOutputByPlugin (int index) { return FMOD_System_SetOutputByPlugin(this, index); } - FMOD_RESULT getOutputByPlugin (int *index) { return FMOD_System_GetOutputByPlugin(this, index); } - FMOD_RESULT createCodec (FMOD_CODEC_DESCRIPTION *description) { return FMOD_System_CreateCodec(this, description); } + FMOD_RESULT getPluginHandle (FMOD_PLUGINTYPE plugintype, int index, unsigned int *handle) { return FMOD_System_GetPluginHandle(this, plugintype, index, handle); } + FMOD_RESULT getPluginInfo (unsigned int handle, FMOD_PLUGINTYPE *plugintype, char *name, int namelen, unsigned int *version) { return FMOD_System_GetPluginInfo(this, handle, plugintype, name, namelen, version); } + FMOD_RESULT setOutputByPlugin (unsigned int handle) { return FMOD_System_SetOutputByPlugin(this, handle); } + FMOD_RESULT getOutputByPlugin (unsigned int handle) { return FMOD_System_GetOutputByPlugin(this, handle); } + FMOD_RESULT createCodec (FMOD_CODEC_DESCRIPTION *description, unsigned int priority = 0) { return FMOD_System_CreateCodec(this, description, priority); } // Init/Close FMOD_RESULT init (int maxchannels, FMOD_INITFLAGS flags, void *extradriverdata) { return FMOD_System_Init(this, maxchannels, flags, extradriverdata); } @@ -142,7 +143,6 @@ namespace FMOD FMOD_RESULT createStream (const char *name_or_data, FMOD_MODE mode, FMOD_CREATESOUNDEXINFO *exinfo, Sound **sound) { return FMOD_System_CreateStream(this, name_or_data, mode, exinfo, (FMOD_SOUND **)sound); } FMOD_RESULT createDSP (FMOD_DSP_DESCRIPTION *description, DSP **dsp) { return FMOD_System_CreateDSP(this, description, (FMOD_DSP **)dsp); } FMOD_RESULT createDSPByType (FMOD_DSP_TYPE type, DSP **dsp) { return FMOD_System_CreateDSPByType(this, type, (FMOD_DSP **)dsp); } - FMOD_RESULT createDSPByIndex (int index, DSP **dsp) { return FMOD_System_CreateDSPByIndex(this, index, (FMOD_DSP **)dsp); } FMOD_RESULT createChannelGroup (const char *name, ChannelGroup **channelgroup) { return FMOD_System_CreateChannelGroup(this, name, (FMOD_CHANNELGROUP **)channelgroup); } FMOD_RESULT createSoundGroup (const char *name, SoundGroup **soundgroup) { return FMOD_System_CreateSoundGroup(this, name, (FMOD_SOUNDGROUP **)soundgroup); } FMOD_RESULT createReverb (Reverb **reverb) { return FMOD_System_CreateReverb(this, (FMOD_REVERB **)reverb); }