/* * $Header: /H3/game/hcode/assgren.hc 48 9/03/97 7:30a Mgummelt $ * Grenade Throw, Assassin. */ /* ============================================================================== Q:\art\models\weapons\grenades\final\assgr.hc ============================================================================== */ // For building the model $cd Q:\art\models\weapons\grenades\final $origin 0 0 0 $base BASE skin $skin skin $flags 0 $frame select1 select2 select3 select4 select5 $frame select6 $frame idle $frame throw1 throw2 throw3 throw4 throw5 $frame throw6 throw7 throw8 throw9 throw10 $frame throw11 throw12 void grenade_trail () { if(self.lifetime70) missile.think=SuperGrenadeExplode; else missile.think=DarkExplosion; thinktime missile : random(0.1,0.6); } self.dmg*=2; if(self.classname=="multigrenade") { if(random()<0.3) MonsterQuake(200); MultiExplode(); } else DarkExplosion(); }; void() ThrowMultiGrenade = {//FIXME: too many t_rad's? entity missile; makevectors(self.v_angle); self.greenmana-=12; sound(self,CHAN_WEAPON,"misc/whoosh.wav",1,ATTN_NORM); missile=spawn(); missile.frags=TRUE; missile.owner=self; missile.classname="multigrenade"; missile.movetype=MOVETYPE_BOUNCE; missile.solid=SOLID_BBOX; missile.takedamage=DAMAGE_YES; missile.health=3; missile.th_die=SuperGrenadeExplode; missile.touch=GrenadeTouch2; missile.dmg=250;//simulates max level for now missile.o_angle = self.origin+self.proj_ofs+v_forward*8+v_right*8; missile.speed=500+self.weaponframe_cnt*10; // missile.velocity=(normalize(v_forward)+'0 0 .4')*missile.speed; //UQ method if(self.v_angle_x) missile.velocity = v_forward*missile.speed + v_up * 200 + crandom()*v_right*10 + crandom()*v_up*10; else { missile.velocity = aim(self, missile.o_angle,1000); missile.velocity = missile.velocity * missile.speed; missile.velocity_z = 200; } missile.angles = vectoangles(missile.velocity); missile.avelocity=randomv('-300 -300 -300','300 300 300'); setmodel(missile,"models/assgren.mdl"); missile.scale=2; setsize (missile, '0 0 0', '0 0 0'); setorigin(missile,missile.o_angle); missile.lifetime=time+2; missile.think=grenade_trail; thinktime missile : 0; }; void()grenade_select; void()grenade_throw; void grenade_idle(void) { self.th_weapon=grenade_idle; self.weaponframe=$idle; } void grenade_reload (void) { self.th_weapon=grenade_reload; self.wfs = advanceweaponframe($select1,$select6); self.weaponmodel = "models/v_assgr.mdl"; if (self.wfs==WF_CYCLE_WRAPPED) grenade_idle(); } void grenade_throw (void) { self.th_weapon=grenade_throw; self.wfs = advanceweaponframe($throw1,$throw12); if(self.button0&&self.weaponframe==$throw5) { self.weaponframe=$throw4; if(self.weaponframe_cnt<50) self.weaponframe_cnt+=1; } else if(self.weaponframe==$throw10) { if(self.artifact_active&ART_TOMEOFPOWER) { ThrowMultiGrenade(); self.attack_finished=time + 2; } else { ThrowMiniGrenade(); self.attack_finished=time+0.3; } self.weaponframe_cnt=0; } else if (self.wfs==WF_CYCLE_WRAPPED) grenade_reload(); } void grenade_select (void) { //selection sound? self.th_weapon=grenade_select; self.wfs = advanceweaponframe($select1,$select6); self.weaponmodel = "models/v_assgr.mdl"; if (self.wfs==WF_CYCLE_WRAPPED) { self.attack_finished = time - 1; grenade_idle(); } } void grenade_deselect (void) { //selection sound? self.th_weapon=grenade_deselect; self.wfs = advanceweaponframe($select6,$select1); if (self.wfs==WF_CYCLE_WRAPPED) W_SetCurrentAmmo(); }