コード例 #1
0
// ---------------------------------------------------------------------------
// Area smoke
// ---------------------------------------------------------------------------
void eff_complexSmokeSprite()
{
	my->flags = TRANSLUCENT;
	my->skill1 = 50;
	wait(1);
	while(my->alpha < my->skill1)
	{
		vec_diff(&my->pan, &my->x, &camera->x);
		vec_to_angle(&my->pan, &my->pan);
		my->roll = total_ticks;
		my->alpha += 0.2 * time_step;
		wait(1);
	}
	while(my->skill2 >= total_ticks || my->skill2 < 0)
	{
		vec_diff(&my->pan, &my->x, &camera->x);
		vec_to_angle(&my->pan, &my->pan);
		my->roll = total_ticks;
		wait(1);
	}
	while(my->alpha > 0)
	{
		vec_diff(&my->pan, &my->x, &camera->x);
		vec_to_angle(&my->pan, &my->pan);
		my->roll = total_ticks;
		my->alpha -= time_step;
		wait(1);
	}
}
コード例 #2
0
ファイル: credits.c プロジェクト: Acknex/Prince-of-Lotteria
BOOL crLottiUpdate (ENTITY* e)
{
	int m = (int)e->crState;
	BOOL b = true;
	
	switch (m)
	{
		case 0:   set(e, INVISIBLE); m++; break;
		
		case 1:   reset(e, INVISIBLE);
		          e->crSwordAtBelt = (random(100) < 20);
		          zorroMeshOptions(e, false, e->crSwordAtBelt, false);
		          e->material = g_mtlLotti;
		          e->crInit = random(100);
				  e->skill1 = e->pan;
				  
				  if (g_crRow > 1)
					e->crExploder = (random(100) < 20);
				  
				  m++;
				  
		case 2:   if (crLottiUpdateRaise(e)) m++; else break;
		
		case 3:   reset(e, TRANSLUCENT);
		          e->crTime = 64 + random(128);
		          m++;
		
		case 4:   if (crLottiUpdateIdle(e)) m++; else break;
		
		case 5:   zorroMeshOptions(e, false, false, true);
		          e->crTime = 8 + random(32);
		          m++;
		
		case 6:   if (crLottiUpdateAttack(e)) m++; else break;
		
		case 7:   if (e->crExploder)
		             vec_set(e->crAccel, vector(2.5 * (random(1) - 0.5), 2.5 * (random(1) - 0.5), 1 + random(2)));
		          else
		             vec_set(e->crAccel, vector(0.25 * (random(1) - 0.5), 0.25 * (random(1) - 0.5), 1 + random(2)));
					 
				  ent_playsound(e, g_sndJetpackCredits, 6000);
	
		          vec_to_angle(e.pan, e->crAccel);
		          e.tilt -= 90;
		          e->crTime = 10 + random(12);
		          e->crPercent = random(0.2);
				  m++;
				  
		case 8:   if (crLottiUpdateFly(e)) m++; else break;
		
		case 9:   ent_create("explo+13.tga", e->x, explo_sprite); m++; break;
		
		case 10:  ptr_remove(e); b = false; break;
	}
	
	e->crState = m;
	
	return b;
}
コード例 #3
0
ファイル: game.c プロジェクト: Acknex/Wichtelwald
void gameOver() {
	isGameOver = 1;
	endIngameGUI();
	ent_remove(player);
	panGameOver.pos_x = screen_size.x / 2 - bmap_width(bmapGameOver) / 2;
	panGameOver.pos_y = screen_size.y / 2 - bmap_height(bmapGameOver) / 2;
	set(panGameOver, SHOW);
	
	vec_set(vecCamTmp, entHut.x);
	int counter = 1000;
	while(counter > 0) {
		cam_angle +=0.005 * time_step;
		camera.x = cos(cam_angle) * 768;
		camera.y = sin(cam_angle) * 768;
		vec_diff(vecCamTmp.x, nullvector, camera.x);
		vec_to_angle(camera.pan, vecCamTmp);
		counter--;
		wait(1);
	}
	
	reset(panGameOver, SHOW);
	isGameOver = 2;
	//backToMenu();
}
コード例 #4
0
ファイル: endboss.c プロジェクト: Acknex/Prince-of-Lotteria
action ebWarghost ()
{
	g_entEbWarghost = my;
	my->material = g_mtlBossGhost;
	
	lvlLavaSuperReset ();
	
	var deadRotate = 0;
	
	var origScale = my->scale_x;
	var deadScale = origScale;
	
	BOOL isSpining = false;
	
	while (1)
	{
		// pos
		{
			VECTOR vecPos;
			vecPos.x = my->x;
			vecPos.y = 1024;
			vecPos.z = 150;
			
			if (player != NULL)
			{
				vecPos.x = player->x;
				vecPos.z = player->z;
			}
				
			vec_lerp(my->x, my->x, &vecPos, time_step * 0.025);
		}
		
		// ang
		{
			VECTOR vecLookAt, vecLook;
			vec_set(&vecLookAt, my->x);
			
			vecLookAt.y -= 1000;
			
			if (player != NULL)
			{
				vecLookAt.x = player->x;
				vecLookAt.y = player->y;
			}
			
			vec_diff(&vecLook, &vecLookAt, my->x);
			vec_to_angle(my->pan, &vecLook);
			
			if (!isEbWarghostAlive())
			{
				setPlayerControls(false);
				setPlayerPan(my);
				
				deadRotate += 10 * time_step;
				deadScale += 0.3 * time_step;
				
				g_sndEbVol = clamp(g_sndEbVol - g_sndEbVolDec * time_step, 0, 100);
				snd_tune(g_fhLvlLavastageSong, g_sndEbVol, 3, 0);
				
				if (!isSpining)
				{
					snd_play(g_sndBossSpin, 100, 0);
					snd_play(g_sndBossDeadSpeech, 100, 0);
					
					isSpining = true;
				}
			}
			
			my->pan += deadRotate;
			my->scale_x = my->scale_y = my->scale_z = deadScale;
			
			if (my->scale_x / origScale > 3)
				break;
		}
		
		if (g_ebDoHit)
			ent_animate(my, "jump", g_ebDoHitPercent, ANM_CYCLE);
		else
			ent_animate(my, "attack", total_ticks % 100, ANM_CYCLE);
			
		wait(1);
	}
	
	snd_play(g_sndBossSplatter, 100, 0);
	
	VECTOR vecPos, vecDir;
	int i, j, numVerts = ent_status(my, 0);
	
	snd_play(g_sndBossDead, 100, 0);
	
	set(my, INVISIBLE);
	
	for (i = 0; i < numVerts; i++)
	{
		vec_for_vertex(&vecPos, my, i+1);
		
		vec_diff(&vecDir, &vecPos, my->x);
		vec_normalize(&vecDir, 1);
		
		effEbBlood(&vecPos, &vecDir, 25+random(100), false, 1, 4 + random(4));
	}
	
	while (redness < 100)
	{
		redness = clamp(redness + g_rednessInc * time_step, 0, 100);
		
		g_sndEbVol = clamp(g_sndEbVol - g_sndEbVolDec * time_step, 0, 100);
		snd_tune(g_fhLvlLavastageSong, g_sndEbVol, 5, 0);		
		
		wait(1);
	}
	
	wait(-1);
	
	proc_mode = PROC_GLOBAL;
	ptr_remove(my);
	
	creditsInit();
}