//-------------------------------------------------------------------------- // PopupAutoMap() //-------------------------------------------------------------------------- void PopupAutoMap() { #define BASE_X 64 #define BASE_Y 44 ThreeDRefresh(); ThreeDRefresh(); SD_StopSound(); ClearMemory(); CacheDrawPic(BASE_X,BASE_Y,AUTOMAPPIC); ShowStats(BASE_X+101,BASE_Y+22,ss_quick,&gamestuff.level[gamestate.mapon].stats); while (Keyboard[sc_back_quote]) CalcTics(); #if GAME_VERSION != SHAREWARE_VERSION && IN_DEVELOPMENT // if (DebugOk && PP_step) // PicturePause(); #endif IN_StartAck (); while (!IN_CheckAck ()) CalcTics(); CleanDrawPlayBorder(); IN_ClearKeysDown(); }
static bool R_CastZoomer(const Frame *frame, CastIntermissionAction *cast) { // This may appear to animate faster than vanilla, but I'm fairly sure // that's because while the time on screen is adaptive, the frame durations // were decremented by one each frame. TObjPtr<SpriteZoomer> zoomer = new SpriteZoomer(frame, 224); do { for(unsigned int t = tics;zoomer && t-- > 0;) zoomer->Tick(); if(!zoomer) break; if(intermissionMapLoaded) ThreeDRefresh(); else { // Unlike a 3D view, we will overwrite the whole screen here ShowImage(cast, true); DrawCastName(cast); } zoomer->Draw(); VH_UpdateScreen(); IN_ProcessEvents(); if(Keyboard[sc_Space] || Keyboard[sc_Escape] || Keyboard[sc_Enter]) { bool done = Keyboard[sc_Escape] || Keyboard[sc_Enter]; Keyboard[sc_Space] = Keyboard[sc_Escape] = Keyboard[sc_Enter] = false; zoomer->Destroy(); if(done) return true; break; } CalcTics(); } while(true); return false; }
/** * * \name Died() * * Died * This function perfoms the process of animation the character's death and restart the level * if you still have lives. * */ void Died (void) { float fangle; long dx,dy; int iangle,curangle,clockwise,counter,change; /* -1 means the player has no weapon */ gamestate.weapon = -1; // take away weapon /* We need another way to play sounds */ SD_PlaySound (PLAYERDEATHSND); // // swing around to face attacker // /* could be a function for this animation like: died_animation() or died_rotated_animation() */ dx = killerobj->x - player->x; dy = player->y - killerobj->y; fangle = atan2(dy,dx); // returns -pi to pi if (fangle<0) fangle = M_PI*2+fangle; iangle = fangle/(M_PI*2)*ANGLES; if (player->angle > iangle) { counter = player->angle - iangle; clockwise = ANGLES-player->angle + iangle; } else { clockwise = iangle - player->angle; counter = player->angle + ANGLES-iangle; } curangle = player->angle; if (clockwise<counter) { // // rotate clockwise // if (curangle>iangle) curangle -= ANGLES; do { change = tics*DEATHROTATE; if (curangle + change > iangle) change = iangle-curangle; curangle += change; player->angle += change; if (player->angle >= ANGLES) player->angle -= ANGLES; ThreeDRefresh (); CalcTics (); } while (curangle != iangle); } else { // // rotate counterclockwise // if (curangle<iangle) curangle += ANGLES; do { change = -tics*DEATHROTATE; if (curangle + change < iangle) change = iangle-curangle; curangle += change; player->angle += change; if (player->angle < 0) player->angle += ANGLES; ThreeDRefresh (); CalcTics (); } while (curangle != iangle); } /* FINISH of rotation animation */ // // fade to red // FinishPaletteShifts (); bufferofs += screenofs; VW_Bar (0,0,viewwidth,viewheight,4); IN_ClearKeysDown (); FizzleFade(bufferofs,displayofs+screenofs,viewwidth,viewheight,70,false); bufferofs -= screenofs; IN_UserInput(100); SD_WaitSoundDone (); if (tedlevel == false) // SO'S YA DON'T GET KILLED WHILE LAUNCHING! gamestate.lives--; if (gamestate.lives > -1) //if the character has lives, set a new level { gamestate.health = 100; gamestate.weapon = gamestate.bestweapon = gamestate.chosenweapon = wp_pistol; gamestate.ammo = STARTAMMO; gamestate.keys = 0; gamestate.attackframe = gamestate.attackcount = gamestate.weaponframe = 0; /* We need to change those Draw function to Draw3D functions. */ DrawKeys (); DrawWeapon (); DrawAmmo (); DrawHealth (); DrawFace (); DrawLives (); } }
void Died (void) { float fangle; long dx,dy; int iangle,curangle,clockwise,counter,change; gamestate.weapon = (weapontype)-1; // take away weapon SD_PlaySound (PLAYERDEATHSND); // // swing around to face attacker // dx = killerobj->x - player->x; dy = player->y - killerobj->y; fangle = atan2((float)dy,(float)dx); // returns -pi to pi // PORT add float cast if (fangle<0) fangle = M_PI*2+fangle; iangle = fangle/(M_PI*2)*ANGLES; if (player->angle > iangle) { counter = player->angle - iangle; clockwise = ANGLES-player->angle + iangle; } else { clockwise = iangle - player->angle; counter = player->angle + ANGLES-iangle; } curangle = player->angle; if (clockwise<counter) { // // rotate clockwise // if (curangle>iangle) curangle -= ANGLES; do { change = tics*DEATHROTATE; if (curangle + change > iangle) change = iangle-curangle; curangle += change; player->angle += change; if (player->angle >= ANGLES) player->angle -= ANGLES; ThreeDRefresh (); CalcTics (); } while (curangle != iangle); } else { // // rotate counterclockwise // if (curangle<iangle) curangle += ANGLES; do { change = -tics*DEATHROTATE; if (curangle + change < iangle) change = iangle-curangle; curangle += change; player->angle += change; if (player->angle < 0) player->angle += ANGLES; ThreeDRefresh (); CalcTics (); } while (curangle != iangle); } // // fade to red // FinishPaletteShifts (); bufferofs += screenofs; VW_Bar (0,0,viewwidth,viewheight,4); IN_ClearKeysDown (); FizzleFade(bufferofs,displayofs+screenofs,viewwidth,viewheight,70,False); bufferofs -= screenofs; IN_UserInput(100); SD_WaitSoundDone (); if (tedlevel == False) // SO'S YA DON'T GET KILLED WHILE LAUNCHING! gamestate.lives--; if (gamestate.lives > -1) { gamestate.health = 100; gamestate.weapon = gamestate.bestweapon = gamestate.chosenweapon = wp_pistol; gamestate.ammo = STARTAMMO; gamestate.keys = 0; gamestate.attackframe = gamestate.attackcount = gamestate.weaponframe = 0; DrawKeys (); DrawWeapon (); DrawAmmo (); DrawHealth (); DrawFace (); DrawLives (); } }
void PollControls (void) { int max, min, i; byte buttonbits; IN_ProcessEvents(); // // get timing info for last frame // if (demoplayback || demorecord) // demo recording and playback needs to be constant { // wait up to DEMOTICS Wolf tics uint32_t curtime = SDL_GetTicks(); lasttimecount += DEMOTICS; int32_t timediff = (lasttimecount * 100) / 7 - curtime; if(timediff > 0) SDL_Delay(timediff); if(timediff < -2 * DEMOTICS) // more than 2-times DEMOTICS behind? lasttimecount = (curtime * 7) / 100; // yes, set to current timecount tics = DEMOTICS; } else CalcTics (); controlx = 0; controly = 0; memcpy (buttonheld, buttonstate, sizeof (buttonstate)); memset (buttonstate, 0, sizeof (buttonstate)); if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i = 0; i < NUMBUTTONS; i++) { buttonstate[i] = buttonbits & 1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= (int) tics; controly *= (int) tics; return; } // // get button states // PollKeyboardButtons (); if (mouseenabled && IN_IsInputGrabbed()) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); // // get movements // PollKeyboardMove (); if (mouseenabled && IN_IsInputGrabbed()) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100 * tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; if (demorecord) { // // save info out to demo buffer // controlx /= (int) tics; controly /= (int) tics; buttonbits = 0; // TODO: Support 32-bit buttonbits for (i = NUMBUTTONS - 1; i >= 0; i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; if (demoptr >= lastdemoptr - 8) playstate = ex_completed; else { controlx *= (int) tics; controly *= (int) tics; } } }
void PollControls (void) { int max,min,i; byte buttonbits; // // get timing info for last frame // if (demoplayback) { while (TimeCount<lasttimecount+DEMOTICS) ; TimeCount = lasttimecount + DEMOTICS; lasttimecount += DEMOTICS; tics = DEMOTICS; } else if (demorecord) // demo recording and playback needs { // to be constant // // take DEMOTICS or more tics, and modify Timecount to reflect time taken // while (TimeCount<lasttimecount+DEMOTICS) ; TimeCount = lasttimecount + DEMOTICS; lasttimecount += DEMOTICS; tics = DEMOTICS; } else CalcTics (); controlx = 0; controly = 0; memcpy (buttonheld,buttonstate,sizeof(buttonstate)); memset (buttonstate,0,sizeof(buttonstate)); if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i=0;i<NUMBUTTONS;i++) { buttonstate[i] = buttonbits&1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= (int)tics; controly *= (int)tics; return; } // // get button states // PollKeyboardButtons (); if (mouseenabled) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); // // get movements // PollKeyboardMove (); if (mouseenabled) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100*tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; if (demorecord) { // // save info out to demo buffer // controlx /= (int)tics; controly /= (int)tics; buttonbits = 0; for (i=NUMBUTTONS-1;i>=0;i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; if (demoptr >= lastdemoptr) Quit ("Demo buffer overflowed!"); controlx *= (int)tics; controly *= (int)tics; } }
void PollControls (void) { Sint16 max,min,i; Uint8 buttonbits; controlx = 0; controly = 0; memcpy (buttonheld,buttonstate,sizeof(buttonstate)); memset (buttonstate,0,sizeof(buttonstate)); #ifdef MYPROFILE controlx = 100; // just spin in place return; #endif if (demoplayback) { // // read commands from demo buffer // buttonbits = *demoptr++; for (i=0;i<NUMBUTTONS;i++) { buttonstate[i] = buttonbits&1; buttonbits >>= 1; } controlx = *demoptr++; controly = *demoptr++; tics = *demoptr++; while (TimeCount-lasttimecount < tics) ; lasttimecount = TimeCount; if (demoptr == lastdemoptr) playstate = ex_completed; // demo is done controlx *= tics; controly *= tics; return; } // // get timing info for last frame // CalcTics (); // BBi ::in_handle_events(); // // get button states // PollKeyboardButtons (); if (mouseenabled) PollMouseButtons (); if (joystickenabled) PollJoystickButtons (); #if 0 if (buttonstate[bt_run]) VL_ColorBorder (1); else VL_ColorBorder (0); #endif // // get movements // PollKeyboardMove (); if (mouseenabled) PollMouseMove (); if (joystickenabled) PollJoystickMove (); // // bound movement to a maximum // max = 100*tics; min = -max; if (controlx > max) controlx = max; else if (controlx < min) controlx = min; if (controly > max) controly = max; else if (controly < min) controly = min; #ifdef DEMOS_EXTERN if (demorecord) { // // save info out to demo buffer // controlx /= (Sint16)tics; controly /= (Sint16)tics; buttonbits = 0; for (i=NUMBUTTONS-1;i>=0;i--) { buttonbits <<= 1; if (buttonstate[i]) buttonbits |= 1; } *demoptr++ = buttonbits; *demoptr++ = controlx; *demoptr++ = controly; *demoptr++ = tics; if (demoptr >= lastdemoptr) PLAY_ERROR(POLLCONTROLS_DEMO_OV); controlx *= (Sint16)tics; controly *= (Sint16)tics; } #endif }