Here we go.
REM * Project: AI Demo
REM * Author: Andrew Neale
REMSTART
This is a very basic AI demo. All it does is creates a small world,
creates a player and creates an enemy. In the loop, it allows you
to control the player. It also makes the enemy react to you. You
can attack by clicking when you are in range. The enemy will
attack you if it is close enough. Use the arrows to move.
REMEND
REM * Terrain Texture
CLS
Ink RGB(0,150,50),RGB(0,0,0)
Box 0,0,64,64
For i=1 to 255
ink RGB(0,100+RND(155),20+RND(30)),RGB(0,0,0)
dot RND(64),RND(64)
Next i
Get Image 1,0,0,64,64
REM * Create Floor
Make Matrix 1,1000,1000,30,30
Randomize Matrix 1,30
Prepare Matrix Texture 1,1,1,1
for z=1 to 29
for x=1 to 29
h8#=get matrix height(1,x,z-1)
h4#=get matrix height(1,x-1,z)
h#=get matrix height(1,x,z)
h2#=get matrix height(1,x,z)
x1#=(x-1)*25.0 : y1#=h#
x2#=(x+0)*25.0 : y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
z1#=(z-1)*25.0 : y1#=h2#
z2#=(z+0)*25.0 : y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
set matrix normal 1,x,z,nx#,ny#,nz#
next x
next z
Update Matrix 1
REM * Create Player - a small green sphere
Make Object Sphere 1,50
Color Object 1,RGB(0,200,0)
Set Object Collision On 1
Set Object Collision To Spheres 1
REM * Create Enemy - a small red sphere
Make Object Sphere 11,50
Color Object 11,RGB(200,0,0)
Set Object Collision On 11
Set Object Collision To spheres 11
REM * Create Enemy Zone - a large invisible sphere
Make Object Sphere 12,125
Hide Object 12
Set Object Collision On 12
Set Object Collision To spheres 12
REM * Set Up World
Set Ambient Light 50
Fog On
Fog Distance 750
Fog Color RGB(100,100,100)
Set Normalization On
REM * Initialise Variables
X#=500
Y#=25
Z#=250
Ang#=0
EX#=500
EY#=25
EZ#=750
EAng#=180
HP=100
EHP=100
REM * Set Up Synchronisation
Sync On
Sync Rate 0
REM * Start The Main Loop
Do
REM * End The Game If Some One Dies
If Attack<20 And EHP=0
GoSub EnemyDie
Endif
If EAttack<20 And HP=0
GoSub PlayerDie
Endif
REM * Show Stats
Ink RGB(255,255,255),RGB(0,0,0)
Set Cursor 0,0
Print "Player HP: ",HP
Set Cursor 0,20
Print "Enemy HP: ",EHP
REM * Store Old Variables
OldX#=X#
OldY#=Y#
OldZ#=Z#
OldAng#=Ang#
OldEX#=EX#
OldEY#=EY#
OldEZ#=EZ#
OldEAng#=EAng#
REM * Control Player
If UpKey()=1
X#=NewXValue(X#,Ang#,2)
Z#=NewZValue(Z#,Ang#,2)
EndIf
If DownKey()=1
X#=NewXValue(X#,Ang#,-2)
Z#=NewZValue(Z#,Ang#,-2)
EndIf
If X#<0 Then X#=0
If X#>1000 Then X#=1000
If Z#<0 Then Z#=0
If Z#>1000 Then Z#=1000
Ang#=WrapValue(Ang#+MouseMoveX())
Y#=Get Ground Height(1,X#,Z#)+25
If Attack>0
Ink RGB(0,200,0),RGB(0,0,0)
Center Text Object Screen X(11),(Object Screen Y(11)-200)+(Attack*2),"-5 HP"
Dec Attack
EndIf
REM * AI
Point Object 11,X#,Y#,Z#
EAng#=Object Angle Y(11)
EX#=NewXValue(EX#,EAng#,1)
EZ#=NewZValue(EZ#,EAng#,1)
EY#=Get Ground Height(1,EX#,EZ#)+25
If EAttack>0
Ink RGB(200,0,0),RGB(0,0,0)
Center Text Object Screen X(1),(Object Screen Y(1)-200)+EAttack,"-5 HP"
Dec EAttack
EndIf
REM * Update The Player
Position Object 1,X#,Y#,Z#
YRotate Object 1,CurveAngle(Ang#,Object Angle Y(1),5)
REM * Update The Enemy
Position Object 11,EX#,EY#,EZ#
YRotate Object 11,EAng#
REM * Update The Enemy Zone
Position Object 12,EX#,EY#,EZ#
REM * Collision
If Object Collision(1,11)>0
X#=OldX#
Y#=OldY#
Z#=OldZ#
EX#=OldEX#
EY#=OldEY#
EZ#=OldEZ#
If EAttack=0
EAttack=200
HP=HP-5
EndIf
Endif
If Object Collision(12,1)>0
If MouseClick()=1 And Attack=0
Attack=100
EHP=EHP-5
EndIf
EndIf
REM * Update The Player
Position Object 1,X#,Y#,Z#
YRotate Object 1,CurveAngle(Ang#,Object Angle Y(1),5)
REM * Update The Enemy
Position Object 11,EX#,EY#,EZ#
YRotate Object 11,EAng#
REM * Make Camera Follow Player
Set Camera To Follow X#,Y#,Z#,Ang#,200,Y#+200,3.5,0
Point Camera X#,Y#,Z#
REM * Update The Screen
Sync
REM * End The Main Loop
Loop
REM * Kill The Enemy
EnemyDie:
Dist=200
CAng=0
Do
CAng#=WrapValue(CAng#+1)
Dec Dist
If Dist<10 Then Dist=10
Fog Distance Dist*5
Set Camera To Follow EX#,EY#,EZ#,CAng#,Dist,EY#+Dist,3.5,0
Point Camera EX#,EY#,EZ#
Sync
Loop
REM * Kill The Player
PlayerDie:
Dist=200
CAng=0
Do
CAng#=WrapValue(CAng#+1)
Dec Dist
If Dist<10 Then Dist=10
Fog Distance Dist*5
Set Camera To Follow X#,Y#,Z#,CAng#,Dist,Y#+Dist,3.5,0
Point Camera X#,Y#,Z#
Sync
Loop
If you need any more help then just post.
Realms Of Tutopia: Rise Of Evil v0.2
www.freewebs.com/elbsoftware/index.htm