// Game initialization void dodGame::COMINI() { Uint32 ticks1, ticks2; scheduler.SYSTCB(); object.CreateAll(); player.HBEATF = 0; viewer.clearArea(&viewer.TXTSTS); viewer.clearArea(&viewer.TXTPRI); viewer.VXSCAL = 0x80; viewer.VYSCAL = 0x80; viewer.VXSCALf = 128.0f; viewer.VYSCALf = 128.0f; AUTFLG = viewer.ShowFade(Viewer::FADE_BEGIN); //AUTFLG = scheduler.fadeLoop(); //AUTFLG = false; // TAKE THIS LINE OUT !!!!!!!!!! [Prevents demo from starting] player.setInitialObjects(AUTFLG); viewer.displayPrepare(); viewer.display_mode = Viewer::MODE_TITLE; viewer.draw_game(); // Delay with "PREPARE!" on screen ticks1 = SDL_GetTicks(); do { oslink.process_events(); ticks2 = SDL_GetTicks(); } while (ticks2 < ticks1 + viewer.prepPause); creature.NEWLVL(); if (AUTFLG) { // do map viewer.display_mode = Viewer::MODE_TITLE; viewer.showSeerMap = true; --viewer.UPDATE; viewer.draw_game(); // wait 3 seconds ticks1 = SDL_GetTicks(); do { oslink.process_events(); ticks2 = SDL_GetTicks(); } while (ticks2 < ticks1 + 3000); } INIVU(); viewer.PROMPT(); }
void dodGame::Restart() { Uint32 ticks1, ticks2; object.Reset(); creature.Reset(); parser.Reset(); player.Reset(); scheduler.Reset(); viewer.Reset(); hasWon = false; dungeon.VFTPTR = 0; scheduler.SYSTCB(); object.CreateAll(); player.HBEATF = 0; player.setInitialObjects(false); viewer.displayPrepare(); viewer.displayCopyright(); viewer.display_mode = Viewer::MODE_TITLE; viewer.draw_game(); // Delay with "PREPARE!" on screen ticks1 = SDL_GetTicks(); do { oslink.process_events(); ticks2 = SDL_GetTicks(); } while (ticks2 < ticks1 + 2500); creature.NEWLVL(); INIVU(); viewer.PROMPT(); }
int main(int argc, char * argv[]) { //printvls(); //exit(0); printf( "Starting DoD.\n" ); oslink.init(); return 0; }
// Used by wizard fade in/out function bool Scheduler::EscHandler(SDL_keysym * keysym) { bool rc; switch(keysym->sym) { case SDLK_ESCAPE: Mix_HaltChannel(viewer.fadChannel); rc = oslink.main_menu(); // Calls the meta-menu Mix_Volume(viewer.fadChannel, 0); Mix_PlayChannel(viewer.fadChannel, creature.buzz, -1); return (!rc); default: return false; } }
// Used during fainting and intermission bool Scheduler::EscCheck() { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: return ( keyHandler(&event.key.keysym) ); break; case SDL_QUIT: oslink.quitSDL(0); // eventually change to meta-menu break; case SDL_VIDEOEXPOSE: SDL_GL_SwapBuffers(); break; } } return false; }
// This is the heart of the game, literally. It manages // the heartbeat, calls for the screen to be redrawn, and // polls the OS for key strokes. // // This routine is called every 17 milliseconds from the // scheduler, and also from the blocking loops after each // sound, which allows the heartbeat to mix in with the // other sounds. void Scheduler::CLOCK() { // Update Task's next_time TCBLND[0].next_time = curTime + TCBLND[0].frequency; // Update elaplsed time elapsedTime = curTime - TCBLND[0].prev_time; // Reality check if (elapsedTime > 126 * 17) { elapsedTime = 126 * 17; } if (elapsedTime >= 17) { // Update Task's prev_time TCBLND[0].prev_time = curTime; if (player.HBEATF != 0) { player.HEARTC -= (elapsedTime / 17); if ((player.HEARTC & 0x80) != 0) { player.HEARTC = 0; } if (player.HEARTC == 0) { player.HEARTC = player.HEARTR; // make sound Mix_PlayChannel(hrtChannel, hrtSound[(dodBYTE) (player.HEARTS + 1)], 0); while (Mix_Playing(hrtChannel) == 1) ; // !!! if (player.HEARTF != 0) { if ((player.HEARTS & 0x80) != 0) { // small viewer.statArea[15] = '<'; viewer.statArea[16] = '>'; player.HEARTS = 0; } else { // large viewer.statArea[15] = '{'; viewer.statArea[16] = '}'; player.HEARTS = -1; } if (!player.turning) { --viewer.UPDATE; viewer.draw_game(); } } } } } if (player.FAINT == 0) { if (game.AUTFLG) { // Abort demo on keypress if (keyCheck()) { game.hasWon = true; game.demoRestart = false; } } else { // Perform Keyboard Input oslink.process_events(); } } }