A downloadable game for Windows, macOS, and Linux

A marble game on the surface of an arbitrary 4D object defined by the projection function onto its surface.  The physics and rendering are both then constrained to the surface of the 4D object.

https://www.youtube.com/@tomwolc

Also if you want to see how the rendering is implemented you can clone and look at the small prototype I made before starting on the game: https://github.com/TomjWolcott/arbgeom_rs.

Very early beta, use numbers + shift and alt to select levels or go to the level selector menu

  • 0-9 to get 0-9
  • shift + 0-9 to get 10-19
  • alt + 0-9 to get 20-29
  • shift + alt + 0-9 to get 30-39
  • < to go back a level
  • > to go forward a level

WASD to move, space to jump, mouse to look around, and when there isn't gravity, Space/LShift to go up/down.  Also ~ to toggle the cursor, h to show/hide the player, up/down arrows for scrolling in addition to normal scrolling, escape to go back/exit, and enter to play.

Recent Progress to the game: (this feature is not available yet)


A couple of known bugs: 

  • Sometimes the levels load flipped
  • I think collisions are wrong sometimes
  • Jumping sometimes doesn't work (even though I'm not even testing for ground contact yet)
  • The camera goes through walls (although that is less of a bug and just something that I have yet to implement)
  • The camera stretches a little when going through areas of strong curvature
    • Due to projecting the 3D camera onto the surface although there ways that I could do it better

Some potential todos in no particular order: (let me know if any of them stand out to you)

  • Moving the definition of the levels from the code to a folder in assets
    • I could also provide docs so you could make your own levels, with your own geometries if you wanted by writing them in whatever format (I'm thinking lua for creating geometries, and probably json or yaml or something for plain level definitions)
  • Continue work on the physics: I moved from using Vec4's and Mat4's to using 4D PGA with the module generated on bivector.net, but as soon as anything rotates the physics starts exploding, so I need to continue working on that so I can add friction and rotational velocity and torque.
  • More dynamic shapes: right now only hyperspheres can be dynamic, I'm doing SDF collisions so I would need to figure out how to implement that for more shapes.
  • Improve performance: It starts to lag when you are near a bunch of objects and complex manifolds also start to get slow.  The program is completely GPU bound so optimizing the shader is important
  • Actual gameplay: perhaps the goal is to get the fastest time from start to finish in a level, maybe I could add in puzzle elements, maybe there could be fun to be had in multiplayer, idk there's room to explore
  • Manifolds and objects that change shape over time: If I make it work for manifolds, it could work for objects too.  Exist in a hypersphere that changes radius, transition between manifolds, conveyor belts made out of bending space ...
  • More complex manifolds: This mainly just requires improvements to the geometry builder, if I switch to using lua for programming the geometries and transpiling the code to wgsl and interpreting the code in rust than it might make this process easier and potentially more performant
    • Edit: Started working on scripting and Will probably use Rhai instead of lua
  • Sound effects: Right now there is no sound at all, I should probably add sound effects at some point.
  • Settings: You can resize the screen manually if you want to change resolution, but other stuff like render distance, fov, etc. can't be changed right now
  • [Added Jan 31] include alternate ways for manifolds to be included: right now I'm ray marching by constantly projecting onto the 3D surface of a 4D object, maybe I could instead try to ray march normally in 3D, but constantly correct the ray to match a manifold somehow?
  • Way off in the future, generalize manifolds embeded in N-dimensions: will probably lose performance as you go to embed in higher dimensions and have to start working with less ergonomic datatypes (since most libraries like glam and languages like wgsl max out at Vec4's)
  • I have no clue how this would even work, manifolds with curved space-time: I don't know enough physics/general relativity to even know where to start with this, it would probably require an even high embedding than 4D, idk.

Performance:

It ran at around 10 fps on a windows 10 computer with a GeForce GTX 745 (in release)

It also ran at around 30 fps on a m1 max macbook pro (in debug)

Download

Download
arbgeom-linux.zip 28 MB
Version 0.1.14 Jan 10, 2024
Download
arbgeom-macos.zip 26 MB
Version 0.1.14 Jan 10, 2024
Download
arbgeom-windows.zip 21 MB
Version 0.1.14 Jan 10, 2024

Install instructions

Mac install instructions: First, once you have it working, you can put the app into applications by opening up finder/opening a new window of finder, going to applications in that window, and draging the app into applications.

  1. Download and try to open up the app
    1. If it gives you the option to open, then do that
    2. If it says something along the lines of "This app is from an unidentified developer ..." then continue and don't exit out of the pop up yet
      1. If you closed the popup by hitting cancel or ejecting it, try to open the app back up to get the popup back
  2. Open settings, go to Privacy & Security, and scroll all the way down/navigate to the "General" section
  3. Close the popup by hitting cancel
  4. In the "General" section (or at the very bottom in newer OS's) there might be a box that just appeared with a button with the text "Open Anyway"
    1. If you see that then click it to open anyway
    2. If you don't then you can try to open the popup again to see if it makes the box appear
  5. If none of that worked you can try to right click the app and click open in the dialog box to automatically open it
  6. If this still didn't work then I guess you can run this command in the terminal: sudo spctl –master-disable 
  7. After you type your password in a new option under "Allow applications downloaded from" labeled "always" should appear, make sure that is checked and try again

Source if need more help: https://www.macworld.com/article/672947/how-to-open-a-mac-app-from-an-unidentifi...

Also the download here worked on my apple silicon macbook even though it is technically the intel version and the apple silicon didn't work for me which is why I only have the intel version here, labeled just MacOS.

Linux: I don't have access to a linux computer so I don't have any way of knowing if it works, if tried it leave a comment if it did

Windows: Opening it on windows was pretty seamless for me, I had to click on "more info" to be able to run it on the "Windows protected your PC" popup

Development log

Comments

Log in with itch.io to leave a comment.

I get a stable 40 FPS on windows with my 3060 laptop GPU for most levels.

On linux however the fps is not stable, and fluctuates wildly, though that may be a driver issue

0.1.14 Linux works!

Yay!  Thanks