• Welcome to Smashboards, the world's largest Super Smash Brothers community! Over 250,000 Smash Bros. fans from around the world have come to discuss these great games in over 19 million posts!

    You are currently viewing our boards as a visitor. Click here to sign up right now and start on your path in the Smash community!

[Updated 06/09/16] 19XXTE 0.11, ROM Hack (Working on Console!)

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
is it possible to expand the css or sss or use a button for alt loading stg and char?
 
Last edited:

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
cool the other thing i really want it to be able to use any costume including team exclusive ones with maybe d-pad up as fifth skini while c-buttons are mapped to the first 4 as well a same team tint (eg. 3 foxes on a team each is a different tone;reg,light,dark) maybe map those to d-pad right,left,down? that would be cool!
 

TheGoodGuava

Smash Ace
Joined
Dec 16, 2015
Messages
744
Location
At Home
Probably a question more suited for @fox324roja. He replaced Fox with Falco in a ROM hack. Pretty sick if you ask me.

Edit: key being replaced, not added. I won't take away tournament viability from this hack.
You cant play as metal mario/giant dk, thats why I asked if you could replace them in particular, I wouldn't consider removing a playable character
 

Cyjorg

tiny.cc/19XXTE
Joined
Nov 18, 2013
Messages
686
Location
Purdue University
You cant play as metal mario/giant dk, thats why I asked if you could replace them in particular, I wouldn't consider removing a playable character
The limitation is that he (not even me) only knows how to modify character models and attributes. He can't transfer movesets to other characters. So replacing DK and MM is out of the question for now.
 
Last edited:

tehz

Smash Apprentice
Joined
Mar 27, 2010
Messages
188
Nice catch! I just patched it as well.
Yeah nice. I have a little routine for fixing the "restoration" of the stored value, since the stage index -> cursor position look up was baked in and not aware of any diddling on the SSS. I just replaced the LUT with a loop through the stage index list. I was going to clean it up this weekend to completely scrub the old function, but this seems to work fine on console so whatever.

https://drive.google.com/folderview?id=0B8-I4Z0x-xXvc3JfZjdYd2Q2TXM&usp=sharing

It's still a CajeASM file, but it's easier to read that way. I can give you the compiled hex and offsets over the weekend if you don't have time to play around with it yourself.


Like this?
(AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD) > (BBBBBBBB AAAAAAAA DDDDDDDD CCCCCCCC)
Yeah, exactly like that.

Crazy rom texture dump method
Ah, of course someone would've thought up ways to do this years ago. I've had success with finding image data in RAM and using bgrep to search through the uncompressed files, but skipping finding the image in RAM sounds like a big improvement. Tell me how it works out. The only thing I'd be worried about is stuff like this: notice the "blank lines" on sides of the image of the CSS portrait Luke90 posted above? Larger images seem to be stored in chunks like that (presumably to fit nicely into RDP texture memory?). I wonder if those OoT tools already take that into account?

Finally, I finished the "alternate character" mod I mentioned over the summer. Basically, you can hit Z on the SSS to load the polygon version of your character, and you can hit R to be Metal Mario or Giant DK. Anyways, relevant point being that in writing this I found the location/routines of the various button press handlers (i guess that's the proper way to describe it) specific to the SSS. These are nice places to put your function to button toggle stages

(Of course, I think it's possible and not too difficult to make a "page 2" button. I could probably write a crude button in over the weekend: choose a "stage button" to be our page button (looking at you Mushroom Kingdom) hook into the "A Button" event handler, check if the cursor is on our stage button; if so, replace the stage list in memory with a new stage list; return to normal flow and do not take the "A is pressed" branch.

Unforunately, there's a huge problem with this simple Page 2 button: there's no way to show the player which page we're on. The stage icons are drawn once on SSS load, and I've found that routine. So maybe I can just pass new offsets to that routine and draw the icons over (if that routine is handling how the images are put into the RDP / if there's space / do i need to find a texture clear routine). But then if that works, I'll need to format a whole new set of images, which I'll have to copy into RAM. And there should be a routine that moves files from the ROM to RAM; then of course I'll need to figure out how to add to the filetable, and on and on).
 
Last edited:

THE_MAAFIA

Smash Ace
Joined
Jan 1, 2014
Messages
832
Location
Philadelphia, PA
Make metal mario selectable on the CSS, only reason he crashed with game shark is because he didn't have a win animation (pls bring back the win and no contest I love thoseeee) lol but idk how would u select metal mario in CSS, oh! And can some one grab all the full body portraits of the 64 cast? I wanna see em all (the portraits In the character select screen, but extracting the photo to show the full body) cause luigi has one and I would love to see the rest
 

Cyjorg

tiny.cc/19XXTE
Joined
Nov 18, 2013
Messages
686
Location
Purdue University
Yeah nice. I have a little routine for fixing the "restoration" of the stored value, since the stage index -> cursor position look up was baked in and not aware of any diddling on the SSS. I just replaced the LUT with a loop through the stage index list. I was going to clean it up this weekend to completely scrub the old function, but this seems to work fine on console so whatever.

https://drive.google.com/folderview?id=0B8-I4Z0x-xXvc3JfZjdYd2Q2TXM&usp=sharing

It's still a CajeASM file, but it's easier to read that way. I can give you the compiled hex and offsets over the weekend if you don't have time to play around with it yourself.
I changed 80133C34 to sb v0, 0x4b11 (s1) and edited what's loaded into t6 (jr ra - addiu v0, r0, ????) at 0x14E044 in the rom. You have these locations so I'm confused on where your code got complicated.

Code:
.org 0x14f7a4                ; @ 80133C34
sb  v0, 0x4b11(s1)            ; remember sss cursor (also relied on s1)

.org 0x14E044                ; @801324D4
hex { 03E00008 24020000 }    ; change "cursor table"
hex { 03E00008 24020007 }    ;
hex { 03E00008 24020003 }    ; What's happening here...
hex { 03E00008 24020005 }    ; JR RA, ADDIU v0, r0, 0x????
hex { 03E00008 24020004 }    ; 1. The code branches a line
hex { 03E00008 24020006 }    ; 2. V0 holds (r0 + immediate)
hex { 03E00008 24020002 }    ; 3. V0, cursor, stored later
hex { 03E00008 24020001 }    ; Note: r0 is always 0 here
hex { 03E00008 24020008 }
hex { 24020009 03E00008 }

Edit:

Ah, of course someone would've thought up ways to do this years ago. I've had success with finding image data in RAM and using bgrep to search through the uncompressed files, but skipping finding the image in RAM sounds like a big improvement. Tell me how it works out. The only thing I'd be worried about is stuff like this: notice the "blank lines" on sides of the image of the CSS portrait Luke90 posted above? Larger images seem to be stored in chunks like that (presumably to fit nicely into RDP texture memory?). I wonder if those OoT tools already take that into account?
I'm pretty sure they're dumped in chunks too but I'll have to check on that.

Finally, I finished the "alternate character" mod I mentioned over the summer. Basically, you can hit Z on the SSS to load the polygon version of your character, and you can hit R to be Metal Mario or Giant DK. Anyways, relevant point being that in writing this I found the location/routines of the various button press handlers (i guess that's the proper way to describe it) specific to the SSS. These are nice places to put your function to button toggle stages
Did you ever post this? I'd love to incorporate it (as would everyone else here cough THE_MAAFIA THE_MAAFIA cough.

(Of course, I think it's possible and not too difficult to make a "page 2" button. I could probably write a crude button in over the weekend: choose a "stage button" to be our page button (looking at you Mushroom Kingdom) hook into the "A Button" event handler, check if the cursor is on our stage button; if so, replace the stage list in memory with a new stage list; return to normal flow and do not take the "A is pressed" branch.

Unforunately, there's a huge problem with this simple Page 2 button: there's no way to show the player which page we're on. The stage icons are drawn once on SSS load, and I've found that routine. So maybe I can just pass new offsets to that routine and draw the icons over (if that routine is handling how the images are put into the RDP / if there's space / do i need to find a texture clear routine). But then if that works, I'll need to format a whole new set of images, which I'll have to copy into RAM. And there should be a routine that moves files from the ROM to RAM; then of course I'll need to figure out how to add to the filetable, and on and on).
...ew
 
Last edited:

tehz

Smash Apprentice
Joined
Mar 27, 2010
Messages
188
I changed 80133C34 to sb v0, 0x4b11 (s1) and edited what's loaded into t6 (jr ra - addiu v0, r0, ????) at 0x14E044 in the rom. You have these locations so I'm confused on where your code got complicated.
So, to fixing storing the cursor position, you need to edit two SB function near your original edit:

0x80133C34 in RAM [originally: SB v0, 0x0041(s1)]

Code:
.org 0x0014F7A4
sb v0, 0x4B11(s1)

0x80133C54 in RAM [oringally: SB v0, 0x0042(s1)]
I never saw what caused the branch where this instruction to be taken, but I assume this is for the training mode stage select screen
Code:
.org 0x0014F7C4
sb v0, 0x4B12(s1)
Changing those two instructions fixes saving the cursor value. But, a new bug pops up: the cursor isn't restored to the correct position. Eg, if you highlight battlefield, exit, and return to the SSS, the cursor will be over Congo Jungle (the stage originally in the same position as battlefield). So, looking into what caused that, I saw the value saved by the two instructions above isn't the cursor value, rather it is the original stage index byte (so the one at byte 3 in each word in the stage index list). There is a routine that takes the saved stage index as an input (a0) and returns the cursor position (0-9 in v0). There is an explicit check for 0xDE that just returns 0x9; but for the other stages, there is some weird jump table where the stage index is used to load a word that contains an address which is then jumped to which sets v0 to some number between 0 and 8 and returns (JR RA).

That's very confusing, and the jump table is hard coded. Obviously, I could just move things around in the table, but why? I just replaced it with a small loop that loops through the stage index list comparing each stage index to the saved index. When it finds a match, it returns the loop value (i), since that value is equal to the proper cursor location. (The stage indeces are stored in the same order as they are on the SSS).

Code:
//A0 = Saved Stage Index for Cursor Position
//V0 = Cursor Position to be Return
//RA was restored off the the stack previously
 
.org 0x14E02C

//This puts the address of the first word of the stage index list into AT
//This also sets our i value to 0 in v0
fnInitialize:
lui     at, 0x8013
ori     at, at, 0x4644     //stage list pointer
or     v0, r0, r0       //i=0

//Load the stage index byte at the current AT offset
//Compare to the saved stage index
//If match, jump to label "end"
loop:
lbu     t6, 0x0003(at)     //stage index (unchanged byte)
beq     t6, a0, end       //compare to saved index

//This is to be safe; I guess there's no reason why the stage index list needs to have
//the value in a0. Once we go through the loop 8 times, there's no reason to go any father
//if i =8 (jump to "fail")
failCheck:
ori     t6, r0, 0x0008     //load delay; set limit for loop
beq     t6, v0, fail     //if 8th go, we're done.

//If the other to checks weren't passed
//increment the loop
loopInc:
addiu   v0, v0, 0x1       //i++
beq     r0, r0, loop     //loop
addiu   at, at, 0x4       //move pointer to next word in stage list

//we found our cursor value. it's already in V0, so return
end:
jr     RA           //we have a cursor value in v0 (it's i)
nop

//For some reason, this failed; just return position 0
fail:
jr     RA
ori     v0, r0, 0x0       //return cursor position of 0
Hopefully that makes sense.



Edit:


I'm pretty sure they're dumped in chunks too but I'll have to check on that.
You're right!

Did you ever post this? I'd love to incorporate it (as would everyone else here cough THE_MAAFIA THE_MAAFIA cough.
This weekend..

It'll be beautiful.
 

tehz

Smash Apprentice
Joined
Mar 27, 2010
Messages
188
Yeah, it's either remember to update that table every time the stage list is changed, or just write a less efficient code that's always aware of the stage list state (or whatever. I don't really have any background in CS, so I hope my use of jargon makes sense).
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
we could but its simple google search "smash bros rom download" and look for "smash bros (U) [!] for n 64" rom dope roms specifically because the name is is not scrambled like "MSHAS ORHTBER" like other roms. the dope rom one is "SMASH BROTHERS" thats the one u want
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
just wondering is safron city banned and if so can it be replaced by a modded planet zebes with no acid and top platform removed to prevent circle camping/stalling?
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
use a hex editor and open the file
then check the right side if the name is scrambled then get another rom that is not byte swapped
 

GamingMaster

Banned via Warnings
Joined
Oct 3, 2013
Messages
227
NNID
AbnormalAdept
k next extract the patcher from the zip and put the game in the folder. put in the name of the game.n64 or .z64 whichever it is. it is cap sensitive
 

Iceballz

Smash Journeyman
Joined
Sep 20, 2015
Messages
223
Location
"The Universe I'm Helpless In"
ROM Name: "C:\Users\My Name\Desktop\19XXTE Patcher v2\game.z64"
Traceback (most recent call last):
File "C:\Python34\lib\site-packages\cx_Freeze\initscripts\Console.py", line 27, in <module>
File "19XXTE.py", line 25, in <module>
File "C:\Python34\Lib\shutil.py", line 229, in copy
File "C:\Python34\Lib\shutil.py", line 108, in copyfile
OSError: [Errno 22] Invalid argument: '"C:\\Users\\My Name\\Desktop\\19XXTE Patcher v2\\game.z64"'

Error : File or path not found - [19XXTE.n64]


Error : File or path not found - [19XXTE_Widescreen.n64]

What is with the errors?
 

tehz

Smash Apprentice
Joined
Mar 27, 2010
Messages
188
Fireblaster Fireblaster ganas ganas I posted a fix for the cursor bug like 20 posts back. It works fine for me on my everdrive, so I assume that if it works for jorgams as well, he'll include it in the next version.

Good job jorgasms. That SSS looks nice. I guess I better post the character stuff. I'll edit it in the post in a bit.


----------------------

Okay, here is it: https://drive.google.com/file/d/0B8-I4Z0x-xXvNGxmUzlzQzdNR1E/view?usp=sharing
That should be in the proper format to just add to the 19XXTE.txt file. Assuming that google drive doesn't mess with the formating, you should be able to just copy/paste the text in the 19XXTE.txt file

I quickly tested it to see if it was working, but I didn't look into the code to make sure the copied everything correctly after it compiled etc. If this doesn't work for you Cyjorg Cyjorg I'm linking the ASM at the end

Basically, this hack does three things
1) Turns off the L and R buttons on the SSS, so I have more buttons to use
2) Hitting "Z" on the SSS will cause you to be the Polygon version of whichever character you chose on the CSS
If you chose Mario or DK, hitting "R" on the SSS will cause you to be Metal Mario or Giant DK
3) When going back to the CSS or after a match, the polygon/Metal Mario/Giant DK character is returned to the original base character so the game doesn't crash

Bugs/Things I Find Annoying
  • Polygon Stock Icons don't work
  • Metal Mario/Polygons don't have alt colors, so everyone looks the same
  • No way to switch back from polygon/mm/gdk on SSS; have to return to CSS (add an L button function later..?
ASM Files/Basic Explanations of what I did: https://drive.google.com/folderview?id=0B8-I4Z0x-xXvTGNmM0dFSXlHTWc&usp=sharing
 
Last edited:

Cyjorg

tiny.cc/19XXTE
Joined
Nov 18, 2013
Messages
686
Location
Purdue University
Fireblaster Fireblaster ganas ganas I posted a fix for the cursor bug like 20 posts back. It works fine for me on my everdrive, so I assume that if it works for jorgams as well, he'll include it in the next version.

Good job jorgasms. That SSS looks nice. I guess I better post the character stuff. I'll edit it in the post in a bit.


----------------------

Okay, here is it: https://drive.google.com/file/d/0B8-I4Z0x-xXvNGxmUzlzQzdNR1E/view?usp=sharing
That should be in the proper format to just add to the 19XXTE.txt file. Assuming that google drive doesn't mess with the formating, you should be able to just copy/paste the text in the 19XXTE.txt file

I quickly tested it to see if it was working, but I didn't look into the code to make sure the copied everything correctly after it compiled etc. If this doesn't work for you Cyjorg Cyjorg I'm linking the ASM at the end

Basically, this hack does three things
1) Turns off the L and R buttons on the SSS, so I have more buttons to use
2) Hitting "Z" on the SSS will cause you to be the Polygon version of whichever character you chose on the CSS
If you chose Mario or DK, hitting "R" on the SSS will cause you to be Metal Mario or Giant DK
3) When going back to the CSS or after a match, the polygon/Metal Mario/Giant DK character is return to the base, original character so the game doesn't crash

Bugs/Things I Find Annoying
  • Polygon Stock Icons don't work
  • Metal Mario/Polygons don't have alt colors, so everyone looks the same
  • No way to switch back from polygon/mm/gdk on SSS; have to return to CSS (add an L button function later..?
ASM Files/Basic Explanations of what I did: https://drive.google.com/folderview?id=0B8-I4Z0x-xXvTGNmM0dFSXlHTWc&usp=sharing
Already fixed the cursor bug and I'm also using CajeASM to assemble my code now. I'll be getting rid of my patcher in favor of another one I've found online.

This is good stuff tehz!
 

Zantetsu

Smash Master
Joined
Sep 1, 2006
Messages
4,413
Location
Springfield, MO
Also on a later update it would be cool to have 2 more roms made with the hitbox cheat enabled as an option like:
19xxte.n64
19xxte(Widescreen).n64
(HitBox)19xxte.n64
(Hitbox)19xxte(Widescreen).n64
Actually, instead of making separate roms for all of these options, it would be nice if he implemented the button activator codes to activate these codes by choice instead of having to switch roms.
On my gameshark at least, I have it set to where when L & Z are held down, it activates hitbox mode. It's deactivated when the game moves to another screen (so right after a battle), but pressing the 2 buttons is incredibly easy to reactivate them, and they're also 2 buttons that you're likely not going to press at the same time. Even more in-depth combinations are possible to make it ever less likely to accidentally press them during serious matches, such as L+Z+Start.
I just think having multiple roms just adds more confusion, and it would be much nicer to have it all implemented in 1 universal rom.

View attachment 88391

Texture hacking is cake.

UPDATE COMING SOON
This looks awesome, great work. My only nitpick is that Hyrule looks a little weird being the only stage shown at an angle, while all others are head-on views. Still much better than what we had to settle with before though.
 
Last edited:

Shears

Smash Master
Joined
Mar 13, 2008
Messages
3,146
Location
disproving indeterminism
Already fixed the cursor bug and I'm also using CajeASM to assemble my code now. I'll be getting rid of my patcher in favor of another one I've found online.

This is good stuff tehz!
Please make the stage in the top left Dreamland instead of Peachs. Also, get rid of Hyrule since its a terrible broken stage and replaces it with a better stage like Kirby Beta 2.
 
Top Bottom