diff --git a/src/playsim/actor.h b/src/playsim/actor.h index 3aaca57246..1d82d3d2fd 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -950,6 +950,7 @@ public: bool IsSentient() const; const char *GetTag(const char *def = NULL) const; void SetTag(const char *def); + const char *GetCharacterName() const; // Triggers SECSPAC_Exit/SECSPAC_Enter and related events if oldsec != current sector void CheckSectorTransition(sector_t *oldsec); diff --git a/src/playsim/p_mobj.cpp b/src/playsim/p_mobj.cpp index c889c4e7b6..018b378d67 100644 --- a/src/playsim/p_mobj.cpp +++ b/src/playsim/p_mobj.cpp @@ -7399,6 +7399,19 @@ void AActor::SetTag(const char *def) else Tag = mStringPropertyData.Alloc(def); } +const char *AActor::GetCharacterName() const +{ + if (Conversation && Conversation->SpeakerName.Len() != 0) + { + const char *cname = Conversation->SpeakerName.GetChars(); + if (cname[0] == '$') + { + return GStrings(cname + 1); + } + else return cname; + } + return GetTag(); +} void AActor::ClearCounters() { diff --git a/src/scripting/vmthunks_actors.cpp b/src/scripting/vmthunks_actors.cpp index 16fa24c2fa..656e5bd9f9 100644 --- a/src/scripting/vmthunks_actors.cpp +++ b/src/scripting/vmthunks_actors.cpp @@ -814,6 +814,19 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetTag, GetTag) ACTION_RETURN_STRING(res); } +static void GetCharacterName(AActor *self, FString *result) +{ + *result = self->GetCharacterName(); +} + +DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetCharacterName, GetCharacterName) +{ + PARAM_SELF_PROLOGUE(AActor); + FString res; + GetCharacterName(self, &res); + ACTION_RETURN_STRING(res); +} + static void SetTag(AActor *self, const FString &def) { if (def.IsEmpty()) self->Tag = nullptr; diff --git a/wadsrc/static/zscript/actors/actor.zs b/wadsrc/static/zscript/actors/actor.zs index 45662bdce4..3abfbaabe2 100644 --- a/wadsrc/static/zscript/actors/actor.zs +++ b/wadsrc/static/zscript/actors/actor.zs @@ -619,6 +619,7 @@ class Actor : Thinker native protected native void CheckPortalTransition(bool linked = true); native clearscope string GetTag(string defstr = "") const; + native clearscope string GetCharacterName() const; native void SetTag(string defstr = ""); native clearscope double GetBobOffset(double frac = 0) const; native void ClearCounters();