Author
|
Topic: Menu Compression. (Read 6 times)
|
Nightcrawler
Guest
|
|
« Reply #60 on: June 22, 2007, 11:38:06 am » |
|
Congrats! I'm glad you were persistent enough to succeed. I've seen many in your position just give up. It would really be a good idea to learn to use a debugger though such as FCEUltra XD SP. It will really make this type of job much easier. I hate to see you struggle when you don't have to.
|
|
|
|
ded302
Guest
|
|
« Reply #61 on: June 22, 2007, 12:03:41 pm » |
|
Thanks for the comment. When monday comes around, Im going to get this hack started and probaly get it released soon. Sted is a good game but it has a battle system like the nes version of final fantasy 1. The purpose of this hack is to compensate for the weird battle system by making the game a little easier.
|
|
|
|
ded302
Guest
|
|
« Reply #62 on: July 17, 2007, 04:39:28 pm » |
|
Im having trouble finding a pointer in Glory Of Herecles. The pointer was found by tracing and searching the trace log for the hex value of the first letter in the phrase. A debugger was used the verify the pointer. When I searched for the pointer, no results came up.
I figured out why I was not finding the pointer to the menu text, its because the games code writes in the menu letters. When I tried to remap a pointer with the dialouge, it worked. Now when I try to put some text in a batch of free space and try to remap a pointer to that location, I get jibberish. Is there anything I missed?
|
|
« Last Edit: July 18, 2007, 12:44:03 pm by ded302 »
|
|
|
|
Nightcrawler
Guest
|
|
« Reply #63 on: July 21, 2007, 02:35:44 pm » |
|
The bank perhaps?
|
|
|
|
ded302
Guest
|
|
« Reply #64 on: July 24, 2007, 04:56:54 pm » |
|
So that means if there is a pointer table called A that is in bank 1, Ill have to remap the pointer to free space that is in bank 1?
|
|
|
|
KingMike
Guest
|
|
« Reply #65 on: July 24, 2007, 10:43:56 pm » |
|
You'll have to consider both the text and the text routine. If the text and text routine are in a swappable bank, you'll have to move both. Otherwise, you'll have to move the text and text routine to another area. Heracles 1 is a mapper 2 game. I believe that means the last 16KB is loaded into CPU address C000-FFFF, and 8000-BFFF is a swappable bank. (otherwise, what I've done is ROM expansion. Since HnE1 is a 128KB game, you'd have to copy the first 112KB, add 128KB blank space, then the last 16KB. If there is too much text to fit in one bank: I would take advantage of the fact that a large part of the NES' CPU address space is invalid (0800-5FFF). Then I make up some kind of pointer system (maybe use one byte as a bank, and the other as a string number within the bank) using those invalid pointer values. Then I modify the text routine to check if the pointer is in the "valid" range (0000-07FF = RAM, 6000-7FFF = cart RAM if present, 8000-FFFF = ROM), if it's not, I assume it to be my pointer system, and read a single character (if the game originally loaded text one character at a time) or a string (if the game originally loaded a string) and go back to the original routine.
|
|
|
|
ded302
Guest
|
|
« Reply #66 on: July 25, 2007, 12:07:45 am » |
|
Thanks for the advice, Ill see what I can do.
|
|
|
|
ded302
Guest
|
|
« Reply #67 on: September 22, 2007, 12:40:08 pm » |
|
I noticed I could make free space in the dialogue section in Bloody Warriors by hacking pointers to consolidate statements made by the townspeople. I tried mapping an item pointer to that free space in the dialogue section and it doesn't work. I was also able to find the text routine by setting a read breakpoint with the pointer address. Is there a routine that checks the pointer to see if it is an item or dialogue pointer?
|
|
|
|
RedComet
Guest
|
|
« Reply #68 on: September 22, 2007, 09:28:59 pm » |
|
It sounds like the dialogue and item text are stored in two different banks.
|
|
|
|
ded302
Guest
|
|
« Reply #69 on: September 22, 2007, 11:56:28 pm » |
|
Im pretty sure that it is in 2 different banks. Would the text routine check the pointer to see which bank it belongs to or would there be a different text routine for each of the text banks?
|
|
|
|
ded302
Guest
|
|
« Reply #70 on: October 01, 2007, 09:34:18 pm » |
|
Ive found a way to get over the space issues for the items. Im going to take a dte routine and turn it into a fixed length mte. First Im trying to insert the original dte code into the rom. When I set a read breakpoint on the text pointer the debugger will snap 2 times in different locations with the same instruction that loads a single character for the string. If there is only one text routine then why is the character being loaded 2 times? The dte routine I have is the Megami Tensei routine.
|
|
|
|
KingMike
Guest
|
|
« Reply #71 on: October 01, 2007, 10:23:22 pm » |
|
I can't speak for your specific game, but possibly one read checks for control codes, and once it has determined that it is reading text, it does another read to get the character. I've seen that in a game I'm working on.
|
|
|
|
ded302
Guest
|
|
« Reply #72 on: October 01, 2007, 10:54:13 pm » |
|
Ill look at the text routine more and try and implement the dte routine again.
|
|
|
|
ded302
Guest
|
|
« Reply #73 on: October 06, 2007, 12:38:27 pm » |
|
I found the read instruction that snaps the debugger before the text is displayed, when I try to move the function that has the read instruction to another area, the first letter I see blinks and does not print out anymore letters. I used a savestate to get to an area where I can talk to someone and open up a text window. When I try to talk to someone the dialouge box will show and will crash before any text is displayed. The function with the read instruction was moved to free space in the same bank that has the text routine. Also does the 02 in 02/C363 mean the bank number?
|
|
|
|
Bobbias
Guest
|
|
« Reply #74 on: October 06, 2007, 01:04:48 pm » |
|
Hmm, looks like you're likely in the wrong bank now, and the code is pointing to locations that don't exist or something. I'm no expert, and I'm just speculating, but that's what it sounds like to me.
|
|
|
|
|