*Skip to End for Question:Background:
I am a Megaman Legends fan. I want to create content for the kinsmen of my fandom to enjoy, and extend the content-hours of my beloved game series, and possibly by the deadline of the Dec. 19th 20-year anniversary of Megaman Legends.Goal:
I have ideas in mind to implement, endgoal being a variety of patches for gameplay, including item shuffling, restoring some japanese-only functionality like kicking-paprika, the music track "another sun" which exists in eng-rom but isn't hooked to play, and restoring functionality of the developer ingame-debug-menu... but to run, you must first walk, and to walk, you must first crawl, but before you do that, you must learn how to breathe upon entering the world for the first time. I have my work step-by-step laid out, but in order to make yuge things, I must first learn how to do very stupid basic things with the game code.Progress: 1)
I had started this project with a loose association with the LegendsStation community, and a few of it's members that had pioneered ram-hacks for the game. 2)
I found a massive amount of documentation on romhacking, a lot from this site so I already owe this place a place in my credits txt. So I began with documentation on Zelda OOT and felt that Megaman64 was a crummy port but by far the best chance I had at compiling a romhack. As I progressed, I found an actual romhack hosted here for Megaman Legends PS1, originally created more than six years ago! It has more than enough documentation to know how to modify text and pack ips patches, so now I'm working with intent to romhack the PS1 version. Gathered as many hex editors, debuggers, and assembly code programs as I could. So far I'm using LemAsm for rom assembly, PSX1.13 and No$PSX for debugging, HxD for hex editing and searching, Transhextion for thingy-tables to read and handle in-game text, FrHed for comparing differences, and am working with MegamanLegends (eng) and RockmanDASH (jap) disc files.Progress (Cont.): 3)
I have found the location of various text in rom (inside of ST00 bins for location-specific, in rockneo.exe for always-loaded assets like menus and items). The LegendsStation chums have some time in the last 11 years found things ranging from Health, Ammo, Morality (easy values), to the HUD, Camera Control, Stand and Walk when In Mid Air, Which Location a Door Takes You (Tau, Megaman Legends Abridged), to things like NPC Health/Script/Spawn for all 16 npcs that the game can load for one area (Trege). I'm trying to both bridge these ram-hacks into physical rom-hacks, which is apparently a new angle to the current crew at LegendsStation, but it's becoming an idea respected at an equal level to work that members have been working on for years (which is exciting and appreciated).Problems:
Something I figured was a really simple test of "doing something profound", was changing the value of the "starting morality" in the rom. This is the value that the game tracks in-game, that loads darker texture for armor, loads different dialogue variants of how townsfolk depict Megaman, and this value starts at 128 (x80) at game start and increases naturally but decreases when doing "bad" things like kicking trash at the baker or vandalizing vending machines or keeping money from a bank robbery or shooting a civilian news airship.
To find the value, I scanned for it, kicked vending machine, scanned for decreasing value, kicked vendi... wash rinse repeat until I got it. The ram value is located at 0C1B70 (fun fact Trege discovered, the ePSXe1.9.25 retains the same memory location every time it loads a game, it doesn't shift around unlike other versions, so it's useful when using CheatEngine where morality's value is always B4D210). Well, monitoring the value on CE, I found that toward the end of the black "loading..." screen at game startup, the address byte fills to 80 (the value one starts with). I figured I could trace this, search nearby byte strings, ect, to find it in ram... and have ran into problems with this seemginly soft-test.
Problem1) When starting, PCSXTrace was considered a top-tier tracer, and PCSX1.5 w Amego was another highly rated program. After much trouble getting the right old-plugins to get them to work, it turns out they're very crash-happy, but specifically do not run MegamanLegends for neither love nor money (or RockmanDASH or any prototype builds). Does anyone here know how to make them run... better?Problem2&3)
-When using No$PSX, the debugger says "huh?" every time I do anything, and even though I eventually get it to work it also doesn't use the same opcode syntax (mov instead of lui and stuff). Why do they call the same operations different things?
-So I use PSX1.13 r3000 debugger, to create a break on the loading-screen that fills the value at start. It breaks, but the emulator cannot resume from that point once it breaks, you can read the debugger but the emulator will crash upon refocus so it's a restart from there. Is that even normal for PSX1.13 to crash every time it performs a debugger break?
-The PSX1,13 break specifies a certain instruction from 664BC, and I go to it in rom. It's blank, 00 not 80. I reload the game, turns out that value is also filled to 80 during the load. It was supposed to be a simple read from rom, wth Capcom?
-Well, I create a break for 664BC now, but it won't break on either debugger on write. It writes from 00 to 80, while the break is watching it, and never breaks. Am I missing something?
Thanks for any replies, sorry for all text catching up to where I'm at, and if this makes any breakthroughs I could ask a few more things about other problems too.