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.
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