Регистрация: 07.02.2008
Возраст: 35
Сообщений: 485
Вы сказали Спасибо: 378
Поблагодарили 227 раз(а) в 130 сообщениях
Сила репутации: 1Репутация: 229 
(весьма и весьма положительная личность)
|
Дёрнул меня чёрт попробовать перенести widescreen-патч на E3 demo/бету Prince of Persia: The Sands of Time  Код функции, которая отвечает за рендеринг отличается от релизной
так выглядит дизассембл оригинальной функции из релизной версии:
release-original
004b50fc 00 00 00 00 _nop
004b5100 4c 86 82 c7 lwc1 f2,-0x79b4(gp)
004b5104 00 40 02 3c lui v0,0x4000
004b5108 00 18 82 44 mtc1 v0,f3
004b510c 58 07 85 8f lw a1,SUB_00000758(gp)
004b5110 00 08 90 44 mtc1 s0,f1
+ 004b5114 80 3f 03 3c lui v1,0x3f80
004b5118 80 41 02 3c lui v0,0x4180
004b511c 60 08 80 46 cvt.s.W f1,f1
004b5120 00 09 a4 24 addiu a0,a1,0x900
004b5124 a0 10 80 46 cvt.s.W f2,f2
004b5128 83 10 03 46 div.S f2,f2,f3
004b512c 43 08 03 46 div.S f1,f1,f3
004b5130 03 10 00 46 div.S f0,f2,f0
004b5134 00 18 83 44 mtc1 v1,f3
004b5138 00 09 a0 e4 swc1 f0,LAB_00000900(a1)
004b513c 00 00 82 44 mtc1 v0,f0
004b5140 04 09 a3 ac sw v1,0x904(a1)
+ 004b5144 83 a8 03 46 div.S f2,f21,f3
004b5148 00 00 01 46 add.S f0,f0,f1
+ 004b514c 42 03 03 46 mul.S f13,f0,f3
+ 004b5150 02 a3 03 46 mul.S f12,f20,f3
004b5154 40 97 12 0c jal FUN_004a5d00 undefined FUN_004a5d00()
004b5158 08 09 a2 e4 _swc1 f2,0x908(a1)
004b515c 58 07 84 8f lw a0,SUB_00000758(gp)
004b5160 80 93 12 0c jal FUN_004a4e00 undefined FUN_004a4e00()
004b5164 2d 28 00 00 _move a1,zero
004b5168 30 00 bf df ld ra,0x30(sp)
004b516c 04 00 b5 c7 lwc1 f21,0x4(sp)
004b5170 20 00 b1 7b lq s1,0x20(sp)
004b5174 00 00 b4 c7 lwc1 f20,0x0(sp)
004b5178 10 00 b0 7b lq s0,0x10(sp)
004b517c 08 00 e0 03 jr ra
004b5180 70 00 bd 27 _addiu sp,sp,0x70
*(float *)(iGp00000758 + 0x900) = ((float)iGpffff864c / 2.0) / fVar3;
+ *(undefined4 *)(iGp00000758 + 0x904) = 0x3f800000;
+ *(float *)(iGp00000758 + 0x908) = fVar4 / 1.0;
+ FUN_004a5d00((fVar2 / 2.0) * 1.0,((float)iVar1 / 2.0 + 16.0) * 1.0,iGp00000758 + 0x900);
FUN_004a4e00(iGp00000758,0);
return;
дизассембл релизной версии с widescreen-патчем:
release-patched
004b50fc 00 00 00 00 _nop
004b5100 4c 86 82 c7 lwc1 f2,-0x79b4(gp)
004b5104 00 40 02 3c lui v0,0x4000
004b5108 00 18 82 44 mtc1 v0,f3
004b510c 58 07 85 8f lw a1,SUB_00000758(gp)
004b5110 00 08 90 44 mtc1 s0,f1
+ 004b5114 40 3f 03 3c lui v1,0x3f40
004b5118 80 41 02 3c lui v0,0x4180
004b511c 60 08 80 46 cvt.s.W f1,f1
004b5120 00 09 a4 24 addiu a0,a1,0x900
004b5124 a0 10 80 46 cvt.s.W f2,f2
004b5128 83 10 03 46 div.S f2,f2,f3
004b512c 43 08 03 46 div.S f1,f1,f3
004b5130 03 10 00 46 div.S f0,f2,f0
004b5134 00 18 83 44 mtc1 v1,f3
004b5138 00 09 a0 e4 swc1 f0,LAB_00000900(a1)
004b513c 00 00 82 44 mtc1 v0,f0
004b5140 04 09 a3 ac sw v1,0x904(a1)
+ 004b5144 86 a8 00 46 mov.S f2,f21
004b5148 00 00 01 46 add.S f0,f0,f1
+ 004b514c 46 03 00 46 mov.S f13,f0
+ 004b5150 06 a3 00 46 mov.S f12,f20
004b5154 40 97 12 0c jal FUN_004a5d00 undefined FUN_004a5d00()
004b5158 08 09 a2 e4 _swc1 f2,0x908(a1)
004b515c 58 07 84 8f lw a0,SUB_00000758(gp)
004b5160 80 93 12 0c jal FUN_004a4e00 undefined FUN_004a4e00()
004b5164 2d 28 00 00 _move a1,zero
004b5168 30 00 bf df ld ra,0x30(sp)
004b516c 04 00 b5 c7 lwc1 f21,0x4(sp)
004b5170 20 00 b1 7b lq s1,0x20(sp)
004b5174 00 00 b4 c7 lwc1 f20,0x0(sp)
004b5178 10 00 b0 7b lq s0,0x10(sp)
004b517c 08 00 e0 03 jr ra
004b5180 70 00 bd 27 _addiu sp,sp,0x70
*(float *)(iGp00000758 + 0x900) = ((float)iGpffff864c / 2.0) / fVar3;
+ *(undefined4 *)(iGp00000758 + 0x904) = 0x3f400000;
+ *(float *)(iGp00000758 + 0x908) = fVar4;
+ FUN_004a5d00(fVar2 / 2.0,(float)iVar1 / 2.0 + 16.0,iGp00000758 + 0x900);
FUN_004a4e00(iGp00000758,0);
return;
дизассембл функции из e3 demo
e3demo/beta
004bedc0 00 00 00 00 _nop
004bedc4 a0 43 02 3c lui v0,0x43a0
004bedc8 b4 e1 86 8f lw a2,-0x1e4c(gp)
004bedcc 00 60 82 44 mtc1 v0,f12
004bedd0 6e 3f 03 3c lui v1,0x3f6e
+ 004bedd4 80 3f 05 3c lui a1,0x3f80
004bedd8 ef ee 63 34 ori v1,v1,0xeeef
004beddc 03 60 00 46 div.S f0,f12,f0
004bede0 70 43 02 3c lui v0,0x4370
004bede4 c0 0a c4 24 addiu a0,a2,0xac0
004bede8 c0 0a c0 e4 swc1 f0,0xac0(a2)
004bedec c4 0a c5 ac sw a1,0xac4(a2)
004bedf0 00 68 82 44 mtc1 v0,f13
004bedf4 00 a8 12 0c jal ChangeClipVolume__12CPerspectiveFff undefined ChangeClipVolume__12CP
004bedf8 c8 0a c3 ac _sw v1,0xac8(a2)
004bedfc b4 e1 84 8f lw a0,-0x1e4c(gp)
004bee00 10 a4 12 0c jal SetBasicGraphicMatrix__14CGraphicSystemFi undefined SetBasicGraphicMatrix_
004bee04 2d 28 00 00 _move a1,zero
004bee08 20 00 bf df ld ra,local_40(sp)
004bee0c 10 00 b1 7b lq s1,local_50(sp)
004bee10 00 00 b0 7b lq s0,0x0(sp)=>local_60
004bee14 08 00 e0 03 jr ra
004bee18 60 00 bd 27 _addiu sp,sp,0x60
iVar2 = _g_graphic_sys;
iVar1 = _g_graphic_sys + 0xac0;
*(float *)(_g_graphic_sys + 0xac0) = 320.0 / fVar3;
+ *(undefined4 *)(iVar2 + 0xac4) = 0x3f800000; //1.0 -> 0.75
*(undefined4 *)(iVar2 + 0xac8) = 0x3f6eeeef; //0.933333
ChangeClipVolume__12CPerspectiveFff(0x43a00000,0x43700000,iVar1); //320.0, 240.0
SetBasicGraphicMatrix__14CGraphicSystemFi(_g_graphic_sys,0);
return;
Пропатчив первый опкод игра запускается в 16:9, но дальность прорисовки остаётся под 4:3, к сожалению я на этом и застрял. Как патчить код дальше мне не понятно  Есть у кого-нибудь мысли на этот счёт? Заранее спасибо!
|