gwidth = 800
gheight = 600
Graphics3D gwidth,gheight,32,2
HidePointer
Global player = CreatePivot()
PositionEntity player,0,45,-300
Global FPS,LastCheck,Frames,campitch#,mvx#,mvy#,mvz#
Global C = CreateCamera(player)
CameraClsColor C,0,0,0
CameraRange C,0.1,1500
CameraClsColor C,0,0,0;128,128,150
CameraFogRange C,500,1300
CameraFogMode C,1
CameraFogColor C,0,0,0;128,128,150
mx = MouseX()
my = MouseY()
plan = CreatePlane ()
p_t = LoadTexture ("Stone3_t2.jpg")
ScaleTexture p_t,100,100
EntityTexture plan,p_t
;======||===== BEGIN ANIMATION ====||==================
Const anim_stay = 1;
Const anim_walk = 2;
Const anim_go = 3;
Const anim_attack = 4;
Const anim_die = 5;
;=========== END ========================
;=======||======= ENEMY MODES =======
; режимы поведения врагов
Const emod_stay% = 1; свободная стойка
Const emod_walk% = 2; свободная ходьба
Const emod_go% = 3; враг направляется к персу
Const emod_attack% = 4; враг атакует перса
Const emod_die% = 5; враг умерает
;=======||=======||=======||=======
Type enemy
Field e_pivot; повот
Field e_model; модель
Field e_point; вей-поинт
Field e_name$; имя врага
Field e_mode; режим врага
Field e_life; жизнь врага
Field e_alert
End Type
Dim d_en.enemy(10); максимальное количество врагов
Global NumEnemy = -1
Dim EnemySeq(5,2)
EnemySF = OpenFile("enemies\dwarf\dwarf_anim.txt")
For i=0 To 4
EnemySS = ReadLine$(EnemySF)
EnemySeq(i,0) = EnemySS
EnemySS = ReadLine$(EnemySF)
EnemySeq(i,1) = EnemySS
Next
CloseFile(EnemySF)
Global EModPath$ = "enemies\"
; Создать_Врага(модель$,имя$,состояние%,X%,Y%,Z%,ang le%)
Function CRT_enemy(f_model$,f_name$,f_mode%,EX%,EY%,EZ%,Ang le%)
NumEnemy = NumEnemy + 1
d_en(NumEnemy) = New enemy
d_en(NumEnemy)\e_pivot = CreateSphere()
d_en(NumEnemy)\e_point = CreateSphere()
;PositionEntity d_en(NumEnemy)\e_point, EX, EY, EZ
PositionEntity d_en(i)\e_point,EntityX(d_en(i)\e_point)+Rnd(-P_di,P_di),EntityY(d_en(i)\e_point),EntityZ(d_en(i )\e_point)+Rnd(-P_di,P_di)
PositionEntity d_en(NumEnemy)\e_pivot, EX, EY, EZ
d_en(NumEnemy)\e_model = LoadAnimMesh(EModPath$+f_model$+"\"+f_model$+".b3d ",d_en(NumEnemy)\e_pivot)
PositionEntity d_en(NumEnemy)\e_model, 0,0,0
EntityType d_en(NumEnemy)\e_pivot, TypeEnemy
EntityRadius d_en(NumEnemy)\e_pivot, 40
d_en(NumEnemy)\e_name$ = f_name$
; вариан с ЧТЕНИЕМ Сикуенсов с масива
;ExtractAnimSeq (d_en(NumEnemy)\e_model,EnemySeq(0,1),EnemySeq(0,1 ))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,EnemySeq(1,1),EnemySeq(1,1 ))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,EnemySeq(2,1),EnemySeq(2,1 ))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,EnemySeq(3,1),EnemySeq(3,1 ))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,EnemySeq(4,1),EnemySeq(4,1 ))
; вариан с ЧТЕНИЕМ Сикуенсов с файла
;EAF = OpenFile(EModPath$+f_model$+"\"+f_model$+_anim.txt ")
;ExtractAnimSeq (d_en(NumEnemy)\e_model,Int(ReadLine$(EAF)),Int(Re adLine$(EAF)))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,Int(ReadLine$(EAF)),Int(Re adLine$(EAF)))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,Int(ReadLine$(EAF)),Int(Re adLine$(EAF)))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,Int(ReadLine$(EAF)),Int(Re adLine$(EAF)))
;ExtractAnimSeq (d_en(NumEnemy)\e_model,Int(ReadLine$(EAF)),Int(Re adLine$(EAF)))
;CloseFile(EAF)
ExtractAnimSeq (d_en(NumEnemy)\e_model,75,8

ExtractAnimSeq (d_en(NumEnemy)\e_model,2,14)
ExtractAnimSeq (d_en(NumEnemy)\e_model,16,26)
ExtractAnimSeq (d_en(NumEnemy)\e_model,112,126)
ExtractAnimSeq (d_en(NumEnemy)\e_model,230,251)
ScaleEntity d_en(NumEnemy)\e_model,1,1,1
d_en(NumEnemy)\e_mode = f_mode%
d_en(NumEnemy)\e_alert = f_mode%
EntityPickMode d_en(NumEnemy)\e_model, 2
NameEntity d_en(NumEnemy)\e_model, "model DWARF"
d_en(NumEnemy)\e_life = 100
TurnEntity d_en(NumEnemy)\e_pivot, 0, Angle, 0
End Function
;константы разстояния и атаки
Const V_di = 200; Visible_DIstance - бот замечает перса
Const S_di = 400; Stay_DIstance - бот наченает движение, если стоял
Const A_di = 70; Attack_DIstance - бот атакует
Const P_di = 500; Pivot_DIstance - создается вей-пивот
Global BOT$ = " "
Global BOT_LIFE
Global MYLIFE# = 300
Global KILLS = 0
Repeat
UDT_enemy()
move_me()
UpdateWorld
RenderWorld
GetFPS()
Text 10,10,FPS
Text 10,30,"X "+Str(EntityX(player))+" Y "+EntityY(player)+" Z "+EntityZ(player)
Text 10,70,"POLYGONS: " + TrisRendered()
Text 10,90,BOT$
Text 10,110,Str(BOT_LIFE)
Text 10,130,Str(MYLIFE)
Text 10,150,Str(KILLS)
Text 200,10,EnemySeq(0,0)+" - "+EnemySeq(0,1)
Text 200,30,EnemySeq(1,0)+" - "+EnemySeq(1,1)
Text 200,50,EnemySeq(2,0)+" - "+EnemySeq(2,1)
Text 200,70,EnemySeq(3,0)+" - "+EnemySeq(3,1)
Text 200,90,EnemySeq(4,0)+" - "+EnemySeq(4,1)
Flip False
Until KeyHit(1)
End
Function GetFPS()
Frames = Frames + 1
If MilliSecs() > LastCheck+1000 Then
LastCheck = MilliSecs()
FPS = Frames
Frames = 0
EndIf
Return FPS
End Function
Function move_me()
V#=0.7
u#=60
TurnEntity c,MouseYSpeed()*0.25,0,0
TurnEntity player,0,-MouseXSpeed()*0.25,0
If KeyDown(30)=1 Then MoveEntity player,-V#,0,0
If KeyDown(32)=1 Then MoveEntity player,V#,0,0
If KeyDown(17)=1 Then MoveEntity player,0,0,+V#
If KeyDown(31)=1 Then MoveEntity player,0,0,-V#:iWalking = True
If KeyDown(203)=1 Then MoveEntity player,-V#,0,0
If KeyDown(205)=1 Then MoveEntity player,V#,0,0
If KeyDown(200)=1 Then MoveEntity player,0,0,+V#
If KeyDown(20

=1 Then MoveEntity player,0,0,-V#
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
If Abs(EntityPitch#(c))>u# RotateEntity c,u#*Sgn(EntityPitch#(c)),0,0
End Function