home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Games Machine 76
/
XENIATGM66.iso
/
Messiah
/
data1.cab
/
Program_Executable_Files
/
messiahscripts
/
Enemies
/
droids.hxx
< prev
next >
Wrap
Text File
|
1999-11-29
|
56KB
|
2,486 lines
/*
Actors:
MDroid1
MDroid2
ForkLift
AutoCannon
*/
/////////////////////////////
/////////////////////////////
/////////////////////////////
/////////////////////////////
/////////////////////////////
/////////////////////////////
SubRoutine(MoveDroidRoutine)
{
if(vtrigger==_DIRforward)
{
move(0,0,-7);
}
if(vtrigger==_DIRbackward)
{
move(0,0,5);
}
if(vtrigger==_DIRleft)
{
turn(0,-20,0);
}
if(vtrigger==_DIRright)
{
turn(0,20,0);
}
}
Actor(PossesionBot)
{
file(PossesionBotHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
float(_declare,Counter,0);
call(AIcheckforplayerone,500);
if(VTrigger==_DIRTempFlag && Counter>0)
{
print("PlayerOneFound ");
call(AIchangefriendtoenemy);
call(AIalert,Sub_AISetAttack);
sample(SFXViolation,-1);
float(_set,Counter,-150);
}
else
{
print("Nothing found ");
float(_add,Counter,1);
if(counter<0)
{
Turn(0,140,0);
}
else
{
call(AIPickdest,10);
if(vtrigger==_DIRtempflag)
{
call(PickNewNode);
}
CallSub(Sub_AI1WayAlignToPickDestAngle);
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
if(VPickDestAngleCorr<700 && VPickDestAngleCorr>-700)
{
move(0,0,-3);
}
if(VPickDestOffsetY>10)
{
move(0,-2,0);
}
elseif(VPickDestOffsetY<-10)
{
move(0,2,0);
}
}
}
CallSub(BackGroundTriggerChecks);
if(vhealth<0)
{
killactor();
}
}
SubRoutine(Sub_DroidCheckForAttach,float(Attached),float(PreferedDistToGroundLow),float(PreferedDistToGroundHigh))
{
call(SearchForCloseActor,_AIclassmale|_AIclassfemale,200);
if(VTrigger==_DIRTempFlag)
{
print("Found close actor");
call(SetLockedOnActorToParent);
Call(CopyParentFlags);
float(_set,Attached,1);
float(_set,PreferedDistToGroundLow,140);
float(_set,PreferedDistToGroundHigh,220);
}
}
SubRoutine(Sub_CorrectDroidPosition,float(Angle),float(AngleAdd),float(PreferedDistToGroundLow),float(PreferedDistToGroundHigh))
{
if(VTrigger==_DIRTempFlag)
{
if(Angle>0)
{
float(_set,AngleAdd,-5);
}
else
{
float(_set,AngleAdd,5);
}
}
float(_add,Angle,AngleAdd);
if(Angle<-90)
{
float(_set,Angle,-90);
}
elseif(Angle>90)
{
float(_set,Angle,90);
}
if(VDistToGround<PreferedDistToGroundLow)
{
print(Move Up");
move(0,4,0);
}
elseif(VDistToGround>PreferedDistToGroundHigh)
{
print(Move Down");
move(0,-4,0);
}
}
SubRoutine(DetachDroidFromParent,float(PreferedDistToGroundLow),float(PreferedDistToGroundHigh),float(Attached))
{
float(_set,PreferedDistToGroundLow,30);
float(_set,PreferedDistToGroundHigh,35);
call(ClrParentPtr);
float(_set,Attached,0);
Direction(_clr,_DIRshoot|_DIRhavegun);
}
#define _DroidStateIdle 1
#define _DroidStateAttack 2
#define _DroidStateDefend 4
#define _DroidStateKamikaze 8
Actor(ShellTurret)
{
file(ShellTurretHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(ShellTurretNoMove);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,-512);
float(_declare,angley,2048);
float(_declare,anglez,0);
float(_declare,ShootDelay,0);
float(_declare,SideShoot,0);
call(AIupdateAIvars);
call(CheckForVisual,_CLASSModel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0)
{
printilog("Turret found target !");
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
CallSub(BackGroundTriggerChecks);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
else
{
print("turret ready to shoot !",0);
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
if(SideShoot==0)
{
vector(_set,tmpvector,0,0,-200);
vector(_set,Gactorpos,20,-50,-98); //left cannon
spawnactorbone(BulletShellTurret,tmpvector,Gactorpos,Gactorine,0);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbulhorizac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbulvertac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbuldiag1ac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbuldiag2ac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashhorizac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashvertac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag1ac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag2ac);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,0,Gactorpos,tmpvector,EmptyVector,300);
vector(_set,Gactorpos,20,-50,-98);
spawnparticle(fx_flare,0,Gactorpos,emptyvector,fx_mturret);
float(_set,SideShoot,1)
}
elseif(SideShoot==1)
{
vector(_set,tmpvector,0,0,-200);
vector(_set,Gactorpos,-25,-50,-98); //right cannon
spawnactorbone(BulletShellTurret,tmpvector,Gactorpos,Gactorine,0);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbulhorizac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbulvertac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbuldiag1ac);
spawnparticle(fx_gunbulletturretac,0,Gactorpos,tmpvector,fx_gunbuldiag2ac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashhorizac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashvertac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag1ac);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag2ac);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,0,Gactorpos,tmpvector,EmptyVector,300);
vector(_set,Gactorpos,20,-50,-98);
spawnparticle(fx_flare,0,Gactorpos,emptyvector,fx_mturret);
float(_set,SideShoot,0)
}
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
if(angley>2048)
{
float(_set,angley,2048);
}
elseif(angley<0)
{
float(_set,angley,0);
}
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
}
Actor(CompanionBot)
{
file(CompanionBotHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
float(_declare,Attached,0);
float(_declare,Angle,90);
float(_declare,AngleAdd,5);
float(_declare,PreferedDistToGroundLow,30);
float(_declare,PreferedDistToGroundHigh,35);
float(_declare,CurrentDirection,0);
float(_declare,CBotsmokeflag,-1);
float(_declare,CBotsampflag,0);
if(Attached==0)
{
//reset FX vars if it becomes de-attached
float(_set,CBotsmokeflag,-1);
if(CBotsampflag==1)
{
samplestop(SFXMachineGunFire);
}
float(_set,CBotsampflag,0);
CallSub(Sub_DroidCheckForAttach,Attached,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
else
{
call(CopyParentFlags);
call(AIcalcdroidposition,80,angle,true,true);
CallSub(Sub_CorrectDroidPosition,Angle,AngleAdd,PreferedDistToGroundLow,PreferedDistToGroundHigh);
if(VTrigger!=_DIRHaveGun && VTrigger==_DIRCombatMode)
{
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
}
if(VActorFlag==_AFLAGlogon)
{
print("Correcting angle in lock mode");
if(VTargetAngle>11)
{
Turn(0,10,0);
}
elseif(VTargetAngle<-11)
{
Turn(0,-10,0);
}
}
}
if(VTrigger==_DIRshoot)
{
//start SFX loop
if(CBotsampflag==0)
{
sample(SFXMachineGunFire,-1)
}
float(_set,CBotsampflag,1);
//if parentptr fired, so do I
SpawnActor(BulletDroid,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
move(0,15,30); //recoil
//muzzle flash
vector(_set,Gactorpos,0,0,-30);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashhorizsmall);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashvertsmall);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag1small);
spawnparticle(fx_gunflashturretac,0,Gactorpos,emptyvector,fx_gunflashdiag2small);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,0,Gactorpos,tmpvector,EmptyVector,300);
vector(_set,Gactorpos,0,0,-10);
spawnparticle(fx_gunstrobeturret,0,Gactorpos,emptyvector,fx_gunstrobesmall);
//muzzle flash
//reload smoke delayer
float(_set,CBotsmokeflag,25);
}
}
else
{
//do some smoke
if(CBotsmokeflag>=0)
{
if(VSniperMode==0)
{
float(_rnd2,tmpfloat,2);
float(_sub,tmpfloat,1);
vector(_set,gactorine,0,0,0);
vector(_setx,gactorine,tmpfloat);
if(vrnd<50)
{
vector(_set,Gactorpos,0,0,-10);
spawnparticle(fx_weaponsmoke,0,gactorpos,gactorine,fx_machinegunsmoke);
}
}
float(_sub,CBotsmokeflag,1);
}
//stop fire, so stop sample loop
if(CBotsampflag==1)
{
samplestop(SFXMachineGunFire);
}
float(_set,CBotsampflag,0);
}
call(AIupdatemovementvariables);
/* printi("PathDestDist: ",VPathDestDistance);
printi("PathDestAngle: ",VPathDestAngle);
printi("PickDestAngle: ",VPickDestAngle);
printi("TargetDistance: ",VTargetDistance);
printi("TargetAngle: ",VTargetAngle);
printi("DistToGround: ",VDistToGround);
print("PrefDistLow: ",PreferedDistToGroundLow);
print("PrefDistHigh: ",PreferedDistToGroundHigh);
printi("Health: ",VHealth);
*/
if(vhealth<100)
{
//go into kamikaze mode
if(vhealth<0)
{
vector(_settoactorpos,tmpvector);
CallSub(sub_fxexplosion);
killactor();
}
}
if(VTrigger!=_DIRalive && VHealth>0)
{
//parent died so detach
float(_set,PreferedDistToGroundLow,30);
float(_set,PreferedDistToGroundHigh,35);
call(ClrParentPtr);
float(_set,Attached,0);
Direction(_clr,_DIRshoot|_DIRhavegun);
Direction(_set,_DIRalive);
}
CallSub(BackGroundTriggerChecks);
}
//**********************************************************************************************************
//**********************************************************************************************************
//**************** Defensive Bot *******************
//**********************************************************************************************************
//**********************************************************************************************************
Actor(DefensiveBot)
{
file(DefensiveBotHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
float(_declare,Attached,0);
float(_declare,KamikazeMode,0);
float(_declare,Angle,90);
float(_declare,AngleAdd,5);
float(_declare,PreferedDistToGroundLow,30);
float(_declare,PreferedDistToGroundHigh,35);
float(_declare,CurrentDirection,0);
printi("Defensive droid start",VAIState);
if(KamikazeMode!=0)
{
print("In kamikaze mode");
if(Attached!=0)
{
call(CopyParentFlags);
}
call(AIupdateAIvars);
if(aivisiontoggle==0)
{
call(AIcheckfortarget,10);
}
if(VAItargetfound==_AIenemy || VAIState==_AIstateAttack)
{
printi("Droid in attackstate: ",VAItargetfound);
//detach from actor
//select target and persue
if(VAItargetfound==_AIenemy)
{
call(AIselecttarget,_AIenemy);
call(AIorder,_set,_AIstateattack);
}
call(AIpickdest,10);
CallSub(Sub_CorrectDroidPosition,Angle,AngleAdd,PreferedDistToGroundLow,PreferedDistToGroundHigh); //for up and down corrections
Direction(_clr,_DIRaiRemoveFlags);
if(VTargetDistance>100)
{
float(_set,CurrentDirection,0);
CallSub(Sub_AI1WayAlignToTarget);
CallSub(Sub_AI8WayMoveWalk,CurrentDirection);
Direction(_set,CurrentDirection);
print("CurrentDirection: ",CurrentDirection);
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
if(VTrigger==_DIRforward)
{
move(0,0,-15);
}
elseif(VTrigger==_DIRbackward)
{
move(0,0,15);
}
if(VTrigger==_DIRsideleft)
{
move(15,0,0);
}
elseif(VTrigger==_DIRsideright)
{
move(-15,0,0);
}
}
else
{
//blow up
vector(_settoactorpos,tmpvector);
initactor(BulletExplosion,tmpvector,emptyvector,false);
CallSub(sub_fxexplosion);
killactor();
}
if(VTargetDistance<600)
{
if(VTargetAngle<30 && VTargetAngle>-30)
{
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
if(VActorFlag==_AFLAGlogon)
{
print("Trying to fire bullet");
SpawnActor(BulletDroid,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
move(0,15,30); //recoil
vector(_set,Gactorpos,0,0,-20);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,fx_gunflashvert);
}
}
}
}
}
}
elseif(Attached==0)
{
CallSub(Sub_DroidCheckForAttach,Attached,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
else
{
call(CopyParentFlags);
call(AIupdateAIvars);
if(aivisiontoggle==0)
{
call(AIcheckfortarget,0);
}
if(VAItargetfound==_AIenemy)
{
printi("Defensebot Found something: ",VAItargetfound);
call(AIselecttarget,_AIenemy);
call(AIupdatemovementvariables);
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
CallSub(Sub_AI1WayAlignToTarget);
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
if(VActorFlag==_AFLAGlogon)
{
printi("Correcting angle in lock mode",VTargetAngle);
if(VTargetAngle<81 && VTargetAngle>-81)
{
print("Trying to fire bullet");
SpawnActor(BulletDroid,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
move(0,15,30); //recoil
vector(_set,Gactorpos,0,0,-20);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,fx_gunflashvert);
}
}
}
call(AIcalcdroidposition,80,angle,true,false);
}
else
{
call(AIcalcdroidposition,80,angle,true,true);
}
CallSub(Sub_CorrectDroidPosition,Angle,AngleAdd,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
printi("PathDestDist: ",VPathDestDistance);
printi("PathDestAngle: ",VPathDestAngle);
printi("PickDestAngle: ",VPickDestAngle);
printi("TargetDistance: ",VTargetDistance);
printi("TargetAngle: ",VTargetAngle);
printi("DistToGround: ",VDistToGround);
print("PrefDistLow: ",PreferedDistToGroundLow);
print("PrefDistHigh: ",PreferedDistToGroundHigh);
printi("Health: ",VHealth);
if(vhealth<1000)
{
//go into kamikaze mode
if(KamikazeMode==0)
{
float(_set,KamikazeMode,1);
float(_set,PreferedDistToGroundLow,30);
float(_set,PreferedDistToGroundHigh,35);
}
if(vhealth<0)
{
vector(_settoactorpos,tmpvector);
CallSub(sub_fxexplosion);
killactor();
}
}
if(VTrigger!=_DIRalive && VHealth>0)
{
print("parent died so detach");
break();
float(_set,PreferedDistToGroundLow,30);
float(_set,PreferedDistToGroundHigh,35);
call(ClrParentPtr);
float(_set,Attached,0);
Direction(_clr,_DIRshoot|_DIRhavegun);
Direction(_set,_DIRalive);
}
if(VTrigger==_DIRactorbulletcol)
{
printilog("VColAngle: ",VColAngle);
//printlog("ColAngleTmp: ",ColAngleTmp);
if(VColAngle>=3584 && VColAngle<512)
{
move(0,0,60);
}
elseif(VColAngle>=512 && VColAngle<1536)
{
move(60,0,0);
}
elseif(VColAngle>=1536 && VColAngle<2562)
{
move(0,0,-60);
}
else
{
move(-60,0,0);
}
}
CallSub(BackGroundTriggerChecks);
printi("Defensive droid end");
}
//**********************************************************************************************************
//**********************************************************************************************************
//**************** Offensive Bot *******************
//**********************************************************************************************************
//**********************************************************************************************************
Actor(OffensiveBot)
{
file(OffensiveBotHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
float(_declare,Attached,0);
float(_declare,Angle,90);
float(_declare,AngleAdd,5);
float(_declare,PreferedDistToGroundLow,30);
float(_declare,PreferedDistToGroundHigh,35);
float(_declare,CurrentDirection,0);
printi("Attackdroid start",VAIState);
if(Attached==0)
{
CallSub(Sub_DroidCheckForAttach,Attached,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
else
{
call(CopyParentFlags);
call(AIupdateAIvars);
if(aivisiontoggle==0)
{
print("Checking for target");
call(AIcheckfortarget,10);
}
if(VAItargetfound==_AIenemy || VAIState==_AIstateAttack || VAIState==_AIstateSearch)
{
printi("Droid in attackstate: ",VAItargetfound);
//detach from actor
//select target and persue
if(VAItargetfound==_AIenemy)
{
print("in attack");
call(AIselecttarget,_AIenemy);
call(AIorder,_set,_AIstateattack);
}
elseif(VAIState==_AIstatesearch)
{
print("in search");
if(VAInotargettime>150)
{
call(AIorder,_set,_AIstatepatrol);
CallSub(DetachDroidFromParent,PreferedDistToGroundLow,PreferedDistToGroundHigh,Attached);
}
}
elseif(VAInotargettime>150)
{
call(AIorder,_set,_AIstatesearch);
}
call(AIupdatetargetpos);
call(AIpickdest,10);
Direction(_clr,_DIRaiRemoveFlags);
if(VTargetDistance>100)
{
float(_set,CurrentDirection,0);
CallSub(Sub_AI1WayAlignToPickDestAngle);
if(VPickDestAngleCorr<700 && VPickDestAngleCorr>-700)
{
move(0,0,-15);
}
elseif(VPickDestAngleCorr<-1300 || VPickDestAngleCorr>1300)
{
move(0,0,15);
}
if(VPickDestOffsetY>10)
{
move(0,-2,0);
}
elseif(VPickDestOffsetY<-10)
{
move(0,2,0);
}
}
else
{
CallSub(Sub_AI1WayAlignToTarget);
}
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
if(VTargetDistance<600)
{
if(VTargetAngle<150 && VTargetAngle>-150)
{
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
if(VActorFlag==_AFLAGlogon)
{
print("Trying to fire bullet");
SpawnActor(BulletDroid,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
move(0,15,30); //recoil
vector(_set,Gactorpos,0,0,-20);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,fx_gunflashvert);
}
}
}
}
/*
printi("Defensebot Found something: ",VAItargetfound);
call(AIselecttarget,_AIenemy);
call(AIupdatemovementvariables);
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
if(VActorFlag==_AFLAGlogon)
{
printi("Correcting angle in lock mode",VTargetAngle);
if(VTargetAngle>11)
{
Turn(0,10,0);
}
elseif(VTargetAngle<-11)
{
Turn(0,-10,0);
}
else
{
print("Trying to fire bullet");
SpawnActor(BulletDroid,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
vector(_set,Gactorpos,0,0,-20);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,fx_gunflashvert);
}
}
}
call(AIcalcdroidposition,80,angle,true,false);
*/
}
else
{
print("Not in attack");
call(AIcalcdroidposition,80,angle,true,true);
}
}
CallSub(Sub_CorrectDroidPosition,Angle,AngleAdd,PreferedDistToGroundLow,PreferedDistToGroundHigh);
printi("PickDestAngle: ",VPickDestAngle);
printi("TargetDistance: ",VTargetDistance);
printi("TargetAngle: ",VTargetAngle);
/*
printi("PathDestDist: ",VPathDestDistance);
printi("PathDestAngle: ",VPathDestAngle);
printi("PickDestAngle: ",VPickDestAngle);
printi("TargetDistance: ",VTargetDistance);
printi("TargetAngle: ",VTargetAngle);
printi("DistToGround: ",VDistToGround);
print("PrefDistLow: ",PreferedDistToGroundLow);
print("PrefDistHigh: ",PreferedDistToGroundHigh);
printi("Health: ",VHealth);
*/
if(vhealth<1000)
{
//go into kamikaze mode
if(vhealth<0)
{
vector(_settoactorpos,tmpvector);
CallSub(sub_fxexplosion);
killactor();
}
}
if(VTrigger!=_DIRalive && VHealth>0)
{
//parent died so detach
CallSub(DetachDroidFromParent,PreferedDistToGroundLow,PreferedDistToGroundHigh,Attached);
Direction(_set,_DIRalive);
}
CallSub(BackGroundTriggerChecks);
print("Attackdroid end");
}
//**********************************************************************************************************
//**********************************************************************************************************
//**************** Transport Bot *******************
//**********************************************************************************************************
//**********************************************************************************************************
Actor(TransportBot)
{
file(TransportBotHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
if(vactivetime==0)
{
sample(SFXDroidHover,-1);
}
if(vstate==statedead)
{
samplestop(SFXDroidHover);
}
float(_declare,FirstTimeBatteryDrop,0);
printi("Transportdroid start",VAIState);
ActorFlag(_or,_AFLAGnoai);
printih("ActorFlag: ",VActorFlag);
if(vstate==StateFollowPath)
{
print("Driod in follow path mode: ",vstate);
call(AIPickdest,10);
if(VAIstatehigh!=_AIinspecialmode)
{
if(vtrigger==_DIRtempflag)
{
call(PickNewNode);
}
}
else
{
print("AAHH! vstate=StateFollowPath & VAIstatehigh=_AIinspecialmode");
}
}
elseif(vstate==StateExecutePathSequence)
{
print("Droid executing path sequence");
call(AIPickdest,10); //follow path
if(vtrigger==_DIRtempflag)
{
state(_clr,StateExecutePathSequence);
state(_or,StateFollowPath);
call(PickNewNode);
}
}
printi("PathDestDistance: ",VPathDestDistance);
printi("PickDestAngle: ",VPickDestAngleCorr);
printi("VPickDestOffsetY: ",VPickDestOffsetY);
Direction(_clr,_DIRaiRemoveFlags);
if(VPathDestDistance>10)
{
CallSub(Sub_AI1WayAlignToPickDestAngle);
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
move(0,0,-5);
/* if(VTrigger==_DIRforward)
{
move(0,0,-15);
}
elseif(VTrigger==_DIRbackward)
{
move(0,0,15);
}
if(VTrigger==_DIRsideleft)
{
move(15,0,0);
}
elseif(VTrigger==_DIRsideright)
{
move(-15,0,0);
}
*/
//}
//else
//{
// CallSub(Sub_AI1WayAlignToTarget);
//}
}
print("FirstTimeBatteryDrop is ",FirstTimeBatteryDrop);
if(VPickDestOffsetY>10)
{
move(0,-2,0);
}
elseif(VPickDestOffsetY<-10)
{
move(0,2,0);
}
if(VAIState==_AIstateSuicide)
{
KillActor();
}
if(VAIState==_AIStateDropBattery)
{
print("aistatedropbattery");
if(FirstTimeBatteryDrop==0)
{
vector(_settoactorpos,Gactorpos);
vector(_set,Gactorangle,0,0,0);
InitActor(BulletBattery,Gactorpos,Gactorangle,0);
sample(SFXDropBattery,-1);
float(_set,FirstTimeBatteryDrop,1);
}
}
else
{
print("reset battery");
if(FirstTimeBatteryDrop==1)
{
float(_set,FirstTimeBatteryDrop,0)
}
}
/* if(Attached==0)
{
CallSub(Sub_DroidCheckForAttach,Attached,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
else
{
call(CopyParentFlags);
call(AIupdateAIvars);
if(aivisiontoggle==0)
{
call(AIcheckfortarget,10);
}
if(VAItargetfound==_AIenemy || VAIState==_AIstateAttack)
{
print("Droid in attackstate");
//detach from actor
//select target and persue
if(VAItargetfound==_AIenemy)
{
call(AIselecttarget,_AIenemy);
call(AIorder,_set,_AIstateattack);
}
call(AIpickdest,10);
Direction(_clr,_DIRaiRemoveFlags);
if(VTargetDistance>100)
{
float(_set,CurrentDirection,0);
CallSub(Sub_AI1WayAlignToTarget);
CallSub(Sub_AI8WayMoveWalk,CurrentDirection);
Direction(_set,CurrentDirection);
if(VTrigger==_DIRleft)
{
Turn(0,-40,0);
}
elseif(VTrigger==_DIRright)
{
Turn(0,40,0);
}
if(VTrigger==_DIRforward)
{
move(0,0,-15);
}
elseif(VTrigger==_DIRbackward)
{
move(0,0,15);
}
if(VTrigger==_DIRsideleft)
{
move(15,0,0);
}
elseif(VTrigger==_DIRsideright)
{
move(-15,0,0);
}
}
else
{
CallSub(Sub_AI1WayAlignToTarget);
}
if(VTargetDistance<600)
{
if(VTargetAngle<30 && VTargetAngle>-30)
{
vector(_set,WeaponPos,0,0,-20);
call(wCheckWeaponTarget,EmptyVector,32767,WeaponPos);
if(VActorFlag==_AFLAGlogon)
{
print("Trying to fire bullet");
SpawnActor(BulletAutoCannon,0,0,-20);
if(VTrigger==_DIRBulletFired)
{
move(0,15,30); //recoil
vector(_set,Gactorpos,0,0,-20);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashMachineGun,0,Gactorpos,emptyvector,fx_gunflashvert);
}
}
}
}
}
else
{
call(AIcalcdroidposition,80,angle,true,true);
}
CallSub(Sub_CorrectDroidPosition,Angle,AngleAdd,PreferedDistToGroundLow,PreferedDistToGroundHigh);
}
printi("PathDestDist: ",VPathDestDistance);
printi("PathDestAngle: ",VPathDestAngle);
printi("PickDestAngle: ",VPickDestAngle);
printi("TargetDistance: ",VTargetDistance);
printi("TargetAngle: ",VTargetAngle);
printi("DistToGround: ",VDistToGround);
print("PrefDistLow: ",PreferedDistToGroundLow);
print("PrefDistHigh: ",PreferedDistToGroundHigh);
printi("Health: ",VHealth);
if(vhealth<100)
{
//go into kamikaze mode
if(vhealth<0)
{
vector(_settoactorpos,tmpvector);
CallSub(sub_fxexplosion);
killactor();
}
}
if(VTrigger!=_DIRalive && VHealth>0)
{
//parent died so detach
float(_set,PreferedDistToGroundLow,30);
float(_set,PreferedDistToGroundHigh,35);
call(ClrParentPtr);
float(_set,Attached,0);
Direction(_clr,_DIRshoot|_DIRhavegun);
Direction(_set,_DIRalive);
}
CallSub(BackGroundTriggerChecks);
print("Attackdroid end");
*/
//SpawnActor(BulletBattery,0,0,0);
CallSub(BackGroundTriggerChecks);
}
Actor(MDroid1)
{
file(MDroid1Header);
rank(_RankGeneral);
startstate(statenormal);
startaction(mdroid1work);
CallSub(BackGroundTriggerChecks);
if(vaicon==0)
{
callsub(Sub_SetCameraNormal)
callsub(MoveDroidRoutine);
if(vtrigger==_DIRdepossesion)
{
callsub(Sub_InitDepossesion,0,0,0)
}
}
if(vhealth<0)
{
vector(_set,Gactorpos,-12540,24441,25123);
vector(_set,Gactorangle,0,1604,0);
InitActor(mdroid2,Gactorpos,Gactorangle,"stor_01");
killactor();
}
}
Actor(MDroid2)
{
file(MDroid2Header);
rank(_RankGeneral);
startstate(statenormal);
startaction(mdroid2work);
if(vaicon==0)
{
callsub(Sub_SetCameraNormal)
callsub(MoveDroidRoutine);
if(vtrigger==_DIRdepossesion)
{
callsub(Sub_InitDepossesion,0,0,0)
}
}
if(vhealth<0)
{
vector(_set,Gactorpos,-12540,24441,25123);
vector(_set,Gactorangle,0,1604,0);
InitActor(mdroid2,Gactorpos,Gactorangle,"stor_01");
killactor();
}
}
Actor(TankMat)
{
file(TankMatHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
if(vaicon==0)
{
callsub(Sub_SetCameraNormal)
callsub(MoveDroidRoutine);
if(vtrigger==_DIRdepossesion)
{
callsub(Sub_InitDepossesion,0,0,0)
}
if(vtrigger==_DIRaction)
{
print("Action pressed");
call(AIcheckfortarget);
if(VAItargetfound!=0)
{
print("Target found 6666666666666666666");
}
}
}
/* if(vhealth<0) //respawn
{
vector(_set,Gactorpos,-12540,24441,25123);
vector(_set,Gactorangle,0,1604,0);
InitActor(mdroid2,Gactorpos,Gactorangle,"stor_01");
killactor();
}
*/
}
Actor(ForkLift)
{
file(ForkLiftHeader);
rank(_RankGeneral);
startstate(statenormal);
startaction(nomove);
if(vaicon==0)
{
callsub(Sub_SetCameraNormal)
callsub(MoveDroidRoutine);
if(vtrigger==_DIRdepossesion)
{
callsub(Sub_InitDepossesion,0,0,0)
}
}
}
Actor(GunTurret)
{
file(GunTurretHeader);
startaction(GunTurretIdle);
CallSub(BackGroundTriggerChecks);
vector(_declare,ShootOffset,0,0,-225);
float(_declare,ShootDelay,2);
float(_declare,ShootCounter,0);
float(_declare,ShootSide,0); //0 is right cannon, 1 is left cannon
if(VAction==GunTurretFire)
{
if(VFrame==81 || VFrame==121 || VFrame==161)
{
float(_set,ShootDelay,0);
float(_set,ShootCounter,9);
}
elseif(VFrame==38 || VFrame==110 || VFrame==150)
{
sample(SFXGunTurretHatch,-1);
}
elseif(VFrame==232)
{
sample(SFXGunTurretSteam,-1);
}
elseif(VFrame==1 || VFrame==192)
{
sample(SFXGunTurretDoor,-1);
}
if(VFrame>=190 && VFrame<=231)
{
if(vrnd<50)
{
float(_rnd2,tmpfloat,2);
float(_sub,tmpfloat,1);
vector(_set,gactorine,0,0,0);
vector(_setx,gactorine,tmpfloat);
vector(_set,Gactorpos,0,0,-225);
spawnparticle(fx_weaponsmoke,4,gactorpos,gactorine,fx_machinegunsmokeac);
spawnparticle(fx_weaponsmoke,7,gactorpos,gactorine,fx_machinegunsmokeac);
}
}
}
elseif(VAction==GunTurretBeserker)
{
if(Vframe==1)
{
sample(SFXGunTurretDoor,-1);
}
elseif(VFrame==40 || VFrame==204)
{
sample(SFXShaftLock,-1);
}
elseif(VFrame==44 || VFrame==98)
{
sample(SFXLightning,-1);
}
elseif(VFrame==49 || VFrame==53 || VFrame==72 || VFrame==124)
{
sample(SFXGunTurretZap,-1);
}
elseif(VFrame==55 || VFrame==214)
{
sample(SFXGunTurretHatch,-1);
}
elseif(VFrame==81||VFrame==91||VFrame==101||VFrame==111||VFrame==121||VFrame==131||VFrame==141||VFrame==151||VFrame==161||VFrame==171||VFrame==181) //||VFrame==191
{
float(_set,ShootDelay,0);
float(_set,ShootCounter,9);
}
}
if(ShootCounter>0)
{
if(ShootCounter==9)
{
sample(SFXGunTurretFire,-1);
}
if(ShootDelay==0)
{
float(_set,ShootDelay,2);
float(_sub,ShootCounter,1);
if(ShootSide==0)
{
float(_set,ShootSide,1);
//bullet
spawnactorbone(BulletGunTurret,ShootOffset,Gactorpos,Gactorine,4);
vector(_set,tmpvector,0,0,-200);
vector(_set,Gactorpos,0,0,-270);
spawnparticle(fx_gunbulletturretac,4,Gactorpos,tmpvector,fx_gunbulhorizac);
spawnparticle(fx_gunbulletturretac,4,Gactorpos,tmpvector,fx_gunbulvertac);
spawnparticle(fx_gunbulletturretac,4,Gactorpos,tmpvector,fx_gunbuldiag1ac);
spawnparticle(fx_gunbulletturretac,4,Gactorpos,tmpvector,fx_gunbuldiag2ac);
//muzzle flash
spawnparticle(fx_gunflashturretac,4,Gactorpos,emptyvector,fx_gunflashhorizac);
spawnparticle(fx_gunflashturretac,4,Gactorpos,emptyvector,fx_gunflashvertac);
spawnparticle(fx_gunflashturretac,4,Gactorpos,emptyvector,fx_gunflashdiag1ac);
spawnparticle(fx_gunflashturretac,4,Gactorpos,emptyvector,fx_gunflashdiag2ac);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,4,Gactorpos,tmpvector,EmptyVector,300);
vector(_set,Gactorpos,0,0,-220);
spawnparticle(fx_gunstrobeturret,4,Gactorpos,emptyvector,fx_gunstrobeac);
//muzzle flash
}
else
{
float(_set,ShootSide,0);
//bullet
spawnactorbone(BulletGunTurret,ShootOffset,Gactorpos,Gactorine,7);
vector(_set,tmpvector,0,0,-200);
vector(_set,Gactorpos,0,0,-270);
spawnparticle(fx_gunbulletturretac,7,Gactorpos,tmpvector,fx_gunbulhorizac);
spawnparticle(fx_gunbulletturretac,7,Gactorpos,tmpvector,fx_gunbulvertac);
spawnparticle(fx_gunbulletturretac,7,Gactorpos,tmpvector,fx_gunbuldiag1ac);
spawnparticle(fx_gunbulletturretac,7,Gactorpos,tmpvector,fx_gunbuldiag2ac);
//muzzle flash
spawnparticle(fx_gunflashturretac,7,Gactorpos,emptyvector,fx_gunflashhorizac);
spawnparticle(fx_gunflashturretac,7,Gactorpos,emptyvector,fx_gunflashvertac);
spawnparticle(fx_gunflashturretac,7,Gactorpos,emptyvector,fx_gunflashdiag1ac);
spawnparticle(fx_gunflashturretac,7,Gactorpos,emptyvector,fx_gunflashdiag2ac);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,7,Gactorpos,tmpvector,EmptyVector,300);
vector(_set,Gactorpos,0,0,-220);
spawnparticle(fx_gunstrobeturret,7,Gactorpos,emptyvector,fx_gunstrobeac);
//muzzle flash
}
}
else
{
float(_sub,ShootDelay,1);
}
}
elseif(ShootCounter==0)
{
samplestop(SFXGunTurretFire);
float(_sub,ShootCounter,1);
}
}
Actor(RocketLauncher)
{
file(RocketLauncherHeader);
startaction(Ridle);
//startaction(RLaunchPatrol);
CallSub(BackGroundTriggerChecks);
if(vaicon!=0)
{
//ack!
}
else
{
if(vtrigger==_DIRpossesion)
{
Camera(turret_camera_distance,turret_camera_angle);
Target(turret_camera_Tdistance,turret_camera_Tangle);
callsub(Sub_InitPossesion,NoMove,NoMove,NoMove);
FirstPerson(1);
}
elseif(vtrigger==_DIRdepossesion)
{
callsub(Sub_InitDepossesion,0,0,0);
FirstPerson(0);
}
if(vtrigger==_DIRleft)
{
turn(0,-32,0);
}
if(vtrigger==_DIRright)
{
turn(0,32,0);
}
if(vtrigger==_DIRshoot)
{
/*
//bullet
vector(_set,tmpvector,0,110,0);
spawnactorbone(BulletAutoCannon,tmpvector,Gactorpos,Gactorine,4);
vector(_set,tmpvector,0,200,0);
vector(_set,Gactorpos,0,110,0);
spawnparticle(fx_gunflashturret,4,Gactorpos,tmpvector,fx_gunbulhorizac);
spawnparticle(fx_gunflashturret,4,Gactorpos,tmpvector,fx_gunbulvertac);
spawnparticle(fx_gunflashturret,4,Gactorpos,tmpvector,fx_gunbuldiag1ac);
spawnparticle(fx_gunflashturret,4,Gactorpos,tmpvector,fx_gunbuldiag2ac);
//muzzle flash
vector(_set,Gactorpos,0,110,0);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashvert);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashdiag1);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashdiag2);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,4,Gactorpos,tmpvector,EmptyVector,200);
vector(_set,Gactorpos,0,64,0);
spawnparticle(fx_gunstrobeturret,4,Gactorpos,emptyvector,fx_gunstroberot);
*/
}
}
//if(vtrigger==_DIRshoot)
if(vrnd<15)
{
//muzzle flash
vector(_set,Gactorpos,0,110,0);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,-1);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashvert);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashdiag1);
spawnparticle(fx_gunflashturret,4,Gactorpos,emptyvector,fx_gunflashdiag2);
vector(_set,tmpvector,255,192,192);
spawnlight(fire_light,4,Gactorpos,tmpvector,EmptyVector,200);
vector(_set,Gactorpos,0,64,0);
spawnparticle(fx_gunstrobeturret,4,Gactorpos,emptyvector,fx_gunstroberot);
//muzzle flash
}
vector(_set,Gactorpos,-28,0,32);
vector(_set,Gactorine,0,2048,0);
spawnparticle(fx_flare,1,gactorpos,emptyvector,fx_rocklaserflarered);
spawnparticle(fx_coplaser,1,gactorpos,gactorine,fx_rocklaser);
spawnparticle(fx_coplaser,1,gactorpos,gactorine,fx_gunflashvert);
spawnparticle(fx_coplaser,1,gactorpos,gactorine,fx_gunflashdiag1);
spawnparticle(fx_coplaser,1,gactorpos,gactorine,fx_gunflashdiag2);
}
Actor(AutoCannon)
{
file(AutoCannonHeader);
startaction(nomovenocollision);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,0);
float(_declare,angley,0);
float(_declare,anglez,0);
/* printi("AC PathDestDist: ",VPathDestDistance);
printi("AC PathDestAngle: ",VPathDestAngle);
printi("AC PickDestAngle: ",VPickDestAngle);
printi("AC TargetDistance: ",vtargetdistance);
printi("AC TargetAngle: ",vtargetangle);
print("AC anglex: ",anglex);
print("AC angley: ",angley);
print("AC anglez: ",anglez);
*/
callsub(BackGroundTriggerChecks);
call(AIupdateAIvars);
call(CheckForVisual,_CLASSangel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0)
{
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
print("Correcting YAngle");
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
if(VTargetAngleY>-51 && VTargetAngleY<51)
{
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
spawnactor(BulletAutoCannon,0,15,-70);
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
if(angley>1024)
{
float(_set,angley,1024);
}
elseif(angley<-1024)
{
float(_set,angley,-1024);
}
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
}
Actor(AutoCannon2)
{
file(AutoCannonHeader);
startaction(nomovenocollision);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,-512);
float(_declare,angley,2048);
float(_declare,anglez,0);
printi("AC PathDestDist: ",VPathDestDistance);
printi("AC PathDestAngle: ",VPathDestAngle);
printi("AC PickDestAngle: ",VPickDestAngle);
printi("AC TargetDistance: ",vtargetdistance);
printi("AC TargetAngle: ",vtargetangle);
printi("AC VTargetAngleY ",VTargetAngleY);
print("AC anglex: ",anglex);
print("AC angley: ",angley);
print("AC anglez: ",anglez);
print("AC offsety: ",FL_AutoCannonOffset);
call(AIupdateAIvars);
call(CheckForVisual,_CLASSangel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0) // && VAItargetfound==_AIFriend)
{
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
print("Correcting YAngle");
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
if(VTargetAngleY>-51 && VTargetAngleY<51)
{
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
if(LabAlarm!=0)
{
spawnactor(BulletAutoCannon,0,15,-70);
}
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
if(angley>2176)
{
float(_set,angley,2176);
}
elseif(angley<896)
{
float(_set,angley,896);
}
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
if(VarKey108==0)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat<3750)
{
float(_add,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
elseif(VarKey108==1)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat>3700)
{
print("Y COORDINATE: ",tmpfloat);
float(_sub,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
}
Actor(AutoCannon3)
{
file(AutoCannonHeader);
startaction(nomovenocollision);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,-512);
float(_declare,angley,2048);
float(_declare,anglez,0);
/* printi("AC PathDestDist: ",VPathDestDistance);
printi("AC PathDestAngle: ",VPathDestAngle);
printi("AC PickDestAngle: ",VPickDestAngle);
printi("AC TargetDistance: ",vtargetdistance);
printi("AC TargetAngle: ",vtargetangle);
print("AC anglex: ",anglex);
print("AC angley: ",angley);
print("AC anglez: ",anglez);
*/
call(AIupdateAIvars);
call(CheckForVisual,_CLASSangel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0 && VAItargetfound==_AIFriend)
{
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
print("Correcting YAngle");
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
if(VTargetAngleY>-51 && VTargetAngleY<51)
{
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
if(LabAlarm!=0)
{
spawnactor(BulletAutoCannon,0,15,-70);
}
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
if(angley>3204)
{
float(_set,angley,3204);
}
elseif(angley<1920)
{
float(_set,angley,1920);
}
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
if(VarKey108==0)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat<3750)
{
float(_add,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
elseif(VarKey108==1)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat>3700)
{
print("Y COORDINATE: ",tmpfloat);
float(_sub,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
}
Actor(AutoCannon4)
{
file(AutoCannonHeader);
startaction(nomovenocollision);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,-512);
float(_declare,angley,2048);
float(_declare,anglez,0);
/* printi("AC PathDestDist: ",VPathDestDistance);
printi("AC PathDestAngle: ",VPathDestAngle);
printi("AC PickDestAngle: ",VPickDestAngle);
printi("AC TargetDistance: ",vtargetdistance);
printi("AC TargetAngle: ",vtargetangle);
print("AC anglex: ",anglex);
print("AC angley: ",angley);
print("AC anglez: ",anglez);
*/
call(AIupdateAIvars);
call(CheckForVisual,_CLASSangel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0 && VAItargetfound==_AIFriend)
{
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
print("Correcting YAngle");
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
if(VTargetAngleY>-51 && VTargetAngleY<51)
{
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
if(LabAlarm!=0)
{
spawnactor(BulletAutoCannon,0,15,-70);
}
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
/* if(angley>3204)
{
float(_set,angley,3204);
}*/
if(angley>3640)
{
float(_set,angley,3640);
}
elseif(angley<1920)
{
float(_set,angley,1920);
}
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
/* if(VarKey108==0)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat<3750)
{
float(_add,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
elseif(VarKey108==1)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat>3700)
{
print("Y COORDINATE: ",tmpfloat);
float(_sub,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}*/
}
Actor(AutoCannon5)
{
file(AutoCannonHeader);
startaction(nomovenocollision);
vector(_declare,VL_LockedOnPos,0,0,0);
vector(_declare,VL_LockedOnOffset,0,0,0);
float(_declare,FL_AutoCannonOffset,0);
float(_declare,anglex,-512);
float(_declare,angley,2048);
float(_declare,anglez,0);
printi("AC PathDestDist: ",VPathDestDistance);
printi("AC PathDestAngle: ",VPathDestAngle);
printi("AC PickDestAngle: ",VPickDestAngle);
printi("AC TargetDistance: ",vtargetdistance);
printi("AC TargetAngle: ",vtargetangle);
printi("AC VTargetAngleY ",VTargetAngleY);
print("AC anglex: ",anglex);
print("AC angley: ",angley);
print("AC anglez: ",anglez);
print("AC offsety: ",FL_AutoCannonOffset);
call(AIupdateAIvars);
call(CheckForVisual,_CLASSangel,1000);
call(AIcheckfortarget,10);
if(VActiveTime==1)
{
ActorFlag(_or,_AFLAGnomove);
}
if(VAItargetfound!=0) // && VAItargetfound==_AIFriend)
{
call(AIselecttarget,_AIenemy);
call(AIPickdest,10);
vector(_settotargetpos,VL_LockedOnPos);
vector(_sety,VL_LockedOnOffset,FL_AutoCannonOffset);
vector(_add,VL_LockedOnPos,VL_LockedOnOffset);
vector(_settargetpos,VL_LockedOnPos);
if(VTargetAngle<-51)
{
float(_add,angley,-50);
float(_sub,FL_AutoCannonOffset,1);
}
elseif(VTargetAngle>51)
{
float(_add,angley,50);
float(_sub,FL_AutoCannonOffset,1);
}
else
{
if(FL_AutoCannonOffset<-100)
{
float(_set,FL_AutoCannonOffset,-100);
}
//fine tuning angle
if(VTargetAngle<-11)
{
float(_add,angley,-10);
}
elseif(VTargetAngle>11)
{
float(_add,angley,10);
}
print("Correcting YAngle");
if(VTargetAngleY<-11)
{
float(_add,anglex,10);
}
elseif(VTargetAngleY>11)
{
float(_add,anglex,-10);
}
if(VTargetAngleY>-51 && VTargetAngleY<51)
{
if(FL_AutoCannonOffset<0)
{
float(_add,FL_AutoCannonOffset,1);
}
if(LabAlarm!=0)
{
spawnactor(BulletAutoCannon,0,15,-70);
}
}
}
}
else
{
float(_set,FL_AutoCannonOffset,-100);
if(VAInotargettime>160)
{
if(angley<-6)
{
float(_add,angley,5);
}
else
{
float(_add,angley,-5);
}
else
{
float(_set,angley,0);
}
if(anglex<-6)
{
float(_add,anglex,5);
}
else
{
float(_add,anglex,-5);
}
else
{
float(_set,anglex,0);
}
}
}
if(angley>2176)
{
float(_set,angley,2176);
}
elseif(angley<0)
{
float(_set,angley,0);
}
/* elseif(angley<896)
{
float(_set,angley,896);
}*/
if(anglex>512)
{
float(_set,anglex,512);
}
elseif(anglex<-512)
{
float(_set,anglex,-512);
}
if(anglex!=0 || angley!=0 || anglez!=0)
{
call(CalcTransMat,anglex,angley,anglez);
}
/* if(VarKey108==0)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat<3750)
{
float(_add,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}
elseif(VarKey108==1)
{
vector(_settoactorpos,Gactorpos);
vector(_copyy,Gactorpos,tmpfloat);
if(tmpfloat>3700)
{
print("Y COORDINATE: ",tmpfloat);
float(_sub,tmpfloat,1);
vector(_sety,Gactorpos,tmpfloat);
vector(_setactorpos,Gactorpos);
}
}*/
}