// // F_StartFinale // void F_StartFinale (char *music, char *flat, const char *text) { gameaction = ga_nothing; gamestate = GS_FINALE; viewactive = false; // Okay - IWAD dependend stuff. // This has been changed severly, and // some stuff might have changed in the process. // [RH] More flexible now (even more severe changes) // finaleflat, finaletext, and music are now // determined in G_WorldDone() based on data in // a level_info_t and a cluster_info_t. if (*music == 0) S_ChangeMusic (std::string(gameinfo.finaleMusic, 8), !(gameinfo.flags & GI_NOLOOPFINALEMUSIC)); else S_ChangeMusic (std::string(music, 8), !(gameinfo.flags & GI_NOLOOPFINALEMUSIC)); if (*flat == 0) finaleflat = gameinfo.finaleFlat; else finaleflat = flat; if (text) finaletext = text; else finaletext = "Empty message"; finalestage = 0; finalecount = 0; V_SetBlend (0,0,0,0); S_StopAllChannels (); }
void WI_Start (wbstartstruct_t *wbstartstruct) { WI_initVariables (wbstartstruct); WI_loadData (); WI_initStats(); WI_initNetgameStats(); S_StopAllChannels (); SN_StopAllSequences (); }
void WI_Start (wbstartstruct_t *wbstartstruct) { V_SetBlend (0,0,0,0); WI_initVariables (wbstartstruct); WI_loadData (); if (deathmatch) WI_initDeathmatchStats(); else if (multiplayer) WI_initNetgameStats(); else WI_initStats(); S_StopAllChannels (); SN_StopAllSequences (); }
void F_StartIntermission(FIntermissionDescriptor *desc, bool deleteme, BYTE state) { if (DIntermissionController::CurrentIntermission != NULL) { DIntermissionController::CurrentIntermission->Destroy(); } V_SetBlend (0,0,0,0); S_StopAllChannels (); gameaction = ga_nothing; gamestate = GS_FINALE; if (state == FSTATE_InLevel) wipegamestate = GS_FINALE; // don't wipe when within a level. viewactive = false; automapactive = false; DIntermissionController::CurrentIntermission = new DIntermissionController(desc, deleteme, state); GC::WriteBarrier(DIntermissionController::CurrentIntermission); }
void DIntermissionScreenCast::PlayAttackSound() { // sound hacks.... if (caststate != NULL && castattacking) { for (unsigned i = 0; i < mCastSounds.Size(); i++) { if ((!!mCastSounds[i].mSequence) == (basestate != mDefaults->MissileState) && (caststate == basestate + mCastSounds[i].mIndex)) { S_StopAllChannels (); S_Sound (CHAN_WEAPON | CHAN_UI, mCastSounds[i].mSound, 1, ATTN_NONE); return; } } } }
// // F_CastTicker // void F_CastTicker (void) { int st; int atten; if (--casttics > 0) return; // not time to change state yet if (caststate->tics == -1 || caststate->nextstate == S_NULL) { // switch from deathstate to next monster castnum++; castdeath = false; if (castorder[castnum].name == NULL) castnum = 0; if (mobjinfo[castorder[castnum].type].seesound) { atten = ATTN_NONE; S_Sound (CHAN_VOICE, mobjinfo[castorder[castnum].type].seesound, 1, atten); } caststate = &states[mobjinfo[castorder[castnum].type].seestate]; castsprite = caststate->sprite; castframes = 0; } else { const char *sfx; // just advance to next state in animation if (caststate == &states[S_PLAY_ATK1]) goto stopattack; // Oh, gross hack! st = caststate->nextstate; caststate = &states[st]; castframes++; // sound hacks.... switch (st) { case S_PLAY_ATK1: sfx = "weapons/sshotf"; break; case S_POSS_ATK2: sfx = "grunt/attack"; break; case S_SPOS_ATK2: sfx = "shotguy/attack"; break; case S_VILE_ATK2: sfx = "vile/start"; break; case S_SKEL_FIST2: sfx = "skeleton/swing"; break; case S_SKEL_FIST4: sfx = "skeleton/melee"; break; case S_SKEL_MISS2: sfx = "skeleton/attack"; break; case S_FATT_ATK8: case S_FATT_ATK5: case S_FATT_ATK2: sfx = "fatso/attack"; break; case S_CPOS_ATK2: case S_CPOS_ATK3: case S_CPOS_ATK4: sfx = "chainguy/attack"; break; case S_TROO_ATK3: sfx = "imp/attack"; break; case S_SARG_ATK2: sfx = "demon/melee"; break; case S_BOSS_ATK2: case S_BOS2_ATK2: case S_HEAD_ATK2: sfx = "caco/attack"; break; case S_SKULL_ATK2: sfx = "skull/melee"; break; case S_SPID_ATK2: case S_SPID_ATK3: sfx = "spider/attack"; break; case S_BSPI_ATK2: sfx = "baby/attack"; break; case S_CYBER_ATK2: case S_CYBER_ATK4: case S_CYBER_ATK6: sfx = "weapons/rocklf"; break; case S_PAIN_ATK3: sfx = "skull/melee"; break; default: sfx = 0; break; } if (sfx) { S_StopAllChannels (); S_Sound (CHAN_WEAPON, sfx, 1, ATTN_NONE); } } if (castframes == 12) { // go into attack frame castattacking = true; if (castonmelee) caststate=&states[mobjinfo[castorder[castnum].type].meleestate]; else caststate=&states[mobjinfo[castorder[castnum].type].missilestate]; castonmelee ^= 1; if (caststate == &states[S_NULL]) { if (castonmelee) caststate= &states[mobjinfo[castorder[castnum].type].meleestate]; else caststate= &states[mobjinfo[castorder[castnum].type].missilestate]; } } if (castattacking) { if (castframes == 24 || caststate == &states[mobjinfo[castorder[castnum].type].seestate] ) { stopattack: castattacking = false; castframes = 0; caststate = &states[mobjinfo[castorder[castnum].type].seestate]; } } casttics = caststate->tics; if (casttics == -1) casttics = 15; }