![]() |
| Register | Login | |||||
|
Main
| Memberlist
| Active users
| Calendar
| Chat
| Online users Ranks | FAQ | ACS | Stats | Color Chart | Search | Photo album |
|
| | |||
| Acmlm's Board - I3 Archive - - Posts by BMF54123 |
| Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
| User | Post | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(restricted)|
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Well, I can see this being useful several years from now (well, hopefully more than "several"), after Nintendo has pulled their WFC servers offline. For now, though, it's an interesting experiment. |
![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
dumb |
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Wow...another hack with SMAS graphics, yet somehow I'm not utterly disgusted by it?
|
Well done, sir! ![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Yes, I realize that SMB3-style bricks have been available for some time now...however, they're not quite "right" (the blocks don't bump up when small Mario hits them, for example). I've decided to remedy this the only way I know how: by spending a whole night figuring out sprite-block interactions, and making my own routines from scratch! |
First off, find some free space in your ROM, and insert the following two routines: brick1.bin brick2.bin Convert the starting address of both routines to SNES format and write them down. Next, go to the following addresses, and change each JSL to point to the new brick routines: $97D2: brick1 $9BC9: brick1 $1182C: brick1 $6F02: brick2 Finally, change $10A76 to 06; this will prevent the bricks from turning when small Mario hits them (or you can leave this at FF and have "hybrid" turn-bricks). That's all there is to it! The original turn blocks should now behave exactly like SMB3 bricks. Hitting them as big Mario, kicking a sprite into them, smacking them with your cape, and spin-jumping on them will cause them to break, while hitting them as small Mario will merely bump them up (knocking out any enemy on top, of course).
If you run into any odd behavior or crashes, please let me know exactly what you did to cause it. I'm pretty sure I tracked down all the necessary turn block routines, though I may have missed one or two. ![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Changing sprite 96 (the unused Chargin' Chuck) tends to corrupt the leaves of the Jumpin' Piranha Plant, though I don't know if that's a tilemap issue or what... |
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Originally posted by MathOnNapkinsYes, that's how the original game does it. Specifically, the sprite it creates replaces the Map16 three times: when it bounces upward, it swaps in a solid placeholder (probably to prevent sprites from falling through in the brief moment the block is bouncing), and when it drops, it swaps in the "always-turning turn block" for #$FF frames (the value at $10A76). Once the counter reaches zero, the sprite swaps in the original turn block, and then deletes itself. Each sprite takes up one entry in the sprite table, and is processed even while offscreen, which is why you can only have 4 active blocks at any given time. With my new routines, if small Mario hits a block, the original "bounced block" routine is called; if big Mario or a sprite hits the block, the "broken block" routine is called. The latter requires specific values to be present in A and Y, and also requires Mario's Y speed to be preserved (otherwise he bounces upward whenever a block breaks, likely part of the spin jump routine). This is why simply replacing the original JSLs wouldn't work. Originally posted by MathOnNapkinsI would've just made an IPS patch, but I have no idea what space is available in any given ROM, since Lunar Magic and Block Tool both scan for empty space and use whatever they can find. I didn't want my new routines inadvertently overwriting any existing data. ![]() (edited by BMF54123 on 04-05-06 05:50 PM)
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Just set a breakpoint on writes to $7EC800. This is the start of the level layout in RAM, and it's initialized to #$25 every time a new level is loaded (from both the overworld and secondary exits). I'm sure you know what to do from there. |
As for the level number, this patch will store it at $10B (16-bit). This is the "real" number reported by Lunar Magic, and it works for all levels, not just those loaded from the overworld. (If you're using my LevelASM system, you should already have this installed.)
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
What Stifu said. |
*closes*
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Yeah, hack announcements don't go in Advanced ROM Hacking.
|
*moves*
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Originally posted by icegoomHAHAHAHAHAHA. Don't you DARE change those, I love them. ![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Originally posted by legend in his own mindI'd skip the FX series, as it's already a couple generations old. I upgraded from an FX5500 to a 6200OC (factory overclocked ) a while ago, and there was a sizable jump in my AquaMark scores. It only cost me around $120, and while I'm not sure how that translates to AU dollars, I'm sure it's within your price range. ![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Generally, when I need to hook a JSR in order to JSL to my own code (which I keep in SNES bank $3F), I copy the original JSR to an empty space in the same ROM bank, along with my new JSL, then change the original JSR to point to the new location, like so:
|
JSR EmptySpace ;original JSR was here :EmptySpace JSR OriginalRoutine JSL NewRoutine RTS I don't feel comfortable changing RTSes to RTLs because there's always the chance that the game will call the same routine later on, but from a different point, and using a JSR.
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Looks like a good deal to me. That card shouldn't have any trouble with most games on the market now, provided you have a decent CPU to match. |
Originally posted by HyperMackerelYep, there's a company named BFG Tech that sells overclocked video cards with beefy heatsinks. They're even endorsed by NVIDIA and have a lifetime warranty. Apparently, my card (6200 OC) has a 375MHz core clock, whereas a "standard" 6200 runs at 350MHz.Originally posted by BMF54123
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Since I am quite the lazy bum and have a facial hair growth rate not unlike that of the Wolfman, I use a 3-blade electric Remington every day. If I don't do it every day, the long hairs tend to get caught between the blades, and...ow ow ow. |
![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Originally posted by MathOnNapkinsOf course...that's how the bricks behaved in SMB3. They only check Mario's size (LDA $19 in brick2) when he either spin jumps on them or hits them from below.
Originally posted by MathOnNapkinsThat, unfortunately, I can't fix, since sprites and backgrounds can't share palettes.
I nearly forgot that the bricks in SMB3 turn into coins when a P-Switch is hit...I wonder how hard it would be to replicate that behavior? Should I even bother doing it?
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
I don't know anything about either card, but my guess is that the 6600LE (is that ATi or NVIDIA?) is simply a slower card than the X800GT. Nothing you can do about it, really, except buy a better one. |
![]()
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Apparently, you guys failed to notice that the last reply in this topic was four months ago, meaning interdpth has probably found a solution to his problem by now. |
(if not, uh, just let me know and I'll reopen this )
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Start making your thread titles more descriptive. I'm not going to say it again. |
BMF54123 |
Since: 11-18-05 From: MOOGLES Last post: 5908 days Last view: 5908 days
|
Well, yeah, I use that method as much as possible...the method I posted is for those (thankfully) rare occasions when you need to hook the code at a specific point (like after a certain subroutine runs), and there simply isn't enough room for a JSL. Example:
|
JSR blah STA $bleh RTS In this case, I need to intercept and modify the results from blah before they are stored to $bleh (I ran into such a situation last night when fixing gravity for layer 2 platforms). I can't JSL here because the original JSR needs to be called from the same bank. The only way I can do that is to redirect blah to an empty spot in the same bank, as explained in my previous post: JSR emptyspot STA $bleh RTS :emptyspot JSR blah JSL blarg ;this modifies A before storing to $bleh RTS | |||||||||||||||||||||||||||||||||||||||||||
| Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
| Acmlm's Board - I3 Archive - - Posts by BMF54123 |