/* * $Header: /H3/game/hcode/crossbow.hc 66 9/11/97 12:02p Mgummelt $ */ /* ============================================================================== Q:\art\models\weapons\crossbow\final\crossbow.hc ============================================================================== */ // For building the model $cd Q:\art\models\weapons\crossbow\final $origin 0 0 0 $base base skin $skin skin $flags 0 // $frame select1 select2 select3 select4 select5 $frame select6 select7 select8 select9 select10 $frame select11 select12 select13 select14 select15 // $frame shoot1 shoot2 shoot3 shoot4 shoot5 $frame shoot6 shoot7 shoot8 shoot9 shoot10 $frame shoot11 shoot12 shoot13 shoot14 shoot15 $frame shoot16 shoot17 shoot18 shoot19 void flashspin () { if(self.lifetime9) self.frame=0; } self.angles=vectoangles(self.velocity); self.think=ArrowFlyThink; thinktime self : 0.05; } void ArrowSound (void) { //attn_static instead? // sound(self,CHAN_BODY,"assassin/arrowfly.wav",1,ATTN_NORM); self.think=ArrowFlyThink; thinktime self : 0; } void FlamingArrowThink (void) { float waterornot; waterornot=pointcontents(self.origin); if(waterornot==CONTENT_WATER||waterornot==CONTENT_SLIME) { sound (self, CHAN_WEAPON, "misc/fout.wav", 1, ATTN_NORM); DeathBubbles(1); setmodel(self,"models/NFarrow.mdl"); } ArrowSound(); } void ArrowThink (void) { vector dir; dir=normalize(self.velocity); traceline(self.origin,self.origin+dir*1000,FALSE,self); if(!trace_ent.takedamage) HomeThink(); self.angles=vectoangles(self.velocity); if(self.classname=="bolt") self.think=ArrowSound; else self.think=FlamingArrowThink; thinktime self : 0; } void(float offset, float powered_up) FireCB_Bolt = { local entity missile; makevectors(self.v_angle); missile=spawn(); missile.owner=self; missile.solid=SOLID_BBOX; missile.hull=HULL_POINT; missile.health=3; if(deathmatch) offset*=.333; if(powered_up) { missile.frags=TRUE; missile.thingtype=THINGTYPE_METAL; missile.movetype=MOVETYPE_FLYMISSILE; missile.classname="flaming arrow"; setmodel(missile,"models/flaming.mdl"); missile.dmg=40; missile.drawflags(+)MLS_FIREFLICKER; missile.th_die=MultiExplode; } else { missile.thingtype=THINGTYPE_WOOD; missile.movetype=MOVETYPE_FLYMISSILE; missile.classname="bolt"; setmodel(missile,"models/arrow.mdl"); missile.th_die=chunk_death; } missile.touch=CB_BoltHit; missile.speed=random(700,1200); missile.o_angle=missile.velocity=normalize(v_forward)*missile.speed+v_right*offset; missile.angles=vectoangles(missile.velocity); missile.ideal_yaw=TRUE; missile.turn_time = 0; missile.veer=0; missile.think= ArrowThink; thinktime missile : 0; missile.lifetime=time+0.2; setsize(missile,'0 0 0','0 0 0'); setorigin(missile,self.origin+self.proj_ofs+v_forward*8); }; void()crossbow_fire; void crossbow_idle(void) { self.th_weapon=crossbow_idle; self.weaponframe=$shoot19; } void crossbow_fire (void) { self.wfs = advanceweaponframe($shoot1,$shoot18); self.th_weapon=crossbow_fire; if (self.weaponframe == $shoot2) if(self.artifact_active&ART_TOMEOFPOWER) { sound(self,CHAN_WEAPON,"assassin/firefblt.wav",1,ATTN_NORM); FireCB_Bolt(0,TRUE); FireCB_Bolt(-100,TRUE); FireCB_Bolt(100,TRUE); FireCB_Bolt(-200,TRUE); FireCB_Bolt(200,TRUE); self.attack_finished=time+0.3; self.bluemana-=10; } else { sound(self,CHAN_WEAPON,"assassin/firebolt.wav",1,ATTN_NORM); FireCB_Bolt(0,FALSE); FireCB_Bolt(-100,FALSE); FireCB_Bolt(100,FALSE); self.attack_finished=time+0.5; self.bluemana-=3; } else if (self.wfs==WF_CYCLE_WRAPPED) crossbow_idle(); } void crossbow_select (void) { //selection sound? self.wfs = advanceweaponframe($select15,$select1); self.weaponmodel = "models/crossbow.mdl"; self.th_weapon=crossbow_select; if (self.weaponframe==$select1) { self.attack_finished = time - 1; crossbow_idle(); } } void crossbow_deselect (void) { self.wfs = advanceweaponframe($select1,$select15); self.th_weapon=crossbow_deselect; if (self.wfs==WF_CYCLE_WRAPPED) W_SetCurrentAmmo(); }