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

Started by panmusic, November 13, 2009, 08:59:22 AM

Previous topic - Next topic

Patedj

I thought I fixed that code. I did what you said
[spoiler]lbzx r12,r3,r0
cmpwi r12,0
bne- _END
li r12,1
stbx r12,r3,r0
_END:
lbzux r0,r3,r0[/spoiler]
You can pm me, I've got time for your troubles.

dcx2

The code you posted in the first post doesn't match that, which is why I said something.

Patedj

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

dcx2

You should try something easier first.  That code is seriously one of the hardest codes I've ever made.

Party Roller should be easy, since you already ported Aesteval's/YCAT's party mod.

Patedj

Code Porting
[spoiler]Party Roller[/spoiler]
Function NTSC
[spoiler]8005C864:  38C00009   li   r6,9
8005C868:  92610010   stw   r19,16(r1)
8005C86C:  39200014   li   r9,20
8005C870:  39400014   li   r10,20
8005C874:  480271E5   bl   0x80083a58
8005C878:  3C608048   lis   r3,-32696
8005C87C:  38631688   addi   r3,r3,5768
8005C880:  3C030001   addis   r0,r3,1
8005C884:  7C60F214   add   r3,r0,r30
8005C888:  80831B5C   lwz   r4,7004(r3)
8005C88C:  A0631B62   lhz   r3,7010(r3)

8005C890:  7C0400D0   neg   r0,r4
8005C894:  7C002378   or   r0,r0,r4
8005C898:  54040FFE   rlwinm   r4,r0,1,31,31
8005C89C:  48042F21   bl   0x8009f7bc
8005C8A0:  889D01A0   lbz   r4,416(r29)
8005C8A4:  48042EB9   bl   0x8009f75c
8005C8A8:  2C030000   cmpwi   r3,0
8005C8AC:  7C641B78   mr   r4,r3
8005C8B0:  41820018   beq-   0x8005c8c8
8005C8B4:  801D0198   lwz   r0,408(r29)[/spoiler]
Function Pal
[spoiler]8005C7AC:  38C00009   li   r6,9
8005C7B0:  92610010   stw   r19,16(r1)
8005C7B4:  39200014   li   r9,20
8005C7B8:  39400014   li   r10,20
8005C7BC:  4802819D   bl   0x80084958
8005C7C0:  3C608068   lis   r3,-32664
8005C7C4:  3863C9C0   subi   r3,r3,13888
8005C7C8:  3C030001   addis   r0,r3,1
8005C7CC:  7C60CA14   add   r3,r0,r25
8005C7D0:  80831B5C   lwz   r4,7004(r3)
8005C7D4:  A0631B62   lhz   r3,7010(r3)

8005C7D8:  7C0400D0   neg   r0,r4
8005C7DC:  7C002378   or   r0,r0,r4
8005C7E0:  54040FFE   rlwinm   r4,r0,1,31,31
8005C7E4:  480452CD   bl   0x800a1ab0
8005C7E8:  889B01A0   lbz   r4,416(r27)
8005C7EC:  48045271   bl   0x800a1a5c
8005C7F0:  2C030000   cmpwi   r3,0
8005C7F4:  7C641B78   mr   r4,r3
8005C7F8:  41820018   beq-   0x8005c810
8005C7FC:  801B0198   lwz   r0,4[/spoiler]

Code:
[spoiler]lis r12,-32691
ori r12,r12,30042
Remote Control
lhz r10,4(r12)
andi. r10,r10,12
beq- 0x48
lhz r10,7010(r3)
cmpwi r10,11
bgt- 0x3C
lhz r12,0(r12)
cmpwi r12,8200
bne- 0x10
cmpwi r10,11
bge- 0x08
addi r10,r10,1
cmpwi r12,8196
bne- 0x10
cmpwi r10,1
ble- 0x08
subi r10,r10,1
sth r10,7010(r3)
subi r10,r10,1
sth r10,7008(r3)
lhz r3,7010(r3)
[spoiler]C205C88C 0000000C
3D80804D 618C755A
A14C0004 714A000C
41820048 A1431B62
2C0A000B 4181003C
A18C0000 2C0C2008
40820010 2C0A000B
40800008 394A0001
2C0C2004 40820010
2C0A0001 40810008
394AFFFF B1431B62
394AFFFF B1431B60
A0631B62 00000000[/spoiler]

Pal
lis r12,0x806D
ori r12,r12,0x28E2
lhz r10,4(r12)
andi. r10,r10,12
beq- 0x48
lhz r10,7010(r3)
cmpwi r10,11
bgt- 0x3C
lhz r12,0(r12)
cmpwi r12,8200
bne- 0x10
cmpwi r10,11
bge- 0x08
addi r10,r10,1
cmpwi r12,8196
bne- 0x10
cmpwi r10,1
ble- 0x08
subi r10,r10,1
sth r10,7010(r3)
subi r10,r10,1
sth r10,7008(r3)
lhz r3,7010(r3)
[spoiler]C205C7D4 0000000C
3D80806D 618C28E2
A14C0004 714A000C
41820048 A1431B62
2C0A000B 4181003C
A18C0000 2C0C2008
40820010 2C0A000B
40800008 394A0001
2C0C2004 40820010
2C0A0001 40810008
394AFFFF B1431B62
394AFFFF B1431B60
A0631B62 00000000
[/spoiler]
[/spoiler]
Success!
You can pm me, I've got time for your troubles.

dcx2

You should get in the habit of making C2 codes with proper ASM techniques.

This is the source for Party Roller NTSC, from the notes that I sent you.

[spoiler]lis r12,0x804D      # controller pointer
ori r12,r12,0x755A
lhz r10,4(r12)      # get button deltas hword
andi. r10,r10,0x00C   # make sure it's up or down that's changing
beq- _END


_DO_CODE:

lhz r10,7010(r3)   # load portrait index
cmpwi r10,0xB
bgt- _END      # don't change monsters
lhz r12,0(r12)      # get buttons


_TEST_ZUP:
cmpwi r12,0x2008   # is z up?
bne- _TEST_ZDOWN
cmpwi r10,11
bge- _TEST_ZDOWN   # prevent falling off right
addi r10,r10,1      # inc index


_TEST_ZDOWN:
cmpwi r12,0x2004   # is z down?
bne- _DONE
cmpwi r10,1      # prevent falling off left
ble- _DONE
subi r10,r10,1      # dec index


_DONE:
sth r10,7010(r3)   # store portrait index
subi r10,r10,1      # convert to stats index
sth r10,7008(r3)   # store stats index

_END:
lhz r3,7010(r3)      # original instruction
[/spoiler]

Compare this to what you used.

[spoiler]lis r12,-32691
ori r12,r12,30042
lhz r10,4(r12)
andi. r10,r10,12
beq- 0x48
lhz r10,7010(r3)
cmpwi r10,11
bgt- 0x3C
lhz r12,0(r12)
cmpwi r12,8200
bne- 0x10
cmpwi r10,11
bge- 0x08
addi r10,r10,1
cmpwi r12,8196
bne- 0x10
cmpwi r10,1
ble- 0x08
subi r10,r10,1
sth r10,7010(r3)
subi r10,r10,1
sth r10,7008(r3)
lhz r3,7010(r3)[/spoiler]

Which one is easier to read?

Patedj

I much prefer the way you do it. I'd have to get a short class on it to fully understand the technique. Glancing at it allows me to understand it. My higher cognition is generally above average. Unfortunately, I fail at understanding the conversion from translated to proper technique. Any advise?
You can pm me, I've got time for your troubles.

dcx2

If you ask about any piece of it, I can explain it.  For instance, do you understand how the branch labels work, or what they're for?  That # denotes a comment, and when run through the assembler anything after the # is ignored?

Patedj

#53
Code Porting
[spoiler]Unlock all spells for everyone[/spoiler]

Function NTSC
[spoiler]8005BDF8:  7E8903A6   mtctr   r20
8005BDFC:  7CC02E70   srawi   r0,r6,5
8005BE00:  54C3D808   rlwinm   r3,r6,27,0,4
8005BE04:  54C50FFE   rlwinm   r5,r6,1,31,31
8005BE08:  7C000194   addze   r0,r0
8005BE0C:  7C651850   sub   r3,r3,r5
8005BE10:  5464283E   rlwinm   r4,r3,5,0,31
8005BE14:  5400103A   rlwinm   r0,r0,2,0,29
8005BE18:  7C760214   add   r3,r22,r0
8005BE1C:  7C842A14   add   r4,r4,r5
8005BE20:  80030058   lwz   r0,88(r3)

8005BE24:  7FE32030   slw   r3,r31,r4
8005BE28:  7C600039   and.   r0,r3,r0
8005BE2C:  4182001C   beq-   0x8005be48
8005BE30:  80790028   lwz   r3,40(r25)
8005BE34:  5460103A   rlwinm   r0,r3,2,0,29
8005BE38:  38830001   addi   r4,r3,1
8005BE3C:  7C780214   add   r3,r24,r0
8005BE40:  90C30064   stw   r6,100(r3)
8005BE44:  90990028   stw   r4,40(r25)
8005BE48:  38C60001   addi   r6,r6,1
[/spoiler]

Code NTSC
C205BE20 00000004
2C000008 381FFFFE
4082000C 5400003C
48000008 540000FE
90030058 00000000

Translation
cmpwi r0,8
subi r0,r31,2
bne- 0x0C
rlwinm r0,r0,0,0,30
b 0x08
rlwinm r0,r0,0,3,31
stw r0,88(r3)

ASM Technique
cmpwi r0,8 #compare r0 with 8
subi r0,r31,2 #subtract immediately Immediate value of r31 by 2 into r0

bne- _BRANCH #branch if negative to BRANCH

rlwinm r0,r0,0,0,30 #if not then ??

_BRANCH
b _END

_END:
rlwinm r0,r0,0,3,31
stw r0,88(r3)

[spoiler]I would replace r0 with corresponding word. Perhaps r0 is magic?[/spoiler]
Pal Function
[spoiler]8005BBD4:  41810058   bgt-   0x8005bc2c
8005BBD8:  7EC02E70   srawi   r0,r22,5
8005BBDC:  56C3D808   rlwinm   r3,r22,27,0,4
8005BBE0:  56C50FFE   rlwinm   r5,r22,1,31,31
8005BBE4:  7C000194   addze   r0,r0
8005BBE8:  7C651850   sub   r3,r3,r5
8005BBEC:  5464283E   rlwinm   r4,r3,5,0,31
8005BBF0:  5400103A   rlwinm   r0,r0,2,0,29
8005BBF4:  7C770214   add   r3,r23,r0
8005BBF8:  7C842A14   add   r4,r4,r5
8005BBFC:  80030058   lwz   r0,88(r3)

8005BC00:  7FE32030   slw   r3,r31,r4
8005BC04:  7C600039   and.   r0,r3,r0
8005BC08:  41820024   beq-   0x8005bc2c
8005BC0C:  807C0028   lwz   r3,40(r28)
8005BC10:  7CBAA214   add   r5,r26,r20
8005BC14:  38D60001   addi   r6,r22,1
8005BC18:  5460103A   rlwinm   r0,r3,2,0,29
8005BC1C:  38830001   addi   r4,r3,1
8005BC20:  7C650214   add   r3,r5,r0
8005BC24:  90C30064   stw   r6,100([/spoiler]
You can pm me, I've got time for your troubles.

Patedj

The first time I saw a branch was with you. I found it brilliant and understood it immediately. Well, let's try it with this code shall we. I start and you correct me.
You can pm me, I've got time for your troubles.

dcx2

Here's the source for that one.

[spoiler]hook  8005BE20:  80030058   lwz   r0,88(r3)

88(r3) is current spell word

r0 = 8 is first spell word, 0xFFFFFFFE
r0 = C is second spell word, 0x1FFFFFFF


cmpwi r0,8
subi r0,r31,2
bne- _SECOND_WORD

rlwinm r0,r0,0,0,30
b _STORE

_SECOND_WORD:
rlwinm r0,r0,0,3,31

_STORE:
stw r0,88(r3)[/spoiler]

EDIT:

I see some confusion.

subi r0,r31,2 #subtract immediately r31 by 2 into r0

"immediately" is an adjective.  However, in the context of assembly language, "immediate" is a noun.  It refers to a value that comes from the ASM instruction.  So the correct comment would be "subtract the immediate value 2 from the contents of r31 and place the result in r0", or "r0 = r31 - 2"

In this case, r31 should always be 1.  So subtracting 2 from 1 will give us -1 = 0xFFFFFFFF.

---

bne- _BRANCH #branch if negative to BRANCH

bne = Branch Not Equal

---

rlwinm = Rotate Left Word Immediate aNd Mask.  It's a pretty crazy ASM instruction that 1) bitwise rotation of the register to the left and 2) applies a mask to the resulting value.  In this case, the values for the spells are limited to 0xFFFFFFFE and 0x1FFFFFFF.  So what I do is set up r0 to have 0xFFFFFFFF.  And then I use rlwinm.  The first immediate is 0, meaning "shift 0 bits to the left" = don't shift at all.  The second and third arguments represent the bitmask.  For the first rlwinm, the bitmask starts at bit 0 and ends at bit30.  i.e. 1111 1111 1111 1111 1111 1111 1111 1110.  The second rlwinm starts at bit 3 and ends at bit 31.  i.e. 0001 111 1111 1111 1111 1111 1111 1111

EDIT2:

btw, the cmpwi r0,8 identifies which of the two words we're writing to.  Since there are 60 spells, you can't fit them all into one 32-bit word, so you need two.  r0 = 8 when it's reading the first word.

Patedj

#56
AH noun! Now that got registered into my brain. ...punt intended. Hmm.. I understand the shift  but I don't understand why they did that...

Code Pal
C205BBFC 00000004
2C000008 381FFFFE
4082000C 5400003C
48000008 540000FE
90030058 00000000

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

Patedj

#57
... I don't think I got the right address... how does this code change things in the artes tab? Never mind, I thought that the code allowed everyone's magic to be available for everyone. Now everything that you said about rlwinm makes sense :)
You can pm me, I've got time for your troubles.

dcx2

Your hook is 8005BBFC:  80030058   lwz   r0,88(r3)

C205BBFC 00000004
2C000008 381FFFFE
4082000C 5400003C
48000008 540000FE
90030058 00000000

Patedj

Unsuccessful
Log Pal
[spoiler]


8005BC00:  7FE32030   slw   r3,r31,r4   r3 = 8067D284   r31 = 00000001   r4 = 00000000
8005BC04:  7C600039   and.   r0,r3,r0   r0 = 1FFFFFFF   r3 = 00000001   r0 = 1FFFFFFF
8005BC08:  41820024   beq-   0x8005bc2c
8005BC0C:  807C0028   lwz   r3,40(r28)   r3 = 00000001   r28 = 806AF7C0   [806AF7E8] = 00000000
8005BC10:  7CBAA214   add   r5,r26,r20   r5 = 00000000   r26 = 806AF7C0   r20 = 00000000
8005BC14:  38D60001   addi   r6,r22,1   r6 = 802E4AC0   r22 = 00000000
8005BC18:  5460103A   rlwinm   r0,r3,2,0,29   r0 = 00000001   r3 = 00000000
8005BC1C:  38830001   addi   r4,r3,1    r4 = 00000000   r3 = 00000000
8005BC20:  7C650214   add   r3,r5,r0   r3 = 00000000   r5 = 806AF7C0   r0 = 00000000
8005BC24:  90C30064   stw   r6,100(r3)   r6 = 00000001   r3 = 806AF7C0   [806AF824] = 00000001
8005BC28:  909C0028   stw   r4,40(r28)   r4 = 00000001   r28 = 806AF7C0   [806AF7E8] = 00000000
8005BC2C:  3AD60001   addi   r22,r22,1   r22 = 00000000   r22 = 00000000
8005BC30:  807B1B5C   lwz   r3,7004(r27)   r3 = 806AF7C0   r27 = 8068C9C0   [8068E51C] = 00000000
8005BC34:  A09B1B62   lhz   r4,7010(r27)   r4 = 00000001   r27 = 8068C9C0   [8068E522] = 00080009
8005BC38:  7C0300D0   neg   r0,r3      r0 = 00000000   r3 = 00000000
8005BC3C:  7C001B78   or   r0,r0,r3   r0 = 00000000   r0 = 00000000   r3 = 00000000
8005BC40:  54030FFE   rlwinm   r3,r0,1,31,31   r3 = 00000000   r0 = 00000000
8005BC44:  48016439   bl   0x8007207c
|  8007207C:  2C030000   cmpwi   r3,0       r3 = 00000000
|  80072080:  4182001C   beq-   0x8007209c
|     ...   ...   ...   ...
|  8007209C:  3C60802E   lis   r3,-32722   r3 = 00000000
|  800720A0:  5480103A   rlwinm   r0,r4,2,0,29   r0 = 00000000   r4 = 00000009
|  800720A4:  38634AC0   addi   r3,r3,19136   r3 = 802E0000   r3 = 802E0000
|  800720A8:  7C630214   add   r3,r3,r0   r3 = 802E4AC0   r3 = 802E4AC0   r0 = 00000024
|  800720AC:  A0630002   lhz   r3,2(r3)   r3 = 802E4AE4   r3 = 802E4AE4   [802E4AE6] = 00D30030
|  800720B0:  4E800020   blr              LR = 8005BC48
8005BC48:  7C161800   cmpw   r22,r3     r22 = 00000001   r3 = 00000030
8005BC4C:  4180FF64   blt+   0x8005bbb0
   ...   ...   ...   ...
8005BBB0:  807B1B5C   lwz   r3,7004(r27)   r3 = 00000030   r27 = 8068C9C0   [8068E51C] = 00000000
8005BBB4:  38B60001   addi   r5,r22,1   r5 = 806AF7C0   r22 = 00000001
8005BBB8:  A09B1B62   lhz   r4,7010(r27)   r4 = 00000009   r27 = 8068C9C0   [8068E522] = 00080009
8005BBBC:  7C0300D0   neg   r0,r3      r0 = 00000024   r3 = 00000000
8005BBC0:  7C001B78   or   r0,r0,r3   r0 = 00000000   r0 = 00000000   r3 = 00000000
8005BBC4:  54030FFE   rlwinm   r3,r0,1,31,31   r3 = 00000000   r0 = 00000000
8005BBC8:  480164ED   bl   0x800720b4
|  800720B4:  2C050000   cmpwi   r5,0       r5 = 00000002
|  800720B8:  40810048   ble-   0x80072100
|  800720BC:  2C040000   cmpwi   r4,0       r4 = 00000009
|  800720C0:  40810040   ble-   0x80072100
|  800720C4:  2C030000   cmpwi   r3,0       r3 = 00000000
|  800720C8:  4182001C   beq-   0x800720e4
|     ...   ...   ...   ...
|  800720E4:  3CC0802E   lis   r6,-32722   r6 = 00000001
|  800720E8:  5487103A   rlwinm   r7,r4,2,0,29   r7 = 00000024   r4 = 00000009
|  800720EC:  38C64AC0   addi   r6,r6,19136   r6 = 802E0000   r6 = 802E0000
|  800720F0:  7C863A14   add   r4,r6,r7   r4 = 00000009   r6 = 802E4AC0   r7 = 00000024
|  800720F4:  A0040002   lhz   r0,2(r4)   r0 = 00000000   r4 = 802E4AE4   [802E4AE6] = 00D30030
|  800720F8:  7C002800   cmpw   r0,r5      r0 = 00000030   r5 = 00000002
|  800720FC:  4080000C   bge-   0x80072108
|     ...   ...   ...   ...
|  80072108:  2C030000   cmpwi   r3,0       r3 = 00000000
|  8007210C:  4182002C   beq-   0x80072138
|     ...   ...   ...   ...
|  80072138:  3C80802E   lis   r4,-32722   r4 = 802E4AE4
|  8007213C:  3C60802F   lis   r3,-32721   r3 = 00000000
|  80072140:  38844AC0   addi   r4,r4,19136   r4 = 802E0000   r4 = 802E0000
|  80072144:  7C043A2E   lhzx   r0,r4,r7   r0 = 00000030   r4 = 802E4AC0   r7 = 00000024   [802E4AE4] = 00D30030
|  80072148:  3863E960   subi   r3,r3,5792   r3 = 802F0000   r3 = 802F0000
|  8007214C:  7C850214   add   r4,r5,r0   r4 = 802E4AC0   r5 = 00000002   r0 = 000000D3
|  80072150:  3804FFFF   subi   r0,r4,1    r0 = 000000D3   r4 = 000000D5
|  80072154:  1C00003C   mulli   r0,r0,60   r0 = 000000D4   r0 = 000000D4
|  80072158:  7C630214   add   r3,r3,r0   r3 = 802EE960   r3 = 802EE960   r0 = 000031B0
|  8007215C:  4E800020   blr              LR = 8005BBCC
8005BBCC:  A0030000   lhz   r0,0(r3)   r0 = 000031B0   r3 = 802F1B10   [802F1B10] = 00000000
8005BBD0:  28000001   cmplwi   r0,1       r0 = 00000000
8005BBD4:  41810058   bgt-   0x8005bc2c
8005BBD8:  7EC02E70   srawi   r0,r22,5   r0 = 00000000   r22 = 00000001
8005BBDC:  56C3D808   rlwinm   r3,r22,27,0,4   r3 = 802F1B10   r22 = 00000001
8005BBE0:  56C50FFE   rlwinm   r5,r22,1,31,31   r5 = 00000002   r22 = 00000001
8005BBE4:  7C000194   addze   r0,r0      r0 = 00000000   r0 = 00000000
8005BBE8:  7C651850   sub   r3,r3,r5   r3 = 08000000   r3 = 08000000   r5 = 00000000
8005BBEC:  5464283E   rlwinm   r4,r3,5,0,31   r4 = 000000D5   r3 = 08000000
8005BBF0:  5400103A   rlwinm   r0,r0,2,0,29   r0 = 00000000   r0 = 00000000
8005BBF4:  7C770214   add   r3,r23,r0   r3 = 08000000   r23 = 8067D284   r0 = 00000000
8005BBF8:  7C842A14   add   r4,r4,r5   r4 = 00000001   r4 = 00000001   r5 = 00000000
8005BBFC:  4BFA6DE4   b   0x800029e0
   ...   ...   ...   ...
#code
800029E0:  2C000008   cmpwi   r0,8       r0 = 00000000
800029E4:  381FFFFE   subi   r0,r31,2   r0 = 00000000   r31 = 00000001
800029E8:  4082000C   bne-   0x800029f4
   ...   ...   ...   ...
800029F4:  540000FE   rlwinm   r0,r0,0,3,31   r0 = FFFFFFFF   r0 = FFFFFFFF
800029F8:  90030058   stw   r0,88(r3)   r0 = 1FFFFFFF   r3 = 8067D284   [8067D2DC] = 1FFFFFFF
800029FC:  48059204   b   0x8005bc00

#end code
   ...   ...   ...   ...
8005BC00:  7FE32030   slw   r3,r31,r4   r3 = 8067D284   r31 = 00000001   r4 = 00000001
8005BC04:  7C600039   and.   r0,r3,r0   r0 = 1FFFFFFF   r3 = 00000002   r0 = 1FFFFFFF
8005BC08:  41820024   beq-   0x8005bc2c
8005BC0C:  807C0028   lwz   r3,40(r28)   r3 = 00000002   r28 = 806AF7C0   [806AF7E8] = 00000001
8005BC10:  7CBAA214   add   r5,r26,r20   r5 = 00000000   r26 = 806AF7C0   r20 = 00000000
8005BC14:  38D60001   addi   r6,r22,1   r6 = 802E4AC0   r22 = 00000001
8005BC18:  5460103A   rlwinm   r0,r3,2,0,29   r0 = 00000002   r3 = 00000001
8005BC1C:  38830001   addi   r4,r3,1    r4 = 00000001   r3 = 00000001
8005BC20:  7C650214   add   r3,r5,r0   r3 = 00000001   r5 = 806AF7C0   r0 = 00000004
8005BC24:  90C30064   stw   r6,100(r3)   r6 = 00000002   r3 = 806AF7C4   [806AF828] = 00000002
8005BC28:  909C0028   stw   r4,40(r28)   r4 = 00000002   r28 = 806AF7C0   [806AF7E8] = 00000001
8005BC2C:  3AD60001   addi   r22,r22,1   r22 = 00000001   r22 = 00000001
[/spoiler]
You can pm me, I've got time for your troubles.