/* * $Header: /HexenWorld/HCode/setstaff.hc 31 4/14/98 1:03p Ssengele $ */ /* ============================================================================== Q:\art\models\weapons\setstaff\newstff\scarabst.hc ============================================================================== */ // For building the model $cd Q:\art\models\weapons\setstaff\newstff $origin 0 0 0 $base BASE skin $skin skin $skin SKIN2 $flags 0 // $frame build1 build2 build3 build4 build5 $frame build6 build7 build8 build9 build10 $frame build11 build12 build13 build14 build15 // $frame chain1 chain2 chain3 chain4 chain5 $frame chain6 chain7 chain8 chain9 // $frame rootpose // $frame scarab1 scarab2 scarab3 scarab4 scarab5 $frame scarab6 scarab7 // $frame select1 select2 select3 select4 select5 $frame select6 select7 select8 select9 select10 $frame select11 select12 void setstaff_decide_attack (void); void setstaff_idle (void); void() DeactivateGhook =//don't worry about the effect--it'll get rid of itself { self.aflag=FALSE; remove(self); }; void PullBack (void) { if(self.enemy!=world) { if(self.enemy.flags2&FL_ALIVE) { if (self.enemy.flags&FL_CLIENT) { if(!(self.enemy.rings&RING_FLIGHT)) self.enemy.movetype=MOVETYPE_WALK; } else { if (!(self.enemy.flags & FL_FLY)) self.enemy.movetype = MOVETYPE_STEP; // self.enemy.movetype = self.enemy.oldmovetype; } } else { self.enemy.movetype=MOVETYPE_BOUNCE; } self.enemy.velocity_z-=100; self.enemy.flags2(-)FL_CHAINED; self.enemy=world; } self.movetype=MOVETYPE_NOCLIP; self.solid=SOLID_NOT; self.velocity=normalize(self.view_ofs-self.origin)*350; self.flags(-)FL_ONGROUND; if(vlen(self.origin-self.view_ofs)<48||self.lifetime 100 ) dir = dir*300; if(self.enemy.flags&FL_ONGROUND) { self.enemy.flags(-)FL_ONGROUND; dir+='0 0 200'; } if(self.enemy.flags&FL_CLIENT) self.enemy.adjust_velocity=(self.enemy.velocity+dir)*0.5; else self.enemy.velocity = (self.enemy.velocity+dir)*0.5; } else self.enemy.velocity='0 0 0'; if(!self.enemy.health||!self.enemy.flags2&FL_ALIVE||!self.enemy.flags2&FL_CHAINED||self.attack_finished150||(other.flags&FL_MONSTER&&other.monsterclass>=CLASS_BOSS)) { self.lockentity=other; scarab_die(); } else { self.touch=SUB_Null; self.velocity='0 0 0'; self.enemy=other; ChainsOfLove(); } } else scarab_die(); //*/ } void scarab_think () { self.frame+=1; if(self.frame>15) self.frame=8; if (self.movechain) { self.movechain.frame=self.frame; } if(self.pain_finished<=time) { HomeThink(); self.angles=vectoangles(self.velocity); self.pain_finished=time+0.1; } if(self.lifetime300) DarkExplosion(); else if(other!=self.nextbolt) { if(other.takedamage) { self.nextbolt=other; makevectors(self.velocity); T_Damage(other,self,self.owner,self.dmg); if(self.dmg<10) { T_Damage(other,self,self.owner,10); DarkExplosion(); } else { //fixme: add to effect // if(other.thingtype==THINGTYPE_FLESH) // { // MeatChunks(self.origin+v_forward*36, self.velocity*0.2+v_right*random(-30,150)+v_up*random(-30,150),5,other); // } ttype = GetImpactType(other); updateeffect(self.xbo_effect_id, CE_HWDRILLA, 0, self.origin, ttype); if(other.classname=="player") T_Damage(other,self,self.owner,(self.dmg+self.frags*10)/3); else T_Damage(other,self,self.owner,self.dmg+self.frags*10); self.frags+=1; self.dmg-=10; } } } } void pincer_think () { if(self.frame<7) self.frame+=1; if(self.pain_finished<=time) { self.pain_finished=time+1; } if(self.lifetime=$build2)&&(self.weaponframe<=$build15)) { stopSound(self,CHAN_UPDATE);//weapon_sound(self, "misc/null.wav"); self.effects(-)EF_UPDATESOUND; self.t_width=SOUND_STOPPED; } makevectors(self.v_angle); self.punchangle_x=power_value*-1; self.effects(+)EF_MUZZLEFLASH; newmis = spawn(); newmis.owner = self; newmis.enemy = world; newmis.nextbolt = world; newmis.classname="pincer"; newmis.movetype=MOVETYPE_FLYMISSILE; newmis.solid=SOLID_PHASE; newmis.thingtype=1; newmis.touch=pincer_touch; newmis.dmg=power_value*17; if(newmis.dmg<33) newmis.dmg=33; newmis.th_die=DarkExplosion; newmis.drawflags=MLS_ABSLIGHT; newmis.abslight=0.5; newmis.scale=2; newmis.speed=750+30*power_value; newmis.movedir=v_forward; newmis.velocity=newmis.movedir*newmis.speed; newmis.angles=vectoangles(newmis.velocity); // setmodel(newmis,"models/scrbstp1.mdl"); setsize(newmis,'0 0 0','0 0 0'); setorigin(newmis,self.origin+self.proj_ofs+v_forward*8); newmis.xbo_effect_id = starteffect(CE_HWDRILLA, newmis.origin, self.v_angle, newmis.speed); self.attack_finished = time + power_value/10 + 0.5; newmis.lifetime=time+7; newmis.think=pincer_think; thinktime newmis : 0; } /* ============================================= WEAPON MODEL CODE ============================================= */ void setstaff_powerfire (void) { self.wfs = advanceweaponframe($scarab1,$scarab7); self.th_weapon = setstaff_powerfire; if (self.weaponframe== $scarab2) { TheOldBallAndChain(); self.greenmana -= 30; self.bluemana -= 30; } if (self.wfs == WF_CYCLE_WRAPPED) setstaff_idle(); } void setstaff_settle2 () { self.effects(-)EF_MUZZLEFLASH; self.wfs = advanceweaponframe($chain1,$chain9); self.th_weapon = setstaff_settle2; if (self.wfs == WF_LAST_FRAME) setstaff_idle(); } void setstaff_settle () { self.wfs = advanceweaponframe($chain1,$chain9); self.th_weapon = setstaff_settle2;//after a frame, turn off light if (self.wfs == WF_LAST_FRAME) setstaff_idle(); } void setstaff_readyfire (void) { if(self.weaponframe>$build15) self.weaponframe=$build1; if(self.weaponframe==$build2) { //weapon_sound(self, "assassin/build.wav"); sound(self, CHAN_UPDATE+PHS_OVERRIDE_R,"assassin/build.wav",1,ATTN_LOOP); self.effects(+)EF_UPDATESOUND; } if (self.weaponframe >= $build1 && self.weaponframe < $build15) { // updateSoundPos(self,CHAN_WEAPON);//FIXME: make this built into client sound code- maybe some sort of flag or field? self.weaponframe_cnt +=1; if (self.weaponframe_cnt > 3) { self.wfs = advanceweaponframe($build1,$build15); self.weaponframe_cnt =0; } else if(self.weaponframe_cnt==1) { if (self.weaponframe == $build1) { self.greenmana-=3; if(self.greenmana<0) self.greenmana=0; self.bluemana-=3; if(self.bluemana<0) self.bluemana=0; } else { if(self.greenmana>=1) self.greenmana-=1; if(self.bluemana>=1) self.bluemana-=1; } } if(self.weaponframe==$build15) self.weaponframe_cnt=time+0.8; } else if(self.weaponframe_cnt=10) self.greenmana-=10; else self.button0=FALSE; if(self.bluemana>=10) self.bluemana-=10; else self.button0=FALSE; } self.th_weapon = setstaff_readyfire; if(!self.button0||self.greenmana<=0||self.bluemana<=0) { self.t_width=FALSE; self.weaponframe_cnt=0; Drilla(14 - ($build15 - self.weaponframe)); setstaff_settle(); } } void() ass_setstaff_fire = { if (self.artifact_active & ART_TOMEOFPOWER) // Pause for firing in power up mode self.th_weapon=setstaff_powerfire; else self.th_weapon=setstaff_readyfire; thinktime self : 0; self.nextthink=time; }; void setstaff_idle (void) { self.effects(-)EF_MUZZLEFLASH; self.weaponframe=$rootpose; self.th_weapon=setstaff_idle; } void setstaff_select (void) { self.wfs = advanceweaponframe($select12,$select1); self.weaponmodel = "models/scarabst.mdl"; self.th_weapon=setstaff_select; self.last_attack=time; if (self.wfs == WF_LAST_FRAME) { self.attack_finished = time - 1; setstaff_idle(); } } void setstaff_deselect (void) { self.effects(-)EF_MUZZLEFLASH; self.wfs = advanceweaponframe($select1,$select12); self.th_weapon=setstaff_deselect; if (self.wfs == WF_LAST_FRAME) W_SetCurrentAmmo(); } void setstaff_decide_attack (void) { self.attack_finished = time + 0.5; }