Joshua BarrettoThanks to @larrykoopa64dshacker64 , @Smol_bug , and @pack-san for their brilliant work remastering and recreating assets for this project.
Enemies, Movement, and a Demo on Real Hardware [SM64 GBA]Joshua Barretto2024-11-30 | Thanks to @larrykoopa64dshacker64 , @Smol_bug , and @pack-san for their brilliant work remastering and recreating assets for this project.Rocket Glider [Veloren]Joshua Barretto2025-01-12 | veloren.net
I added particle effects to the admin glider created by @juliancoffee, with model created by @horblegorble. Sorry about the choppy video, my decade-old GPU doesn't enjoy recording at the same time as playing. Also, this is an unoptimised build and I stupidly had both Google Sketch and FreeCAD open in the background.Slides, Platforms, Swimming, And More! [SM64 GBA]Joshua Barretto2024-09-08 | Thanks again to @larrykoopa64dshacker64, @Smol_bug, and @pack-san for contributing their time and energy.Audio, Polygon Subdivision, and Much More! [SM64 GBA]Joshua Barretto2024-08-10 | Thank you so much to @pack-san and @LK64DSH for their superb assistance in porting and simplifying assets, the game only looks at good as it does because of their work.Stars, doors, and a sky [SM64 GBA]Joshua Barretto2024-07-08 | Music: "Rollin at 5" by Kevin MacLeod (incompetech.com)Much Has Changed [SM64 GBA]Joshua Barretto2024-06-17 | Another video update for Super Mario 64 on the Gameboy Advance. This week I've added more movement mechanics, a pause menu, various graphical options, improved textures, and fixed a long list of bugs. It's all starting to take shape!Some Updates [Super Mario 64 on the GBA]Joshua Barretto2024-06-09 | Answers to some frequently asked questions:
- No, I will not publish the ROM. I can't legally distribute anything containing Nintendo's assets. However, the code has been written from scratch and will probably be made open source at some point.
- Yes, this can run on actual Gameboy Advance hardware.
- I've tried both flat shading and pre-rendered sprites. Neither look very good, and I like the challenge of trying to do things properly. I may add flat shading as a configurable option given that it results in a small (~20%) performance boost though.
- Yes, this is 'real' 3D: no fixed perspective hacks like Doom, no 2.5D, no billboarding. The camera can move arbitrarily around the world, in any axis, and at any orientation.
- The code is primarily written in Rust, with a small amount of inline assembly mixed in for circumstances in which I just can't persuade the compiler to emit the correct instructions. No, using more assembly code would not magically make things faster.
- I have no plan or timeline for this project. It's my way of kicking back and relaxing in the evenings after work. Life is busy, and I often get distracted, so this might end up falling by the wayside in the future. I'm not sure.Primitive animations, smoother movement [SM64 GBA]Joshua Barretto2024-05-23 | Janky, temporary animations and movement. Lots of work still needed.A proper player model, rotations, much faster texture mapping [SM64 GBA]Joshua Barretto2024-05-23 | Rasterisation is much faster thanks to a new texture mapper that squeezes texture mapping down to just a handful of instructions per pixel.
I've also worked on improving the mesh preprocessor and triangle setup code, further boosting efficiency on complex scenes.
Previously, the game would struggle to hit 6-7 fps even in complex scenes, but now easily hits 12 fps in similar such scenes. Elsewhere, it's common to see framerates as high as 20 or even 30 fps. There's still work to be done, but it's inching closer and closer to running at playable speeds.
Thanks to origamiscienceguy, Genos, nightchild, GValiente, and others for providing useful optimisation advice. Also thanks to ben237 for creating the player model.A single frame renders [SM64 GBA]Joshua Barretto2024-05-14 | I created a way to visualise the rasterisation process for development purposes, but it's also quite enjoyable to watch.Super Mario 64 on the GBA: ImprovementsJoshua Barretto2024-05-12 | New in this video:
- A player model (no animations or textures yet, but that's coming) - Improved texture mapping (somewhat, anyway) - Stage switching - Mip-mapping to make textures look less grainy at a distance - Many performance optimisations (it still runs pretty poorly in areas where many polygons are visible, but most areas now have double-digit framerates!)Super Mario 64 running on a Gameboy AdvanceJoshua Barretto2024-05-08 | This is not actually Super Mario 64: it's my attempt at rewriting SM64 for the GBA.
I initially considered attempting a port, but the GBA is an order of magnitude slower than the N64 and has no GPU or native support for floating-point numbers.
So far, I've implemented a basic physics and collision system, along with a fully 3D camera, rasterization, texture-mapping, transparency support, etc.
Because the code is written from-scratch, I should be in a position to release the code into the public domain in the future: although I can't distribute it with Nintendo's assets, obviously.Horse-Drawn Cart [Veloren]Joshua Barretto2023-05-27 | Experimenting with an entity tethering system that might allow for mount-drawn carts and other such mechanics. It would be nice to see merchants with proper caravans travelling the world.
Find out more at www.veloren.net.Haha Carriage Go BrrrJoshua Barretto2023-05-24 | Messing around with vehicles in Veloren.
See also the OpenMW cloud mod here: github.com/zesterer/openmw-volumetric-cloudsWave Shader Effect [OpenMW]Joshua Barretto2022-05-23 | Check out the full shader set here: github.com/zesterer/openmw-shadersSimulating Black Holes With Bad Shader CodeJoshua Barretto2022-05-13 | An attempt at finding a fast but imprecise closed-form approximation that simultates the way black holes bend spacetime.Morrowind with PBR ShadersJoshua Barretto2022-04-21 | Compatible with the latest OpenMW release.
Written in Rust, of course. I didn't end up getting round to implementing texture mapping.
The GBA has a 16 MHz processor and a 240x160 screen. With mode 5 rendering and a graphics hardware scaling hack, you can do full-screen 16-bit colour rendering (with an internal resolution of 160x128). The GBA doesn't have a GPU, so everything needs to be done with software. I wrote an optimised rasteriser that supports blitting N-gons to the screen, along with a full rendering pipeline to go with it. At 16 MHz and with a screen with of 160x128, you only get 16000000 / (60 * 160 * 128) = 13 cycles for each pixel, not considering the time required to transform vertices, clear the screen for the next frame, listen to user inputs, etc. In practice, most instructions require several cycles and the GBA has no hardware parallelism (except for some very primitive block memory copy hardware). In addition, the GBA has no floating-point instructions so everything needs to be done using fixed-point maths. A fun challenge!Gliding Down a Mountain [Veloren]Joshua Barretto2021-04-27 | Thanks to Lboklin for his incredible work on the new glider physics!
To download Veloren, visit veloren.netRaymarching voxel terrain on a 7 year old GPUJoshua Barretto2021-04-10 | Running on a AMD Radeon R9 290X. The voxel data is generated on the CPU (and can be modified on the CPU to look as one pleases). No RTX or specialised raycasting software, just regular old Vulkan and an SDF-based ray acceleration data structure.A Very Big Tree [Veloren]Joshua Barretto2021-02-07 | I wanted to try replicating the enormous trees one sees in fiction within Veloren. This is the half-baked result.
For more information about Veloren, visit veloren.netGliding Down A Mountain At Noon [Veloren]Joshua Barretto2020-10-18 | For more information, visit veloren.netGliding Through A Jungle As The Sun Sets [Veloren]Joshua Barretto2020-10-18 | For more information, check out veloren.netPioneer Camera SmoothingJoshua Barretto2020-09-07 | ...Boom! [Veloren]Joshua Barretto2020-08-03 | Thanks to Lobster for writing the particle system! For more information, visit veloren.netEven More Water RocketryJoshua Barretto2020-07-12 | The rocket is composed of 3 bottles combined through a mixture of bottle splicing and 3D printed connectors. Parachute deployment is radio-controlled and performed manually from the ground. It's also sketchy as heck and needs a rework.Experimental Veloren LoD + Lighting BranchJoshua Barretto2020-07-04 | Thanks to Sharp for all of the hard work that's gone into this branch! See veloren.net for more information.Water Rockets #2Joshua Barretto2020-07-04 | ...Wolves in VelorenJoshua Barretto2020-07-03 | Thanks to Slipped and Snowram for such amazing animation work.Veloren: Improvements to Procedural TownsJoshua Barretto2020-04-21 | For more information visit veloren.netVeloren 0.6 Feature Preview: Procedural TownsJoshua Barretto2020-04-11 | Towns in Veloren are entirely procedurally generated. For more info, visit https://www.veloren.net.21 Minutes of Veloren Staff GameplayJoshua Barretto2020-04-02 | Visit veloren.net for more information.16 Minutes of Veloren Bow GameplayJoshua Barretto2020-04-02 | Visit veloren.net for more information.Seal the Sub [GGJ2020]Joshua Barretto2020-02-02 | Seal the Sub is a game made by 3 people (including myself) over the course of 48 hours for Global Game Jam 2020. You play as a seal named 'Flex' who encounters a stricken submarine and attempts to repair it.
Seal the Sub is written in Rust and uses the Quicksilver framework. You can find a copy of the (very poorly written) source code here: github.com/team-seal/seal-the-sub[Veloren] A Trip Down A RiverJoshua Barretto2019-10-18 | Veloren recently had erosion simulation merged. This brings rivers, streams, lakes, watefalls and deltas to the game.Newtonian Physics, Dogfight ControlsJoshua Barretto2019-09-03 | ...Veloren: Wind, Terrain Sprites, Improved ColoursJoshua Barretto2019-08-20 | See veloren.net for more information!Veloren - Caves, Lights, NPCs, Ruins, Day/Night, Static ObjectsJoshua Barretto2019-07-22 | Find out more about Veloren at veloren.net !