home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume18
/
xmpb
/
part07
/
harry.npc
< prev
next >
Wrap
Text File
|
1993-07-12
|
2KB
|
177 lines
NPC
Name = Harry
Ship = Buster
EnergyMax = 1000
LShieldMax = 600
RShieldMax = 600
BShieldMax = 400
Solar = 2
ShortRange = 1
Engine = 3
Repair = 2
LongRange = 1
Weapons
Pulse
var
lastangle
lastdist
repairitem
end
State start
{
repairitem = 7;
set B2 = 1;
-> watch;
}
State watch
{
if(LongState < 90 )
{
if(Speed > 5)
-> stop;
repairitem = LongRange;
repair();
}
set B1 = 0;
NumEnemies > 0 -> spotted;
repair();
}
State spotted
{
set SelectEnemy = 0;
lastangle = EnemyAngle;
lastdist = EnemyDist;
-> fight;
}
Proc gonna_hit
{
if(XVel*XPos > 45000) return 1;
if(YVel*YPos > 45000) return 1;
return 0;
}
State fight
{
var
d
a
m
i
acc
mina
maxa
end
!EnemyAvail -> watch;
m = EnemyDist/(50+VelAtAngle(Angle)) - 1;
if(Energy > 200 || gonna_hit())
set B3 = 1;
else
set B3 = 0;
a = AngleTo(EnemyXPos+m*EnemyXVel-m*XVel,EnemyYPos+m*EnemyYVel-m*YVel);
d = (Angle -a + 360)%360;
if(d < 170 || d > 190)
set TurnTo = a;
if(EnemyDist < 100)
acc = 30;
else
if(EnemyDist < 200)
acc = 6;
else
if(EnemyDist < 500)
acc = 3;
else
acc = 2;
maxa = (a+acc)%360;
mina = (a+360-acc)%360;
if(EnemyDist < 1000 && EnemyDist > 0 &&(Angle - 360 < maxa && Angle > mina))
{
set B1 = 1;
}
else
set B1 = 0;
set Balance = 1;
repair();
Speed > 90 -> stop;
}
State stop
{
set B3 = 0;
set B1 = 0;
while(Angle != ((Direction + 180)%360))
set TurnTo = (Direction + 180)%360;
while(Speed > 4 && (EnemyDist > 500 || EnemyDist == 0))
{
set TurnTo = (Direction + 180)%360;
set B3 = 1;
}
set B3 = 0;
-> watch;
}
Proc repair
{
var
r
end
if(repairitem == RepairItem && repairitem != 7) return;
r = RepairItem;
set RepairToggle = 1;
while(RepairItem != repairitem && RepairItem != r)
set RepairToggle = 1;
if(RepairItem == r)
{
if(LongState < 100 && LongState != -1 && repairitem != LongRange)
{
repairitem = LongRange;
return;
}
if(SolarState < 100 && SolarState != -1 && repairitem != Solar)
{
repairitem = Solar;
return;
}
if(RepairState < 100 && RepairState != -1 && repairitem != Repair)
{
repairitem = Repair;
return;
}
if(EngineState < 100 && EngineState != -1 && repairitem != Engine)
{
repairitem = Engine;
return;
}
if(ShortState < 100 && ShortState != -1 && Energy > 300)
{
repairitem = Engine;
return;
}
repairitem = 7;
}
return;
}
Start start