Hi there!
I hope i'll do this correctly, this is my first time on this forum. I also hope i'm in the right section.
(Forgive my english mistakes, i'm french :p)
Tl,dr: I need someone who knows how to -MAKE- gecko codes to enable 60Hz, no blur and widescreen support for PAL FRENCH Tales Of Symphonia. I got some part of the solution but I dont understand how to use it. Please help me!
Still here? Here comes the long version.
(every time ill say "code" is for gecko/AR codes)
It's been a few days I'm trying every possible way to get codes that enables 3 things for
Tales Of Symphonia PAL FRENCH (GQSFAF) :
1: No blur (that kinda double image thing)
2: 60Hz
3: Wide Screen 16/9
(ill call them 60Hz,Ws,Nb.)
I searched the whole internet and never came close to a solution, I only found other french people asking the same thing over and over. (And before someone ask: I REALLY TRYED, I hate to bother people asking for help, this is basically the first time in my life I ask for help in a forum.)
For no blur, there is a solution on the wiki page,
https://wiki.dolphin-emu.org/index.php?title=Tales_of_Symphonia
but I tryed every possible way to paste the following text and it never worked, maybe I'm just stupid.
"[Video]
PH_ZNear = 0.00026
PH_ZFar = 0.00026
ProjectionHack = 1"
So I tryed other things, and the quickest way seem to be with gecko codes.
Here is the list of things I discovered so far:
1: most existing PAL codes from ToS are from some genius named Ralf, I suppose he is german and therefore, worked on the GERMAN PAL ToS version.
2: EVERY CODE I found for PAL and FRENCH PAL are from him.
3: MOST of Ralf codes works for ALL PAL versions, things like max hp, infinite gold etc... Like 99% of the codes he found for GERMAN PAL, forks for ALL PAL.
4: SOME of Ralf code does ONLY work for german version: 60Hz, Wide Screen, No Blur.
5: Since every OTHER Ralf code seem to work for ALL PAL versions, everyone assumed that his 60Hz Ws Nb worked too, but they dont. Including on the
https://forums.dolphin-emu.org/Thread-gc-ar-codes-for-16-9-21-9-60hz page. There is only "PAL" with a code that does not work for french pal.
6: There is a way to convert NTSC codes into PAL ones, I learned how to dot it and it worked for all minor things (infinite gold...) but it does not work for 60Hz Nb Ws.
7: I asked Ralf directly, he said this:
{"my ToS codes are made for the German PAL version of the game only; some of the codes may work for other regions, but this wasn't intentional.
Porting the three mentioned codes to the French version requires good game hacking skills and basic PowerPC assembly knowledge. However, below is some info about the No Blur code, the 16:9 Aspect Ratio code and the 60Hz Mode code that might be useful for porting these codes to other regions.
1. No Blur code
No blur flag check function
800186D4: 9421FF60 stwu r1,-160(r1)
800186D8: 7C0802A6 mflr r0
800186DC: 900100A4 stw r0,164(r1)
800186E0: 93E1009C stw r31,156(r1)
800186E4: 880D8405 lbz r0,-31739(r13) ; no blur flag (r13 global byte variable, offset = -31739)
800186E8: 28000000 cmplwi r0,0
800186EC: 4182008C beq- 0x80018778
800186F0: 38600000 li r3,0
800186F4: 38800003 li r4,3
800186F8: 38A00000 li r5,0
800186FC: 48100261 bl 0x8011895c
80018700: C00D8414 lfs f0,-31724(r13)
80018704: FC00001E fctiwz f0,f0
80018708: D8010088 stfd f0,136(r1)
8001870C: 8061008C lwz r3,140(r1)
80018710: 4800B195 bl 0x800238a4
80018714: 880D8405 lbz r0,-31739(r13)
80018718: 28000001 cmplwi r0,1
8001871C: 40820030 bne- 0x8001874c
R1 (SP) stack pointer
R2 (RTOC) global pointer to _SDA2_BASE_ (global constants, mostly floating points & strings)
R13 global pointer to _SDA_BASE_ (global variables)
R1/R2/R13 init routine
80003324: 3C208037 lis r1,-32713
80003328: 60217460 ori r1,r1,29792
8000332C: 3C408036 lis r2,-32714
80003330: 6042BCA0 ori r2,r2,48288 ; r2(RTOC): 0x8036BCA0
80003334: 3DA08036 lis r13,-32714
80003338: 61ADAE80 ori r13,r13,44672 ; r13: 0x8036AE80
8000333C: 4E800020 blr
No blur flag address: r13 - NoBlurFlag_offset = 0x8036AE80 - 31739 = 0x80363285
=>
No Blur code
00363285 00000001 ; set no blur flag
2. 16:9 Aspect Ratio code
SDK MTXPerspective function
801006FC: 7C0802A6 mflr r0
80100700: 90010004 stw r0,4(r1)
80100704: 9421FFC0 stwu r1,-64(r1)
80100708: DBE10038 stfd f31,56(r1)
8010070C: FFE02090 fmr f31,f4
80100710: DBC10030 stfd f30,48(r1)
80100714: FFC01890 fmr f30,f3
80100718: DBA10028 stfd f29,40(r1)
8010071C: FFA01090 fmr f29,f2 ; f29: aspect ratio
80100720: 93E10024 stw r31,36(r1)
80100724: 7C7F1B78 mr r31,r3
80100728: C0A2AEF8 lfs f5,-20744(r2)
8010072C: C002AEFC lfs f0,-20740(r2)
80100730: EC250072 fmuls f1,f5,f1
80100734: EC200072 fmuls f1,f0,f1
80100738: 4802B969 bl 0x8012c0a0
8010073C: C062AEE8 lfs f3,-20760(r2)
80100740: EC5FF028 fsubs f2,f31,f30
80100744: EC1F07B2 fmuls f0,f31,f30
16:9 Aspect Ratio (Widescreen) patch
8010071C: C3A2882C lfs f29,-30676(r2) ; f29: load new aspect ratio from unused r2(RTOC) global constant
803644CC: 3FE38E39 ; new aspect ratio: 1.7777 (r2(RTOC) - 30676 = 0x803644CC, unused)
=>
16:9 Aspect Ratio (Widescreen) code
0410071C C3A2882C
043644CC 3FE38E39
3. 60Hz Mode code
SDK VIConfigure function
801064D4: 7C0802A6 mflr r0
801064D8: 3CA0802B lis r5,-32725
801064DC: 90010004 stw r0,4(r1)
801064E0: 3C808030 lis r4,-32720
801064E4: 9421FF88 stwu r1,-120(r1)
801064E8: BDC10030 stmw r14,48(r1)
801064EC: 3BE30000 addi r31,r3,0 ; r31: address of TV mode struct
801064F0: 39E50C18 addi r15,r5,3096
801064F4: 3BA4E8A8 subi r29,r4,5976
801064F8: 4BFF4D41 bl 0x800fb238
801064FC: 809F0000 lwz r4,0(r31)
80106500: 3B9D0114 addi r28,r29,276
80106504: 801D0114 lwz r0,276(r29)
80106508: 39C30000 addi r14,r3,0
8010650C: 548407BE rlwinm r4,r4,0,30,31
80106510: 7C002040 cmplw r0,r4
80106514: 41820010 beq- 0x80106524
Init TV mode function
800709D8: 9421FA50 stwu r1,-1456(r1)
...
80070A5C: 3C808020 lis r4,-32736
80070A60: 34643A40 addic. r3,r4,14912
80070A64: 41820024 beq- 0x80070a88
80070A68: 906D8670 stw r3,-31120(r13)
80070A6C: 389F0034 addi r4,r31,52
80070A70: 38A00000 li r5,0
80070A74: 38C00013 li r6,19 ; r6: y pos offset
...
80070AC0: 3C80802B lis r4,-32725
80070AC4: 38041850 addi r0,r4,6224 ; r3: address of TV mode struct (0x802B1850)
80070AC8: 900D8670 stw r0,-31120(r13) ; store address of TV mode struct (r13 global variable)
80070ACC: 48000028 b 0x80070af4
...
80070AF4: 806D8670 lwz r3,-31120(r13)
80070AF8: 389F0034 addi r4,r31,52
80070AFC: 38A00000 li r5,0
80070B00: 38C00013 li r6,19 ; r6: y pos offset
EURGB60_INT TV mode struct
802B188C: 00000014
802B1890: 028001E0 01E00028 00000280 01E00000
802B18A0: 00000001 00000606 06060606 06060606
802B18B0: 06060606 06060606 06060606 06060808
Enable 60Hz Mode patch
80000088: 3FE0802B lis r31,-32725
8000008C: 63FF188C ori r31,r31,6284 ; r31: address of new TV mode struct (0x802B188C)
80000090: 93ED8670 stw r31,-31120(r13) ; store address of new TV mode struct (r13 global variable)
80000094: 4810645C b 0x801064f0
801064EC: 4BEF9B9C b 0x80000088 ; (0x80000088/A0 = unused memory)
80070A74: 38C0000F li r6,15 ; r6: new y pos offset
80070AC4: 3804188C addi r0,r4,6284 ; r3: new address of TV mode struct (0x802B188C)
80070B00: 38C0000F li r6,15 ; r6: new y pos offset
802B1892: 01C1 ; EURGB60_INT TV mode struct patch
802B1894: 01C8 ; "
802B1898: 000F ; "
802B189C: 01C8 ; "
=>
Enable 60Hz Mode code
04000088 3FE0802B
0400008C 63FF188C
04000090 93ED8670
04000094 4810645C
04070A74 38C0000F
04070AC4 3804188C
04070B00 38C0000F
041064EC 4BEF9B9C
022B1892 000001C1
022B1894 000001C8
022B1898 0000000F
022B189C 000001C8
Ralf" }
I dont know code enough to use any of this... So I came here to ask for help, I think that what he gave me might be enough for someone who knows about gecko codes to find the solution with ease...
So... anyone?
Thanks for reading.