Re-post.
Code: Select all
InitSound()
#SampleRate = 44100
#Bits = 16
#Channels = 1
Procedure tambores()
totalSeconds = 12
samplesTotal = totalSeconds * #SampleRate
dataSize = samplesTotal * 2
wavSize = 44 + dataSize
*wav = AllocateMemory(wavSize)
*data = *wav + 44
PokeL(*wav + 0, $46464952)
PokeL(*wav + 4, wavSize - 8)
PokeL(*wav + 8, $45564157)
PokeL(*wav + 12, $20746D66)
PokeL(*wav + 16, 16)
PokeW(*wav + 20, 1)
PokeW(*wav + 22, #Channels)
PokeL(*wav + 24, #SampleRate)
PokeL(*wav + 28, #SampleRate * 2)
PokeW(*wav + 32, 2)
PokeW(*wav + 34, #Bits)
PokeL(*wav + 36, $61746164)
PokeL(*wav + 40, dataSize)
beatEvery = #SampleRate / 8
kickDur = 0.15 * #SampleRate
snareDur = 0.12 * #SampleRate
For i = 0 To samplesTotal - 1
If i < (#SampleRate * 5)
octave = 1.0
ElseIf i < (#SampleRate * 6)
s = 0
PokeW(*data + i * 2, s)
Continue
ElseIf i < (#SampleRate * 11)
octave = 2.0
Else
s = 0
PokeW(*data + i * 2, s)
Continue
EndIf
pos = i % beatEvery
If pos < kickDur
t.d = pos / #SampleRate
freq.d = (180 - t * 150) * octave
env.d = Exp(-t * 12)
s = Sin(2 * #PI * freq * t) * env * 30000
ElseIf pos < (kickDur + snareDur)
t.d = (pos - kickDur) / #SampleRate
env.d = Exp(-t * 20)
noise = (Random(65535) - 32768)
s = noise * env * 0.5
Else
s = 0
EndIf
PokeW(*data + i * 2, s)
Next
If CatchSound(0, *wav, wavSize)
SetSoundFrequency(0,34100)
PlaySound(0,#PB_Sound_Loop)
EndIf
EndProcedure
Global font= LoadFont(#PB_Any,"Segoe UI Emoji",30)
Global fontb= LoadFont(#PB_Any,"Segoe UI Emoji",15,#PB_Font_Bold)
Global lives= 5, enemys=5, mateMarca, tt3dMarca,tt3dMarca2, bill
Global enemymesh, mme
Global Player
Global msg.s= "Whats up TRON?"
Global modo.b= 0
Global timer, ronda, record= 10000
Global NewList npcs.i()
Global NewMap bbb.i()
Procedure drawMenu()
Protected.s t
Static x= 1000, ink
If x%20=0
ink= RGBA(Random(100)+155,Random(100)+155,Random(100)+155,255)
EndIf
StartDrawing(CanvasOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
w=OutputWidth():h=OutputHeight()
Box(0,0,w,h,$ff000000)
DrawingFont(FontID(fontb))
DrawText((w-TextWidth("Whats up TRON? or ¿Qué pasa TRON? - [Space to play]"))/2,-5,"Whats up TRON? or ¿Qué pasa TRON? - [Space to play]",$ff88ffaa)
DrawText(x,20,msg,ink)
x-2:If x<-TextWidth(msg):x=w:EndIf
StopDrawing()
EndProcedure
Procedure drawMarcador()
Protected.s t
StartDrawing(CanvasOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
w=OutputWidth():h=OutputHeight()
Box(0,0,w,h,$ff000000)
DrawingFont(FontID(font))
DrawText(10,-5,"🤖 Lives: "+Str(lives),$ff33ff33)
t= "👾: Enemys:"+Str(enemys)
DrawText(w-(TextWidth(t)+10),-5,t,$ff3333ff)
DrawText((w-TextWidth(msg))/2,0,msg,$ff00ffff)
StopDrawing()
EndProcedure
Procedure drawGameOver()
Protected.s t
StartDrawing(CanvasOutput(0))
DrawingMode(#PB_2DDrawing_AlphaBlend)
w=OutputWidth():h=OutputHeight()
Box(0,0,w,h,$ff000000)
DrawingFont(FontID(font))
t= "GAME OVER - Score:"+Str(timer)+" Record:"+Str(record)+" - Space play again"
DrawText((w-TextWidth(t))/2,-5,t,RGBA(Random(255),Random(255),Random(255),255))
For p= 1 To 5
Circle(Random(w-1),Random(h-1),Random(3,1),RGBA(Random(255),Random(255),Random(255),255))
Next p
StopDrawing()
EndProcedure
Procedure npc(enti)
Protected.f dx, dy, dz ; vector hacia el player
Protected.f dist ; distancia real
Protected.f nx, ny, nz ; vector normalizado
Protected.f desiredDist = 0 ; distancia mínima
Protected.f force = 8.0 ; fuerza de movimiento
Protected.f fx, fy, fz ; fuerza final
Static kk
ForEach npcs()
; VECTOR HACIA EL PLAYER
dx = EntityX(enti) - EntityX(npcs()): dy = EntityY(enti) - EntityY(npcs()): dz = EntityZ(enti) - EntityZ(npcs())
; DISTANCIA
dist = Sqr(dx*dx + dy*dy + dz*dz)
; NORMALIZAR
If dist > 0
nx = dx / dist: ny = dy / dist: nz = dz / dist
EndIf
; MANTENER DISTANCIA
If dist > desiredDist
fx = nx * force: fy = ny * force: fz = nz * force
Else
fx = 0: fy = 0: fz = 0
EndIf
; APLICAR FUERZA
ApplyEntityForce(npcs(), fx, fy, fz)
EntityAngularFactor(npcs(), 0, 0, 0)
If FindMapElement(bbb(),Str(npcs()))
BillboardLocate(bbb(),bill, EntityX(npcs()),EntityY(npcs()),EntityZ(npcs()))
EndIf
If EntityY(npcs()) < 0
If FindMapElement(bbb(),Str(npcs()))
RemoveBillboard(bbb(),bill)
DeleteMapElement(bbb(),Str(npcs()))
EndIf
FreeEntity(npcs())
DeleteElement(npcs())
enemys - 1
If ListSize(npcs()) =< 1
ronda +1
For p= 1 To 5+ronda
AddElement(npcs())
npcs()= CreateEntity(#PB_Any,MeshID(enemymesh),MaterialID(mme),Random(900)-450,Random(50,10),Random(900)-450)
CreateEntityBody(npcs(),#PB_Entity_SphereBody,1,1,0.7)
bbb(Str(npcs()))=AddBillboard(bill,0,10,0):ResizeBillboard(bbb(),bill,24,24)
Next p
EndIf
EndIf
Next
EndProcedure
Procedure gameover()
EndProcedure
Procedure dead()
If EntityY(player)<0
lives - 1
If lives = 0
modo= 2
If timer > record : record= timer: EndIf
gameover()
Else
DisableEntityBody(player,1)
MoveEntity(player,0,10,0,#PB_Absolute)
DisableEntityBody(player,0)
EndIf
EndIf
EndProcedure
;{ Básico 3D
InitEngine3D(#PB_Engine3D_NoLog):InitSprite():InitKeyboard():InitMouse()
OpenWindow(0,0,20,1280,720,"Whats up TRON",#PB_Window_SystemMenu|#PB_Window_Invisible)
SetWindowColor(0,0)
OpenWindowedScreen(WindowID(0),0,50,WindowWidth(0),WindowHeight(0)-50, 0,0,0,#PB_Screen_SmartSynchronization)
CanvasGadget(0,0,0,WindowWidth(0),50)
drawMarcador()
y.f= (100 / WindowHeight(0)) * 50
h.f= 100 - y
CreateCamera(0, 0,0,100,h)
CreateCamera(1, 0,0,100,h)
CameraBackColor(0,$777777)
CreateLight(0, $ffffff, 400,400,400, #PB_Light_Directional)
LightDirection(0, 0.25,-0.85,-0.15)
;}
;{ cielo
tsky= CreateTexture(#PB_Any,2000,1000)
StartDrawing(TextureOutput(tsky))
w=OutputWidth():h=OutputHeight()
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0,0,w,h,$ff442211)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
LinearGradient(0,0,0,h)
BackColor($ff000000):GradientColor(0.2, $ff330000):GradientColor(0.3, $ffaa2200):GradientColor(0.4, $ffaa0000):GradientColor(0.5, $ff0044ff):FrontColor($ff000000)
Box(0,0,w,h)
ResetGradientColors()
BackColor($ff999999):GradientColor(0.7, $ff999999):FrontColor($006666ff)
x=900:y=410:r=40:CircularGradient(x,y,r): Circle(x,y,r)
BackColor($ffaaaaaa):GradientColor(0.7, $ffaaaaaa):FrontColor($006666ff)
x+10:y-10:r=50:CircularGradient(x,y,r): Circle(x,y,r)
ResetGradientColors()
DrawingMode(#PB_2DDrawing_AlphaBlend)
Circle(x+10,y-20,10,$11000000)
Circle(x+8,y-18,10,$11ffffff)
Circle(x-10,y-20,5,$11000000)
Circle(x-8,y-18,5,$11ffffff)
For p= 0 To 1000
Plot(Random(w-1),Random(h-1),RGBA(Random(100)+155,Random(100)+155,Random(100)+155,255))
Circle(Random(w),Random(h),Random(2,1)/2,RGBA(Random(100)+155,Random(100)+155,Random(100)+155,255))
Next p
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
BackColor($ffffffff):GradientColor(0.7, $aaffffff):FrontColor($00ffffff)
y=420: For p= 0 To w: r= Random(20,5):If Random(10)>8:Continue:EndIf:If Random(10)>8: CircularGradient(p,y,r): Circle(p,y,r):EndIf: Next p
BackColor($558888ff):GradientColor(0.7, $558888ff):FrontColor($008888ff)
y=430: For p= 0 To w: r= Random(20,5):If Random(10)>8:Continue:EndIf:If Random(10)>8: CircularGradient(p,y,r): Circle(p,y,r):EndIf: Next p
BackColor($336666ff):GradientColor(0.7, $336666ff):FrontColor($006666ff)
y=440: For p= 0 To w: r= Random(20,5):If Random(10)>8:Continue:EndIf:If Random(10)>8: CircularGradient(p,y,r): Circle(p,y,r):EndIf: Next p
; ; y=200: For p= 0 To w Step 2: r= Random(30,20): CircularGradient(p,y,r): Circle(p,y,r): Next p
ResetGradientColors()
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
BackColor($ff665544):GradientColor(0.7, $ff443322):FrontColor($00ffffff)
CircularGradient(0,430,40)
Circle(0,430,40,$ff443322)
Circle(-3,427,40,$ff665544)
CircularGradient(2000,430,40)
Circle(2000,430,40,$ff443322)
Circle(1997,427,40,$ff665544)
DrawingMode(#PB_2DDrawing_AlphaBlend)
For p= 0 To 200
a.f= Radian(Random(360))
l= Random(35)
x= Cos(a) * l
y= 430+ Sin(a) * l
If x<0:x=1999+x:EndIf
; Plot(x,y,$ff00ffff)
; Plot(x+1,y-1,$ff000000)
Next p
Circle(1980,427,10,$11000000)
Circle(1982,429,10,$11ffffff)
Circle(1981,428,10,$ff554433)
StopDrawing()
msky= CreateMaterial(#PB_Any,TextureID(tsky));,$442211)
MaterialFilteringMode(msky,#PB_Material_Anisotropic,8)
MaterialCullingMode(msky,#PB_Material_AntiClockWiseCull)
sky= CreateEntity(#PB_Any,MeshID(CreateSphere(#PB_Any,1200,16,8)),MaterialID(msky))
EntityRenderMode(sky,#PB_Shadow_None)
;}
;{ suelo reflexion
Dim t2(9): Dim t2ID(9)
For p= 0 To 9
t2(p)= CreateTexture(#PB_Any,300,300)
StartDrawing(TextureOutput(t2(p)))
w=OutputWidth():h=OutputHeight()
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0,0,w,h,$ff888888)
Box(10,10,w-20,h-20,$ff000000)
ClipOutput(10,10,w-20,h-20)
For n=1 To 50
Box(Random(w),Random(h),Random(20),5,RGBA(Random(255),Random(255,155),Random(100),255))
Next n
Box(80,300-(p*30),20,20,$ff00ffff)
Box(200,p*30,20,20,$ff00ffff)
UnclipOutput()
StopDrawing()
t2ID(p)=TextureID(t2(p))
Next p
tcam= CreateRenderTexture(#PB_Any,CameraID(1),1280,720,#PB_Texture_AutomaticUpdate)
mateS= CreateAnimatedMaterial(#PB_Any,t2ID(),3)
AddMaterialLayer(mateS,TextureID(tcam),#PB_Material_AddSigned)
SetMaterialAttribute(mateS, #PB_Material_ProjectiveTexturing, 1,1)
ScaleMaterial(mateS,0.1,0.1,0)
MaterialFilteringMode(mateS,#PB_Material_Anisotropic,8)
suelo= CreateEntity(#PB_Any, MeshID(CreatePlane(#PB_Any,1000,1000,1,1,4,4)), MaterialID(mateS),0,0,0)
;}
;{ objetos servidores
Dim t1(9): Dim t1ID(9)
For p= 0 To 9
t1(p)= CreateTexture(#PB_Any,300,300)
StartDrawing(TextureOutput(t1(p)))
w=OutputWidth():h=OutputHeight()
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0,0,w,h,$ff888888)
Box(10,10,w-20,h-20,$ff000000)
ClipOutput(10,10,w-20,h-20)
For n=1 To 50
Box(Random(w),Random(h),Random(100),3,RGBA(Random(100),Random(255,155),Random(100),255))
Next n
Box(140,300-(p*30),20,20,$ff00ffff)
UnclipOutput()
StopDrawing()
t1ID(p)=TextureID(t1(p))
Next p
mm= CreateAnimatedMaterial(#PB_Any,t1ID(),3)
DisableMaterialLighting(mm,1)
MaterialFilteringMode(mm,#PB_Material_Anisotropic,8)
Dim b(20)
Dim b2(20)
For p= 1 To 20
sy.f= Random(40,10)+(Random(20)*0.1)
sx.f= Random(20,10)+(Random(20)*0.1)
sz.f= Random(20,10)+(Random(20)*0.1)
px= -400+Random(800)
pz= -400+Random(800)
; b2(p)=CreateEntity(#PB_Any,MeshID(CreateCube(#PB_Any,1)),MaterialID(mm),sx,sy/2,sz)
b(p)=CreateEntity(#PB_Any,MeshID(CreateCube(#PB_Any,1)),MaterialID(mm),px,sy/2,pz)
ScaleEntity(b(p),sx,sy,sz,#PB_Absolute)
CreateEntityBody(b(p),#PB_Entity_StaticBody,0,0.5,0.5)
Next p
;}
;{ bill
t4= CreateTexture(#PB_Any,300,300)
StartDrawing(TextureOutput(t4))
w=OutputWidth():h=OutputHeight()
DrawingMode(#PB_2DDrawing_AllChannels)
Box(0,0,w,h,$00000000)
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Gradient)
BackColor($ff0000ff)
GradientColor(0.9,$ff0000ff)
FrontColor($000000ff)
CircularGradient(150,150,149)
Circle(150,150,149)
StopDrawing()
billma= CreateMaterial(#PB_Any,TextureID(t4))
MaterialCullingMode(billma,#PB_Material_NoCulling)
MaterialBlendingMode(billma,#PB_Material_AlphaBlend)
DisableMaterialLighting(billma,1)
bill= CreateBillboardGroup(#PB_Any,MaterialID(billma),100,100)
;}
;{ objetos enemigos
Dim t3(9): Dim t3ID(9)
For p= 0 To 9
t3(p)= CreateTexture(#PB_Any,300,300)
StartDrawing(TextureOutput(t3(p)))
w=OutputWidth():h=OutputHeight()
DrawingMode(#PB_2DDrawing_AlphaBlend)
Box(0,0,w,h,$ff000099)
Box(10,10,w-20,h-20,$ff000000)
ClipOutput(10,10,w-20,h-20)
For n=1 To 50
Box(Random(w),Random(h),Random(100),5,RGBA(Random(255,155),Random(100),Random(100),255))
Next n
Box(100,300-(p*30),100,20,$ff0000ff)
UnclipOutput()
Circle(150,150,10+ p * 10,$aa0000ff)
StopDrawing()
t3ID(p)=TextureID(t3(p))
Next p
mme= CreateAnimatedMaterial(#PB_Any,t3ID(),2)
DisableMaterialLighting(mme,1)
ScaleMaterial(mme,0.125,0.125)
ScrollMaterial(mme,0,0.5,#PB_Material_Animated)
enemymesh= CreateSphere(#PB_Any,10,16,8)
;}
;player
player= CreateEntity(#PB_Any,MeshID(CreateSphere(#PB_Any,5)),#PB_Material_None,0,10,20)
HideEntity(player,1)
;marcador
marcador= CreateEntity(#PB_Any,MeshID(CreateCube(#PB_Any,1)),MaterialID(mm),0,100,0)
ScaleEntity(marcador,100,100,100,#PB_Absolute)
CreateEntityBody(marcador,#PB_Entity_StaticBody)
marcadorBorde= CreateEntity(#PB_Any,MeshID(CreateCube(#PB_Any,1)),MaterialID(mme),0,150,0)
ScaleEntity(marcadorBorde,101,2,101,#PB_Absolute)
marcadorBorde= CreateEntity(#PB_Any,MeshID(CreateCube(#PB_Any,1)),MaterialID(mme),0,49,0)
ScaleEntity(marcadorBorde,102,2,102,#PB_Absolute)
MoveCamera(0, 300,100,300,#PB_Absolute)
CameraLookAt(0,0,0,0)
msgthanks.s= "🚗 [WASD=Move, SPACE=Jump] - Created by Toni Manrique 2026® (minimy) - Free for your use. NOT FOR COMERCIAL USE, Especial thanks to: "+
"Fred and PB team. PF_Shadoko, Miso, Idle, Mindphazer, Hexor, Carm3D, Infratec, TI-994A, mk-soft, RASHAD, Andre, netmaetro, marc_256, Dige, Pjay, PB, PureLust, Axoloti, SMaag, "+
"Skipper, Roby, Booger, Skinkairewalker, Azjio, Darius676, Threedslider, Icesoft, Mesa, Zapman, zikitrake, Caronte3D, Mijikai, Little John, CDXbow, ChrisR, Fangbeast, Luis, SPH, benubi, Thyphoon, PeDe, Piero, Kwai Chang Caine, Chris R, STARGÅTE, Olli, "+
"Ricardo sdl, Diceman, Barry G, Randy Walker, PHP, coco2, kuron, naf, jacobus, StephanB, Jamiroqwai, Bericko, Bisonte, srod, Michael Vogel, oryaaaaa, wombats, QuimV, Susan, blueb, and all the PureBasic members, I apologize if you are not on the list, but there are too many.!!..."
msg=msgthanks
CreateEntityBody(suelo,#PB_Entity_StaticBody,0,0.5,0.5)
CreateEntityBody(player,#PB_Entity_SphereBody,1,1,0.7)
vx.f=0
vy.f=0
vz.f=0
spd.f= 1
tambores()
HideWindow(0,0)
Debug ""
;--- TEST
Repeat
Repeat
ev= WindowEvent()
Until ev=0
ExamineKeyboard():ExamineMouse()
Select modo
Case 0
MoveCamera(0, 5,0,0,#PB_Local)
CameraLookAt(0,0,0,0)
If KeyboardReleased(#PB_Key_Space)
ronda= 1
ForEach npcs()
If FindMapElement(bbb(),Str(npcs()))
RemoveBillboard(bbb(),bill)
DeleteMapElement(bbb(),Str(npcs()))
FreeEntity(npcs())
EndIf
Next
ClearList(npcs())
enemys= 5
lives= 5
For p= 1 To enemys
AddElement(npcs())
npcs()= CreateEntity(#PB_Any,MeshID(enemymesh),MaterialID(mme),Random(900)-450,Random(50,10),Random(900)-450)
CreateEntityBody(npcs(),#PB_Entity_SphereBody,1,1,0.7)
bbb(Str(npcs()))=AddBillboard(bill,0,10,0):ResizeBillboard(bbb(),bill,24,24)
Next p
modo= 1
DisableEntityBody(player,1)
MoveEntity(player,0,10,0,#PB_Absolute)
DisableEntityBody(player,0)
EndIf
Case 1
;{ JUGANDO
MoveEntity(sky,CameraX(0),0,CameraZ(0),#PB_Absolute)
npc(player)
targetX.f = -MouseDeltaX() * 0.05
targetY.f = -MouseDeltaY() * 0.05
smoothX.f + (targetX - smoothX) * 0.2
smoothY.f + (targetY - smoothY) * 0.2
RotateCamera(cam, smoothY, smoothX, 0, #PB_Relative)
fx.f = 0: fy.f = 0: fz.f = 0
acc.f = 5.0
cx.f = CameraDirectionX(0): cy.f = CameraDirectionY(0): cz.f = CameraDirectionZ(0)
If KeyboardPushed(#PB_Key_D)
fx + -cz * acc: fy + cy * acc: fz + cx * acc
EndIf
If KeyboardPushed(#PB_Key_A)
fx + cz * acc:fy + cy * acc: fz + -cx * acc
EndIf
If KeyboardPushed(#PB_Key_W)
fx + cx * acc: fy + cy * acc: fz + cz * acc
EndIf
If KeyboardPushed(#PB_Key_S)
fx + -cx * acc: fy + -cy * acc: fz + -cz * acc
EndIf
If KeyboardPushed(#PB_Key_Space)
If EntityY(player)<6
If Bool(EntityX(player) > -500 And EntityX(player) < 500) And Bool(EntityZ(player) > -500 And EntityZ(player) < 500)
ApplyEntityImpulse(player, 0, 15, 0)
EndIf
EndIf
EndIf
ApplyEntityForce(player, fx, fy, fz)
EntityAngularFactor(player, 0, 0, 0)
MoveCamera(0, EntityX(player), EntityY(player), EntityZ(player), #PB_Absolute)
dead()
;}
Case 2
MoveCamera(0, 600,100,300,#PB_Absolute)
CameraLookAt(0,0,0,0)
If KeyboardReleased(#PB_Key_Space)
MoveCamera(0, 300,100,300,#PB_Absolute)
msg= msgthanks
modo= 0
timer= 0
EndIf
drawGameOver()
EndSelect
CameraReflection(1,0,EntityID(suelo))
RenderWorld(40)
Select modo
Case 0
If ElapsedMilliseconds() > dibujaScore
drawMenu()
dibujaScore= ElapsedMilliseconds()+25
EndIf
Case 1
If ElapsedMilliseconds() > dibujaScore
enemys= ListSize(npcs())
oldTimer = timer
timer + ronda
If (oldTimer / 1000) < (timer / 1000)
lives + 1
EndIf
msg= "Round: "+Str(ronda)+" Score: "+Str(timer)
drawMarcador()
dibujaScore= ElapsedMilliseconds()+950
EndIf
EndSelect
SetWindowTitle(0,"Whats up TRON? "+Str(Engine3DStatus(#PB_Engine3D_CurrentFPS)))
FlipBuffers(): Delay(1): If KeyboardPushed(#PB_Key_Escape):salApp=1:EndIf
Until salApp=1: End
End