// --------------------------------------------------------------------------- // 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); } }
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; }
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(); }
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(); }