59 lines
2.7 KiB
Plaintext
59 lines
2.7 KiB
Plaintext
gametitle=The Adventures of Jimmy Neutron Boy Genius - Attack of the Twonkies (U)(SLUS-20887)
|
|
|
|
[Widescreen 16:9]
|
|
gsaspectratio=16:9
|
|
author=Arapapa
|
|
|
|
//Widescreen hack 16:9
|
|
|
|
//X-Fov
|
|
//c2090746 c2380346
|
|
patch=1,EE,0025c038,word,08030000 //460709c2
|
|
|
|
patch=1,EE,000c0000,word,460709c2
|
|
patch=1,EE,000c0004,word,3c013f40
|
|
patch=1,EE,000c0008,word,4481f000
|
|
patch=1,EE,000c000c,word,461e39c2
|
|
patch=1,EE,000c0010,word,0809700f
|
|
|
|
//Render fix
|
|
//003f023c 6000bfff 00008244
|
|
patch=1,EE,00158dc4,word,3c023f2b //3c023f00
|
|
|
|
[Skippable Cutscenes]
|
|
author=Souzooka
|
|
description=Press the START or X Button to skip cutscenes.
|
|
// NOTE: This works by setting the cutscene length to 0, which is only checked every second or so.
|
|
|
|
// Set up a call site to a code cave slightly above the cutscene length check
|
|
// at this point in the code we know a cutscene is running,
|
|
// and this code runs unconditonally every frame at that point
|
|
patch=0,EE,202C3008,extended,C61400A4 // lwc1 f20,0xA4(s0) ; moved up one slot into branch delay
|
|
patch=0,EE,202C300C,extended,4615A040 // add.s f01,f20,f21 ; moved up one slot
|
|
patch=0,EE,202C3010,extended,E60100A4 // swc1 f01,0xA4(s0) ; moved up one slot
|
|
patch=0,EE,202C3014,extended,0C040920 // jal z_un_00102480 ; Jump to sceDmaSendI (believed to be orphaned)
|
|
patch=0,EE,202C3018,extended,02002021 // addu a0,s0,zero ; pointer variable used in code cave
|
|
patch=0,EE,202C301C,extended,02002021 // addu a0,s0,zero ; restore spoiled a0
|
|
patch=0,EE,202C3020,extended,14400119 // bne v0,zero,0x002C3488 ; Code cave now returns branch condition
|
|
patch=0,EE,202C3024,extended,C60100A4 // lwc1 f01,0xA4(s0) ; restore spoiled f01
|
|
|
|
// Code cave (at sceDmaSendI / 0x102480)
|
|
patch=0,EE,20102480,extended,3C010049 // lui at,0x0049
|
|
patch=0,EE,20102484,extended,8024B7C2 // lb a0,-0x483E(at)
|
|
patch=0,EE,20102488,extended,30840008 // andi a0,a0,0x0008 ; check START Button
|
|
patch=0,EE,2010248C,extended,00801021 // addu v0,a0,zero
|
|
patch=0,EE,20102490,extended,8024B7C3 // lb a0,-0x483D(at)
|
|
patch=0,EE,20102494,extended,30840040 // andi a0,a0,0x0040 ; check X Button
|
|
patch=0,EE,20102498,extended,00441025 // or v0,v0,a0
|
|
patch=0,EE,2010249C,extended,54400001 // bnel v0,zero,0x001024A4
|
|
patch=0,EE,201024A0,extended,AE0000AC // sw zero,0xAC(s0) ; Set cutscene length to 0 if either were pressed. Checked every second or so.
|
|
// The below recreates a condition overwritten at the call site
|
|
patch=0,EE,201024A4,extended,C60100A4 // lwc1 f01,0xA4(s0)
|
|
patch=0,EE,201024A8,extended,C60000A8 // lwc1 f00,0xA8(s0)
|
|
patch=0,EE,201024AC,extended,46010036 // c.le.s f00,f01
|
|
patch=0,EE,201024B0,extended,00001021 // addu v0,zero,zero
|
|
patch=0,EE,201024B4,extended,45020001 // bc1fl 0x001024BC
|
|
patch=0,EE,201024B8,extended,24020001 // addiu v0,zero,0x1
|
|
patch=0,EE,201024BC,extended,03E00008 // jr ra
|
|
patch=0,EE,201024C0,extended,00000000 // nop
|