Tales of Symphonia: Dawn of the New World [RT4EAF]

Started by Jemindra, January 05, 2009, 09:42:06 PM

Previous topic - Next topic

Symphonian resident

Any news on being able to force Richter to use his Mystic Arte without freezing?

frubam

#406
Quote from: Symphonian resident on September 25, 2011, 04:22:22 PM
Any news on being able to force Richter to use his Mystic Arte without freezing?

Since I was off this morning, I decided to look into it a bit. I believe the problem is that the ally Richter does not have a cut-in in his file. When the game reads the attack data for his mystic, since there is no cut-in, the game freezes. Once I overrided his data to not use a cut-in, it worked with no problems. I unfortunately cannot make a code to do this, but I can give some general directions for one that may work.

This is assuming Ricther is in slot 1.

1. Get hex value(pointer) from address 0x804E1E8C(add 0x64 to move down a slot). Value at this address should be in 0x9xxxxxxx range. This pointer is where the attack data for the char in slot 1 is stored.
2. Add 0x2A4C bytes to the pointer. Jump to that MEM location.
3. Overwrite the next 3 WORDs with 0x003c0033 00000000 00000000.

Once it's overwritten, whatever methods you use to initiate his MA, it should work without freezing. If you want to use his MA the traditional way, you have to 'add' it to his arte list, as he doesn't have a listing for it. To do that, just use this code:

Add Richter MA in list[frubam]
0427b280 00020000
0427b284 00000000
0427b288 00000032
0427b28c 000a0001
0427b290 00000000
0427b294 80282B88
0427b298 80282B88

or

Add Richter MA in list[frubam]
0627b280 0000001c
00020000 00000000
00000032 000a0001
00000000 80282b88
80282b88 00000000

which does the same thing. I should note that this code may affect Richter's skills and artes should you start a new game, since this code overwrites a bit of this data, but once he gets into your party during the tutorial, it doesn't matter anymore(as far as I know).

You could also alter this char file and add a cut-in; but that is more work than the average person would do =0/.

Symphonian resident

#407
I figured the game froze because of that. :mad:

Hmm. Is there a way to point his Mystic Arte to enemy Richter's Mystic Arte? Though I'm not sure if the Mystic Arte would function properly like that (when I model swaps and using Mystic Artes, they do activate, but the enemy is still free to move around and stuff and the attack ends with a white screen).

EDIT: Asking ^ because I'm not sure if your instructions are for using a USB Gecko, editing a save file, or modifying an actual file in the ISO.

frubam

#408
Quote from: Symphonian resident on September 29, 2011, 11:38:14 PM
I figured the game froze because of that. :mad:

Hmm. Is there a way to point his Mystic Arte to enemy Richter's Mystic Arte? Though I'm not sure if the Mystic Arte would function properly like that (when I model swaps and using Mystic Artes, they do activate, but the enemy is still free to move around and stuff and the attack ends with a white screen).

EDIT: Asking ^ because I'm not sure if your instructions are for using a USB Gecko, editing a save file, or modifying an actual file in the ISO.

You can use these codes the same way you've used other codes posted in this thread.

The attack data for ally and enemy Richter is the same. Even if it were possible, the 'instruction' to use a cut-in is actually inside this data, so it doesn't matter if you point it to the ally or enemy Richter.

no Richter cut-in[frubam]
48000000 804eXXXX
DE000000 90009280
16002a4c 0000000c
003c0033 00000000
00000000 00000000
e0000000 80008000

XXXX is 0x1e8c if Richter is in slot 1; 0x1ef0 for slot 2; 0x1f54 for slot 3; 0x1fb8 for slot 4.

I'm not familiar with pointers and all that, but try using the code above with the "Add Richter MA in list" code in my previous post(I don't have my system to test =0( )

Add Richter MA in list[frubam]
0627b280 0000001c
00020000 00000000
00000032 000a0001
00000000 80282b88
80282b88 00000000

and see if that works. Just use a arcane arte and hold the arte button, like any typical MA.

Symphonian resident

#409
Quote from: frubam on September 29, 2011, 09:31:25 PM
Once I overrided his data to not use a cut-in, it worked with no problems. I unfortunately cannot make a code to do this, but I can give some general directions for one that may work.

This is assuming Ricther is in slot 1.

1. Get hex value(pointer) from address 0x804E1E8C(add 0x64 to move down a slot). Value at this address should be in 0x9xxxxxxx range. This pointer is where the attack data for the char in slot 1 is stored.
2. Add 0x2A4C bytes to the pointer. Jump to that MEM location.
3. Overwrite the next 3 WORDs with 0x003c0033 00000000 00000000.

Once it's overwritten, whatever methods you use to initiate his MA, it should work without freezing.

I meant that I didn't understand this part. But I guess your new code does exactly what ^ describes. :P

Hmm. The code changes depending on what slot Richter's in? This could be a bit troublesome. Oh, well; it's not like it's hard to figure out. I'll assume that I can have all 4 versions of that code active at once so I can place Richter anywhere in the roster anytime I want.

Thanks frubam.


...And about adding the cut-in to his character file... would it be, let's say, difficult to do accomplish? I've looked through your Photobucket images and saw you add swap and add custom animations and modify textures. I'm nowhere near that level, but would it be a lot easier than that?

EDIT: I haven't tested your code in a new game yet, but it works flawlessly on my current run. No white screen at the end. :D

Symphonian resident

Mmm.
Started a new run.

Game froze on the second fight with Lucrezia (where Marta joins).
Then it froze at the first tutorial Richter gives.

The only codes I added were:
Add Richter MA in list[frubam]
* 0627b280 0000001c
* 00020000 00000000
* 00000032 000a0001
* 00000000 80282b88
* 80282b88 00000000
I should note that this code may affect Richter's skills and artes should you start a new game, since this code overwrites a bit of this data, but once he gets into your party during the tutorial, it doesn't matter anymore(as far as I know).
Just use a arcane arte and hold the arte button, like any typical MA.

No Richter Cut-In (Slot 1) [frubam]
* 48000000 804e1e8c
* DE000000 90009280
* 16002a4c 0000000c
* 003c0033 00000000
* 00000000 00000000
* e0000000 80008000

No Richter Cut-In (Slot 2) [frubam]
* 48000000 804e1ef0
* DE000000 90009280
* 16002a4c 0000000c
* 003c0033 00000000
* 00000000 00000000
* e0000000 80008000

No Richter Cut-In (Slot 3) [frubam]
* 48000000 804e1f54
* DE000000 90009280
* 16002a4c 0000000c
* 003c0033 00000000
* 00000000 00000000
* e0000000 80008000

No Richter Cut-In (Slot 4) [frubam]
* 48000000 804e1fb8
* DE000000 90009280
* 16002a4c 0000000c
* 003c0033 00000000
* 00000000 00000000
* e0000000 80008000

What could be causing the problem?

frubam

Adding a cut-in isn't really difficult if you understand basic hex addition and good know-how to use a hex editor. It's really as simple as going to point A, pasting the cut-in data, and changing about 2 or 3 WORDs.

It most likely because the codes are writing bad values into the other char's file. You see, basically, the code should ONLY be used for the appropriate slot that Richter is going to be in. If, say in this instance, Marta joins in the 2nd slot. The code for slot 2 jumps to the beginning of her attack data, then jumps 0x2A4C bytes ahead. Since every char's attack data is different sizes, the code is still going to write the values, but the area of memory it's written in is limited to some value, and writing "003c0033 00000000 00000000" is an invalid value, thus making it freeze. I'm surprised it worked the first time you tried it if you used all four slot codes at the same time.

The simplest way to fix this is to make a conditional code that checks the first 4 slots to see if Richter is in them. If so, do the code; if not, then don't. I'll give this a try tomorrow(I'll have to read up on the code types to learn how to do it).

Symphonian resident

I see.
Well then, I better get cracking at those files. After all, the cut-in just boosts the awesomeness of Richter's awesome-lacking Mystic Arte.

The way you say it, I'm surprised battles worked at all. I've run through several battles with those codes on on an older save and worked smoothly. Har har, my luck is astounding.

Which reminds me, now I actually have a reason to use Riivolution.

dcx2

Ah, I think I can do this for ya.  po is preloaded with 80000000; then check slot 1, 2, 3, and 4 for Richter's portrait data using a series of 28 if's.  Should any of them hit, load the associated pointer into po.  After the series of if's, DE to see if the po has a valid pointer > 80010000 and if so, do the 16 string write.  (actually a 14 write and a 10 fill which can save us one line)

This code will do nothing if there's no Richter, and it will only patch Richter's slot if he's in 1-4.  However, if you have multiple Richters in your party, only the last one gets patched.

Patch out Richter's cut-in in any slot
284931EA 0000000B
4A000000 804E1E8C
284931F3 0000000B
4A000000 804E1EF0
284931FB 0000000B
4A000000 804E1F54
28493203 0000000B
4A000000 804E1FB8
DE000001 804E804F
58010000 00000000
DE000000 90009280
14002A4C 003c0033
10002A50 00070000
E0000000 80008000
Based entirely on frubam's code

[spoiler=with comments]
284931EA 0000000B # if slot 1 is Richter
4A000000 804E1E8C # po = slot 1 pointer
284931F3 0000000B # end if (note the address is +1); if slot 2 is Richter
4A000000 804E1EF0 # po = slot 2 pointer
284931FB 0000000B # end if; if slot 3 is Richter
4A000000 804E1F54 # po = slot 3 pointer
28493203 0000000B # end if; slot 4
4A000000 804E1FB8 # po = slot 4 pointer
DE000001 804E804F # end if; if po < 804E0000 or po > 804F0000, do nothing
58010000 00000000 # po = [po]
DE000000 90009280 # if po < 90000000 or po > 92800000, do nothing
14002A4C 003c0033 # 32-bit write
10002A50 00070000 # 8-bit 0 fill
E0000000 80008000 # terminate all ifs (the two DE checks)
[/spoiler]

Symphonian resident

Sweet.
I'll be using this until I can get Richter's cut in to work.

frubam

Thanks for the added comments =03. I did try this at first by quickly glancing at the codetype doc, but was unsuccessful at getting it right. Now I see how it's done.

hireplas

This may be an absurd request, but is it possible to make a hack to remove the enemies little health bar in the battle? It's just sorta something that grinds my gears

mxsoundtube

just wondering , if you guys can make Emil stay as stating Emil or like skip when Emil wii change his cloths ?

dcx2

I think the Party Mod code can be used to make Emil stay the same.  000A000B is Richter; I think 000B000C is the original Emil?

Symphonian resident

According to my tests:
00080009 - Emil (seems to give whatever Emil is appropriate depending on where in the story you're in)
000B000C - Pre-pact Emil (name is taken from your first monster you ever caught)
000C000D - Green-eyed Emil (name is taken from the second monster you ever caught)
000D000E - Green-eyed Emil with Ratatosk's voice (name is taken from the third monster you every caught)

Alternatively, you can use Shadow's Model Swap code to replace Emil's model with his pre-pact (his Luin clothes) form if you wish.