// [RH] // ClientObituary: Show a message when a player dies // void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgflags) { FName mod; const char *message; const char *messagename; char gendermessage[1024]; bool friendly; int gender; // No obituaries for non-players, voodoo dolls or when not wanted if (self->player == NULL || self->player->mo != self || !show_obituaries) return; gender = self->player->userinfo.GetGender(); // Treat voodoo dolls as unknown deaths if (inflictor && inflictor->player && inflictor->player->mo != inflictor) MeansOfDeath = NAME_None; if (multiplayer && !deathmatch) FriendlyFire = true; friendly = FriendlyFire; mod = MeansOfDeath; message = NULL; messagename = NULL; if (attacker == NULL || attacker->player != NULL) { if (mod == NAME_Telefrag) { if (AnnounceTelefrag (attacker, self)) return; } else { if (AnnounceKill (attacker, self)) return; } } switch (mod) { case NAME_Suicide: messagename = "OB_SUICIDE"; break; case NAME_Falling: messagename = "OB_FALLING"; break; case NAME_Crush: messagename = "OB_CRUSH"; break; case NAME_Exit: messagename = "OB_EXIT"; break; case NAME_Drowning: messagename = "OB_WATER"; break; case NAME_Slime: messagename = "OB_SLIME"; break; case NAME_Fire: if (attacker == NULL) messagename = "OB_LAVA"; break; } // Check for being killed by a voodoo doll. if (inflictor && inflictor->player && inflictor->player->mo != inflictor) { messagename = "OB_VOODOO"; } if (messagename != NULL) message = GStrings(messagename); if (attacker != NULL && message == NULL) { if (attacker == self) { message = GStrings("OB_KILLEDSELF"); } else if (attacker->player == NULL) { if (mod == NAME_Telefrag) { message = GStrings("OB_MONTELEFRAG"); } else if (mod == NAME_Melee) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_HitObituary); if (message == NULL) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); } } else { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); } } } if (message == NULL && attacker != NULL && attacker->player != NULL) { if (friendly) { attacker->player->fragcount -= 2; attacker->player->frags[attacker->player - players]++; self = attacker; gender = self->player->userinfo.GetGender(); mysnprintf (gendermessage, countof(gendermessage), "OB_FRIENDLY%c", '1' + (pr_obituary() & 3)); message = GStrings(gendermessage); } else { if (mod == NAME_Telefrag) message = GStrings("OB_MPTELEFRAG"); if (message == NULL) { if (inflictor != NULL) { message = inflictor->GetClass()->Meta.GetMetaString (AMETA_Obituary); } if (message == NULL && (dmgflags & DMG_PLAYERATTACK) && attacker->player->ReadyWeapon != NULL) { message = attacker->player->ReadyWeapon->GetClass()->Meta.GetMetaString (AMETA_Obituary); } if (message == NULL) { switch (mod) { case NAME_BFGSplash: messagename = "OB_MPBFG_SPLASH"; break; case NAME_Railgun: messagename = "OB_RAILGUN"; break; } if (messagename != NULL) message = GStrings(messagename); } if (message == NULL) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); } } } } else attacker = self; // for the message creation if (message != NULL && message[0] == '$') { message = GStrings[message+1]; } if (message == NULL) { message = GStrings("OB_DEFAULT"); } // [CK] Don't display empty strings if (message == NULL || strlen(message) <= 0) return; SexMessage (message, gendermessage, gender, self->player->userinfo.GetName(), attacker->player->userinfo.GetName()); Printf (PRINT_MEDIUM, "%s\n", gendermessage); }
// [RH] // ClientObituary: Show a message when a player dies // void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker) { int mod; const char *message; const char *messagename; char gendermessage[1024]; BOOL friendly; int gender; if (self->player == NULL) return; // No obituaries for voodoo dolls if (self->player->mo != self) return; gender = self->player->userinfo.gender; // Treat voodoo dolls as unknown deaths if (inflictor && inflictor->player == self->player) MeansOfDeath = MOD_UNKNOWN; if (multiplayer && !deathmatch) MeansOfDeath |= MOD_FRIENDLY_FIRE; friendly = MeansOfDeath & MOD_FRIENDLY_FIRE; mod = MeansOfDeath & ~MOD_FRIENDLY_FIRE; message = NULL; messagename = NULL; if (attacker == NULL || attacker->player != NULL) { if (mod == MOD_TELEFRAG) { if (AnnounceTelefrag (attacker, self)) return; } else { if (AnnounceKill (attacker, self)) return; } } switch (mod) { case MOD_SUICIDE: messagename = "OB_SUICIDE"; break; case MOD_FALLING: messagename = "OB_FALLING"; break; case MOD_CRUSH: messagename = "OB_CRUSH"; break; case MOD_EXIT: messagename = "OB_EXIT"; break; case MOD_WATER: messagename = "OB_WATER"; break; case MOD_SLIME: messagename = "OB_SLIME"; break; case MOD_FIRE: messagename = "OB_LAVA"; break; case MOD_BARREL: messagename = "OB_BARREL"; break; case MOD_SPLASH: messagename = "OB_SPLASH"; break; } if (messagename != NULL) message = GStrings(messagename); if (attacker != NULL && message == NULL) { if (attacker == self) { switch (mod) { case MOD_R_SPLASH: messagename = "OB_R_SPLASH"; break; case MOD_ROCKET: messagename = "OB_ROCKET"; break; default: messagename = "OB_KILLEDSELF"; break; } message = GStrings(messagename); } else if (attacker->player == NULL) { if (mod == MOD_TELEFRAG) { message = GStrings("OB_MONTELEFRAG"); } else if (mod == MOD_HIT) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_HitObituary); if (message == NULL) { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); if (message == NULL) { message = attacker->GetHitObituary (); } } } else { message = attacker->GetClass()->Meta.GetMetaString (AMETA_Obituary); if (message == NULL) { message = attacker->GetObituary (); } } } } if (message) { SexMessage (message, gendermessage, gender, self->player->userinfo.netname, self->player->userinfo.netname); Printf (PRINT_MEDIUM, "%s\n", gendermessage); return; } if (attacker != NULL && attacker->player != NULL) { if (friendly) { attacker->player->fragcount -= 2; attacker->player->frags[attacker->player - players]++; self = attacker; gender = self->player->userinfo.gender; sprintf (gendermessage, "OB_FRIENDLY%c", '1' + (pr_obituary() & 3)); message = GStrings(gendermessage); } else { if (inflictor != NULL) { message = inflictor->GetClass()->Meta.GetMetaString (AMETA_Obituary); if (message == NULL) { message = inflictor->GetObituary (); } } if (message == NULL) { message = attacker->player->ReadyWeapon->GetClass()->Meta.GetMetaString (AMETA_Obituary); if (message == NULL) { message = attacker->player->ReadyWeapon->GetObituary (); } } if (message == NULL) { switch (mod) { case MOD_R_SPLASH: messagename = "OB_MPR_SPLASH"; break; case MOD_BFG_SPLASH: messagename = "OB_MPBFG_SPLASH"; break; case MOD_TELEFRAG: messagename = "OB_MPTELEFRAG"; break; case MOD_RAILGUN: messagename = "OB_RAILGUN"; break; } if (messagename != NULL) message = GStrings(messagename); } } } if (message) { SexMessage (message, gendermessage, gender, self->player->userinfo.netname, attacker->player->userinfo.netname); Printf (PRINT_MEDIUM, "%s\n", gendermessage); return; } SexMessage (GStrings("OB_DEFAULT"), gendermessage, gender, self->player->userinfo.netname, self->player->userinfo.netname); Printf (PRINT_MEDIUM, "%s\n", gendermessage); }