// 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();
}
Beispiel #3
0
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();
		}
	}
}