Homebrew ioQuake3-Wii

  • Thread starter Thread starter Mayo1990
  • Start date Start date
  • Views Views 8,874
  • Replies Replies 119
  • Likes Likes 17
could this be ported to Wii U as well? (with GX2 support, obviously)
if so im willing to lend a hand

maybe it could use gx2gl? when it's more mature obv. Otherwise i'm already pretty used to writing for GX2, i used it for sonic3air and srb2 and rsdkv4 so..

i could also take a crack at GX, but i'm not sure how well that'd turn out tbh
 
Last edited by siahisaforker,
could this be ported to Wii U as well? (with GX2 support, obviously)
if so im willing to lend a hand

maybe it could use gx2gl? when it's more mature obv. Otherwise i'm already pretty used to writing for GX2, i used it for sonic3air and srb2 and rsdkv4 so..
I tried to port it back then to Wii U and ANGLE+CafeGLS didn't feel mature enough for it to run well (I would get garbled shaders + corrupted textures). I did manage to get the QVM to port though. Just the renderer side (which is, ironically enough, the biggest issue) the caveat, but I have no plans in working on the WiiU port for now until I sort my other ports first.
Post automatically merged:

In case, here's a small preview. The whole release is going to be this weekend too in case I don't run into issues.

A few things to consider:
  • This build no longer has the OpenGX wrapper in. Everything is running using the native Wii (GX) renderer. The build is also running in JIT for stability reasons. The downside are somewhat longer loading times but it pays off since it no longer crashes when loading many maps.
  • Build is capped at 60 FPS (yes, even in game). Just try it and provide me with some feedbacks

Things that needs to be done: Stability fixes. I'm still not done with the GX renderer as I'm missing a few more things, but like, 90% of the GX renderer is there, so there's that.

When trying and reporting stuff, also state which Wii you're using. If It's PAL or NTSC.

Let me know if you run into issues.
 

Attachments

Last edited by Mayo1990,
I tried to port it back then to Wii U and ANGLE+CafeGLS didn't feel mature enough for it to run well (I would get garbled shaders + corrupted textures). I did manage to get the QVM to port though. Just the renderer side (which is, ironically enough, the biggest issue) the caveat, but I have no plans in working on the WiiU port for now until I sort my other ports first.
ANGLE has improved alot, either way i'd still use GX2 as i tried using ANGLE for sonic3air and it wasn't enough + what was enough was super laggy (and that itself is a 2d game). Plus gx2gl is a little more performant but still ran into the same performance issues, going GX2 the gpu barely even breaks a sweat

although i find GX2 far less documented, it is way more powerful
 
I tried to port it back then to Wii U and ANGLE+CafeGLS didn't feel mature enough for it to run well (I would get garbled shaders + corrupted textures). I did manage to get the QVM to port though. Just the renderer side (which is, ironically enough, the biggest issue) the caveat, but I have no plans in working on the WiiU port for now until I sort my other ports first.
Post automatically merged:

In case, here's a small preview. The whole release is going to be this weekend too in case I don't run into issues.

A few things to consider:
  • This build no longer has the OpenGX wrapper in. Everything is running using the native Wii (GX) renderer. The build is also running in JIT for stability reasons. The downside are somewhat longer loading times but it pays off since it no longer crashes when loading many maps.
  • Build is capped at 60 FPS (yes, even in game). Just try it and provide me with some feedbacks

Things that needs to be done: Stability fixes. I'm still not done with the GX renderer as I'm missing a few more things, but like, 90% of the GX renderer is there, so there's that.

When trying and reporting stuff, also state which Wii you're using. If It's PAL or NTSC.

Let me know if you run into issues.

Wow you weren't kidding, this build runs an order of magnitude better!! If there's any framerate dipping it's down to the high 50s. It also looks far better now that minor details are being rendered properly, the material sheen that covers a lot of items and walls is more properly rendered and really looks fantastic! Besides the z-fighting on decals and also the microstutters that come from loading new assets (especially noticeable when a round ends) I would say you're fast approaching a commercial quality release, if not already there :yaywii:
 
  • Love
Reactions: Mayo1990
ANGLE has improved alot, either way i'd still use GX2 as i tried using ANGLE for sonic3air and it wasn't enough + what was enough was super laggy (and that itself is a 2d game). Plus gx2gl is a little more performant but still ran into the same performance issues, going GX2 the gpu barely even breaks a sweat

although i find GX2 far less documented, it is way more powerful
I'll give it a look and see if there could be some forward improvements.

Wow you weren't kidding, this build runs an order of magnitude better!! If there's any framerate dipping it's down to the high 50s. It also looks far better now that minor details are being rendered properly, the material sheen that covers a lot of items and walls is more properly rendered and really looks fantastic! Besides the z-fighting on decals and also the microstutters that come from loading new assets (especially noticeable when a round ends) I would say you're fast approaching a commercial quality release, if not already there :yaywii:
Yeah, it was no secret that the OpenGX wrapper was too heavy so no matter how much I trimmed at the edges, I eventually had to ditch it if I wanted that boost in performance. That plus dropping the interpreter gave the actual gain I needed.

I'll address the micro stutters and the z-fighting issue once I'm done implementing something extra for the memory. It may shift the weekend schedule I wanted to chase depending on how much regression I'll face but better a 1.0 release that does address these issues with a slight delay than having another 0.9.9999999 release that feels rushed and may have some other broken things around.

Performance wise I think I'm basically there. Everything and I mean everything that could have been the suspected bottleneck has been addressed as of now.

Also, an issue I noticed in the previous builds was that I couldn't load Q3DM11, but now I can do Q3DM0 -> Q3DM11 -> Q3DM10 and so on in a single session without crashing.

(I mentioned Q3DM11 and Q3DM0 because they're the heaviest maps)
 
  • Like
Reactions: Disorarara
Yeah, it was no secret that the OpenGX wrapper was too heavy so no matter how much I trimmed at the edges, I eventually had to ditch it if I wanted that boost in performance. That plus dropping the interpreter gave the actual gain I needed.

I'll address the micro stutters and the z-fighting issue once I'm done implementing something extra for the memory. It may shift the weekend schedule I wanted to chase depending on how much regression I'll face but better a 1.0 release that does address these issues with a slight delay than having another 0.9.9999999 release that feels rushed and may have some other broken things around.

Performance wise I think I'm basically there. Everything and I mean everything that could have been the suspected bottleneck has been addressed as of now.

I tried doing some stress testing to see how low I can get the FPS (8 bots all at once on a local server) and the lowest I've gotten it to do is around the low 20s which is insane for running on just the one machine

Also, an issue I noticed in the previous builds was that I couldn't load Q3DM11, but now I can do Q3DM0 -> Q3DM11 -> Q3DM10 and so on in a single session without crashing.

(I mentioned Q3DM11 and Q3DM0 because they're the heaviest maps)

I was going to actually mention that too! Previously it wouldn't load with an error message. Q3CTF2 still won't load however.
 
let me know
I suppose It's still this one?

https://github.com/snickerbockers/gx2gl

I tried doing some stress testing to see how low I can get the FPS (8 bots all at once on a local server) and the lowest I've gotten it to do is around the low 20s which is insane for running on just the one machine



I was going to actually mention that too! Previously it wouldn't load with an error message. Q3CTF2 still won't load however.

I didn't even think it could survive with 8 bots, best I tried myself was like 3-4 on modest maps. Then again, the real comparator would be Quake 3 running on a Mac G3 (basically Wii's equivalent) and the performance is kind of the same.

I'll investigate Q3CTF2 (I also got confused, I meant Q3DM10, not Q3DM0) and see how much it needs. But I'm starting to touch the ceiling in terms of what can be done now.

Anyway, the two issues you reported have been fixed.
 
  • Love
Reactions: Disorarara
yes that one for legacy gl, as gx2gl 3.3 core won't work here. either way i vote going full GX2
ioQuake3 only supports GL1 or GL2. There's also a client that supports GL2 ES.

Full GX2 is the best choice nonetheless because It's native. On a machine like Wii it was mandatory because wrappers often have a huge cost performance-wise, but in WiiU's case It's trivial
Post automatically merged:

@Disorarara you're gonna love the next release so much :)


1781204169514.png
 
Last edited by Mayo1990,
  • Love
Reactions: Disorarara
ioQuake3 only supports GL1 or GL2. There's also a client that supports GL2 ES.

Full GX2 is the best choice nonetheless because It's native. On a machine like Wii it was mandatory because wrappers often have a huge cost performance-wise, but in WiiU's case It's trivial
Post automatically merged:

@Disorarara you're gonna love the next release so much :)


View attachment 577599

I can't wait to try it! The amount of progress you made since the first release is insane for such a short amount of time, it went from a visually buggy 30fps to a smooth and polished 60fps! Incredible! I'm also looking forward to seeing how much better OpenArena fares now.
 
I can't wait to try it! The amount of progress you made since the first release is insane for such a short amount of time, it went from a visually buggy 30fps to a smooth and polished 60fps! Incredible! I'm also looking forward to seeing how much better OpenArena fares now.
I fixed most of the stuff I had to fix. I'll release the 1.0 version this weekend. Just want to check a few things to be sure I didn't miss anything.

A few more things:
  • The default will be 60 FPS and JIT (30 FPS and Interpreter will be dropped from the 1.0 release) now that It's stable
  • Loads most stock maps, can also survive map changes now, even with big maps
  • Can now load back in the emulator
Noteworthy discoveries:
  • Loading is tied to the read speed. So TECHNICALLY USB is much faster. I need to confirm this on real hardware though.
  • Open Arena was indeed heavier than Quake 3! I expected it to be lighter, since it was built to be much lighter than Q3 in mind. When swapping to JIT I discovered that it couldn't load Open Arena anymore (offline). That issue has been addressed and fixed
  • Since the main menu in Team Arena does eat a lot of memory it could be wise to disable the cinematics and see if it has enough room to not hang and let me play it effectively. May need to investigate a bit more though.

1781208684480.png
 
Open Arena was indeed heavier than Quake 3! I expected it to be lighter, since it was built to be much lighter than Q3 in mind. When swapping to JIT I discovered that it couldn't load Open Arena anymore (offline). That issue has been addressed and fixed

The good thing about OpenArena though since it is a GPL2 game, someone can go in and optimize all of its resources to be much lighter on RAM and then redistribute it. Previously there hasn't been any reason to do this since OA wasn't ported to a console with limited resources until this port.
 
This weekend I'm gonna do the very last release of this project unless I figure out what can be done for Team Arena. Everything that has been done to the port is now working as intended.

The performance is now basically on par with a Mac G3, which sports a very similar architecture to Wii (but some models do have slighty better specs, especially RAM-wise).

What will build 1.0 feature, then?
  • JIT compiler - All builds prior ran in Interpreter. Now everything is running on JIT. Which means there's less CPU/memory loads as well as being a lot more stable.
  • Ditching OpenGX wrapper for native GX calls - Prior releases all had a graphic wrapper to get the port to run, which wasn't a bad approach at all but it weighted on CPU a lot. Migrating from a wrapper to native GX calls means now everything will render just as Wii is expecting to. This was the main bottleneck that prevented the game from running at 60 FPS.
  • Slight memory optimizations - Prior releases struggled memory-wise and wouldn't handle lots of map changes or big maps. Now It's no longer the case. It can successfully load maps (even with local bots!) and play without much trouble. Performance, depending on action and how many bots you're gonna run, is gonna tank though.
Now that this port is complete, what am I gonna focus on?
  • Lilium Arena Classic - As per permission of the main author, what I learnt from this Wii port of Quake 3 will be used to port Lilium Arena Classic on Wii, which will let Quake 3 crossplay with Dreamcast players. This is going to be my next main focus.
  • Optimize Quake 3 on PS3 - Now that this release can be considered shelved, my next focus would be to optimize the PS3 port. There's so much stuff I'd like to get done so people can enjoy it at stable framerate.
  • Possible GameCube port - I'm not gonna say names, nor say much about it except that someone may attempt to adapt my Wii port to run on GameCube now that everything's native. It's not a top priority and the person who wants to attempt that is fairly skilled, so I just offered them my help in case they'll need it. It's gonna be trimmed to death and have a lot and I mean A LOT of limits. But It's gonna be nice to see where it gets.
Worth checking on:
  • Revisiting the WiiU attempt - Now that this port is in a very good shape, It's worth investigating whether a WiiU port can be attempted again. It's a bit pointless since this port now supports Wii U's gamepad, but a native build that has much more memory, can run at higher resolution, textures, models as well as being able to support mods as well as Team Arena can make it a good candidate worth checking out.

If you got some questions, feel free to ask.
 
This weekend I'm gonna do the very last release of this project unless I figure out what can be done for Team Arena. Everything that has been done to the port is now working as intended.

The performance is now basically on par with a Mac G3, which sports a very similar architecture to Wii (but some models do have slighty better specs, especially RAM-wise).

What will build 1.0 feature, then?
  • JIT compiler - All builds prior ran in Interpreter. Now everything is running on JIT. Which means there's less CPU/memory loads as well as being a lot more stable.
  • Ditching OpenGX wrapper for native GX calls - Prior releases all had a graphic wrapper to get the port to run, which wasn't a bad approach at all but it weighted on CPU a lot. Migrating from a wrapper to native GX calls means now everything will render just as Wii is expecting to. This was the main bottleneck that prevented the game from running at 60 FPS.
  • Slight memory optimizations - Prior releases struggled memory-wise and wouldn't handle lots of map changes or big maps. Now It's no longer the case. It can successfully load maps (even with local bots!) and play without much trouble. Performance, depending on action and how many bots you're gonna run, is gonna tank though.
Now that this port is complete, what am I gonna focus on?
  • Lilium Arena Classic - As per permission of the main author, what I learnt from this Wii port of Quake 3 will be used to port Lilium Arena Classic on Wii, which will let Quake 3 crossplay with Dreamcast players. This is going to be my next main focus.
  • Optimize Quake 3 on PS3 - Now that this release can be considered shelved, my next focus would be to optimize the PS3 port. There's so much stuff I'd like to get done so people can enjoy it at stable framerate.
  • Possible GameCube port - I'm not gonna say names, nor say much about it except that someone may attempt to adapt my Wii port to run on GameCube now that everything's native. It's not a top priority and the person who wants to attempt that is fairly skilled, so I just offered them my help in case they'll need it. It's gonna be trimmed to death and have a lot and I mean A LOT of limits. But It's gonna be nice to see where it gets.
Worth checking on:
  • Revisiting the WiiU attempt - Now that this port is in a very good shape, It's worth investigating whether a WiiU port can be attempted again. It's a bit pointless since this port now supports Wii U's gamepad, but a native build that has much more memory, can run at higher resolution, textures, models as well as being able to support mods as well as Team Arena can make it a good candidate worth checking out.

If you got some questions, feel free to ask.

Cheers to a job well done! :grog:I would go so far as to say your project even exceeds the legendary QuakeGX as the new gold standard for polished PC ports to the Wii, literally everything works as intended, looks as intended and sounds as intended. Hopefully you have more Wii ports in the future or someone gets inspired to also use AI and OpenGX to port other things now that you've shown how useful these two tools are for Wii homebrew. Quake 3 was a bit of a heavy tech demo for OpenGX but there are definitely visually simpler games like Half Life or Counter Strike (via Xash3D) that would fare better.

Looking forward to trying out 1.0!
 
Cheers to a job well done! :grog:I would go so far as to say your project even exceeds the legendary QuakeGX as the new gold standard for polished PC ports to the Wii, literally everything works as intended, looks as intended and sounds as intended. Hopefully you have more Wii ports in the future or someone gets inspired to also use AI and OpenGX to port other things now that you've shown how useful these two tools are for Wii homebrew. Quake 3 was a bit of a heavy tech demo for OpenGX but there are definitely visually simpler games like Half Life or Counter Strike (via Xash3D) that would fare better.

Looking forward to trying out 1.0!

I still stand by the opinion that anyone can accomplish what I did in this thread and how it evolved as time went through. The project is basically made mostly by AI. My programming skills lay in Java and Python, basically. The rest was just me seeing what could the Wii do and move accordingly... and debugging. Lots of sessions of debugging, sitting and thinking of approaches and more debugging. The main issue is that whoever attempts these kind of ports using AI they just don't bother the debugging phase (which I agree, IT IS boring and tedious) but It's the most important aspect that will net results in the long run. I just invite whoever uses this tool for these kind of things to actually not give up when they don't see results instantly. It took me three months of debugging and brainstorming basically alone with no help outside the scene to end up where I am. Just few feedbacks here and there from this thread (and privately) and that's it. I am 200% sure that whoever has its hands on the GTA 3 /VC source ports for WiiU can perfectly replicate what I did in this thread.

Although yeah, apparently this was the heaviest case of OpenGX usage. Which I'm also surprised it turned out the way it did.

I also managed to get Team Arena to boot in multiplayer (still no single player no matter how much I trimmed, and trimming as much as I attempted to will hang the game) so the release will just feature Quake 3 Arena and Open Arena. I'll still leave all my TA progress in the repo in case someone wants to proceed with it
 
  • Love
Reactions: Disorarara
Although yeah, apparently this was the heaviest case of OpenGX usage. Which I'm also surprised it turned out the way it did.

The other notable use case for OpenGX is Wiistation which doesn't really count as a OpenGX tech demonstration since the PSX has a much simpler rendering pipeline, it doesn't really utilize extensive OpenGL features whatsoever because the console predates anything complex when it comes to GPU tech, it's just straight hardware accelerated maths and texture mapping and that's it.
Post automatically merged:

I still stand by the opinion that anyone can accomplish what I did in this thread and how it evolved as time went through. The project is basically made mostly by AI. My programming skills lay in Java and Python, basically. The rest was just me seeing what could the Wii do and move accordingly... and debugging. Lots of sessions of debugging, sitting and thinking of approaches and more debugging. The main issue is that whoever attempts these kind of ports using AI they just don't bother the debugging phase (which I agree, IT IS boring and tedious) but It's the most important aspect that will net results in the long run. I just invite whoever uses this tool for these kind of things to actually not give up when they don't see results instantly. It took me three months of debugging and brainstorming basically alone with no help outside the scene to end up where I am. Just few feedbacks here and there from this thread (and privately) and that's it. I am 200% sure that whoever has its hands on the GTA 3 /VC source ports for WiiU can perfectly replicate what I did in this thread.

I've said it before but I think you're too harsh on yourself, 3 months is an insane leap from WIP to basically fully polished commercial quality release, I mean you even included WiiU gamepad support! Compare the first release to 1.0, that's an insane leap for only one man to make. You're an incredibly talented programmer and you should take pride in what you've done here. Not just anyone can do what you did!
 
Last edited by Disorarara,
The other notable use case for OpenGX is Wiistation which doesn't really count as a OpenGX tech demonstration since the PSX has a much simpler rendering pipeline, it doesn't really utilize extensive OpenGL features whatsoever because the console predates anything complex when it comes to GPU tech, it's just straight hardware accelerated maths and texture mapping and that's it.
OpenGX was developed in tandem with a Neverball port, and that port is almost entirely vanilla.

Here's a video of it running on a GameCube.
 
OpenGX was developed in tandem with a Neverball port, and that port is almost entirely vanilla.

Here's a video of it running on a GameCube.
This is actually impressive! Considering It's the GameCube.
I wonder if there are other ports that used OpenGX to these levels.
Post automatically merged:

Speaking of which, although not entirely related, I'm done optimizing the PS3 port as much as I could. Turns out it had huge downsides compared to Wii, so there isn't much that I could've done. Here's a comparison between my PS3 and my Wii ports running the same demo.

 
Last edited by Mayo1990,
  • Wow
Reactions: Disorarara

Site & Scene News

Popular threads in this forum