Homebrew Half-Life (Xash3D FWGS) - Wii port

  • Thread starter Thread starter MintFerret
  • Start date Start date
  • Views Views 2,049
  • Replies Replies 13
  • Likes Likes 19

MintFerret

Member
Newcomer
Joined
May 27, 2026
Messages
5
Reaction score
34
Trophies
0
Location
Managua
XP
98
Country
Nicaragua
I wanted to post this when this port was stable enough to release, but thought I would share this before someone keeps asking for this.

So a couple months ago, I started porting Xash3D to the Wii. I figured that with the engine now having big endian support and the Wii having SDL2 and an OpenGL wrapper, it should be easier to port it than what the previous attempt had to work with. I still had to patch some stuff (using the Dreamcast port as reference) in order to statically link the game's libraries, as libogc doesn't have any form of dll loading. Other than that, most stuff is already working out of the box, but there's still lots to be done.

To-do list:
  • Fix saving and loading save files (mostly loading in general)
  • Network support
  • Hardware acceleration via OpenGX
  • Wiimote + Nunchuck support (with QuakeGX aiming)

Source code:
https://github.com/MintFerret/xash3d-fwgs/


Screenshots below are running in software rendering, as compiling the engine with opengx makes the binary too big to fit into memory
 

Attachments

  • Screenshot 2026-06-14 7.54.50 AM.png
    Screenshot 2026-06-14 7.54.50 AM.png
    220.8 KB · Views: 12
  • Screenshot 2026-06-13 10.07.56 PM.png
    Screenshot 2026-06-13 10.07.56 PM.png
    465 KB · Views: 3
Last edited by MintFerret,
Always test on hardware first, and emulator second. Also OpenGX can be pretty heavy on Wii's memory and CPU sadly. It's a good band-aid 'till you can get the native GX rendering up and running. However, best of luck!
 
Always test on hardware first, and emulator second
I always do, I first run the emulator slow enough to get the debugger to work, and then test it on my Wii afterwards.

OpenGX can be pretty heavy on Wii's memory and CPU sadly. It's a good band-aid 'till you can get the native GX rendering up and running
Even without hardware rendering, the performance doesn't seem too bad. I haven't tested it with OpenGX, but I imagine once I get it to work I won't have to worry about making a native renderer for the time being

Here's the full intro running in software rendering now that I fixed some parts of the filesystem
 
I always do, I first run the emulator slow enough to get the debugger to work, and then test it on my Wii afterwards.


Even without hardware rendering, the performance doesn't seem too bad. I haven't tested it with OpenGX, but I imagine once I get it to work I won't have to worry about making a native renderer for the time being

Here's the full intro running in software rendering now that I fixed some parts of the filesystem

That's not too bad at all!

Also, the OpenGX rendering is good at first, but Native GX calls are just overall better. You gain sooo much performance off that.
 
That's not too bad at all!

Also, the OpenGX rendering is good at first, but Native GX calls are just overall better. You gain sooo much performance off that.
Maybe at some point. I don't know much about graphics programming to know where to begin to write a native renderer, so I'll stick with OpenGX till I sort that out. I had another project previous to this where I hit the same wall.
 
Thank you everyone for your interest, here's another update on the port

I've been trying to get multiplayer working and only got it partially working. It can connect to other servers but as soon as it loads the level, it crashes due to some stack corruption. It didn't help that this issue only occurred on the emulator and not on my Wii as it appeared to be disconnected. I've spent the past week trying different socket libraries but still nothing. I've adapted some portions of the network shim from @Mayo1990 's port of quake3, and managed to get the Wii to host a HLDM server as pictured below. It seems to work with any client that I threw at it regardless of endianess.

IMG_20260624_172335.jpg


As of today, I got the Wii to connect to servers, but I'm still having the same problem as I was having with the emulator. At this point, I'm going to shift my focus on the opengx renderer and get the rest of the campaign working. I'll release the source code tomorrow, if anyone wants to assist.
 
amazing ! will not have to crave how to make Half life run on the dreamcast emulator !!

I wanted to put that game on my friend's wii
 
Hi, I'm surprised at how far you've come with this xash3d port for the Wii. I was going to take the time to create this port myself, but seeing how far you've already come, I'd like to know...If you need any help with this project, I'm available for anything.
 
@Gelocire if you know things about Wii programming, I need some help on the Dreamcast Emulator for Wii !

Biggest problem right now is that 16 Bit sound from Dreamcast is played very slow. Pretty sure it's a Wii implementation problem... if that rights a bell...!
 
  • Like
Reactions: Gelocire
I'd like to know...If you need any help with this project, I'm available for anything.
Thanks for your interest, Outside of the renderer and multiplayer, there isn't much to do as most of the wii-specific stuff is handled by sdl2. For starters, you could add mouse support (keyboard already works) or rumble for gamecube controllers
 
@Gelocire if you know things about Wii programming, I need some help on the Dreamcast Emulator for Wii !

Biggest problem right now is that 16 Bit sound from Dreamcast is played very slow. Pretty sure it's a Wii implementation problem... if that rights a bell...!
Hi, I apologize for the delay. If you notice that I take a long time to respond, it's because I only check this page on my phone.
Now, I'd like to know which Dreamcast emulator you're using on the Wii. Ideally, share the GitHub link with me. I'll be reviewing the code in a few days and trying to patch the audio system.
Post automatically merged:

Thanks for your interest, Outside of the renderer and multiplayer, there isn't much to do as most of the wii-specific stuff is handled by sdl2. For starters, you could add mouse support (keyboard already works) or rumble for gamecube controllers
I’d like to take on the task of adding rumble/vibration support for GameCube controllers, using `PADControlMotor` from libogc.

To avoid messing anything up, could you give me some guidance on the current code structure?

Specifically, it would help to know:
- How GameCube controller input is currently handled (through SDL2, direct libogc `PAD_*` functions, or some wrapper?).
- Where the main joystick/input functions are located in the engine (`IN_*`, joy code, client-side input, etc.).
- If there’s already any existing vibration/force feedback infrastructure in the engine (Mobility API, rumble functions, etc.) that I should extend.
- Where would be the best place to add Wii-specific code (e.g. `platform/wii/`, `engine/input/`, or somewhere else?).

Any key files or directories you recommend I look at first would be really helpful.

Thanks
 
Last edited by Gelocire,

Site & Scene News

Popular threads in this forum