News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - kmilloz

Pages: [1]
Hey, kmilloz.  Dha Lau Hoo actually already created that tutorial, which you'll find here.  That's how I was able to get my turtle portraits into the game.

You might find one or two of these useful, too, though:
1) sor2palette.bin
2) sor2portraits.bin
3) sor2tilespritemap.bin

These are .bin files I created while working through the tutorial, but it's been a good year or so since I've done anything with them, so use at your own risk.

-----Epilogue – After the Release-----
A Brief History Lesson…

Romhacking has been a fun process.  With each iteration I’ve developed, I’ve realized that there’s a few more things I can likely figure out and do.  And so, just like my NBA Jam TE series, one TMNT mod became another, and another, and another, each one improving more over the last, till I finally made it through The Final Shell Shock.

Hopefully, you’ve some of these mods enjoyable too.  In the meantime, let’s get back to a little unfinished business…

Adding an Intro Screen

I’m not the biggest fan of intro screens added to romhacks.  Unless they blend with the original spirit and style of the game, my thoughts are to leave them out.  I tried to keep that in mind when creating my NBA Jam TE mods by incorporating logos and fonts that clearly synched up with the game.  With TMNT Final, given I was looking for the arcade Ninja Turtles feel, I couldn’t help but slip in an old-school “Winners Don’t Do Drugs!” logo.

Other than TLP not being terribly friendly with the colors (TileMolester was again worse!), the screen itself was fairly easy to drop in using AddIntroGen.  But… buyer beware… this utility is a general Genesis / Mega Drive tool not optimized for any specific game.  In using it, I found myself with two problems.

Of lesser concern, the intro only added code that exited the intro screen when pressing Start.  My preference was that it should also simply fade out to the next screen after a certain period of time, much like the SNES tutorials allow for that system.  A minor inconvenience, which I actually solved via writing some ASM (which ultimately conflicted; we’ll get to that in a bit).

Of much greater concern, something in the AddIntroGen code that the utility added reset the difficulty, lives, and stage select to values of 1 upon exiting to attract mode.  At the same time, it cleared all the values in RAM that created the high score table.  While none of that is detrimental to gameplay (settings can be changed in options), it doesn’t exactly make the game look polished at issuance.

My goal was to fix both issues.  Starting with trace logs to find where the Start button press occurred and next with research and chats on a Sega development Discord, I finally learned the value of ASM versus hex and grabbed an assembler.   I also learned a bit about the DBF function and how much time it could potentially save writing that versus commands to push 60+ bytes of data into RAM one byte at a time via the same MOVE command over and over again.  The end result was a fix to the high score table plus the default lives and difficulty values… but when incorporating those fixes with my additional code to move from the intro screen after a delay, those value were again lost in RAM.

(Oddly enough, the DBF function worked in one emulator and not another, so I ended up going the byte-by-byte route…)

I never did revise the Start button bit, as the integrity of the high score table was the more mission critical item.  For those who are curious, here is my code and some of the trace log (I ended up going with my option 3 to favor fixing the high score table over adding the intro screen delay):

Code: [Select]
;BTST is the Start button.
;BNE causes the jump to $000208, the initialization.
32:F8CC  08 00  BTST    #7,D0                   
32:F8D0  66 0C  BNE     #$0C [32:F8DE]           
;Initialize the game
00:0208  4A B9  TST.L   ($00A10008)             
00:020E  66 06  BNE     #$06 [00:0216]           
00:0216  66 7C  BNE     #$7C [00:0294]           
00:0294  60 6C  BRA     #$6C [00:0302]           
00:0302  4A 79  TST.W   ($00C00004)             
00:0308  30 39  MOVE.W  ($00C00004),D0           
00:030E  08 00  BTST    #1,D0                   
00:0312  66 F4  BNE     #$F4 [00:0308]           
00:0314  4E B9  JSR     ($000015F4)             

;OPTION 1 - hijack start button press and add delay (does not recover hi score table)
org $32F8CC
4E F9 00 33 87 80 JMP ($00338780) - putting this at end of rom will cause the hi score table to revert to broken
org $338780
0C 42 00 60 CMPI.W #$0060,D2
66 06 BNE #$06
4E F9 00 00 02 08 JMP ($00000208)
52 42 ADDQ.W #1,D2
08 00 00 07 BTST #7,D0
67 06 BEQ #$06
4E F9 00 00 02 08 JMP ($00000208)
4E F9 00 32 F8 D2 JMP ($0032F8D2)

;OPTION 2 - remove start button press and go with delay only (does not recover hi score table)
org $32F8CC
4E F9 00 33 87 80 JMP ($00338780)
0C 42 00 60 CMPI.W #$0060,D2
66 06 BNE #$06
4E F9 00 00 02 08 JMP ($00000208)
52 42 ADDQ.W #1,D2
4E F9 00 32 F8 D2 JMP ($0032F8D2)

org $005924
4E F9 00 33 87 A0 JMP ($003387A0)
4E 71
;39 79 00 03 A4 A8 FF FC 39 79  MOVE.W  ($0003A4A8),$FFFC(A4)

org $3387A0
0C 42 7F FF CMPI.W #$7FFF,D2
66 0E BNE #$0E
39 79 00 03 A4 A8 FF FC 39 79  MOVE.W  ($0003A4A8),$FFFC(A4)  ; the hijacked code
4E F9 00 00 59 2C JMP ($0000592C)
52 42 ADDQ.W #1,D2
4E F9 00 33 87 A0 JMP ($003387A0); JMP to start of this code to loop

org $32F8DE
4E F9 00 33 87 80 JMP ($00338780)

org $338780
31 FC 00 08 FD 06 MOVE.W #$0008,$FD06 ;lives
31 FC 00 06 FD 04 MOVE.W #$0006,$FD04 ;difficulty
20 7C 00 00 03 60 MOVE.L #$00000360,A0 ;the top high score table in rom
22 7C FF FF FD 30 MOVE.L #$FFFFFD30,A1 ; where the table is supposed to go in ram
20 3C 00 00 00 9F MOVE.L #$A0-1,D0 ;the decrement for the loop
E4 48 LSR.W #2,D0 ;a division by 4 to account for the long address
22 D8 MOVE.L (A0)+,(A1)+ ;160 bytes from $360 to $3FF need to go to $FFFFFD30 to $FFFFFDCF
51 C8 FF FC DBF D0, @RECOVERTABLE ;loop back to the label
4E F9 00 00 02 28 JMP ($00000208) ;the jump to the sega screen

org $005924
4E F9 00 33 87 AC JMP ($003387C0)
4E 71
;39 79 00 03 A4 A8 FF FC MOVE.W  ($0003A4A8),$FFFC(A4)

org $3387AC
0C 42 7F FF CMPI.W #$7FFF,D2
66 0E BNE #$0E
39 79 00 03 A4 A8 FF FC  MOVE.W  ($0003A4A8),$FFFC(A4)  ; the hijacked code
4E F9 00 00 59 2C JMP ($0000592C)
52 42 ADDQ.W #1,D2
4E F9 00 33 87 AC JMP ($003387AC); JMP to start of this code to loop

Thanks for reading this blog!  I may have other things I’ve learned while making these hacks and may look to slip them in from time to time as I recall them.  Otherwise, please feel free as well to keep the conversations going on this thread!  And… please be sure to try out my TMNT Final hack and give it a review!

thanks I'll try

(SKL 5/27/2020) TMNT Final is here!  Thanks to all the folks who helped provide various levels of guidance that got me to the finish line!  Please be sure to check out the hack, and keep reading this blog to seesome of the fruits of my efforts (and some of how the hack was made...).

Given all the help I'd received from the RHDN community (and others!), I figured I'd do something a bit similar to my NBA Jam TE work and distribute some of the knowledge I've gained hacking Streets of Rage 2 so more folks can put out new hacks and perhaps make an update or two to some old ones.

At the same time, I'm polishing off my last mods in my TMNT of Rage series, having been able to achieve 90% or so of what I was hoping to accomplish with the hack.  So, as I'm putting the finishing touches on The Final Shell Shock (mostly playtesting), I figure every so often I'll update this thread with some screenshot and protips.

And away we go...

Title Screens
Yep, they're a pain, and you don't get a lot from them gameplay-wise, but they do put a nice set of polish on a mod and really make it your own.  With a fair amount of guidance from folks as to what to look for in the code (and where to hijack), I managed to crack that one for SoR2 and published a doc to help others get in on that sweet title screen action, too. 

To keep it simple, there are two (likely more) paths you can take to insert your own title screen:
1) Figure out the decompression scheme and build a tool that mimics it, reverses it, and effectively injects your title screen in the same place.  I haven't messed around much with that path, as I'm not much for compression schemes and utility building, but I can tell you the decompression routine starts around $30C0 in the US rom and is used for the title screen and end credits images, plus the enemy character sprites and likely the player portraits.

2) Hijack the spot where the title screen is decompressed and pushed to VRAM and instead send an already-decompressed image from expanded rom over. That linked doc above takes a bunch of guidance from folks in this forum, plus Zophar's Domain and the Sonic Retro forums, and walks through all the logic and code to get you there.

PROTIP: The US title screen's compressed image is at $39018, while the map for the image's plane B tiles is at $38B94.  Armed with those and the palette locations (in the area of $5D34; check out the doc), plus the doc, you should be able to get a nice title screen going.  I say this because Dha Lau Hoo's put out a number of revisions to his Final Fight and Street Fighter SoR2 hacks with the help of this guide.

And with that comes my first teaser screen:

Thanks to guidance from Yoni on how to get started with Tile Layer Pro, I managed to get more colors and more pop to the TMNT logo here, as compared to my previous mods' screens.  I used TileMolestor for those, which seems easier to use but causes a fair bit of color loss when comparing the output to the original bitmap.  I've been sticking with TLP for other edits in this new hack, but more on that later.

Player Select Screen Names
Let's do one more tidbit... the Player Select screen.  So many hacks don't correct for the Max, Axel, Blaze, and Skate tiles on the screen, despite some great sprite work in the hacks themselves.  Let's pull back the curtain on that.

An old Brawler's Avenue or SoR Online forum site had some guidance on how to revise those select screen tiles, but they seem to have been lost on the interwebs vacuum when that site went down or was changed out.  Thankfully, some folks held on to a copy of the instructions.  Dha Lau Hoo was kind enough to help me out with a set, and I want to pass that on as well (hoping here I'm not being too forward).

In any event, here's a version of those instructions I've passed along to any who've asked.

Code: [Select]
       Upper   Lower
MAX    73EA    73F4
AXEL   73FE    7408
BLAZE  7412    741C
SKATE  7426    7430

Tile indices:
 Upper half  Lower half   
    UL   UR   LL   LR
A   00   02   01   03
B   30   32   31   33
C   34   36   35   37
D   4C   4E   4D   4F
E   04   06   05   07
F   04   06   19   1B
G   08   0A   09   0B
I   0C   0E   0D   0F
K   38   3A   39   3B
L   3C   3E   3D   3F
M   10   12   11   13
O   14   16   15   17
P   18   1A   19   1B
R   1C   1E   1D   1F
S   20   22   21   23
T   24   26   25   27
U   28   2A   29   2B
V   2C   2E   2D   2F
X   40   42   41   43
Y   44   46   45   47
Z   48   4A   49   4B
Space   3E   3E   3E   3E

No code for H, J, N, Q, and W.
For H, use 02 02, 19 03.
For J, use 3E 2A, 29 2B.
For N, use 34 02, 03 03.
For dot, use 3E 3E, 03 3E.
Alternatively, use TLP to edit the tiles, the offset is approximately $32A00.

The letters are 4 tiles each, each letter being 2x2, and duplicates used to save rom space.  Changing the offsets above to the various bytes changes your titles, so you can then rename your characters. Maximum length is 5 letters still.

The end result?

Thanks for reading, and stay tuned for more!

Hello, I made a SOR2 mod using the xmen chars, but I wanted to make the selection screen with the faces and names, but I'm a beginner in this, could you do a detailed tutorial on how to do it? Thank you.

Pages: [1]