Well you CAN do something useful with Engine3d
Posted: Thu Oct 04, 2007 3:06 am
Check out this FP shooter accuracy tester:
http://dracsoft.com/zips/FPSTester.zip
http://dracsoft.com/zips/FPSTester.zip
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
---------------------------
IrfanView
---------------------------
Warning !
The file: "E:\~ Temp ~\2007-10-4 1191507307\shot1.png" is a BMP file with incorrect extension !
Rename ?
---------------------------
Yes No
---------------------------
Code: Select all
;FPSTrainer - Copyright 2007 DracSoft - License: GNU GPL (www.gnu.org)
;todo - 'session log' of screenshots of every shot fired in a datetimed directory
;todo - 'onscreen accuraccy + totals
Define.f KeyX, KeyY, MouseX, MouseY
#RobotMesh = 90
#RobotTexture = 90
#Robot = 90
movex.f = Random(100)/100+0.5
movez.f = Random(100)/100+0.5
movey.f = Random(100)/100+0.5
scTerSize = 1024
mLwasdown = 0
isfullscreen=Val(ProgramParameter())
maxTime = Val(ProgramParameter())
startMs = ElapsedMilliseconds()
shotsFired.f=0
shotsHit.f=0
shotCounter=0
sessionFolder.s=Str(Year(Date()))+"-"+Str(Month(Date()))+"-"+Str(Day(Date()))+" "+Str(Date())
If InitEngine3D()
Add3DArchive("\", #PB_3DArchive_FileSystem)
InitSound()
InitSprite()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseOGGSoundDecoder()
InitKeyboard()
InitMouse()
LoadSound(0,"./hit.ogg")
LoadSound(1,"./miss.wav")
If isfullscreen
OpenScreen(640,480,32,"FPS Trainer")
Else
OpenWindow(0,0,0,640,480,"FPS Trainer",#PB_Window_TitleBar|#PB_Window_SystemMenu|#PB_Window_Maximize|#PB_Window_Minimize|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(0),0,0,640,480,1,0,0)
EndIf
If 1=1
LoadSprite(1,"gun.PNG")
LoadSprite(2,"gunfire.PNG")
EnableWorldPhysics(1)
EnableWorldCollisions(1)
WorldShadows(#PB_Shadow_Additive)
WorldGravity(30)
AmbientColor(RGB(255,255,255))
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateTerrain("Terrain.png", MaterialID(0), 1,1,1, 4)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
SkyDome("Clouds.jpg",10)
LoadMesh (#RobotMesh , "Robot.mesh")
LoadTexture(#RobotTexture, "skin.jpg")
LoadTexture(#RobotTexture+1, "skinhit.jpg")
CreateMaterial(0, TextureID(#RobotTexture))
CreateMaterial(1, TextureID(#RobotTexture+1))
CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
ScaleEntity(#robot,0.1,0.1,0.1)
SetEntityMass(#robot,69)
EntityMaterial(#Robot, MaterialID(0))
EntityLocate(#robot,100,TerrainHeight(100,100),100)
EntityRenderMode(#robot,#PB_Entity_CastShadow)
EntityPhysicBody(#Robot,#PB_Entity_BoxBody)
AnimateEntity(#Robot, "Walk")
DisableMaterialLighting(0, 1)
MaterialAmbientColor(0, RGB(100, 100, 100))
MaterialSpecularColor(0, RGB(255, 255, 255))
ScrollMaterial(0, 0.15, 0, 1)
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,scTerSize/2,TerrainHeight(scTerSize/2,scTerSize/2)+10,scTerSize/2)
CameraLookAt(0,EntityX(#robot),EntityY(#robot),EntityZ(#robot))
; CameraBackColor(0, RGB(0, 0, 255))
Repeat
event=WindowEvent()
If setphys
EnableWorldPhysics(1)
EntityPhysicBody(#Robot,#PB_Entity_BoxBody)
SetEntityMass(#robot,69)
setphys=0
EndIf
ClearScreen(RGB(0, 0, 0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_A)
KeyX = -2
ElseIf KeyboardPushed(#PB_Key_D)
KeyX = 2
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_W)
KeyY = -2
ElseIf KeyboardPushed(#PB_Key_S)
KeyY = 2
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_Add)
Frame.f+0.005
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/5
MouseY = -MouseDeltaY()/5
EndIf
RotateEntity(#Robot, 1, 0, 0)
RotateCamera(0, MouseX, MouseY, 0)
MoveCamera (0, KeyX, 0, KeyY)
CameraLocate(0,CameraX(0),TerrainHeight(CameraX(0),CameraZ(0))+10,CameraZ(0))
EntityLocate(#robot,EntityX(#robot)+movex,EntityY(#robot)+movey,EntityZ(#robot)+movez)
If EntityY(#robot)<=TerrainHeight(EntityX(#robot),EntityZ(#robot)) Or prevEX < 0 Or prevEX > scTerSize Or prevEZ < 0 Or prevEZ > scTerSize
;EntityLocate(#robot,EntityX(#robot),TerrainHeight(EntityX(#robot),EntityY(#robot)),EntityZ(#robot))
ex=Random(scTerSize/2)
ez=Random(scTerSize/2)
EntityLocate(#robot,ex,TerrainHeight(ex,ez),ez)
EnableWorldPhysics(0)
movex.f = Random(100)/100+0.5
movez.f = Random(100)/100+0.5
movey.f = Random(100)/100+0.5
setphys=1
EntityMaterial(#robot,MaterialID(0))
EndIf
RenderWorld()
If MouseButton(1) And mlwasDown=0
DisplayTransparentSprite(2,0,0) ;fire!
Else
DisplayTransparentSprite(1,0,0) ;normal
EndIf
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(RGB(255,255,255))
DrawText(10,10,"Loc: "+Str(CameraX(0))+", "+Str(CameraZ(0)))
DrawText(10,25,"Fired: "+Str(shotsFired))
DrawText(10,40,"Hit: "+Str(shotsHit))
If shotsfired>0
DrawText(10,55,"Acc%: "+Str((shotsHit/shotsFired)*100.0))
Else
DrawText(10,70,"Acc%: n/a")
EndIf
DrawText(10,85,"Time: "+Str((ElapsedMilliseconds()-startms)/1000)+" s")
StopDrawing()
FlipBuffers()
If MouseButton(1) And mlwasDown=0
GrabSprite(3,295,215,50,50)
StartDrawing(SpriteOutput(3))
shotsfired+1
For i = 23 To 27
For j = 23 To 27
p=Point(i,j)
If Red(p)>230 And Green(p)<10 And Blue(p)<10
EntityMaterial(#robot,MaterialID(1))
hitStr.s="H"
PlaySound(0)
Break
EndIf
Next
Next
DrawingMode(#PB_2DDrawing_Outlined)
Box(22,22,6,6,RGB(0,255,0))
StopDrawing()
If hitStr="H"
shotshit+1
Else
PlaySound(1)
EndIf
If shotsfired=1
CreateDirectory("./"+sessionFolder)
EndIf
SaveSprite(3,"./"+sessionFolder+"/shot"+Str(shotsFired)+hitStr.s+".png")
hitStr.s = ""
mlwasDown=1
EndIf
If MouseButton(1)
mLwasdown=1
Else
mLwasdown=0
EndIf
prevEX = EntityX(#robot)
prevEY = EntityY(#robot)
prevEZ = EntityZ(#robot)
If (ElapsedMilliseconds()-startms)/1000 >= maxTime And maxtime>0
Quit=1
EndIf
Delay(10) ;60+fps
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
If shotsfired>0
fid=CreateFile(#PB_Any,"./"+sessionFolder+"/stats.log")
If fid<>0
WriteStringN(fid,"Fired: "+Str(shotsFired))
WriteStringN(fid,"Hit: "+Str(shotsHit))
WriteStringN(fid,"Acc%: "+Str((shotsHit/shotsFired)*100.0))
WriteStringN(fid,"Time (s): "+Str((ElapsedMilliseconds()-startms)/1000))
CloseFile(fid)
EndIf
EndIf
End
; IDE Options = PureBasic v4.02 (Windows - x86)
; CursorPosition = 229
; FirstLine = 199
; Folding = -
; Executable = FPSTrainer.exe
; DisableDebugger
Ollivier wrote:There's no source! It's a commercial project?
No because the baker will most likely bake new bread ^o^Ollivier wrote:2 kaeru
There's no bread! Does the baker fall ill?
Code: Select all
;FPSTrainer - Copyright 2007 DracSoft - License: GNU GPL (www.gnu.org)
;3D engine : OGRE. License : See www.ogre3d.org
;FPSTrainer - Copyright 2007 DracSoft - License: GNU GPL (www.gnu.org)
;3D engine : OGRE. License : See www.ogre3d.org
Global m_hMidiOut,m_MIDIOpen.b
Procedure SendMIDIMessage(nStatus.l,nCanal.l,nData1.l,nData2.l)
dwFlags.l = nStatus | nCanal | (nData1 << 8 ) | (nData2 << 16)
temp.l = midiOutShortMsg_ (m_hMidiOut,dwFlags) ;
If temp<>0
MessageRequester ( "Problème" , "Erreur dans l'envoi du message MIDI" ,0)
EndIf
EndProcedure
Procedure MIDIOpen()
If m_MIDIOpen = 0
If midiOutOpen_ (@m_hMidiOut,MIDIMAPPER,0,0,0) <> 0
MessageRequester ( "Problème" , "Impossible d'ouvrir le périphérique MIDI" ,0)
Else
SendMIDIMessage($C0,0,0,0)
m_MIDIOpen = 1
EndIf
EndIf
EndProcedure
Procedure PlayNoteMIDI(Canal.b,Note.b,VelociteDown.b,VelociteUp.b)
If m_MIDIOpen
SendMIDIMessage($80 | Canal,0,Note,VelociteDown)
SendMIDIMessage($90 | Canal,0,Note,VelociteUp)
EndIf
EndProcedure
Procedure ChargeInstrument(Canal.b,Instrument.b)
If m_MIDIOpen
SendMIDIMessage($C0 | Canal,0,Instrument,0)
EndIf
EndProcedure
MIDIOpen()
ChargeInstrument(0,127) ; canal , instrument
;FPSTrainer - Copyright 2007 DracSoft
;todo - 'session log' of screenshots of every shot fired in a datetimed directory
;todo - 'onscreen accuraccy + totals
Define.f KeyX, KeyY, MouseX, MouseY
#RobotMesh = 90
#RobotTexture = 90
#Robot = 90
movex.f = Random(100)/100+0.5
movez.f = Random(100)/100+0.5
movey.f = Random(100)/100+0.5
scTerSize = 1024
mLwasdown = 0
isfullscreen=Val(ProgramParameter())
maxTime = Val(ProgramParameter())
startMs = ElapsedMilliseconds()
shotsFired.f=0
shotsHit.f=0
shotCounter=0
sessionFolder.s=Str(Year(Date()))+"-"+Str(Month(Date()))+"-"+Str(Day(Date()))+" "+Str(Date())
If InitEngine3D()
Add3DArchive("E:\FPS\", #PB_3DArchive_FileSystem)
InitSound()
InitSprite()
UsePNGImageDecoder()
UsePNGImageEncoder()
UseOGGSoundDecoder()
InitKeyboard()
InitMouse()
; LoadSound(0,"./hit.ogg")
; LoadSound(1,"./miss.wav")
If isfullscreen
OpenScreen(640,480,32,"FPS Trainer")
Else
OpenWindow(0,0,0,640,480,"FPS Trainer",#PB_Window_TitleBar|#PB_Window_SystemMenu|#PB_Window_Maximize|#PB_Window_Minimize|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(0),0,0,640,480,1,0,0)
EndIf
If 1=1
LoadSprite(1,"E:\FPS\gun.PNG")
LoadSprite(2,"E:\FPS\gunfire.PNG")
EnableWorldPhysics(1)
EnableWorldCollisions(1)
WorldShadows(#PB_Shadow_Additive)
WorldGravity(30)
AmbientColor(RGB(255,255,255))
CreateMaterial (0, LoadTexture(0, "Terrain_Texture.jpg"))
AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
CreateTerrain("Terrain.png", MaterialID(0), 1,1,1, 4)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 128, 25, 128)
SkyDome("Clouds.jpg",10)
LoadMesh (#RobotMesh , "Robot.mesh")
LoadTexture(#RobotTexture, "skin.jpg")
LoadTexture(#RobotTexture+1, "skinhit.jpg")
CreateMaterial(0, TextureID(#RobotTexture))
CreateMaterial(1, TextureID(#RobotTexture+1))
CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
ScaleEntity(#robot,0.1,0.1,0.1)
SetEntityMass(#robot,69)
EntityMaterial(#Robot, MaterialID(0))
EntityLocate(#robot,100,TerrainHeight(100,100),100)
EntityRenderMode(#robot,#PB_Entity_CastShadow)
EntityPhysicBody(#Robot,#PB_Entity_BoxBody)
AnimateEntity(#Robot, "Walk")
DisableMaterialLighting(0, 1)
MaterialAmbientColor(0, RGB(100, 100, 100))
MaterialSpecularColor(0, RGB(255, 255, 255))
ScrollMaterial(0, 0.15, 0, 1)
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,scTerSize/2,TerrainHeight(scTerSize/2,scTerSize/2)+10,scTerSize/2)
CameraLookAt(0,EntityX(#robot),EntityY(#robot),EntityZ(#robot))
; CameraBackColor(0, RGB(0, 0, 255))
Repeat
event=WindowEvent()
If setphys
EnableWorldPhysics(1)
EntityPhysicBody(#Robot,#PB_Entity_BoxBody)
SetEntityMass(#robot,69)
setphys=0
EndIf
ClearScreen(RGB(0, 0, 0))
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -2
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 2
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -2
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 2
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_Add)
Frame.f+0.005
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX()/5
MouseY = -MouseDeltaY()/5
EndIf
RotateEntity(#Robot, 1, 0, 0)
RotateCamera(0, MouseX, MouseY, 0)
MoveCamera (0, KeyX, 0, KeyY)
CameraLocate(0,CameraX(0),TerrainHeight(CameraX(0),CameraZ(0))+10,CameraZ(0))
EntityLocate(#robot,EntityX(#robot)+movex,EntityY(#robot)+movey,EntityZ(#robot)+movez)
If EntityY(#robot)<=TerrainHeight(EntityX(#robot),EntityZ(#robot)) Or prevEX < 0 Or prevEX > scTerSize Or prevEZ < 0 Or prevEZ > scTerSize
;EntityLocate(#robot,EntityX(#robot),TerrainHeight(EntityX(#robot),EntityY(#robot)),EntityZ(#robot))
ex=Random(scTerSize/2)
ez=Random(scTerSize/2)
EntityLocate(#robot,ex,TerrainHeight(ex,ez),ez)
EnableWorldPhysics(0)
movex.f = Random(100)/100+0.5
movez.f = Random(100)/100+0.5
movey.f = Random(100)/100+0.5
setphys=1
EntityMaterial(#robot,MaterialID(0))
EndIf
RenderWorld()
If MouseButton(1) And mlwasDown=0
DisplayTransparentSprite(2,0,0) ;fire!
Else
DisplayTransparentSprite(1,0,0) ;normal
EndIf
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(RGB(255,255,255))
DrawText(10,10,"Loc: "+Str(CameraX(0))+", "+Str(CameraZ(0)))
DrawText(10,25,"Fired: "+Str(shotsFired))
DrawText(10,40,"Hit: "+Str(shotsHit))
If shotsfired>0
DrawText(10,55,"Acc%: "+Str((shotsHit/shotsFired)*100.0))
Else
DrawText(10,70,"Acc%: n/a")
EndIf
DrawText(10,85,"Time: "+Str((ElapsedMilliseconds()-startms)/1000)+" s")
StopDrawing()
FlipBuffers()
If MouseButton(1) And mlwasDown=0
GrabSprite(3,295,215,50,50)
StartDrawing(SpriteOutput(3))
shotsfired+1
For i = 23 To 27
For j = 23 To 27
p=Point(i,j)
If Red(p)>230 And Green(p)<10 And Blue(p)<10
EntityMaterial(#robot,MaterialID(1))
hitStr.s="H"
PlayNoteMIDI(0,50, 127, 80)
Break
EndIf
Next
Next
DrawingMode(#PB_2DDrawing_Outlined)
Box(22,22,6,6,RGB(0,255,0))
StopDrawing()
If hitStr="H"
shotshit+1
Else
PlayNoteMIDI(0,50, 127, 80)
EndIf
hitStr.s = ""
mlwasDown=1
EndIf
If MouseButton(1)
mLwasdown=1
Else
mLwasdown=0
EndIf
prevEX = EntityX(#robot)
prevEY = EntityY(#robot)
prevEZ = EntityZ(#robot)
If (ElapsedMilliseconds()-startms)/1000 >= maxTime And maxtime>0
Quit=1
EndIf
Delay(10) ;60+fps
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End