diff --git a/src/playsim/d_player.h b/src/playsim/d_player.h index 3c649b5dbe..44f72d0025 100644 --- a/src/playsim/d_player.h +++ b/src/playsim/d_player.h @@ -391,7 +391,7 @@ public: float BlendB = 0; float BlendA = 0; - FString SoundClass = "player"; + FString SoundClass = ""; FString LogText; // [RH] Log for Strife FString SubtitleText; int SubtitleCounter; diff --git a/src/playsim/p_acs.cpp b/src/playsim/p_acs.cpp index c67ec1cc5f..fe7eba54fd 100644 --- a/src/playsim/p_acs.cpp +++ b/src/playsim/p_acs.cpp @@ -4313,6 +4313,10 @@ void DLevelScript::DoSetActorProperty (AActor *actor, int property, int value) { if (actor->player != NULL) { + if(!strcmp(Level->Behaviors.LookupString(value), "")) + { + actor->player->SoundClass = ""; + } actor->player->SoundClass = Level->Behaviors.LookupString(value); } } @@ -4416,7 +4420,7 @@ int DLevelScript::GetActorProperty (int tid, int property) case APROP_MaxStepHeight: return DoubleToACS(actor->MaxStepHeight); case APROP_MaxDropOffHeight: return DoubleToACS(actor->MaxDropOffHeight); case APROP_DamageType: return GlobalACSStrings.AddString(actor->DamageType.GetChars()); - case APROP_SoundClass: return GlobalACSStrings.AddString(actor->player->SoundClass.GetChars()); + case APROP_SoundClass: return GlobalACSStrings.AddString(GetSoundClass(actor)); default: return 0; } @@ -4490,7 +4494,7 @@ int DLevelScript::CheckActorProperty (int tid, int property, int value) case APROP_Species: string = actor->GetSpecies().GetChars(); break; case APROP_NameTag: string = actor->GetTag(); break; case APROP_DamageType: string = actor->DamageType.GetChars(); break; - case APROP_SoundClass: string = actor->player->SoundClass; break; + case APROP_SoundClass: string = GetSoundClass(actor); break; } if (string == NULL) string = ""; return (!stricmp(string, Level->Behaviors.LookupString(value))); diff --git a/src/sound/s_advsound.cpp b/src/sound/s_advsound.cpp index 5a9c4be9d7..5699b327b4 100644 --- a/src/sound/s_advsound.cpp +++ b/src/sound/s_advsound.cpp @@ -1608,27 +1608,21 @@ bool S_AreSoundsEquivalent (AActor *actor, int id1, int id2) // //=========================================================================== -static const char *GetSoundClass(AActor *pp) +const char *GetSoundClass(AActor *pp) { auto player = pp->player; - /*I couldn't just init SoundClass to NAME_SoundClass, GZDoom won't launch at all. Probably because that info is not parsed by the time the variable is initialized. - So I just SoundClass to NAME_SoundClass here if NAME_SoundClass is not null and the current SoundClass is player*/ - if (strcmp(pp->player->SoundClass.GetChars(), "player") == 0 && pp->NameVar(NAME_SoundClass) != NAME_None) - pp->player->SoundClass = pp->NameVar(NAME_SoundClass).GetChars(); - - FString sclass = player ? pp->player->SoundClass.GetChars() : "player"; - if (player != nullptr && (player->mo == nullptr || !(player->mo->flags4 &MF4_NOSKIN)) && (unsigned int)player->userinfo.GetSkin() >= PlayerClasses.Size() && (unsigned)player->userinfo.GetSkin() < Skins.Size() && - strcmp(pp->player->SoundClass.GetChars(),sclass) == 0) + player->SoundClass.IsEmpty()) { return Skins[player->userinfo.GetSkin()].Name.GetChars(); } + auto sclass = player->SoundClass.IsEmpty() ? pp->NameVar(NAME_SoundClass).GetChars() : player->SoundClass.GetChars(); - return sclass; + return sclass ? sclass : "player"; } //========================================================================== diff --git a/src/sound/s_sound.h b/src/sound/s_sound.h index c8bcf7ebcb..29b2f7b2bb 100644 --- a/src/sound/s_sound.h +++ b/src/sound/s_sound.h @@ -70,6 +70,7 @@ bool S_AreSoundsEquivalent (AActor *actor, int id1, int id2); bool S_AreSoundsEquivalent (AActor *actor, const char *name1, const char *name2); int S_LookupPlayerSound (const char *playerclass, int gender, const char *logicalname); int S_LookupPlayerSound (const char *playerclass, int gender, FSoundID refid); +const char *GetSoundClass(AActor *pp); int S_FindSkinnedSound (AActor *actor, FSoundID refid); int S_FindSkinnedSoundEx (AActor *actor, const char *logicalname, const char *extendedname); int S_AddSound (const char *logicalname, const char *lumpname, FScanner *sc=NULL); // Add sound by lumpname