int DIntermissionScreenCast::Responder (event_t *ev) { if (ev->type != EV_KeyDown) return 0; if (castdeath) return 1; // already in dying frames castdeath = true; if (mClass != NULL) { FName label[] = {NAME_Death, NAME_Cast}; caststate = mClass->ActorInfo->FindState(2, label); if (caststate == NULL) return -1; casttics = caststate->GetTics(); castframes = 0; castattacking = false; if (mClass->IsDescendantOf(RUNTIME_CLASS(APlayerPawn))) { int snd = S_FindSkinnedSound(players[consoleplayer].mo, "*death"); if (snd != 0) S_Sound (CHAN_VOICE | CHAN_UI, snd, 1, ATTN_NONE); } else if (mDefaults->DeathSound) { S_Sound (CHAN_VOICE | CHAN_UI, mDefaults->DeathSound, 1, ATTN_NONE); } } return true; }
bool P_CheckKeys (AActor *owner, int keynum, bool remote) { const char *failtext = NULL; FSoundID *failsound; int numfailsounds; if (owner == NULL) return false; if (keynum<=0 || keynum>255) return true; // Just a safety precaution. The messages should have been initialized upon game start. if (!keysdone) P_InitKeyMessages(); FSoundID failage[2] = { "*keytry", "misc/keytry" }; if (!locks[keynum]) { if (keynum == 103 && (gameinfo.flags & GI_SHAREWARE)) failtext = "$TXT_RETAIL_ONLY"; else failtext = "$TXT_DOES_NOT_WORK"; failsound = failage; numfailsounds = countof(failage); } else { if (locks[keynum]->check(owner)) return true; failtext = remote? locks[keynum]->RemoteMsg : locks[keynum]->Message; failsound = &locks[keynum]->locksound[0]; numfailsounds = locks[keynum]->locksound.Size(); } // If we get here, that means the actor isn't holding an appropriate key. if (owner == players[consoleplayer].camera) { PrintMessage(failtext); // Play the first defined key sound. for (int i = 0; i < numfailsounds; ++i) { if (failsound[i] != 0) { int snd = S_FindSkinnedSound(owner, failsound[i]); if (snd != 0) { S_Sound (owner, CHAN_VOICE, snd, 1, ATTN_NORM); break; } } } } return false; }