Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- xDeath:
- TNT1 A 0
- {
- if(tracer)
- {
- int tempdamage = invoker.msx_damage;
- let trc = msxbaseEnemy(tracer);
- if (trc)
- {
- tempdamage -= max(trc.msx_DT - self.msx_penetration,0);
- if(trc.msx_ShieldPoints)
- {
- nextstate = "hit_shield";
- trc.msx_ShieldPoints = max(0,trc.msx_ShieldPoints-invoker.msx_damage);
- if(trc.msx_ShieldPoints==0)//if this tracer popped the shield off of a monster
- {
- //shield pop effect goes here
- A_SpawnItemEx("shieldpop",tracer.x-self.x,tracer.y-self.y,(tracer.z-self.z)+tracer.height*0.5,0,0,0,180.0+atan2(self.y-tracer.y,self.x-tracer.x),SXF_ABSOLUTEANGLE|SXF_NOCHECKPOSITION|SXF_ABSOLUTEPOSITION|SXF_ISMASTER);
- if(master)
- {
- master.scale.x = max(tracer.radius*0.5,tracer.height*0.5);
- master.scale.y = max(tracer.radius*0.5,tracer.height*0.5);
- double xdist = tracer.x-self.x;
- double ydist = tracer.y-self.y;
- if(tracer)
- {
- master.tracer=self.tracer;
- }
- }
- }
- else
- {
- A_SpawnItemEx("shieldflash",tracer.x-self.x,tracer.y-self.y,(tracer.z-self.z)+tracer.height*0.5,0,0,0,180.0+atan2(self.y-tracer.y,self.x-tracer.x),SXF_ABSOLUTEANGLE|SXF_NOCHECKPOSITION|SXF_ABSOLUTEPOSITION|SXF_ISMASTER);
- if(master)
- {
- master.scale.x = max(tracer.radius*0.5,tracer.height*0.5);
- master.scale.y = max(tracer.radius*0.5,tracer.height*0.5);
- double xdist = tracer.x-self.x;
- double ydist = tracer.y-self.y;
- A_setpitch(-atan2(tracer.z+(tracer.height*0.5)-self.z,sqrt((xdist*xdist)+(ydist*ydist))),0,AAPTR_master);
- if(tracer)
- {
- master.tracer=self.tracer;
- }
- }
- }
- }
- else
- {
- A_damagetracer(tempdamage,msx_damagetype);
- if(msx_fpiercing==true && msx_penetration>=trc.msx_DT)//makes the bullet come out the back of a target if penetrated fully
- {
- nextstate = "pierce_actor";
- bsolid = true;
- double penang = (1.0-(clamp(speed/150.0,0,1.0)))*25.0;
- speed *= 0.8;
- msx_damage *=0.8;
- msx_penetration *=0.8;
- A_SetAngle(angle+(frandom(-penang,penang)));
- A_SetPitch(pitch+(frandom(-penang,penang)));
- A_ChangeVelocity(cos(pitch) * speed,0,sin(pitch) * speed,CVF_Relative|CVF_Replace);
- A_SetPitch(atan2(vel.z,sqrt((vel.x*vel.x) + (vel.y*vel.y))));
- CanCollideWith(tracer,true);
- }
- else
- {
- nextstate = "hit_actor";
- }
- }
- }
- else //non-msx actors
- {
- nextstate = "hit_actor";
- A_damagetracer(tempdamage,msx_damagetype);
- }
- }
- return resolvestate(nextstate);
- }
- stop;
Advertisement
Add Comment
Please, Sign In to add comment