Nota
A diferencia de mis otros proyectos antiguos, probablemente mejore este en el futuro.
Billar con la física de Roblox
Baller es un sistema de billar que hice en marzo de 2024 para ver hasta dónde llegaba con la física normal de Roblox. Es experimental y tiene bastantes bugs, pero detrás hay mucha matemática y mucha investigación. Se juega casi como el 8 Ball Pool de Miniclip: haces clic y mueves el mouse para apuntar, y para tirar mantienes Shift y clic derecho. Entre más tiempo lo sostienes, más fuerte sale la blanca, hasta un máximo de 4 segundos. Con la Q pasas a una cámara que mira la mesa desde arriba.
La guía de tiro
Lo que más trabajo me dio fue la guía. Desde la blanca sale un spherecast del tamaño de la bola en la dirección del taco, y donde choca aparece una bola fantasma, que marca el punto exacto donde va a estar la blanca en el momento del golpe. Si lo que encuentra es otra bola, salen dos líneas más. La de la bola objetivo sigue la recta que pasa por el centro de la fantasma y el centro de esa bola, porque en esa dirección la empuja el golpe. La de la blanca sale perpendicular a esa, que es la regla de los 90 grados del billar de verdad. El largo de las dos líneas además intenta reflejar qué tan de frente le pegas: si le das de lleno, la objetivo se lleva casi toda la fuerza y la línea de la blanca se encoge.
La física
Las bolas son esferas normales de Roblox con muy poca fricción y la elasticidad al máximo. Para que frenen como sobre un paño, cada una tiene un LinearVelocity y un AngularVelocity que apuntan a velocidad cero con una fuerza máxima muy baja, así que funcionan como un roce constante. Cuando vas a tirar, el cliente le pregunta al servidor si puede, y el servidor le pasa la propiedad de red de todas las bolas. De esa forma la física la calcula el computador del que tira y el golpe se siente inmediato, sin esperar al servidor. Si metes la blanca, vuelve a su punto a los dos segundos.
Lo que quedó a medias
A veces las bolas se desvían cuando van despacio. Yo sospechaba de los frenos, pero al probar bola por bola todo apunta al paño: la mesa es una sola UnionOperation con los huecos de las troneras, y para las colisiones Roblox la parte por dentro en piezas convexas. Donde se juntan dos piezas queda un escalón invisible que le da a la bola un empujón de lado, y cuando va lenta ese empujón se nota mucho más. Hay otros detalles: el script de los sonidos de choque busca el módulo en una carpeta que no existe, así que las bolas chocan en silencio, y no hay turnos, porque cualquiera que esté en el servidor puede tirar.