diff --git a/dumb/CMakeLists.txt b/dumb/CMakeLists.txt index b590aa165..7b303297c 100644 --- a/dumb/CMakeLists.txt +++ b/dumb/CMakeLists.txt @@ -9,6 +9,9 @@ set( CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG -DDEBUGMODE=1" ) if( ZD_CMAKE_COMPILER_IS_GNUC_COMPATIBLE ) set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-pointer-sign -Wno-uninitialized" ) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.5") + set( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable" ) + endif(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.5") endif( ZD_CMAKE_COMPILER_IS_GNUC_COMPATIBLE ) CHECK_FUNCTION_EXISTS( itoa ITOA_EXISTS ) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5a017d6ac..c89b88179 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -299,16 +299,19 @@ if( NO_FMOD ) endif( NO_FMOD ) if( NO_OPENAL ) add_definitions( -DNO_OPENAL=1 ) + + set(MPG123_FOUND NO) + set(SNDFILE_FOUND NO) +else( NO_OPENAL ) + # Search for libSndFile + + find_package( SndFile ) + + # Search for libmpg123 + + find_package( MPG123 ) endif( NO_OPENAL ) -# Search for libSndFile - -find_package( SndFile ) - -# Search for libmpg123 - -find_package( MPG123 ) - # Search for FluidSynth find_package( FluidSynth ) @@ -485,6 +488,11 @@ if( ZD_CMAKE_COMPILER_IS_GNUCXX_COMPATIBLE ) set( CMAKE_CXX_FLAGS_MINSIZEREL "${REL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_MINSIZEREL}" ) set( CMAKE_CXX_FLAGS_RELWITHDEBINFO "${REL_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}" ) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.5") + set( CMAKE_C_FLAGS "-Wno-unused-result ${CMAKE_C_FLAGS}" ) + set( CMAKE_CXX_FLAGS "-Wno-unused-result ${CMAKE_CXX_FLAGS}" ) + endif(NOT CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.5") + set( CMAKE_C_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers ${CMAKE_C_FLAGS}" ) set( CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-unused -Wno-unused-parameter -Wno-missing-field-initializers ${CMAKE_CXX_FLAGS}" ) # Remove extra warnings when using the official DirectX headers. diff --git a/src/actionspecials.h b/src/actionspecials.h index 752ef77eb..d1c72c1ad 100644 --- a/src/actionspecials.h +++ b/src/actionspecials.h @@ -193,7 +193,7 @@ DEFINE_SPECIAL(Transfer_FloorLight, 210, -1, -1, 1) DEFINE_SPECIAL(Transfer_CeilingLight, 211, -1, -1, 1) DEFINE_SPECIAL(Sector_SetColor, 212, 4, 5, 5) DEFINE_SPECIAL(Sector_SetFade, 213, 4, 4, 4) -DEFINE_SPECIAL(Sector_SetDamage, 214, 3, 3, 3) +DEFINE_SPECIAL(Sector_SetDamage, 214, 3, 5, 5) DEFINE_SPECIAL(Teleport_Line, 215, 2, 3, 3) DEFINE_SPECIAL(Sector_SetGravity, 216, 3, 3, 3) DEFINE_SPECIAL(Stairs_BuildUpDoom, 217, 5, 5, 5) diff --git a/src/actor.h b/src/actor.h index c71487ed5..700999b51 100644 --- a/src/actor.h +++ b/src/actor.h @@ -591,31 +591,11 @@ enum struct fixedvec3 { fixed_t x, y, z; - - operator FVector3() - { - return FVector3(FIXED2FLOAT(x), FIXED2FLOAT(y), FIXED2FLOAT(z)); - } - - operator TVector3() - { - return TVector3(FIXED2DBL(x), FIXED2DBL(y), FIXED2DBL(z)); - } }; struct fixedvec2 { fixed_t x, y; - - operator FVector2() - { - return FVector2(FIXED2FLOAT(x), FIXED2FLOAT(y)); - } - - operator TVector2() - { - return TVector2(FIXED2DBL(x), FIXED2DBL(y)); - } }; struct FDropItem diff --git a/src/actorptrselect.cpp b/src/actorptrselect.cpp index 774067550..54c41e6ba 100644 --- a/src/actorptrselect.cpp +++ b/src/actorptrselect.cpp @@ -32,6 +32,8 @@ AActor *COPY_AAPTR(AActor *origin, int selector) { + if (selector == AAPTR_DEFAULT) return origin; + if (origin) { if (origin->player) diff --git a/src/b_func.cpp b/src/b_func.cpp index eb86beba8..3edc560b0 100644 --- a/src/b_func.cpp +++ b/src/b_func.cpp @@ -465,7 +465,8 @@ fixed_t FCajunMaster::FakeFire (AActor *source, AActor *dest, ticcmd_t *cmd) float speed = (float)th->Speed; - TVector3 velocity = source->Vec3To(dest); + fixedvec3 fixvel = source->Vec3To(dest); + TVector3 velocity(fixvel.x, fixvel.y, fixvel.z); velocity.MakeUnit(); th->velx = FLOAT2FIXED(velocity[0] * speed); th->vely = FLOAT2FIXED(velocity[1] * speed); diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index 3cfbf1c65..233c31d29 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -1083,8 +1083,15 @@ CCMD(nextsecret) CCMD(currentpos) { AActor *mo = players[consoleplayer].mo; - Printf("Current player position: (%1.3f,%1.3f,%1.3f), angle: %1.3f, floorheight: %1.3f, sector:%d, lightlevel: %d\n", - FIXED2FLOAT(mo->X()), FIXED2FLOAT(mo->Y()), FIXED2FLOAT(mo->Z()), mo->angle/float(ANGLE_1), FIXED2FLOAT(mo->floorz), mo->Sector->sectornum, mo->Sector->lightlevel); + if(mo) + { + Printf("Current player position: (%1.3f,%1.3f,%1.3f), angle: %1.3f, floorheight: %1.3f, sector:%d, lightlevel: %d\n", + FIXED2FLOAT(mo->X()), FIXED2FLOAT(mo->Y()), FIXED2FLOAT(mo->Z()), mo->angle/float(ANGLE_1), FIXED2FLOAT(mo->floorz), mo->Sector->sectornum, mo->Sector->lightlevel); + } + else + { + Printf("You are not in game!"); + } } //----------------------------------------------------------------------------- diff --git a/src/g_shared/a_camera.cpp b/src/g_shared/a_camera.cpp index 61a155ea7..37457e7f0 100644 --- a/src/g_shared/a_camera.cpp +++ b/src/g_shared/a_camera.cpp @@ -176,8 +176,9 @@ void AAimingCamera::Tick () } if (MaxPitchChange) { // Aim camera's pitch; use floats for precision - TVector2 vect = tracer->Vec2To(this); - double dz = FIXED2DBL(Z() - tracer->Z() - tracer->height/2); + fixedvec2 fv3 = tracer->Vec2To(this); + TVector2 vect(fv3.x, fv3.y); + double dz = Z() - tracer->Z() - tracer->height/2; double dist = vect.Length(); double ang = dist != 0.f ? atan2 (dz, dist) : 0; int desiredpitch = (angle_t)(ang * 2147483648.f / PI); diff --git a/src/g_shared/sbarinfo_commands.cpp b/src/g_shared/sbarinfo_commands.cpp index 2f7739a4f..f91d5841c 100644 --- a/src/g_shared/sbarinfo_commands.cpp +++ b/src/g_shared/sbarinfo_commands.cpp @@ -412,6 +412,21 @@ class CommandDrawSwitchableImage : public CommandDrawImage return compare != value; } } + // Key species are used to allow altnerates for existing key slots. + static FName LookupKeySpecies(int keynum) + { + for(unsigned int i = 0;i < PClass::m_Types.Size();++i) + { + const PClass *cls = PClass::m_Types[i]; + if(cls->IsDescendantOf(RUNTIME_CLASS(AKey))) + { + AKey *key = (AKey *)GetDefaultByType(cls); + if(key->KeyNumber == keynum) + return cls->TypeName; + } + } + return FName(); + } public: CommandDrawSwitchableImage(SBarInfo *script) : CommandDrawImage(script), @@ -442,6 +457,7 @@ class CommandDrawSwitchableImage : public CommandDrawImage condition = KEYSLOT; sc.MustGetToken(TK_IntConst); conditionalValue[0] = sc.Number; + keySpecies[0] = LookupKeySpecies(conditionalValue[0]); } else if(sc.Compare("armortype")) { @@ -468,6 +484,8 @@ class CommandDrawSwitchableImage : public CommandDrawImage { sc.MustGetToken(TK_IntConst); conditionalValue[1] = sc.Number; + if(condition == KEYSLOT) + keySpecies[1] = LookupKeySpecies(conditionalValue[1]); } else if(condition == ARMORTYPE) { @@ -541,11 +559,21 @@ class CommandDrawSwitchableImage : public CommandDrawImage if(item->IsKindOf(RUNTIME_CLASS(AKey))) { int keynum = static_cast(item)->KeyNumber; - - if(keynum == conditionalValue[0]) - found1 = true; - if(conditionAnd && keynum == conditionalValue[1]) // two keys - found2 = true; + if(keynum) + { + if(keynum == conditionalValue[0]) + found1 = true; + if(conditionAnd && keynum == conditionalValue[1]) // two keys + found2 = true; + } + else + { + FName species = item->GetSpecies(); + if(species == keySpecies[0]) + found1 = true; + if(conditionAnd && species == keySpecies[1]) + found2 = true; + } } } @@ -639,6 +667,7 @@ class CommandDrawSwitchableImage : public CommandDrawImage Operator conditionalOperator[2]; FString inventoryItem[2]; int armorType[2]; + FName keySpecies[2]; }; //////////////////////////////////////////////////////////////////////////////// @@ -1595,7 +1624,7 @@ class CommandDrawSelectedInventory : public CommandDrawImage, private CommandDra public: CommandDrawSelectedInventory(SBarInfo *script) : CommandDrawImage(script), CommandDrawNumber(script), alternateOnEmpty(false), - artiflash(false), alwaysShowCounter(false) + artiflash(false), alwaysShowCounter(false), itemflash(false) { length = INT_MAX; // Counter size } diff --git a/src/intermission/intermission.cpp b/src/intermission/intermission.cpp index a19d0a479..44f52485c 100644 --- a/src/intermission/intermission.cpp +++ b/src/intermission/intermission.cpp @@ -722,7 +722,10 @@ DIntermissionController::DIntermissionController(FIntermissionDescriptor *Desc, mScreen = NULL; mFirst = true; mGameState = state; - NextPage(); + + // If the intermission finishes straight away then cancel the wipe. + if(!NextPage()) + wipegamestate = GS_FINALE; } bool DIntermissionController::NextPage () diff --git a/src/menu/optionmenu.cpp b/src/menu/optionmenu.cpp index 57e69cfab..a1d7660bb 100644 --- a/src/menu/optionmenu.cpp +++ b/src/menu/optionmenu.cpp @@ -274,7 +274,14 @@ bool DOptionMenu::MenuEvent (int mkey, bool fromcontroller) mDesc->mSelectedItem = mDesc->mScrollTop + mDesc->mScrollPos + 1; while (!mDesc->mItems[mDesc->mSelectedItem]->Selectable()) { - ++mDesc->mSelectedItem; + if (++mDesc->mSelectedItem >= (int)mDesc->mItems.Size()) + { + mDesc->mSelectedItem = 0; + } + } + if (mDesc->mScrollPos > mDesc->mSelectedItem) + { + mDesc->mScrollPos = mDesc->mSelectedItem; } } } @@ -294,7 +301,14 @@ bool DOptionMenu::MenuEvent (int mkey, bool fromcontroller) mDesc->mSelectedItem = mDesc->mScrollTop + mDesc->mScrollPos; while (!mDesc->mItems[mDesc->mSelectedItem]->Selectable()) { - ++mDesc->mSelectedItem; + if (++mDesc->mSelectedItem >= (int)mDesc->mItems.Size()) + { + mDesc->mSelectedItem = 0; + } + } + if (mDesc->mScrollPos > mDesc->mSelectedItem) + { + mDesc->mScrollPos = mDesc->mSelectedItem; } } } diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 931f3a127..ff968d62f 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -6012,7 +6012,7 @@ doplaysound: if (funcIndex == ACSF_PlayActorSound) startalpha = clamp(startalpha, 0, 0xFF); // Clamp to byte lifetime = clamp(lifetime, 0, 0xFF); // Clamp to byte fadestep = clamp(fadestep, -1, 0xFF); // Clamp to byte inc. -1 (indicating automatic) - size = clamp(size, 0, 0xFF); // Clamp to byte + size = clamp(size, 0, 127); // Clamp to byte if (lifetime != 0) P_SpawnParticle(x, y, z, xvel, yvel, zvel, color, fullbright, startalpha, lifetime, size, fadestep, accelx, accely, accelz); diff --git a/src/p_enemy.cpp b/src/p_enemy.cpp index 90a7a5f5c..0fd23f73e 100644 --- a/src/p_enemy.cpp +++ b/src/p_enemy.cpp @@ -2777,7 +2777,8 @@ void A_Face (AActor *self, AActor *other, angle_t max_turn, angle_t max_pitch, a // disabled and is so by default. if (max_pitch <= ANGLE_180) { - TVector2 dist = self->Vec2To(other); + fixedvec2 pos = self->Vec2To(other); + TVector2 dist(pos.x, pos.y); // Positioning ala missile spawning, 32 units above foot level fixed_t source_z = self->Z() + 32*FRACUNIT + self->GetBobOffset(); @@ -2801,7 +2802,7 @@ void A_Face (AActor *self, AActor *other, angle_t max_turn, angle_t max_pitch, a if (!(flags & FAF_NODISTFACTOR)) target_z += pitch_offset; - double dist_z = FIXED2DBL(target_z - source_z); + double dist_z = target_z - source_z; double ddist = sqrt(dist.X*dist.X + dist.Y*dist.Y + dist_z*dist_z); int other_pitch = (int)rad2bam(asin(dist_z / ddist)); @@ -2915,8 +2916,9 @@ DEFINE_ACTION_FUNCTION(AActor, A_MonsterRail) if (linetarget == NULL) { // We probably won't hit the target, but aim at it anyway so we don't look stupid. - TVector2 xydiff = self->Vec2To(self->target); - double zdiff = FIXED2DBL((self->target->Z() + (self->target->height>>1)) - (self->Z() + (self->height>>1) - self->floorclip)); + fixedvec2 pos = self->Vec2To(self->target); + TVector2 xydiff(pos.x, pos.y); + double zdiff = (self->target->Z() + (self->target->height>>1)) - (self->Z() + (self->height>>1) - self->floorclip); self->pitch = int(atan2(zdiff, xydiff.Length()) * ANGLE_180 / -M_PI); } diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 9f8fbe2ea..67f7d1685 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -2037,7 +2037,7 @@ fixed_t P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly) //dest->x - source->x fixedvec3 vect = mo->Vec3To(origin); vect.z += origin->height / 2; - FVector3 velocity(vect); + TVector3 velocity(vect.x, vect.y, vect.z); velocity.Resize(speed); mo->velx = (fixed_t)(velocity.X); mo->vely = (fixed_t)(velocity.Y); @@ -5733,7 +5733,8 @@ AActor *P_SpawnMissileXYZ (fixed_t x, fixed_t y, fixed_t z, // missile? // Answer: No, because this way, you can set up sets of parallel missiles. - FVector3 velocity = source->Vec3To(dest); + fixedvec3 fixvel = source->Vec3To(dest); + FVector3 velocity(fixvel.x, fixvel.y, fixvel.z); // Floor and ceiling huggers should never have a vertical component to their velocity if (th->flags3 & (MF3_FLOORHUGGER|MF3_CEILINGHUGGER)) { @@ -5742,7 +5743,7 @@ AActor *P_SpawnMissileXYZ (fixed_t x, fixed_t y, fixed_t z, // [RH] Adjust the trajectory if the missile will go over the target's head. else if (z - source->Z() >= dest->height) { - velocity.Z += dest->height - z + source->Z(); + velocity.Z += (dest->height - z + source->Z()); } velocity.Resize (speed); th->velx = (fixed_t)(velocity.X); @@ -5938,7 +5939,7 @@ AActor *P_SpawnPlayerMissile (AActor *source, fixed_t x, fixed_t y, fixed_t z, const PClass *type, angle_t angle, AActor **pLineTarget, AActor **pMissileActor, bool nofreeaim, bool noautoaim) { - static const int angdiff[3] = { -1<<26, 1<<26, 0 }; + static const int angdiff[3] = { -(1<<26), 1<<26, 0 }; angle_t an = angle; angle_t pitch; AActor *linetarget; diff --git a/src/p_pspr.cpp b/src/p_pspr.cpp index 7cdef059c..0ced8f004 100644 --- a/src/p_pspr.cpp +++ b/src/p_pspr.cpp @@ -891,7 +891,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AInventory, A_GunFlash) angle_t P_BulletSlope (AActor *mo, AActor **pLineTarget) { - static const int angdiff[3] = { -1<<26, 1<<26, 0 }; + static const int angdiff[3] = { -(1<<26), 1<<26, 0 }; int i; angle_t an; angle_t pitch; diff --git a/src/p_spec.cpp b/src/p_spec.cpp index 93eb78805..2a7384266 100644 --- a/src/p_spec.cpp +++ b/src/p_spec.cpp @@ -1243,7 +1243,7 @@ void P_InitSectorSpecial(sector_t *sector, int special, bool nothinkers) if (!nothinkers) { new DStrobe(sector, STROBEBRIGHT, FASTDARK, false); - new DScroller(DScroller::sc_floor, (-FRACUNIT / 2) << 3, + new DScroller(DScroller::sc_floor, -((FRACUNIT / 2) << 3), 0, -1, int(sector - sectors), 0); } keepspecial = true; diff --git a/src/p_teleport.cpp b/src/p_teleport.cpp index ab860bfe9..85b668bf0 100644 --- a/src/p_teleport.cpp +++ b/src/p_teleport.cpp @@ -108,7 +108,7 @@ bool P_Teleport (AActor *thing, fixed_t x, fixed_t y, fixed_t z, angle_t angle, sector_t *destsect; bool resetpitch = false; fixed_t floorheight, ceilingheight; - fixed_t missilespeed; + fixed_t missilespeed = 0; old = thing->Pos(); aboveFloor = thing->Z() - thing->floorz; diff --git a/src/p_things.cpp b/src/p_things.cpp index 85d7961af..be28ed98d 100644 --- a/src/p_things.cpp +++ b/src/p_things.cpp @@ -256,7 +256,7 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam { fixedvec3 vect = mobj->Vec3To(targ); vect.z += targ->height / 2; - FVector3 aim = vect; + TVector3 aim(vect.x, vect.y, vect.z); if (leadTarget && speed > 0 && (targ->velx | targ->vely | targ->velz)) { @@ -267,7 +267,7 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam // with the math. I don't think I would have thought of using // trig alone had I been left to solve it by myself. - FVector3 tvel(targ->velx, targ->vely, targ->velz); + TVector3 tvel(targ->velx, targ->vely, targ->velz); if (!(targ->flags & MF_NOGRAVITY) && targ->waterlevel < 3) { // If the target is subject to gravity and not underwater, // assume that it isn't moving vertically. Thanks to gravity, @@ -288,14 +288,14 @@ bool P_Thing_Projectile (int tid, AActor *source, int type, const char *type_nam // Use the cross product of two of the triangle's sides to get a // rotation vector. - FVector3 rv(tvel ^ aim); + TVector3 rv(tvel ^ aim); // The vector must be normalized. rv.MakeUnit(); // Now combine the rotation vector with angle b to get a rotation matrix. - FMatrix3x3 rm(rv, cos(asin(sinb)), sinb); + TMatrix3x3 rm(rv, cos(asin(sinb)), sinb); // And multiply the original aim vector with the matrix to get a // new aim vector that leads the target. - FVector3 aimvec = rm * aim; + TVector3 aimvec = rm * aim; // And make the projectile follow that vector at the desired speed. double aimscale = fspeed / dist; mobj->velx = fixed_t (aimvec[0] * aimscale); diff --git a/src/posix/cocoa/i_joystick.cpp b/src/posix/cocoa/i_joystick.cpp index 9b9487cf6..c4bcc85c3 100644 --- a/src/posix/cocoa/i_joystick.cpp +++ b/src/posix/cocoa/i_joystick.cpp @@ -157,8 +157,9 @@ private: IOHIDElementCookie cookie; int32_t value; - DigitalButton(const IOHIDElementCookie cookie) + explicit DigitalButton(const IOHIDElementCookie cookie) : cookie(cookie) + , value(0) { } }; diff --git a/src/r_data/r_interpolate.cpp b/src/r_data/r_interpolate.cpp index 092af79ce..5f2632737 100644 --- a/src/r_data/r_interpolate.cpp +++ b/src/r_data/r_interpolate.cpp @@ -261,9 +261,12 @@ void FInterpolator::DoInterpolations(fixed_t smoothratio) didInterp = true; - for (DInterpolation *probe = Head; probe != NULL; probe = probe->Next) + DInterpolation *probe = Head; + while (probe != NULL) { + DInterpolation *next = probe->Next; probe->Interpolate(smoothratio); + probe = next; } } diff --git a/src/s_sound.cpp b/src/s_sound.cpp index 2a9703ae4..c05ef1036 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -676,52 +676,55 @@ static void CalcPosVel(int type, const AActor *actor, const sector_t *sector, z = y = x = 0; } - switch (type) + // [BL] Moved this case out of the switch statement to make code easier + // on static analysis. + if(type == SOURCE_Unattached) { - case SOURCE_None: - default: - break; - - case SOURCE_Actor: -// assert(actor != NULL); - if (actor != NULL) - { - x = actor->SoundX(); - y = actor->SoundZ(); - z = actor->SoundY(); - } - break; - - case SOURCE_Sector: - assert(sector != NULL); - if (sector != NULL) - { - if (chanflags & CHAN_AREA) - { - CalcSectorSoundOrg(sector, channum, &x, &z, &y); - } - else - { - x = sector->soundorg[0]; - z = sector->soundorg[1]; - chanflags |= CHAN_LISTENERZ; - } - } - break; - - case SOURCE_Polyobj: - assert(poly != NULL); - CalcPolyobjSoundOrg(poly, &x, &z, &y); - break; - - case SOURCE_Unattached: pos->X = pt[0]; pos->Y = !(chanflags & CHAN_LISTENERZ) ? pt[1] : FIXED2FLOAT(y); pos->Z = pt[2]; - break; } - if (type != SOURCE_Unattached) + else { + switch (type) + { + case SOURCE_None: + default: + break; + + case SOURCE_Actor: + //assert(actor != NULL); + if (actor != NULL) + { + x = actor->SoundX(); + y = actor->SoundZ(); + z = actor->SoundY(); + } + break; + + case SOURCE_Sector: + assert(sector != NULL); + if (sector != NULL) + { + if (chanflags & CHAN_AREA) + { + CalcSectorSoundOrg(sector, channum, &x, &z, &y); + } + else + { + x = sector->soundorg[0]; + z = sector->soundorg[1]; + chanflags |= CHAN_LISTENERZ; + } + } + break; + + case SOURCE_Polyobj: + assert(poly != NULL); + CalcPolyobjSoundOrg(poly, &x, &z, &y); + break; + } + if ((chanflags & CHAN_LISTENERZ) && players[consoleplayer].camera != NULL) { y = players[consoleplayer].camera != NULL ? players[consoleplayer].camera->SoundZ() : 0; diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index f61bd2825..ac1afcf49 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -4060,7 +4060,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetAngle) ACTION_PARAM_INT(ptr, 2); AActor *ref = COPY_AAPTR(self, ptr); - if (ref != NULL) + if (ref == NULL) { ACTION_SET_RESULT(false); return; diff --git a/src/v_font.cpp b/src/v_font.cpp index 5fc2994fb..e30f8352d 100644 --- a/src/v_font.cpp +++ b/src/v_font.cpp @@ -1059,7 +1059,9 @@ void FSingleLumpFont::LoadTranslations() break; default: - break; + // Should be unreachable. + I_Error("Unknown font type in FSingleLumpFont::LoadTranslation."); + return; } for(unsigned int i = 0;i < count;++i) diff --git a/src/wi_stuff.cpp b/src/wi_stuff.cpp index e931b33fd..09861086b 100644 --- a/src/wi_stuff.cpp +++ b/src/wi_stuff.cpp @@ -1096,6 +1096,11 @@ void WI_End () } } +bool WI_autoSkip() +{ + return wi_autoadvance > 0 && bcnt > (wi_autoadvance * TICRATE); +} + void WI_initNoState () { state = NoState; @@ -1114,7 +1119,7 @@ void WI_updateNoState () else { bool noauto = noautostartmap; - bool autoskip = (wi_autoadvance > 0 && bcnt > (wi_autoadvance * TICRATE)); + bool autoskip = WI_autoSkip(); for (int i = 0; !noauto && i < MAXPLAYERS; ++i) { @@ -1254,7 +1259,7 @@ void WI_updateDeathmatchStats () int i; bool stillticking; - bool autoskip = (wi_autoadvance > 0 && bcnt > (wi_autoadvance * TICRATE)); + bool autoskip = WI_autoSkip(); WI_updateAnimatedBack(); @@ -1506,7 +1511,7 @@ void WI_updateNetgameStats () int i; int fsum; bool stillticking; - bool autoskip = (wi_autoadvance > 0 && bcnt > (wi_autoadvance * TICRATE)); + bool autoskip = WI_autoSkip(); WI_updateAnimatedBack ();