Anyway, I would like to say good job you two on all your work so far. It is nice to see a game get broken, rebuilt, and made better, faster, stronger... ^^;
Better? Yes and no. Stronger? Maby. Faster? Naw. Heck, if anything, with the stuff we've added, every loop of the main game engine takes a handful more cycles that it once did. Not that it matters as I don't think we've run out of vertical refresh yet ... Oh, you meant figuratively? Well, thanks, we do what we can =_=
It's not like what we talk about in this thread is gonna keep them from working on the hack anyway.
Actually, it's the activity on this thread that keeps me motivated. Even when it's only tangentally related to the hack itself.
In regards to the current progress, I haven't really gotten anything done lately. I've been distracted by a bunch of RL stuff (fixing my truck) and a new utility project (Mototile). But now I've gotten back into it and I've started working on the credits sequence.
SMBS has a long credits sequence, of which we'd like to add the content of to the end of our hack. Additionally, SMB didn't have any credits, so I decided to add the hard working folks at Big N as well. Finally, of course, we have to credit ourselves and (more important to me anyway) give special thanks to all the playtesters, tool authors, etc. that helped make this project possible.
So I started looking into the victory messages code and stuff. Quite frankly, I don't quite know the NES and SMB's engine internals quite well enough to figure it out exactly.
Anyway, the text data is fairly straight forward. It consists of a three byte header, the text, and $00 as a terminator. I've managed to figure out two of the three header bytes. The second is the screen position to draw the text to. The third is the length of the string. (Why it has both a string length and null termination is beyond me.) The first one is the one that I haven't figured out.
In all of the text strings in the game, it's either $25 or $26. I thought I could figure it out from the text drawing routine, but, like so many other bits of SMB, it's hard to follow. Rather than do any actual work itself, it just sets some variables and lets some other part of the engine (that I haven't located yet) handle the real work.
So, does anyone here know what that first byte means?
Hey, Frantik, any ETA on getting the last of the bugs resulting from the new block code fixed? To test out my changes to the end code, I fixed the flagpole in 8-3, but as a result it's location ended up being $FD, the end of object data marker, so YY-ME simply moved it to $ED instead so it's not in the right spot. (I also messed up the hole before it somehow.) Anyway, if you find the time, a fix would be nice.Edit:
Never mind, I figured it out. The first byte is part of the screen location as well. Actually, the first two byte are a pointer to the location to write the string to. (Oddly, it's in big endian format, hmm.)
As the engine gets changed more and more, most Game Genie code don't work anymore. For anyone that's interested, I've developed a few cheat codes that only modify RAM locations and so are stable from build to build. The downside is that they can't be used with a GG or PAR or similar ROM modding device.
Here's the list (straight from FCEU):
1) * $07fc:001 - World Menu
2) * $079f:010 - Invincible
3) * $0704:001 - Flight
4) * $075f:007 - World Eight
5) * $0760:104 - Castle
The "World Menu" code just activates hard mode, so you'll have to turn it off if you want to play in easy mode once you select a world. The "Invincible" code is an infinite starman. The "Flight" code lets you swim on all levels.
The final two are a little obscure. The "World Eight" code is an alternate method of selecting which world to load. You can modify the value to select other worlds. The so-called "Castle" code is used to select a specific level. Unfortunately, it uses the internal map numbers, so it's kinda difficult to use. I've yet to find an easy way of selecting a level.