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

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

Previous topic - Next topic

dcx2


Patedj

frubam, send the address my way too, I'd like to give a go on the pal version, I might be able to write it for NTSC too. dcx2 can always improve on it.
You can pm me, I've got time for your troubles.

frubam

#362
I'm not sure whether or not it's different for the pal version, but here goes. Around 0x4E1810, you should see what looks like a bunch of floating-point hex numbers. At 0x4E1E88, you should see a WORD equaling 0x0. Right after it, should be a 0x9xxxxxxx value. The 0x9xxxxxxx value tells you the offset of the in-party character's atk variable data(len/wdh/hgt range of hits, movement spd, as well as other such data). The character it pertains to is dependent on what slot a character is in(e.g. if Emil is in the first slot, the offset at 0x4E1E8C will pertain to him. If Marta is in the first slot, it will pertain to her, etc). The data blocks are, I think, 0x64 bytes(0x60+4 zero bytes) long for the party chars. Since the atk var data is dynamically loaded per battle, the 0x9xxxxxxx values will be different. The 0x9xxxxxxx values also change if you switch the chars around. Note that this data is loaded/refreshed only when a battle starts, and is not reloaded unless you switch the chars around. Also to note that first 4 0x64 blocks are for the in-battle party chars; the ones after are for the enemies I believe.

By jumping to the 0x9xxxxxxx value at 0x4E1E8C(+0x64 for the 2nd slot; +0x128 for the 3rd slot, etc), you are instantly brought to that char's atk var data. Note that for the playable chars, the 1st 4 WORDs are 0x1, 0x0, 0x0, 0x3E8. Starting from before the 0x1 WORD value, 0xD0 bytes in, there is a WORD value that will be 0x0. By setting this value as a floating-point number, you can have the character float. I believe the char will fall when attacking though, but magic can be casted in mid-air.

It'd be nice to be able to press only up/down on the stick to float/drop.  Anyway, it seems kinda hard for me to make into a code, since the pointer positions change by char slot movement, and I have no idea how to do the 'press button, this happens' type codes either =0\.

Patedj

4E00000C 00000000 # put a pointer to the float in po
ASM here               # hook that constantly adds float to Y axis
14000000 00000000 # make hook add 0.0
283CB80A BFFF4000 # if holding C
14000000 42C80000 # make hook add 100.0
E0000000 80008000 # terminator
ASM:bl NO_DATA
.float 14
NO_DATA:
mflr r12
lfs f0,0(r12)
lfs f26,448(r1)
fadds f26,f0,f26

stfs f26,448(r1)

Instead of adding (fadds) you can simply replace lfs f0,0(r12) with the float register that it's using to add to the jumping address.
I used this formula to make the Avatars float in 3d games... This will work if your bp turns out to be a float register.

Next post give me the address and not the values. The explanaition that you gave us helps of course, so thank you, be proud. As I said, please give me the address so I can see where it is in the PAL version.
You can pm me, I've got time for your troubles.

dcx2

I don't think he can give you the address because it changes for every fight.  The best he can do is give a pointer to the address.  I don't think he has a USB Gecko so he can't set breakpoints and stuff.

Also, when he says 0x4E1810, he means 804E1810.  I'm not sure how you can find it in the PAL version, but I believe you have my NTSC dump so you can try to look at that and then look for similar things in your PAL dump.  It might just use the same offset as the party mod.

Patedj

You can pm me, I've got time for your troubles.

Symphonian resident

#366
Can I get the basic form of this code for other characters?

[spoiler]Marta base <-> arcane [frubam]
* 0227AD24 0000000X
* 0227AD40 0000000X
* 0227AD5C 0000000X
* 0227AD78 0000000X
* 0227AD94 0000000X
* 0227ADCC 0000000X
* 0227ADE8 0000000X
* 0227AE04 0000000Y
* 0227AE20 0000000Z
X - 0 = base; 1 = arcane. Order below.
Y - Radiant Roar. original value = 2. Usable in normal artes list. If you use it, you WILL get the white screen. Omit this line or set it to 2 to keep it normal.
Z - Ars Nova. original value = 5. If you use it, you'll prob get the the white screen. Omit this line or set it to 5 to keep it normal.
Crescent Dance
Dancing Swallow
Swallow Waltz
Roaring Phoenix
Radiant Gale
Tempest Swallow
Remnant Strike
Radiant Roar
Ars Nova[/spoiler]

Like would Richter start at 0227AE3C (doubt it).

EDIT: By the way, do monsters not have portrait data or something? I mean with Aesteval's Party Mod you fill in AAAABBBB, where AAAA is portrait data and BBBB is battle data, or something. When I try it with monsters, whatever I put in AAAA seems to do nothing.

dcx2

I'm not sure I understand frubam's code.  It just changes e.g. Crescent Dance from Arcane to Base?  I can see if I can generalize it.

Also, I don't think monsters have portrait data.  I think the AAAA actually points to a monster in your capture list, but I'm not 100% sure.  Hence why Party Roller only works for humans.

Symphonian resident


dcx2


Symphonian resident

You can use more than just two Artes in one combo with Marta?

She only has base artes, so unlike Emil or Richter, she really can't do a melee combination.

That code can make the game think that, let's say Tempest Swallow, is an arcane arte, so I could chain Crescent Dance -> Roaring Phoenix -> Tempest Swallow -> Swallow Waltz -> Tempest Swallow.

Unless there's already a code out that let's you ignore the arte restriction, so you could just chain base -> base -> base, or arcane -> arcane -> arcane...

dcx2

hmm...you know, I never really looked into that very much.  Can you point me at the precise definition of the arte restriction?  From what I read so far, it's "can't do more than two base artes in a combo".  Could you just alternate base and arcane indefinitely?  How do they tie together?

Using breakpoints I might be able to see who is reading the base<->arcane values, and from there lift the arte restriction entirely.  But it helps to know precisely what the arte restriction is.

Symphonian resident

#372
Maybe I worded it badly.

With the skills Ability Plus and Ability Plus 2, you can chain up to three base artes and two arcane artes:
Base -> base -> arcane -> base -> arcane OR
Base -> arcane -> base -> base -> arcane (of course, there's no need to use all five of them).

By "arte restriction", I meant on how the game prevents you from chaining more than 3 base artes in a row (ie can't do Demon Fang -> Tiger Blade -> Sword Rain), or from chaining an arcane arte from an arcane arte (ie can't do Light Spear -> Demon Spear)

EDIT: If it helps, you can only use artes like so:
Starting with base arte
[spoiler]base
base -> base
base -> base -> arcane
base -> base -> arcane -> base
base -> base -> arcane -> base -> arcane
base -> arcane -> base
base -> arcane -> base -> base
base -> arcane -> base -> base -> arcane
base -> arcane -> base -> arcane[/spoiler]
Starting with arcane arte
[spoiler]arcane
arcane -> base
arcane -> base -> base
arcane -> base -> base -> arcane
arcane -> base -> arcane[/spoiler]

dcx2

Ah, that makes sense.

Yeah, I bet I can hack that restriction.  I'm pretty busy this weekend, but sooner or later it should happen.  There's likely a counter that keeps track of how many of each attack you've used.  If I keep the counter from counting up, you could alternate base->arcane indefinitely.  You could probably also chain base indefinitely.  There's probably a separate code needed to chain arcane artes.

ceonn

Hello. I was messing around with the encounter modifier and I attempted to lower a characters level. I set the min and max for Emil to 5 and in battle he remained at his default level. Im assuming that this means that you can only raise the opponents level, but I just wanted to be certain. Thanks!