I fixed the old error, but im wondering whenever i Click on an item to use it, most of the time i have to click it twice to four times.
AppTitle "Game Test"
Const width=900,height=700
Graphics3D width,height,32,2
Global T = LoadTerrain("Terrain.png")
Ttex = LoadTexture("TerrainTex.jpg")
Global Panel = LoadImage("Panel.png")
Global goldicon = LoadImage("goldicon.png")
Global poticon = LoadImage("poticon.png")
Global deathsound = LoadSound("death.wav")
Global losesound = LoadSound("lose.wav")
Global zapsound = LoadSound("zap.wav")
Global lvlupsound = LoadSound("lvlup.wav")
Global hitsound = LoadSound("hit.wav")
Global goldsound = LoadSound("gold.wav")
Global RESETR = True
SeedRnd MilliSecs()
ScaleTexture Ttex,256,256
EntityTexture T,Ttex
ScaleEntity T,2,100,2
Sky = CreateSphere(44)
ScaleEntity Sky,700,700,700
FlipMesh Sky
EntityColor Sky,180,180,245
;Setup Camera
Global Camera = CreateCamera()
CameraViewport Camera,0,0,width,height
CameraRange Camera,1,9000
;======================================
;Setup Player
;======================================
Type Player
Field model,hp,attack,maxhp,experience,nextlvl,lvl,maxattack,cooled,Current#,maxtime#,gold
End Type
player.Player = New Player
player\lvl = 1
player\nextlvl = 100
player\experience = 0
player\model = CreateSphere(44)
EntityColor player\model,255,105,0
MoveEntity player\model,50,0,50
player\hp = 15
player\maxhp = 15
player\attack = 1
player\maxattack = 2
player\cooled = True
player\maxtime# = 3
player\current# = 3.0
player\gold = 0
;======================================
;Update Hostile
;======================================
Global IDLE,CONFRONT,DEAD,FLEE
IDLE = 1
CONFRONT = 2
DEAD = 3
FLEE = 4
Type Hostile
Field model,hp,attack,attackrange,state,target.player,ox,oz,fleepivot,cooled,Current#,maxtime#
End Type
Function CreateHostile.hostile(spec,x,z)
A.hostile = New hostile
Select spec
Case 1
A\model = CreateSphere(22)
A\hp = 5
A\attack = 2
A\attackrange = 20
A\state = IDLE
A\maxtime# = 5.0
A\cooled = True
A\current# = 0.0
End Select
A\ox = x
A\oz = z
A\fleepivot = CreatePivot()
PositionEntity A\fleepivot,x,TerrainY(t,x,0,z),z
PositionEntity A\model,x,0,z
Return A
End Function
Function UpdateHostile()
For A.hostile = Each hostile
A\current# = A\current# + 0.1
If A\maxtime# <= A\current#
A\cooled = True
A\current# = 0.0
EndIf
PositionEntity A\model,EntityX(A\model),3+TerrainY(T,EntityX(A\model),0,EntityZ(a\model)),EntityZ(A\model)
If A\hp < 1
A\state = DEAD
For P.player = Each player
P\experience = P\experience + 15
Next
EndIf
Select A\state
Case IDLE
For P.player = Each player
If EntityDistance(A\model,P\model) < A\attackrange And P\hp > 0
A\target.player = P
A\state = CONFRONT
EndIf
Next
Case CONFRONT
If EntityDistance(A\model,A\target\model) < 4
If A\cooled = True
A\target\hp = A\target\hp - A\attack
A\cooled = False
If A\target\hp < 1
A\state = flee
EndIf
EndIf
Else
PointEntity A\model,A\target\model
MoveEntity A\model,0,0,1
EndIf
If (Abs(EntityX(A\model) + EntityZ(A\model)- A\ox-A\oz)) > 120
A\state = FLEE
EndIf
Case DEAD
Display("Gray Ball has died.",500,35,255,0,0,5)
PlaySound deathsound
CreateItem(Rand(1,2),EntityX(A\model),EntityZ(A\model))
FreeEntity A\model
Delete A
Case FLEE
PointEntity A\model,A\fleepivot
MoveEntity A\model,0,0,1
If EntityDistance(A\model,A\fleepivot) < 3
A\state = IDLE
EndIf
End Select
Next
End Function
;======================================
;Setup Items
;======================================
Type Item
Field model,amount,name$
End Type
Function CreateItem.Item(spec,x,z)
A.Item = New Item
Select spec
Case 1
A\model = CreateCone()
EntityColor A\model,255,0,0
A\amount = 5
A\name$ = "Potion I"
Case 2
A\model = CreateCylinder()
EntityColor A\model,205,160,0
ScaleEntity A\model,1,.01,1
RotateEntity A\model,90,0,0
A\amount = Rand(1,4)
A\name$ = "Gold coins"
End Select
PositionEntity A\model,x,3+TerrainY(T,x,0,z),z
EntityShininess A\model,1
Return A
End Function
Function UpdateItem()
For A.Item = Each Item
For P.player = Each player
If EntityDistance(P\model,A\model) < 2
PickUpItem(A)
EndIf
Next
Next
.skip
End Function
;======================================
For X = 1 To 9
I.item_v = New item_v
I\slot = x:I\state = Empty()
I\img = CreateImage(25,25)
Next
;======================================
;======================================
;======================================
;======================================
;======================================
;======================================
;======================================
While Not KeyDown(1)
Cls
If RESETR = True
RESETR = False
CreateHostile(1,25,25)
CreateItem(1,50,25)
CreateItem(1,25,50)
For X = 1 To 25
CreateHostile(1,65+Rand(0,200),65+(Rand(0,200)))
Next
EndIf
UpdateCamera(Camera,player\model)
UpdateHostile()
UpdateItem()
UpdatePlayer()
If MouseHit(1)
DebugLog MouseX() + "," + MouseY()
EndIf
UpdateWorld
RenderWorld
UpdateText()
Color 0,0,0
Rect 495,32,150,15
Color 100,100,100
Rect 500,35,150,13
Color 0,0,0
Rect 24,24,102,7
Color 255,0,0
Rect 25,25,player\hp*(100.0/player\maxhp),5
Text 25,10,"Health"
Text 25,55,"Press A while next to an enemy (gray ball) to attack."
Text 25,65,"The red cones restore health."
DrawImage Panel,750,0
UpdateInventory()
Text 807,418,player\gold
Color 0,0,0
Rect 0,100,150,500
Color 255,0,0
Text 5,100," Level " + player\lvl
Text 5,115,"HP: " + player\hp + "/" + player\maxhp
Text 5,130,"Dmg: " + player\attack + " - " + player\maxattack
Text 5,150,"Exp: " + player\experience + "/" + player\nextlvl
Flip
Wend
End
;======================================
;======================================
;======================================
;======================================
;======================================
;======================================
Function UpdateCamera(cam,pID)
If KeyDown(200)
MoveEntity pID,0,0,0.45
EndIf
If KeyDown(203)
TurnEntity pID,0,1,0
EndIf
If KeyDown(208)
MoveEntity pID,0,0,-0.45
EndIf
If KeyDown(205)
TurnEntity pID,0,-1,0
EndIf
PositionEntity pID,EntityX(pID),3+TerrainY(T,EntityX(pID),0,EntityZ(pID)),EntityZ(pID)
PositionEntity cam,EntityX(pID),EntityY(pID),EntityZ(pID)
RotateEntity cam,EntityRoll(pID),EntityYaw(pID),EntityPitch(pID)
MoveEntity cam,0,8,-16
End Function
;================================================
;================================================
;================================================
Function UpdatePlayer()
For P.player = Each player
P\current# = P\current# + 0.1
If P\maxtime# <= P\current#
P\cooled = True
P\current# = 0.0
EndIf
If P\hp > P\maxhp
P\hp = P\maxhp
EndIf
If P\hp < 1
For A.Item = Each Item
FreeEntity A\model
Delete A
Next
For H.hostile = Each hostile
FreeEntity H\model
Delete H
Next
RESETR = True
Cls
Flip
Color 255,0,0
Text 200,200,"You have died!"
PlaySound losesound
Flip
Delay(500)
Text 200,250,"Reloading the game.."
Flip
P\hp = P\maxhp
PositionEntity P\model,50,0,50
RotateEntity P\model,0,0,0
Delay(2000)
EndIf
If KeyHit(30)
For H.hostile = Each hostile
If EntityDistance(H\model,P\model) < 5 And P\cooled = True
PlaySound hitsound
P\cooled = False
H\hp = H\hp - Rand(P\attack,P\maxattack)
EndIf
Next
EndIf
If P\experience >= P\nextlvl
LevelUpPlayer(P)
EndIf
Next
End Function
Function LevelUpPlayer(p.player)
Display("Level up!.",500,35,255,0,0,5)
PlaySound lvlupsound
p\nextlvl = p\nextlvl + (30*p\lvl)
p\maxhp = p\maxhp + (5*p\lvl)
p\attack = p\attack + 1
p\maxattack = p\maxattack + 1
p\lvl = p\lvl + 1
p\experience = 0
End Function
;================================================
;Text Display
;================================================
Type DisplayText
Field x,y,r,g,b,tex$,current#,max#
End Type
Function Display.DisplayText(tex$,x,y,r,g,b,time#)
Te.DisplayText = New DisplayText
Te\x = x
Te\y = y
Te\r = r
Te\g = g
Te\b = b
Te\current# = 0.0
Te\max# = time#
Te\tex$ = tex$
Return Te
End Function
Function UpdateText()
For Te.DisplayText = Each DisplayText
Te\current# = Te\current# + .1
R = ColorRed()
G = ColorGreen()
B = ColorBlue()
Color Te\r,Te\g,Te\b
Text Te\x,Te\y,Te\tex$
Color R,G,B
If Te\current# >= Te\max#
Delete Te
EndIf
Next
End Function
;=================================================
;Inventory
;=================================================
Type Item_V
Field slot,img,x,y,name$,tooltip$,state,increase$,amount
End Type
;Type Inventory
; Field I1.item_v,I2.item_v,I3.item_v,i4.item_v,i5.item_v,i6.item_v,i7.item_v,i8.item_v,i9.item_v
;End Type
Function Empty():Return False:End Function
Function Full():Return True:End Function
Function MouseOverItem_V(I.Item_V)
If MouseX() > I\x And MouseY() > I\y
If MouseX() < I\x + 50 And MouseY() < I\y + 50
Return True
Else
Return False
EndIf
EndIf
End Function
Function UpdateInventory()
For A.Item_V = Each Item_V
If A\state = Full()
DrawImage A\img,A\x,A\y
If MouseOverItem_V(A)
Text 763,465,A\name$
Text 763,480,A\tooltip$
EndIf
EndIf
Next
If MouseHit(1)
For A.Item_V = Each Item_V
If MouseOverItem_V(A)
UseItem(slot)
EndIf
Next
EndIf
End Function
Function PickupItem(A.item)
Done = False
For I.item_v = Each item_v
If I\state = Empty() And Done = False
Done = True
Select A\name$
Case "Potion I"
I\increase$ = "health"
I\amount = 5
I\img = poticon
I\name$ = "Potion I"
I\tooltip$ = "Heals for 5 health."
Case "Gold coins"
I\increase$ = "gold"
I\amount = Rand(1,4)
I\img = goldicon
I\name$ = "Gold coins"
I\tooltip$ = I\amount + " gold coins."
End Select
I\state = Full()
I\x = GetItem_VX(I\slot)
I\y = GetItem_VY(I\slot)
FreeEntity A\model
Delete A
EndIf
Next
End Function
Function UseItem(slot)
For C.Item_V = Each Item_V
If MouseOverItem_V(C) And C\state = Full()
Select C\name$
Case "Gold coins"
For P.player = Each player
p\gold = p\gold + C\amount
Next
Case "Potion I"
For P.player = Each player
P\hp = P\hp + C\amount
Next
End Select
C\state = Empty()
C\increase$ = ""
C\amount = 0
C\img = 0
C\name$ = ""
C\tooltip$ = ""
EndIf
Next
End Function
Function GetItem_VX(slot)
Select Slot
Case 1
Return 759
Case 2
Return 813
Case 3
Return 864
Case 4
Return 759
Case 5
Return 811
Case 6
Return 863
Case 7
Return 758
Case 8
Return 809
Case 9
Return 858
End Select
End Function
Function GetItem_VY(slot)
Select Slot
Case 1
Return 549
Case 2
Return 549
Case 3
Return 549
Case 4
Return 599
Case 5
Return 599
Case 6
Return 599
Case 7
Return 649
Case 8
Return 649
Case 9
Return 649
End Select
End Function
|