News: 11 March 2016 - Forum Rules

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.


Topics - eskayelle

Pages: [1] 2
1
Personal Projects / NBA Jam 2K22 TE
« on: June 22, 2021, 09:45:21 pm »
Coming soon...





(Images from current v1.25.0...)

2
I've been doing a bit of a collab on NBA Jam T.E. for PSX, another Roaring '90s style mod akin to my SNES one.  Figured I'd toss some glamour shots out here.





I don't know MIPS3000 code, so this'll be more graphic and sound hacking than code work, but I do have a super cheat in store for those of us who think the AI's too rough...


Cheers to the folks contributing assets, ideas, and guidance to make it happen!  :beer:

3
ROM Hacking Discussion / Compressing Data with RNC ProPackED
« on: March 20, 2021, 04:48:22 pm »
I'm looking for some guidance with respect to compressing data using RNC ProPackED (http://www.romhacking.net/utilities/1310/), specifically when reinserting files back into a PSX image.

I'm currently trying to see what's under the hood of NBA Jam T.E.  I've used CDMage to view and export data files, and I've been able to decompress certain .BIN, .RNC, .GFX, and .COL files within that image using commands in a .bat file that executes RNC ProPackED.

I use the following command in a .bat to reinsert decompressed images:
Code: [Select]
rnc_lib p decompressed.bin compressed.bin -m=2

The headers in the orginial files indicate Mode 2 RNC compression is used.  Upon executing the command, I then take the contents of the .bin file and -- using HxD -- I overwrite the header and image data in the original compressed file at the proper address.  I then import the file into the PSX image via CDMage and run the game in ePSXe.

I'm currently just looking at splash screens in the HICOL.GFX file.  When the game boots up to the Acclaim screen, which is the image I'm messing around with, I get 1 of 2 results:

  • 1) A very garbled version of my image (rare) or
  • 2) A clip of the Iguana screen (instead of my image) with garbled pixels at the top (most common result).

I can see my image perfectly in the decompressed .bin that I've modified; the image appears as a 40x25 tile graphic using a 15bpp RGB codec and 2-dimensional mode in Tile Molestor.  If I attempt to decompress the file that I had used RNC to compress, it gives me an error.  I can also say that the inserted compressed image appears to be a few KB less than the original compressed image that I am trying to replace.

I did a Google search for instructions and found those for the RNC 2.14/2.08 version (like on the Aminet site).  That application, however, seems to have more robust parameters that can be used, and those parameters don't seem to be working with ProPackED.  RNC 2.14/2.08 is also too old to run on my comp at current.

Does anyone use RNC ProPackED?  Any advice on how I should be structured the pack/compress command, or what I otherwise might have missed?



Quick update: I decided to skip a step and used HxD to insert the recompressed image directly into Track1.bin.  The result is the exact same.  I also tried to decompress, edit and recompress another image, this time the title screen.  Again the result is a different screen being pulled, plus garbled pixels at the top.

In each case, despite overwriting the correct section in the game that has the screen I'm trying to change, the game loads the screen that is compressed just prior to it.

Example 1: The location for the Iguana screen is at $1AC9A in HICOL.GFX (the RNC header begins here), just before the Acclaim screen (its header is at $2867F).  When I try to replace the Acclaim screen, a messed up version of the Iguana screen displays in its place.  When it is time to load, the Iguana screen displays correctly, so I know I've replaced the correct section of code and have impacted nothing else.

Example 2: The location for the loading screen is at $0 in HICOL.GFX, just before the title screen's header at $E9C2.  When I try to replace the title screen, a messed up version of the loading screen displays in its place.  When it is time to load, the loading screen displays correctly, so I know I've replaced the correct section of code and have impacted nothing else.



Any ideas?

4
While I'm finishing off a current SoR2 project, I wanted to go back to my TMNT of Kaizo hack and see if I could get a little guidance settling up on a puzzle I was never quite able to solve.

Full background is here.

tl;dr version:
I'm trying to set up the game so that only the very first life for both players is set to one life point.  When player 1 dies, their next life is set to the standard total.  Same for player 2.  I was able to get the code to work for player 1 but not for player 2.  Debugging hasn't gotten me anywhere to date.  Wondering if a 68000 guru could take a look at my code and let me know what I've missed.

Code: [Select]
;=========================================
;Streets of Rage 2
;Initial Health Code Modifications v7
;=========================================

;-----------------------------------------
;Purpose: Hijack the code before the 1st
;stage starts and send it to another area
;in ROM to add functionality to two more
;RAM bytes.
;-----------------------------------------
org $00005CBE ;offset to hijack
; lea ($00005D74),A6 ;4D F9 00 00 5D 74 ;original (hijacked) $5CBE code
jsr $00024E00 ;4E B9 00 02 4E 00 ;jump to new code location

;-----------------------------------------
;Purpose: Set two unused RAM bytes to zero
;before a game (stage 1) starts.
;These bytes will be changed so the health
;value increases to 0x68 whenever a player
;dies, but the very first life should have
;a health value much less than the default
;0x68.
;-----------------------------------------
org $00024E00 ;offset to hijack
move.b #$00,$F0BE ;11 FC 00 00 F0 BE ;create a player 1 parameter (1 byte)
move.b #$00,$F0BF ;11 FC 00 00 F0 BF ;create a player 2 parameter (1 byte)
lea ($00005D74),A6 ;4D F9 00 00 5D 74 ;original (hijacked) $5CBE code
rts ;4E 75 ;return to hijacked location and continue code

;-----------------------------------------
;Purpose: The byte with the initial health
;value is at offset $7EC8.
;Need to modify this code to split the
;commands such that the initial value is
;reduced, but all lives after receive a
;larger health value (the old 0x68).
;-----------------------------------------
org $00007EC8 ;offset to hijack
; move.w #$0068,$0080(A2) ;35 7C 00 68 00 80 ;this is the original code at $7EC8
jsr $00024E50 ;4E B9 00 02 4E 50 ;jump to new code location

org $00024E50 ;new code to split out 0x68 health per player after death
addq.b,#1,$F0BE ;52 38 F0 BE ;increment new player 1 byte
addq.b,#1,$F0BF ;52 38 F0 BF ;increment new player 2 byte
cmpi.b #$01,$F0BE ;0C 38 00 01 F0 BE ;P1 RAM byte should be #$01 the first stage, first life
beq.s splithealth ;67 10 ;if equals #$01, give #$01 in health; else, give health of #$68
cmpi.b #$01,$F0BF ;0C 38 00 01 F0 BF ;P2 RAM byte should be #$01 the first stage, first life
beq.s splithealth ;67 08 ;if equals #$01, give #$01 in health; else, give health of #$68
move.w #$0068,$0080(A2) ;35 7C 00 68 00 80 ;this is the original code at $7EC8
rts ;4E 75 ;looking to jump back to $7ECE -- clr.w $00A8(A2)

splithealth:
; move.b #$68,$EF81 ;11 FC 00 68 EF 81 ;$EF81 appears to be where the default health value comes from; but $F081 is for player 2
; move.w #$0068,$0080(A2) ;35 7C 00 68 00 80 ;this is the original code at $7EC8; seems to do almost the same thing my code above would have
move.w #$0001,$0080(A2) ;35 7C 00 01 00 80 ;change #$68 to a lower number, so when $F0BE or $F0BF = #$01, that player starts game with less life
rts ;4E 75 ;looking to jump back to $7ECE -- clr.w $00A8(A2)
;
;------------------------------------------
;As written:
;When the ROM starts, P1 and P2 have RAM
;values of zero.
;When the first stage of the first game
;starts, the RAM values will increment to
;#$01.  The comparison will occur.
;The code will branch, and default health
;for both players will be 1 unit.
;Plus, both RAM values will increment.
;P1 and P2 will have RAM values of 2.
;So, whenever either dies, when this code
;runs again, it will not branch, and life
;points assigned will be #$68.
;
;When a game is reset (hard or soft),
;the RAM bytes should be assigned values
;of zero.
;
;Testing:
;Currently works for P1, but P2 starts
;with full life still.  This will be the
;puzzle, the test of friendship...
;
;Will the stronger player take P1?
;Will P2 let P1 take the 1up or make them
;take the suicide attempt to get to the
;chicken before Y. Signal kills them?
;------------------------------------------
;
;------------------------------------------
;-----------------NOTES--------------------
;FFEFA9 and FFF0A9 are the life counters
;FFEF80 is the total health value (max).
;$7ECB is the offset for how high health can go.
;
;Try FFFFF0BE and FFFFF0BF as unused RAM...
;
;...
;
;7EC8 move.w #$0068,$0080(A2) ;this is the original code for the default life points
;7ECE clr.w $00A8(A2) ;this is where I want the hijack to come back to
;7ED2 bra $00C6 [00:7F9A]
;
;...
;-------------------------------------------

Thanks for reading!

5
In SoR2, each boss runs the same code to play the same death scream when he dies.

Code: [Select]
00:E800  20 3C  MOVE.L  #$0000020B,D0            A0=0000E7E0 A1=FFFFF700 A2=FFFFF100 A3=FFFFFA00 A4=001F4BB4 A5=FFFFF700 A6=FFFFEC80 A7=FFFFFFF2 D0=0000FFFC D1=51B200A8 D2=0000FFFF D3=87D187D9 D4=0000D000 D5=7E80FF00 D6=0000FFFF D7=00C40050 xnZvc
00:E806  72 00  MOVEQ   #$00,D1                  A0=0000E7E0 A1=FFFFF700 A2=FFFFF100 A3=FFFFFA00 A4=001F4BB4 A5=FFFFF700 A6=FFFFEC80 A7=FFFFFFF2 D0=0000020B D1=51B200A8 D2=0000FFFF D3=87D187D9 D4=0000D000 D5=7E80FF00 D6=0000FFFF D7=00C40050 xnzvc
00:E808  4E B9  JSR     ($00040008)              A0=0000E7E0 A1=FFFFF700 A2=FFFFF100 A3=FFFFFA00 A4=001F4BB4 A5=FFFFF700 A6=FFFFEC80 A7=FFFFFFF2 D0=0000020B D1=00000000 D2=0000FFFF D3=87D187D9 D4=0000D000 D5=7E80FF00 D6=0000FFFF D7=00C40050 xnZvc

But... what if we wanted a female boss, and in turn a female death cry, for at least one SoR2 boss?  In this example, I'm working with Shiva.

Looking at the code, my inclination is to assume each boss is assigned some value in RAM, such that I could create an if/then statement to play the typical death cry for all bosses but Shiva, and another sound for Shiva.  Preliminarily, I'd find some empty space in the rom and do a hijack akin to the code below (note that this is untested, as there's a variable missing, and I may also have a syntax error or two):
Code: [Select]
;org $0000E800
;4E B9 00 03 1D 60 jsr ($00031D60)
;
;org $00031D60
;0C 78 00 01 Fx xx cmpi.w #$001C,($Fxxx) ;in Pancake, Shiva is 22 (so should it be 21?); might not help, may need unused ram and just assign a value to it for when Shiva is fought.
;66 0A bne #$08
;20 3C 00 00 02 17 move.l #$00000217,D0
;60 08 bra #$06
;20 3C 00 00 02 08 move.l #$00000208,D0
;4E 75 rts

Here's where I'm looking for some guidance.  Does anyone know to what value in RAM a boss value is assigned, if that's the tactic in SoR2? Or... would anyone have guidance on how I'd determine a boss value and where it resides in RAM? 

The other option may be to create a flag in unused RAM that only registers during the Shiva fight.  If the first option above is unlikely, would anyone be able to help identify where in a boss fight this should be assigned (so that it only happens during the Shiva fight) and what the easiest method might be to locate unused RAM?

6
Dec. 10, 2020: Just ahead of the preseason, NBA Jam 2K21 TE is ready to play!  Head here to grab it!



Congrats to the Lakers, 2019-20 NBA Champs!
 
They say a picture is worth a thousand words, so here’s a few thousand “words”…




 

7
Hello, all.  Looking for some guidance or help with respect to how I might find a certain RAM address in the Mega Drive / Genesis game, T2 – The Arcade Game.  I’m specifically looking for the “health” counter for the van in the Freeway stage.

Here's what I've done so far:

1)   Determined that in a previous stage (Trip to Skynet stage) the destruction of the automobile was determined in part by a counter adding up to a certain amount, so I made an assumption that to zero out a certain RAM address will also render the van in the Freeway stage indestructible.  This is not a perfect assumption, but it led me to be able to render the automobile in that Trip to Skynet level virtually indestructible by NOP’ing a TST.B function.

2)   Used a RAM search to determine and record what addresses went from 0 to 1 the moment the helicopter hits the van in the Freeway stage.  For each address, created a PAR code to set the address to zero.  Tested each PAR code on the Freeway level.  Each time, the van was destroyed or some other operation was corrupted.

3)   Used a trace log to identify commands where a RAM address was written to during the time before and after the van was impacted (could not precisely pinpoint the exact moment, however, so the log is several megabytes).  Created PAR codes setting each address to zero and tested.  Each time, the van was destroyed or some other operation was corrupted.  Addresses tested: $78C2; $765E; $77F0; $13F7E; $086C; $FBC1E; $FC4FA; and $13CC8.

4)   From the trace log, documented all instances of a TST.B function and NOP’d and tested each.  Each time, the van was destroyed or some other operation was corrupted. (Note these TST.B functions were not the same opcodes as the one in the previous level), that one being a TST.B $00(A1,D0) command.

Any other ideas or approaches as to how I might find this value, assuming it exists in the manner I’m assuming?

8
Personal Projects / A Couple Contemporary Space Invaders Hacks
« on: May 13, 2020, 05:56:54 pm »
Hi, guys.  Wanted to point you over to a couple rom hacks I've been working on that are posted to Zophar's Domain, two Space Invaders hacks (one for NES and the other for Gameboy) called COVID Captives and Retro COVID Captives, respectively.

The idea within each is to fight the virus while staying in your house, with special appearances by several Dr. Mario sprites.

I put together these hacks as a bit of a "back to basics" project, as I'm refreshing myself on sprite replacements and doing a little more with text translation tables and different debuggers, the idea here that I more or less jumped into the deep end a couple years ago when running through my various SNES NBA Jam TE hacks.  Now, I want to slow it down a bit and practice some fundamentals.

Here are a few screenshots of the hacks.  Feel free to grab patches via the links below.

COVID Captives for NES:







Retro COVID Captives for Gameboy (Super Gameboy compatible):








9
(SKL 12/24/2020) Version 1.999.1, with bugfixes for Raph and Mike, is out now!  Grab it here!


(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 see some 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]
Addresses:
       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
H           
I   0C   0E   0D   0F
J           
K   38   3A   39   3B
L   3C   3E   3D   3F
M   10   12   11   13
N           
O   14   16   15   17
P   18   1A   19   1B
Q           
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
W           
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!

10
I'm looking to limit what the cursor will point to in the SoR2 (Genesis/Mega Drive) menu such that, when pressing up or down, it will only highlight these two lines:

Code: [Select]
1 PLAYER
2 PLAYERS

Currently, players can select from the following:

Code: [Select]
1 PLAYER
2 PLAYERS
DUEL
OPTIONS

I can run a tracelog at the screen to log movements, but I'm not sure what lines are the up/down cursor movements or how I might restrict then to only the first two lines.  Would anyone be able to provide some guidance?

11
ROM Hacking Discussion / Removing an In-Game Code (Streets of Rage 2)
« on: November 28, 2019, 08:04:14 am »
I'd like to disable the code in the Genesis SoR2 game where holding A and B on the second controller while selecting Options allows an enhanced menu.

I ran some trace logs while entering the code and looked for CMP.I values that are multiples of 0x10.  I tried changing those bytes so the comparison would never equal, and thus the code won't work.

I've had no luck so far finding the comparison value, and I'm not sure of the breakpoint I need to write.  Any advice?

12
Help Wanted Ads / [TECHNICAL/ASM] Streets of Rage 2 End "Photos" Screens
« on: October 03, 2019, 08:51:52 pm »
Hello all.  Looking for someone to help provide guidance with respect to changing the 6 ending screens in SoR2.  I currently have (I think) the offsets for the palettes and the pictures themselves, plus the offsets for the byte sizes for the DMA transfers and the VRAM and RAM addresses.  Here's what I think I'm missing, based on my work on the title screen:
1) The offsets for the commands that set the number of horizontal and vertical tiles (I think, in decimal, the picture sizes are 18x12 tiles, but not 100% certain)
2) The location I need to NOP and replace in order to bypass the decompression routine and point instead to new screens in expanded rom (I believe I'm close here).
3) The code needed to actually display the new screens.  I have the code for the title screen replacement, but I'm not sure it will work here.  The method by which the screens are displayed appears very different, though the decompression scheme is the same (at offset $30C0).

Looking for someone with 68k ASM experience who can provide guidance as to next steps.  For reference, I have here the tracelog that'll provide my starting point and what I've learned with respect to palettes, screen offsets, etc.  (Warning: It's a large (13MB) file.)

https://files.catbox.moe/sdpd42.txt

Please search on ; within the file for my notes.



tl;dr version of the text file:


October 09, 2019, 01:04:08 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
I do have some title screen and display code I was provided while working on the TMNT of Rage hack.  Would any 68k experts mind taking a peek?  Can any of this be re-purposed and used to re-point to / display new ending sequence photos/screens?

Code: [Select]
40 E7 46 FC 27 00 48 E7 38 22 45 F8 A9 02 4D F9
00 C0 00 04 24 08 34 FC 97 00 24 BC 96 00 95 00
05 CA FF FD 2C 92 3C AA FF FE 3C BC 81 14 61 0C
3C BC 81 24 4C DF 44 1C 46 DF 4E 75 D4 40 64 22
90 42 D0 C0 61 1C D2 40 D2 40 30 02 24 08 34 FC
97 00 24 BC 96 00 95 00 05 CA FF FD 2C 92 3C AA
FF FE 24 BC 94 00 93 00 01 8A 00 01 2C 92 26 01
E5 9B E4 5B 3C 83 24 83 3C 92 4E 75

From tracelog, TMNT of Rage v1.25.29:
Code: [Select]
02:4C50  40 E7  MOVE    SR,-(SP)              A0=0016D460 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFF8 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C52  46 FC  MOVE    #$2700,SR             A0=0016D460 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFF6 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C56  48 E7  MOVEM.L {d0-a7}[38 22],-(SP)  A0=0016D460 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFF6 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C5A  45 F8  LEA     ($A902),A2            A0=0016D460 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C5E  4D F9  LEA     ($00C00004),A6        A0=0016D460 A1=00005A42 A2=FFFFA902 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C64  24 08  MOVE.L  A0,D2                 A0=0016D460 A1=00005A42 A2=FFFFA902 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=00000C10 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C66  34 FC  MOVE.W  #$9700,(A2)+          A0=0016D460 A1=00005A42 A2=FFFFA902 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4C6A  24 BC  MOVE.L  #$96009500,(A2)       A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C70  05 CA  MOVEP.L D2,#$FFFD(A2)         A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C74  2C 92  MOVE.L  (A2),(A6)             A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C76  3C AA  MOVE.W  $FFFE(A2),(A6)        A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C7A  3C BC  MOVE.W  #$8114,(A6)           A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C7E  61 0C  BSR     #$0C [02:4C8C]        A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFE2 D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C8C  D4 40  ADD.W   D0,D2                 A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016D460 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4C8E  64 22  BCC     #$22 [02:4CB2]        A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4CB2  24 BC  MOVE.L  #$94009300,(A2)       A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4CB8  01 8A  MOVEP.W D0,#$0001(A2)         A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4CBC  2C 92  MOVE.L  (A2),(A6)             A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4CBE  26 01  MOVE.L  D1,D3                 A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
02:4CC0  E5 9B  ROL.L   #2,D3                 A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=40200000 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4CC2  E4 5B  ROR.W   #2,D3                 A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00800001 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvC
02:4CC4  3C 83  MOVE.W  D3,(A6)               A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00804000 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4CC6  24 83  MOVE.L  D3,(A2)               A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00804000 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4CC8  3C 92  MOVE.W  (A2),(A6)             A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00804000 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
02:4CCA  4E 75  RTS                           A0=0016D460 A1=00005A42 A2=FFFFA904 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=00C00004 A7=FFFFFFDE D0=00002110 D1=40200000 D2=0016F570 D3=00804000 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc

Appreciate any thoughts you guys can provide!

13
tl;dr version: I'm trying to change the title screen for SoR2 and have some ideas on how I might do it (currently about 2-3 responses down from here).  I have the offset for the palette, the plane table mapping, and the title screen but I need some guidance regarding how to put all that information together.



Hi. I'm currently experimenting with hacking title screens for Genesis, specifically Streets of Rage 2, so I'm looking for someone with Genesis assembly experience to provide a little guidance. I don't have much Genesis hacking experience, as I've spent the last few summers working with the SNES, but I have some idea of where I need to go.

1-6) [DELETED THE ORIGINAL TEXT, SINCE IT'S WORDY AND DID NOT WORK.]

[22 August 2019 EDIT: Here's where I am so far...

I had run a tracelog from the point at which the demo fades out to the point at which the title screen displays. I did some searches on $00:A900 (dumping RAM at the title screen and dropping that RAM into an image editing tool yields that address) and found this code:
Code: [Select]
00:5C08  41 F9  LEA     ($00039018),A0           A0=FFFFFC1A A1=001EC160 A2=00166A70 A3=FFFFEC80 A4=00C00004 A5=FFFFEE00 A6=FFFFEC80 A7=FFFFFFFC D0=000000B8 D1=51B2FFFF D2=00000617 D3=87D10C3C D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc

This appears to be the offset for the screen. I replaced 00 03 90 18 with 00 2D A4 90. $2DA490 is where I've dropped in my title screen.

Specs for the plane table are here:
Code: [Select]
00:5C2C  4D F9  LEA     ($00038B94),A6
00:5C32  2A 3C  MOVE.L  #$61060003,D5
00:5C38  7E 21  MOVEQ   #$21,D7
00:5C3A  7C 10  MOVEQ   #$10,D6
00:5C3C  4E B9  JSR     ($000017D0)

My changes:
$5C2E: Changed from 00 03 8B 94 to 00 2D A0 F0. $2DA0F0 is where my sprite table starts (first tile being #$2000, based on checking bits and converting binary to hex; last tile is #$21BF). I also modified $5C39 and $5C3B to read as #$20 and #$0E instead of #$21 and #$10, since my tileset is slightly smaller. I'm using a graphic that's 32x14 tiles, versus the original's 33x16.

I did not alter code at $5C32, the respective Y,X starting point. Figured I'd wait till I can see the title graphic on screen.

Code: [Select]
00:5C16  21 FC  MOVE.L  #$40000000,($FC56)   
00:5C1E  21 FC  MOVE.L  #$941693C0,($FC5A)

RadioShadow suggested to change the 40 00 00 00 to 40 08 00 00 to write the title graphics to VRAM at $0200. I don't have guidance yet on $5C1E... could be part of the problem.

Looking at VDP RAM, the tiles never make their way in before the game crashes.

The crash appears to occur at $30D0:

Code: [Select]

00:5C08  41 F9  LEA     ($002DA490),A0           A0=00C00000 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFFC D0=00000000 D1=4C0CFFFF D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
00:5C0E  43 F8  LEA     ($A900),A1               A0=002DA490 A1=00005A42 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFFC D0=00000000 D1=4C0CFFFF D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
00:5C12  61 00  BSR     #$D4AC [00:30C0]         A0=002DA490 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFFC D0=00000000 D1=4C0CFFFF D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
00:30C0  48 E7  MOVEM.L {d0-a7}[e0 20],-(SP)     A0=002DA490 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFF8 D0=00000000 D1=4C0CFFFF D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
00:30C4  22 08  MOVE.L  A0,D1                    A0=002DA490 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=4C0CFFFF D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xNzvc
00:30C6  74 00  MOVEQ   #$00,D2                  A0=002DA490 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000C00 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnzvc
00:30C8  14 18  MOVE.B  (A0)+,D2                 A0=002DA490 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000000 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnZvc
00:30CA  10 18  MOVE.B  (A0)+,D0                 A0=002DA491 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000000 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnZvc
00:30CC  E1 48  LSL.W   #8,D0                    A0=002DA492 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000000 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnZvc
00:30CE  84 40  OR.W    D0,D2                    A0=002DA492 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000000 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnZvc
00:30D0  D4 81  ADD.L   D1,D2                    A0=002DA492 A1=FFFFA900 A2=000233B2 A3=FFFFEC80 A4=00C00004 A5=FFFFF500 A6=FFFFEC86 A7=FFFFFFE8 D0=00000000 D1=002DA490 D2=00000000 D3=00000003 D4=940D8134 D5=50000083 D6=00000000 D7=0000FFFF xnZvc

I think that $30xx code is decompression for the background, as NOPing it (4E 71 from $30C0 through $3160) killed the backgrounds in attract mode, particularly the Stage 1 playthrough and the Mr. X intro. But a title screen with no image ran. Meanwhile, NOPing the BSR to it at $5C12 through $5C15 was displaying garbage tiles as a title screen.  Maybe it's the actual push to VRAM and I just need help with some code to bypass it just for the title screen and instead move my new title screen tiles through, using my new map?]


Any additional guidance you can provide would be a huge help!

14
Has anyone who's used Pancake 2 to insert sprite sheets (or individual sprites, for that matter) had a situation where the sprite imports correctly and looks fine in the utility, but a frame glitches in the game itself?  If yes, how did you solve this issue?

As examples, I have glitched out or garbage data appearing instead of the proper sprites when player 4 walks up, player 2 falls and lies on the ground, or player 2 goes into the last frame of a combo.

I've been generating the sprites in expanded rom rather than replacing sprites because I need one or two more tiles per sprite to make shadows.  There are tiles missing for me to be able to do this.  Is there any way to add more tiles via Pancake 2?

15
Gaming Discussion / TMNT: Rescue-Palooza!... on a Raspberry Pi?
« on: July 20, 2019, 05:46:05 pm »
Hello, all.  Has anyone managed to pull the OPENBOR .pak file from Merso X's awesome TMNT hack (https://www.merso-x.com/teenage-mutant-ninja-turtles-rescue and been able to run it on a Raspberry Pi via RetroPie?

I've seen some sites saying the demo version isn't possible to do this with, and other sites saying the new release will work with RetroPie, but those users in those forums fail to provide instructions when asked, so I’m skeptical (I haven’t had any luck myself).  Meanwhile, Googling for OPENBOR on Raspberry Pi provides some documentation on installing OPENBOR itself, but that documentation is one to two years old with bad grammar, so it's very hard to follow.  It also is general to OPENBOR, so it doesn't specify if this .pak would work.

Anybody out there try running Rescue-Palooza on a Pi?  If yes, did it work?  If yes to that, would you be willing to provide some instrux?

Cowabunga?

16
7/16/19 update: NBA Jam 2K20 TE has been released!!!!

2K20 TE: http://www.romhacking.net/hacks/4612/

The beta: https://forums.nba-live.com/downloads.php?view=detail&df_id=11288

Hacking Guide: https://www.romhacking.net/documents/790/

The Double Z Mod that started it all: http://www.romhacking.net/hacks/4097/



Hi, guys.  Figured I'd try to start up a bit of a hype train if I can.  I'm about 3 months away from releasing my last installment in my Double Z Mod trilogy, this one being a roster update (and a bit more...) to take us into the start of the 2019-20 NBA season.  The romhack's about 95% complete with the remaining big to-dos being re-sorting the team order for how this season's standings play out, and doing one last roster/team swap once the free agency deadline hits (I don't have Anthony Davis on a team just yet, since who knows where he'll end up, though I do have him on the All-Star team).

In any event, here are some teaser screens.  Feel free to chime in regarding your thoughts.

Spoiler:


Spoiler:


Spoiler:


Spoiler:


Spoiler:


Thanks to all of you for reading, and especially those of you who have tried out my Double Z Mod and 2K17 Overtime Edition mods!

17
Personal Projects / NBA Jam TE - Double Z Mod v5.0 Released!
« on: February 17, 2019, 11:25:02 am »
Pleased to announce that I've finalized my Double Z romhack for NBA Jam - Tournament Edition!  My final piece is the addition of new '90s sound clips to round out the gameplay.

If you're interested in trying out the hack, please go to http://www.romhacking.net/hacks/4097/

Unless there's some significant bug someone finds, my plan is to close this one out so I can finish work on the last piece of the Double Z mod trilogy, set for release sometime this summer...

Thanks for your support!  :beer:

18
Help Wanted Ads / [SOUND] [SNES] Sound Header Adjustment Help
« on: December 22, 2018, 09:36:40 pm »
Hello.  I'm looking for help with a header for a sound clip I'm injecting into NBA Jam - Tournament Edition for SNES.

My current header is as follows (the first two bytes represent the total of the 0x23 byte header length, plus the actual BRR length):

Code: [Select]
org $E1B000
db #$74
db #$1B
db #$01
db #$00
db #$20
db #$00
db #$05
db #$00
db #$00
db #$20
db #$E7
db #$21
db #$EB
db #$23
db #$0E
db #$26
db #$51
db #$28
db #$B7
db #$2A
db #$41
db #$2D
db #$F2
db #$2F
db #$CC
db #$32
db #$D1
db #$35
db #$04
db #$39
db #$68
db #$3C
db #$00
db #$40
db #$08

I've placed the BRR behind the header in expanded ROM.  I next revised the sound pointer table for several sounds to point to this expanded ROM location.  The game plays the sound, but when it does, it only plays the first half.

(The sound is "Get that s*** outta here!"  The part that plays is "Get that s*** ou-")

Would someone be able to review the header data and let me know what bytes I should be revising to force the game to play the full sound?

For reference, I provide the BRR file and my test ASM here.

Appreciate any help you can provide!

OUTTA.brr
https://files.catbox.moe/zr0aat.brr

OUTTAclip.asm
https://files.catbox.moe/wcu9un.asm

December 23, 2018, 01:54:53 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Test 1:
I attempted to brute force the header using a hex editor and either adding 0x10 or doubling the value of one byte in the header, then saving, then running the game, then resetting the header to the original values and trying the next byte. In some cases, the sound clip didn't play.  In others, it played and still cut off at that 4th syllable, "out".

Test 1 is a FAIL>:(

But... when I doubled byte 09 (I changed value #$20 to #$40), the sound clip sped up significantly and played in its entirety.  I think bytes 08 and 09 (#$2000) represent pitch/speed, where the value in the header represents cycles, or Hz, in this case 8,192 Hz.  We recorded our sound clip at 8,000 Hz, and this header played it at a proper pitch without requiring any adjustment to header or sound WAV file, so this likely is the pitch parameter in the header.

When I cut byte 09's value in half, the sound played extremely slowly and cut off well before "out".

I then corrupted byte 09 until I could achieve a value where the full sound clip would play.  This occurs at value #$28 (10,240 Hz, a little too high pitched to accept as a good sound clip).

Next question would be... if the pitch of the WAV itself (before conversion to BRR) were doubled, and the pitch value in the header were halved, which result would occur?
  • The sound clip plays at normal speed and in full (because all bytes passed through the SPC "player" before it cut off).
  • The sound clip plays at normal speed but still cuts off at "out" (because, while all the bytes are read, the SPC is still set somewhere to turn off after a certain amount of time (like 1 second), and the clip plays for longer than that).
  • The sound clip plays at an unexpected speed and in full.
  • The sound clip plays at an unexpected speed and still cuts of at "out".

December 23, 2018, 10:32:53 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Test 2
Sped up the WAV file by 100% and converted it to BRR.  Inserted it into expanded ROM, and set byte 09 in the header to value 0x10 (instead of 0x20).  Result was the sound clip playing (at a noticeably lower volume), and the sound cut off again at "out".

This was hypothesis #2 above.

Quote
2.The sound clip plays at normal speed but still cuts off at "out" (because, while all the bytes are read, the SPC is still set somewhere to turn off after a certain amount of time (like 1 second), and the clip plays for longer than that).

Test is a FAIL.  :banghead:

No matter what, the player won't seem to play more than about 1.2 seconds worth of clips.  Not sure how to increase the amount of time the SPC "player" will run, so it plays the full clip.  (Bytes 00 and 01 in the header are the full length of the clip, plus the 0x23 header value, so that part is not the problem).

Not sure if the solution is an adjustment to the header or an adjustment elsewhere.

December 26, 2018, 10:04:44 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Test 3:
New goal is to locate the original header for the "Get that s--- outta here!" sound clip so that I can slap the original header into my expanded ROM.

The "Get that s--- out here!" clip originates from the ROM NBA Jam XXX.  Using bsnes, I attempted to dump the full SPC by playing quarter 1 of a game of NBA Jam XXX.  I then attempted to extract all BRRs via Split700.  On first attempt, Split700 only extracted 4 BRRs.  I used BRR Player to hear them.  None were voice clips.  All were in game sounds (ref whistle, etc.).  Attempted a second time and was only able to extract 6 sounds.  None were the "Get that s--- outta here clip!"

Test is a FAIL.  Cannot successfully locate the sound clip using Split700 and BRR Player.   :-\



Test 4:
Using SNESSOR (SSOR95.exe), I extracted the "Get that s--- outta here!" WAV from the NBA Jam XXX ROM.  I next used brr_encoder to encode it to BRR. I then opened the NBA Jam XXX ROM in a hex editor and searched for the beginning sequence of the BRR I had encoded using brr_encoder.  The match was exact, but the header does not seem to be in the same format (or position relative to the sound clip?) as in NBA Jam - Tournament Edition.  Because of this, I am unable to determine what the header should look like to be able to place it in expanded ROM.

Test is a FAIL, but... I at least have more information about the BRR in question.
  • The length of the BRR is 1B36 bytes.  Within more than 0x23 bytes before the BRR in the NBA Jam XXX file I cannot locate a byte of value 0x1B to determine the start of the header.
  • The BRR is located at PC address $1EBF8C in the NBA Jam XXX ROM.

Screenshots of the hex for both the BRR and the original ROM are provided below.



For reference, the "Get that s--- outta here!" BRR is here:
https://files.catbox.moe/nhe1ro.brr
(If it differs from a reference in an above test/post, this is because I'm attempting to insert a censored version of the clip into expanded ROM but I am trying to use this original clip to find my header information.)

Looking for any other thoughts / ideas folks may have to obtain that header information.

19
Help Wanted Ads / [SOUND] [SNES] Sound Clips - NBA Jam TE [SOLVED!]
« on: October 30, 2018, 01:23:51 pm »
tl;dr version: I am looking for help with sound samples.  I would like to learn how to overwrite or replace 2 sound samples in the game NBA Jam - Tournament Edition with my own.  Or... I would like to change the sound pointers for those 2 samples to other samples already in the game.


Hello, all.  I'm currently dabbling with a proof-in-concept for the SNES game, NBA Jam TE.  I'm not versed in SPC / sound editing for the SNES, so I'm hoping someone might take me up on the request below. 

Currently, I'm looking to replace two sound clips--
a) Sound clip 1 = 33.wav (Supersonics) / reads as 34 in SNESSOR
b) Sound clip 2 = 84.wav (Bullets) / reads as 85 in SNESSOR

I'm looking to replace them with other sound clips of equal or lesser size. Looking for help in one of two ways:

1) I haven't had any luck finding a sound pointer table to locate the sounds such that I can simply change the pointer for these two sound bytes to the "AHHHHH!" sound clip.  If it's as easy as this, and someone can help me locate that pointer table, I'd really appreciate it!    Solved by phonymike!  See below.

2) I want to replace the sound clips themselves. I have .wav files compressed in a BRR format using tools on RHDN.net.  Looking for how to insert them so the sound works.

(Note that I attempted to replace sound clips via SNESSOR, including changing speeds to both slow down and speed up the sound clips.  The resulting ROM either provided no sound when the clip was to play, or it played some brief noise.)

Please let me know if you can help.  Thanks to all of you who read this.

(Credit will be generously provided to those who can solve my issue.)

November 04, 2018, 08:27:14 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
Couple other procedures I've tried (no success just yet):
1) Using SNESSOR, extract the Sonics (sound 34 in SNESSOR) and Bullets (sound 84 in SNESSOR).
2) Then, in separate .smc files...
a) Reinsert via SNESSOR the Sonics .wav. Perform a file compare within the command line to see what hex was altered.
b) Reinsert via SNESSOR the Bullets .wav. Perform a file compare within the command line to see what hex was altered.

Code: [Select]
fc /B original.smc sonics.smc > hexcomparesonics.txt
fc /B original.smc bullets.smc > hexcomparebullets.txt
@pause

3) Using snesbrr, convert the Sonics and Bullets .wavs to BRR

Code: [Select]
snesbrr -e "33 - sonics.wav" "sonics.brr"
snesbrr -e "84 -bullets.wav" "bullets.brr"
pause

4) Using a hex editor, block copy the Sonics BRR data into a Jam TE rom, starting at address $1BB8E8.

5) Using a hex editor, block copy the Bullets BRR data into a Jam TE rom, starting at address $2DD9B4.

Results:
1) Bullets sound result is lower in volume and seems incredibly slow, assuming the clip is still saying "Bullets".
2) Sonics sound result is either extremely fast / high pitched, or is just noise/garbage.

Test is a FAIL.   :banghead:

20
ROM Hacking Discussion / NBA Jam TE (SNES) ASM Tidbits
« on: June 13, 2018, 03:38:58 pm »
I wanted to throw this onto the forum in case there are some folks out there pondering an annual update to NBA Jam TE but looking for more data before digging in.  With a big shout-out to phonymike for all his guidance to date regarding ASM, team values, etc., I provide below some assembly code that should mimic the current order of teams in Jam TE, such that a hacker could modify it, re-assemble, and effectively re-sort the 27 teams (such as based on current year standings, if that were the intent).

Code: [Select]
lorom

org $CCFDB2
dw #$0007 ;Mavs
dw #$000A ;T-Wolves
dw #$0015 ;Heat
dw #$001A ;Bullets
dw #$0019 ;76ers
dw #$0006 ;Kings
dw #$0008 ;Nuggets
dw #$0013 ;Bucks
dw #$0012 ;Indiana
dw #$000D ;Atlanta
dw #$0001 ;Clippers
dw #$0018 ;Magic
dw #$0011 ;Pistons
dw #$0000 ;Warriors
dw #$0014 ;Celtics
dw #$000E ;Hornets
dw #$0002 ;Lakers
dw #$0016 ;Nets
dw #$0010 ;Cavs
dw #$000B ;Spurs
dw #$0017 ;Knicks
dw #$0004 ;Blazers
dw #$000C ;Jazz
dw #$0005 ;Sonics
dw #$0003 ;Suns
dw #$000F ;Bulls
dw #$0009 ;Rockets

Please forgive any apparent syntax errors, and hopefully it's a value to someone!

June 19, 2018, 10:33:09 am - (Auto Merged - Double Posts are not allowed before 7 days.)
For those interested in hacking NBA Jam TE, I figured I'd tack on to this thread some additional discoveries as I have them.  This portion of the ROM would allow anyone to change the maximum amount of injuries that can be accumulated in the game.

Please forgive any syntax errors, copy/paste errors (players 1 through 4 have the same 5 operations, just hitting 4 different RAM addresses) or transpositions.

Code: [Select]
lorom

;===
;NBA Jam TE
;Injury Max Disassembly
;===
org $8085E6 ;PC address $0005E6
LDA $1677 ;AD 77 16 ;Load into A the P1 injury value stored in RAM ($7E001677)
CMP #$0019 ;C9 19 00 ;Compare value in A to #$19 (25 in base 10/decimal)
BCC #$06 ;90 06 ;Branch if Carry Clear (goto a label (06?)) if injuries < #$19; otherwise...
LDA #$0019 ;A9 19 00 ;Reset A to the max injury value of #$19
STA $1677 ;8D 77 16 ;Store that max injury value into RAM
LDA $1679 ;AD 79 16 ;Load into A the P2 injury value stored in RAM ($7E001679)
CMP #$0019 ;C9 19 00 ;Compare value in A to #$19 (25 in base 10/decimal)
BCC #$06 ;90 06 ;Branch if Carry Clear (goto a label (06?)) if injuries < #$19; otherwise...
LDA #$0019 ;A9 19 00 ;Reset A to the max injury value of #$19
STA $1679 ;8D 79 16 ;Store that max injury value into RAM
LDA $167B ;AD 7B 16 ;Load into A the P3 injury value stored in RAM ($7E00167B)
CMP #$0019 ;C9 19 00 ;Compare value in A to #$19 (25 in base 10/decimal)
BCC #$06 ;90 06 ;Branch if Carry Clear (goto a label (06?)) if injuries < #$19; otherwise...
LDA #$0019 ;A9 19 00 ;Reset A to the max injury value of #$19
STA $167B ;8D 7B 16 ;Store that max injury value into RAM
LDA $167D ;AD 7D 16 ;Load into A the P4 injury value stored in RAM ($7E00167D)
CMP #$0019 ;C9 19 00 ;Compare value in A to #$19 (25 in base 10/decimal)
BCC #$06 ;90 06 ;Branch if Carry Clear (goto a label (06?)) if injuries < #$19; otherwise...
LDA #$0019 ;A9 19 00 ;Reset A to the max injury value of #$19
STA $167D ;8D 7D 16 ;Store that max injury value into RAM


3.3 [6/18 and 6/19/18 - 2.5 hrs]:
Having previously performed a cheat search in the ROM using SNES9X Geiger, and having determined that the following RAM values store injuries:
1) Player 1 = $7E1677 (SNES LOROM Address)
2) Player 2 = $7E1679
3) Player 3 = $7E167B
4) Player 4 = $7E167D
conducted a search in the hex code for a byte-swapped string "AD 77 16" (translates to LDA $1677).
Looked for a CMP, BCC, or BCS function near that code, with a value of #$19 (25 in decimal).  Located such at PC address $0005E6.
Using an opcode/hex code table from assembler.it/portale/5/65816_guide/opcode_reference.asp, translated by hand the hex codes to opcodes near that address.
(I didn't have my tools at the time...)
Based on the above, replaced 8 instances of #$19 (hex code 19; decimal 25) with #$63 (decimal 99). 
Effectively replaced the value in the compare function and the store function to increase the max injury value allowed from 25 (decimal) to 99.
Playtest was successful!


Pages: [1] 2