Rewriting wipEout
phoboslab.org
phoboslab.org
This is actually implemented in a slightly funky way on the PS1. The DMA unit responsible for sending commands to the GPU allows for a display list to be built in memory as a linked list of variable-length packets, each of which can hold zero or more commands. What Sony's libraries do is essentially generating the ordering table as an array of 8192 empty packets linked to each other, then allowing actual command packets to be allocated elsewhere (typically using a simple bump allocator) and "spliced" into the link from one empty packet to the next one. The PS1's vertex transformation coprocessor, the GTE, also keeps track of the Z coordinates of the last 4 vertices processed and has an instruction to quickly average them out so that the resulting value can be used as an index into the ordering table.
I wrote a few SDK-less bare metal C examples showing how to build an ordering table [1] and leverage it for 3D polygon sorting [2], should anybody want to check those out.
[1] https://github.com/spicyjpeg/ps1-bare-metal/blob/main/src/07...
[2] https://github.com/spicyjpeg/ps1-bare-metal/blob/main/src/08...
I'm guessing this explains the PSX-specific artefacts you would see when rotated triangles would "clip" into each other at the seams of models. The ordering would just come from the average Z coord of the plane.
[1] https://en.wikipedia.org/wiki/Texture_mapping#Affine_texture...
Maybe the coordinate values passed from GTE to GPU are "shadowed" with extra data about the transformation, that is then retrieved further down the pipeline
I suppose there could be multiple approaches
This isn't an easy problem to solve. I can't think of a way you could back figure the Z from the rendered data. The only other solution I can think of is to somehow break the models up into smaller polys as they are loaded into memory. If you break them up the individual triangles will be smaller and the lack of perspective won't show.
This does not seem to be a new approach, as PC ports of PS1 games used similar tricks all the way back in 2000 [1].
[1] https://news.ycombinator.com/item?id=3581350 https://news.ycombinator.com/item?id=29493242
I played a lot of Wipeout XL on the Playstation in my late teens/early 20s. I mean a LOT. The only thing I really wished for (other than less frustrating maps and smarter AI) was a higher resolution and farther draw distance. At some point, I found the Windows version in a bargain bin at some store and snatched it up. 640x480 Wipeout XL would be glorious!
Unfortunately whoever ported it was brand-new to programming or something because they pinned the game speed to the CPU speed, or screen refresh rate or similar. Net result was that it ran way too fast even on a modest computer at the time. It's like nobody even bothered to test it. There was a patch floating around to fix the speed at one point, but there are so many other problems with it that's just far easier to run the PSX version in an emulator and call it a day.
For the other Wipeout aficionados out there, note that there IS a modern game on Steam called BallisticNG. Supposedly created by (some of?) the original Wipeout developers. It was one of the first things I bought for my Steam Deck when it arrived. Unfortunately, I can't make heads or tails of it. It doesn't seem to be the kind of traditional Wipeout game where you start off with slow ships on slow maps and unlock more as you work your way up. In Ballistic NG, it seems like you just sorta pick your ship and and your map and then go racing against the AI. Or something like that. Maybe I just can't figure out the menus, I'm not sure.
All of this is a long-winded way of saying I support this rewrite and hope to see it evolve to adopt Wipeout XL/2097 features and maps eventually. (But not Wipeout 3, that was a disaster.)
i kind of like booting a game, going into a race, and just having it "go", kind of rare these days i guess
IIRC there isn't a lot to unlock. There's one or two locked ships and a bunch of paint jobs. It does have a Wipeout-style campaign (left-most menu option). Each set of races in the campaign mostly resolves around a different set of three maps with various modes and variations, getting faster and faster.
It still doesn't have quite the same feeling that I had with Wipeout but it's fairly close.
I would love love to see XL/2097 added. That was my favourite. Wipeout 3 was a close second. It was certainly quite different in tone though. In what ways did you find it a disaster?
'twas common practice than you might think-- https://www.vogonswiki.com/index.php/List_of_CPU_speed_sensi... http://www.cpukiller.com/
You need a joypad/joystick, I was surprised that I could plug it in after the game had started and it picked it up, insted of having to restart the game as I remember being the case with other games on Linux years ago.
I guess any proper DirectInput joypad would work just the same.
But the music, the art style, the concept and attitude of that game was awesome. I spent many hours playing it on PSX as an early teenager.
The web version is WASM, from C/SDL sources.
Sidenote, there should be some amazing games capable of running browser now. Is there any list or any recommendation ?
Of course there's the original Diablo also.
And don't forget all of the DOSBox stuff on Archive.
The first one that really blew me away was the demo of Superhot[0].
Note that the second link (space game) will take a bit longer to load, as there's no loading screen.
https://www.thamesandhudsonusa.com/books/a-to-z-of-the-desig...
https://phoboslab.org/log/2023/08/rewriting-wipeout
As a sign of what you're getting yourself into, though (you knew this was coming though, didn't you?): "The leaked source has a few hundred global variables scattered all over. Many of these are brought in to different source files (using `extern int something;`) and there was little logic to where they were defined."
This part is great: > If anyone at Sony is reading this, please consider that you have (in my opinion) two equally good options: either let it be, or shut this thing down and get a real remaster going.
> I'd love to help!
It would be good if this code would could would work with whatever the standard format for texture packs on PS1 emulators is.
It’s strange how some HN submissions fail to get noticed, and a duplicate submission after a few hours (or even next day) gets upvoted and is more visible.
The dupe detector only gets strict if a previous post has already had significant attention. It's more important to give good articles multiple cracks at the bat, than it is to prevent repeat URLs.
When we see cases where an earlier submission "loses", we sometimes look through that submitter's previous posts and see if there's another good article that we could invite a repost of. Those go into in the second-chance pool (https://news.ycombinator.com/pool, explained at https://news.ycombinator.com/item?id=26998308), so they get a random placement on HN's front page.