Jet Force Gemini - Infinite Health GameShark Codes

mighty water upbeat grandiose scandalous march merciful aware command reminiscent

This post was mass deleted and anonymized with Redact

Jet Force Gemini - Infinite Health GameShark Codes

14 comments · 100% upvoted · other discussions

comments

Hectamatatortron

I hacked a bunch of stuff like infinite health, infinite jetpack fuel, infinite ammo, rapid fire, no spread on the machine gun, auto aim, no clip (for bullets and for players), and faster speed back in 2006-2007.

There's a rudimentary co-op hack in there, too, but I converted that to a ROM patch.

Been looking for people to play 2-4 player co-op with (using actual characters, not Floyd) for over a decade by now. There's a whole RHDN page about it. I made my own cheat handler to inject into the game that surpasses a GameShark, with much better and more code types, then used that to add the co-op hack.

ccfreak2k [OP]

run abounding point stupendous threatening file fertile price pocket domineering

This post was mass deleted and anonymized with Redact

Hectamatatortron

He's not taking credit for it. That's a literal copy/paste of an old Kodewerx forum post I made over a decade ago. I haven't gone by Zeld in forever (oof). Their link is apparently broken, though, because they linked somewhere else - back then it was really popular for people to copy my stuff all over without contacting me about it.

Honestly, the garbage people I put up with in the various modding communities I was a part of are why I all but quit doing any serious game mods.

Jewmaster666

Does co-op hack work on real hardware?

Hectamatatortron

I have no way to test that, so I'm not sure, but now that it's been a solid 8 or so years since I regularly played it, I'm seeing a lot of issues (crashes when loading new areas, saves not being loaded as if the emulator were ignoring the serial requests going into the I/O registers) that I've never seen before, which make the hack unplayable currently. This was a recent discovery (like, within the past couple of days), and it worked fine in the past (as seen on my YouTube/Twitch), so I have a mind to go back and redo it with a focus on compatibility (it wasn't working with the interpreter core even before, when it was still working, which was really strange and interfered with debugging).

Edit: Actually, the hack is working, but we're still limited to PJ64 1.6 with the Recompiler core for full compatibility. I've spent many weeks of the past 3 months rewriting it all in C++ (technically just C source files with the .cpp extension; not sure how many C++ features I'll actually use). I've been playing with friends online using Parsec.

Jewmaster666

This would be a dream come true. I wanna play this with my girlfriend.

Hectamatatortron

Don't take it personally, but I'm far from interested in making things for other people to enjoy anymore, and I certainly haven't had any plans to share anything I've developed recently for free.

People actually harassed me for having a donation link, and now I have a much worse financial and health status than I did even when I started asking for help, so I haven't really been motivated to touch any of this stuff since maybe 2014.

I had an Ocarina of Time hack that added all new collision routines for a planned project to make the game have a "good, neutral, or evil path" system via fighting with or against NPCs (the ones that normally couldn't be attacked by any means). You could do stuff like hitting the King Zora with a slingshot to get him out of the way (I also had another hack that simply let me push him around like he was a light balloon) or taking out that pesky owl before you got stuck in a long dialogue. The video demos of the hack got featured in an article that I wasn't even contacted about, and all the top comments were about how bad I was at using Hover Boots. No one really knows or cares how much work goes into this stuff, and they're pretty garbage to anyone who doesn't acquiesce to their unwarranted sense of entitlement. I wish I could say that it's just a vocal minority, but I'm not convinced it is.

Inevitable_Bug2728

God bless you for the work you did for the hacking community. I recently tried to get Jetforce COOP working and ran into a lot of issues and ultimately never got to play it with my buddy. Someday maybe.

Hectamatatortron

I've been trying to find this thread so I could edit my post...turns out the emulator was just being dumb when I thought the hack wasn't working. I even rewrote it all from assembly to C, so I can fix bugs much more quickly now. It doesn't really work in regular netplay still, but it's fine with Parsec affording non-host players a thin client to play with. If your connection is bad (mine is) then your clients will have terrible input lag, but there's no worrying about desync, and it's a pretty lenient game anyway.

If you're interested in playing, you could play with my Discord buddies and I, or if you want to host yourself, I can forward you an updated JFP (I am looking into switching to Beat, but JFP is fine for now). The source has gone back to closed while I work out whether or not I want to hold it for ransom (you know, because I'm super unhealthy, and people think I don't need healthcare or food to keep doing stuff like this, which is wrong), but I don't mind sharing the patch file (which doesn't really do anything different than the old version up on RHDN yet, anyway).

TheNameThatShouldNot

Do you have a code to disable the widescreen top and bottom black bars? On Parallelei it's almost perfect emulation. When you use the 'force widescreen' cheat in a room you won't have the black bars (have to aim once to reset the view) and it looks perfect, but once you change rooms the black bars will appear. This tells me the game is doing a check that modifies the output on level load. If it weren't emulated I'd look through the memory values myself but I have no idea how you'd record and compare memory inside the emulator in realtime.

Hectamatatortron

If the emulator is running on your PC, you can just use Cheat Engine, or the emulator's own debugging interface (if it has one). Otherwise you're looking at using some kind of remote debugger, and then going through the usual steps you'd go through with Cheat Engine to essentially debug both the emulator itself and the thing being emulated simultaneously. Cheat Engine's got nice debugging features built into it that make this less insufferable, but a remote debugger might not. Emulators that are set to use an interpreter core, rather than recompiling the code, make it much easier to understand what you're looking at when you step through execution or hack in a breakpoint using a code cave. I have some documentation I wrote about debugging things that are being emulated, and how to modify an emulator to provide yourself a rudimentary debugging interface.

I haven't done any graphical work with JFG other than messing with a variable that sets the number of players to consider for split screen (used by the co-op hack), so I know nothing about managing those black bars.

TheNameThatShouldNot

Yep, I figured out the cheat engine part, it was surprising to me that it's all basically layed out in plain memory. The weirdest thing tho is the value that sets the in game widescreen and subsequently the black bars has its position in memory modified in weird ways. So typically it'll either be 1 or 0 indicating on or off, but while playing the game I see it also change randomly to other numbers.

It's really weird because it's clearly an indicator, but it's also not necessary for the game to know it's widescreen. After no-opping the instructions that set the on/off value nothing changes in game and it still toggles just fine.

I suppose the game is using some other mechanism for this, but it doesn't show up as a simple 0/1. Hopefully someday someone will figure it out but I lack the knowledge necessary to track down the origin of those black bars.

Hectamatatortron

Speaking of weird booleans, the value for your warping state is some kind of enum like "not warping = 0, warping = 1, warping_intermediate = 255" (I can't think of a better name for the value == 255 option). Not sure what Rareware was up to there.

Your value being useless as far as affecting the game's behavior means, of course, that it's not the variable you actually want. If you're sure that variable is related, though, it's probably being modified by the same routine that is responsible for what you are trying to change the behavior of. This could easily be verified by finding the beginning of the function (probably some stack pushing instructions) and editing it to simply return immediately (be careful with what you put into V0 if it's not supposed to "return void"). So...yeah, try (figuratively) "NOP'ing" the entire function.

CourtesyofTino

Stumbled upon this- confirmed as working on original hardware (NTSC-US). I was looking for an infinite health gameshark code, Google decided your post would help, and sure enough here we are. Thanks!