first commit

This commit is contained in:
2019-12-30 17:23:05 +01:00
commit 7fe19ee89f
1149 changed files with 271279 additions and 0 deletions

View File

@@ -0,0 +1,241 @@
$frame old1 old2 old3 old4 old5 old6 old7 old8 old9
$frame old10 old11 old12 old13 old14 old15 old16 old17 old18 old19
$frame old20 old21 old22 old23 old24 old25 old26 old27 old28 old29
$frame old30 old31 old32 old33 old34 old35 old36 old37 old38 old39
$frame old40 old41 old42 old43 old44 old45 old46
$frame shake1 shake2 shake3 shake4 shake5 shake6 shake7 shake8
$frame shake9 shake10 shake11 shake12 shake13 shake14
$frame shake15 shake16 shake17 shake18 shake19 shake20 shake21
entity shub;
/*==========
shub_awake
==========*/
void() shub_awake =
{
self.frame = self.frame + 1;
if (self.frame > $old46)
self.frame = $old1;
self.think = shub_awake;
self.nextthink = time + 0.1;
if (time < self.attack_finished)
return;
sound(self, CHAN_VOICE, "boss2/idle.wav", 1, ATTN_IDLE);
self.attack_finished = time + 2 + random() * 2;
};
/*==========
shub_idle
==========*/
void() shub_idle =
{
self.frame = self.frame + 1;
if (self.frame > $old46)
self.frame = $old1;
// look for a player
entity client = checkclient();
if (client)
{
if (visible(client))
{
self.enemy = client;
sound(self, CHAN_BODY, "boss2/sight.wav", 1, ATTN_NONE); // no attenuation
self.attack_finished = time + 3;
self.think = shub_awake;
self.nextthink = time + 0.1;
return;
}
}
self.think = shub_idle;
self.nextthink = time + 0.1;
};
/*==========
shub_finale_3
==========*/
void() shub_finale_3 =
{
// switch cd track
WriteByte (MSG_ALL, SVC_CDTRACK);
WriteByte (MSG_ALL, 3);
WriteByte (MSG_ALL, 3);
// turn lights back on and spawn a load of gibs
lightstyle (0, "m");
sound (self, CHAN_VOICE, "boss2/pop2.wav", 1, ATTN_NONE); // no attenuation
for (float i = 0; i < 20; i++)
{
SpawnGib("progs/gib3.mdl");
SpawnGib("progs/gib4.mdl");
SpawnGib("progs/gib5.mdl");
SpawnGib("progs/blood.mdl");
}
// start the end text
WriteByte (MSG_ALL, SVC_FINALE);
WriteString (MSG_ALL, "Congratulations and well done! You have\nbeaten the hideous Shub-Niggurath, and\nher hundreds of ugly changelings and\nmonsters. You have proven that your\nskill and your cunning are greater than\nall the powers of Quake. You are the\nmaster now. Id Software salutes you.");
// find the intermission spot
entity pos = find (world, classname, "info_intermission");
if (!pos)
error ("no info_intermission");
// put a player model down and face it towards the intermission spot
entity p = spawn();
p.solid = SOLID_NOT;
p.movetype = MOVETYPE_NONE;
setmodel (p, "progs/dplayer.mdl");
makevectors(self.angles);
setorigin (p, self.origin + v_forward * 128);
p.angles_y = vectoyaw(pos.origin - p.origin);
// remove shub
remove (self);
};
void() shub_thrash1 =[ $shake1, shub_thrash2 ] {lightstyle(0, "m");};
void() shub_thrash2 =[ $shake2, shub_thrash3 ] {lightstyle(0, "k");};
void() shub_thrash3 =[ $shake3, shub_thrash4 ] {lightstyle(0, "k");};
void() shub_thrash4 =[ $shake4, shub_thrash5 ] {lightstyle(0, "i");};
void() shub_thrash5 =[ $shake5, shub_thrash6 ] {lightstyle(0, "g");};
void() shub_thrash6 =[ $shake6, shub_thrash7 ] {lightstyle(0, "e");};
void() shub_thrash7 =[ $shake7, shub_thrash8 ] {lightstyle(0, "c");};
void() shub_thrash8 =[ $shake8, shub_thrash9 ] {lightstyle(0, "a");};
void() shub_thrash9 =[ $shake9, shub_thrash10 ] {lightstyle(0, "c");};
void() shub_thrash10 =[ $shake10, shub_thrash11 ] {lightstyle(0, "e");};
void() shub_thrash11 =[ $shake11, shub_thrash12 ] {lightstyle(0, "g");};
void() shub_thrash12 =[ $shake12, shub_thrash13 ] {lightstyle(0, "i");};
void() shub_thrash13 =[ $shake13, shub_thrash14 ] {lightstyle(0, "k");};
void() shub_thrash14 =[ $shake14, shub_thrash15 ] {lightstyle(0, "m");};
void() shub_thrash15 =[ $shake15, shub_thrash16 ]
{
lightstyle(0, "m");
self.count = self.count + 1;
if (self.count < 3)
self.think = shub_thrash1;
};
void() shub_thrash16 =[ $shake16, shub_thrash17 ] {lightstyle(0, "g");};
void() shub_thrash17 =[ $shake17, shub_thrash18 ] {lightstyle(0, "c");};
void() shub_thrash18 =[ $shake18, shub_thrash19 ] {lightstyle(0, "b");};
void() shub_thrash19 =[ $shake19, shub_thrash20 ] {lightstyle(0, "a");};
void() shub_thrash20 =[ $shake20, shub_thrash21 ] {lightstyle(0, "a");};
void() shub_thrash21 =[ $shake21, shub_thrash21 ] {shub_finale_3();};
/*==========
shub_finale_3
==========*/
void() shub_finale_2 =
{
shub.think = shub_thrash1;
sound(shub, CHAN_VOICE, "boss2/death.wav", 1, ATTN_NONE); // no attenuation
remove(self);
};
/*==========
shub_finale_2
==========*/
void() shub_finale_1 =
{
// start a teleport splash inside shub
te_teleport(shub.origin + [0, 0, 192]);
sound(shub, CHAN_VOICE, "misc/r_tele1.wav", 1, ATTN_NONE); // no attenuation
// wait for 2 seconds
self.nextthink = time + 2;
self.think = shub_finale_2;
};
/*==========
shub_die
==========*/
void(entity inflictor, entity attacker) shub_die =
{
// bump the kill counter
killed_monsters = killed_monsters + 1;
WriteByte (MSG_ALL, SVC_KILLEDMONSTER);
// put up the end of level scoreboard
intermission_running = 1;
intermission_exittime = -1;
WriteByte (MSG_ALL, SVC_INTERMISSION);
// find the intermission spot
entity pos = find (world, classname, "info_intermission");
if (!pos)
error("no info_intermission");
// move all players to the intermission spot
entity p = find (world, classname, "player");
while (p != world)
{
p.view_ofs = '0 0 0';
p.angles = other.v_angle = pos.mangle;
p.fixangle = TRUE;
p.think = SUB_Null;
p.nextthink = time + 0.1;
p.takedamage = DAMAGE_NO;
p.solid = SOLID_NOT;
p.movetype = MOVETYPE_NONE;
p.modelindex = 0;
setorigin(p, pos.origin);
p = find(p, classname, "player");
}
// wait for 1 second
entity timer = spawn();
timer.think = shub_finale_1;
timer.nextthink = time + 1;
};
/*==========
shub_pain
==========*/
void (entity attacker, float damage) shub_pain =
{
self.health = 40000;
};
/*QUAKED monster_oldone (1 0 0) (-160 -128 -24) (128 128 256)
{ model ("progs/oldone.mdl"); }
Shub-Niggurath.
*/
void() monster_oldone =
{
if (deathmatch)
{
remove(self);
return;
}
precache_model2 ("progs/oldone.mdl");
precache_model ("progs/dplayer.mdl");
precache_sound2 ("boss2/death.wav");
precache_sound2 ("boss2/idle.wav");
precache_sound2 ("boss2/sight.wav");
precache_sound2 ("boss2/pop2.wav");
self.solid = SOLID_SLIDEBOX;
self.movetype = MOVETYPE_STEP;
setmodel (self, "progs/oldone.mdl");
setsize (self, '-160 -128 -24', '160 128 256');
self.health = 40000; // kill by telefrag
self.takedamage = DAMAGE_YES;
self.th_pain = shub_pain;
self.th_die = shub_die;
shub = self;
total_monsters = total_monsters + 1;
self.think = shub_idle;
self.nextthink = time + 0.1;
};