Add Rumble Racing (PS2)#909
Conversation
6f1078f to
75b3a01
Compare
|
A few more things I'd like to add when thinking more about this PR. Since the AI code in the other PR is getting torn up, I also want to be transparent up front about my AI usage before you review it so you don't go crazy wondering First of all, please don't be dissuaded by reviewing this PR based on the 43,000 lines added. Almost 90% of that (37,000 lines) is just JSON data for actor transformations. Ignoring that, the actual amount of relevant LOC is like 5,000 LOC. I am definitely open to storing the JSON data in a different format/approach which would be more compressed and/or not inflate file size/LOC. As far as how AI was used, I used Gemini/Claude to:
There are lots of comments in the Go code which are remnants of earlier code, debugging code commented out, and so on. Since I basically copied the relevant code from my CLI tool and pasted it here, a fair amount of the comments and some code could be considered irrelevant. As we briefly discussed a while ago, you guys said you'd be open to adding Go as a language to noclip. If, after looking at this PR, it seems like it would introduce more annoyances than it's worth, I am fine with re-writing the parsing code in TS / Rust in order to introduce less friction. If you'd rather have me scrap the Go stuff, it won't hurt my feelings. |
|
Thanks for the heads up. Sorry I'm so backed up with reviews.
For data like this, rather than have it be part of the initial code bundle, we could instead store it along with the game data, fetched at runtime. |
…ode/data, use datashare, don't use worker
|
@magcius, I was able to have the all of the Go code ported to TS. Now everything is purely in TS. After some reflection I felt like asking noclip to support Go just for one game would unnecessarily introduce complications and bloat. Amazingly, Claude Sonnet 4.6 was able to one-shot the port and keep the code faithful to my original code. I've tested it locally and everything is good, it even feels like it loads faster now than before. |
| return result; | ||
| } | ||
|
|
||
| export function swizzleClutPstm4_16<T>(data: T[]): T[] { |
There was a problem hiding this comment.
I believe the existing gsMemoryMapReadImagePSMT4_PSMCT32 will do what you want?
There was a problem hiding this comment.
Most likely. I've gone ahead and referenced noclip's existing PS2 GS enums. Figuring out how PS2 texture swizzling was confusing for me at the time when I was writing the original Go code. I was able to figure out how swizzling and CLUTs worked on my own and implemented it in the way that made sense to me, but it is not ideal to have multiple implementations. I'll have to refresh myself on how this all works again and see if I can utilize noclip's implementation
commit 1306ce1 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 18:45:45 2026 -0400 use existing PS2 GS enums for textures/cluts commit 0f8ced1 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 18:33:39 2026 -0400 add note commit 2c31c03 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 18:00:32 2026 -0400 use vec3/2 commit 2af39a8 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 17:08:37 2026 -0400 remove bytes.ts helpers, use DataView and readString() commit 546bf6a Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 15:18:28 2026 -0400 remove uselss lambda function in decompress routine commit acd0525 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 13:48:35 2026 -0400 use new common VIF enums commit 1f05c8b Merge: 4b57327 12eb0f9 Author: Matt P <mattp3259@gmail.com> Date: Sun Jul 12 13:27:55 2026 -0400 Merge remote-tracking branch 'origin/main' into pr-comments
Well, this was a marathon of a coding project... This PR adds Rumble Racing to noclip.
A few noteworthy things about this implementation:
Known Visual issues: