Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Text editor (snes)

Name: Anonymous 2006-08-28 2:00

I got interested in rom hacking some months back, had to drop it for a few reasons, and made a fairly involved comeback. I have some knowledge of the 65816 CPU and use geiger's SNES debugger, because it's fucking awesome for this purpose.

The game I'm messing around with right now is Secret of Evermore, it uses dictionary style text with no compression. I've found all the correlating pointers, and how to find where it very first finds the value that determines which pointer to use, resulting in the sentences to be displayed (in other words I can find the one byte value that represents a pointer, and change it to another word).

So I think I have enough information to get started on a text editor, but here's a few issues I know will come up:
#1 - putting more words than originally used-- how do/can I make it so there's a little more freedom on that provided I can find some free space in the ROM image (or just expand it via lunar expand)?
#2 - Bigger "dictionary" (there's always just manually inputing the text if that isn't possible)
#3 - There's this thing it does in order to keep the pointer-referring values from exceeding FF, it has a smaller section before it, so there's another 00 to about 1F that can be changed amongst itself, but the second set can't be accessed, I don't know how to change this one value correlating to the first pointer referring value (F66C) to the second one (F7D5).
The significance of those two values is: F66C or F7D5 + pointer (loaded reversely) + 81:0000 = the ROM location of the word being pointed to.
#4 - What's a good language to do this in? I've heard Visual basic, but most people seem to hate it, and C#. I won't do a command line version, or anything that'll take me a friggin year instead of a few weeks to code for the sake of speed of execution.

Name: Anonymous 2006-08-28 4:28

#1: AFAIK Secret of Evermore doesn't use the whole SNES memory space. Put the edited strings after the end of the original dump, so that you can make them any length.
#2: I don't know what you mean about dictionary style text.
#3: Without more information, I can't help, sorry.
#4: Python?

Name: Anonymous 2006-08-28 5:16

What I was told that dictionary style text was, was that all the words are stored in some order together, usually alphabetic
...
2A 00 = formula
32 00 = for
36 00 = from
3B 00 = give
40 00 = going
...
like these are all next to each other in the ROM, the number before them is the 2 byte pointer that refers to them in a previous area in the ROM. Then there's a one byte value that refers to the pointer in game. But since there's more than 255 words, it has to choose between the afore-mentioned offsets,  F66C or F7D5 in combination with an associated value. in other words there's two words that have "0F" pointing to their pointer, but somewhere down the line a choice is made between F66C and F7D5 which determines which of the two words gets used. So it's a three level kinda thing: in-game one byte pointer-pointer, then the two byte pointer which is stored with many other pointers in an organized way, then finally the word itself, which is organized alphabetically together in the ROM.

(tl;dr version)Anyway, I was referring to how to build my ..."arsenal" of available words, instead of just limiting myself to the ones from the game, or pointing at individual letters to form the new words.

I guess I'll do some screwing around to find out where it determines the offset thing, because that seems pretty important and relatively easy to find out...

Name: Anonymous 2006-08-28 6:55

>>3
Wow, that's fucked up. I see they had to do this kind of thing for games to fit in so little space, with no RAM for expanding compressed data either.

I'm afraid I won't be able to help you, doing this kind of thing will require a SNES wizard, not a random Pythonic Anonymous...

Name: Anonymous 2006-08-28 8:03

It's actually rather cool to see something other than random python/javur/other shit flamewars in my /prog/!

For the topic: it seems like dictionary size is limited. Try doing the old trial-error way, you should figure it out rather quickly. Maybe you can even alter the program logic to increase dictionary size.

Name: Anonymous 2009-01-14 12:32

LISP

Name: Anonymous 2009-08-16 23:37

Lain.

Name: Anonymous 2010-06-27 12:55

ur gay

Name: Anonymous 2011-01-31 19:55

<-- check em dubz

Name: Sgt.Kabu몋kiman텒徊 2012-05-28 19:55

Bringing /prog/ back to its people

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List