4 секунды загрузки, без видео заставок, тайтла гта са, полосы загрузки и, судя по исходникам, там все-лишь замена байтов в ~десятке адресов...
]]>Надеюсь, дело не в каких-нибудь main.scm и тд
Ну уж точно нет!
]]>Но вот проблема! Только что заметил, что миссия грузится только на половину при запуске (В смысле две игры запускаются, но при начале игры, у одной из них загрузка останавливается ровно на середине). Заметил только сейчас, т.к наработкой никогда не пользовался.
Как я сделал запуск двух гта:
Рокстар юзнули простой api FindWindowA, чтобы находить вторую запущенную гта и "подавлять" ее загрузку.
Вот оригинальный кусок:
007468E8 |. 6A 00 PUSH 0 ; |ManualReset = FALSE 007468EA |. 6A 00 PUSH 0 ; |pSecurity = NULL 007468EC |. FF15 2C818500 CALL DWORD PTR DS:[<&KERNEL32.CreateEven>; \CreateEventA 007468F2 |. FF15 94808500 CALL DWORD PTR DS:[<&KERNEL32.GetLastErr>; [GetLastError 007468F8 |. 3D B7000000 CMP EAX,0B7 007468FD |. 75 39 JNZ SHORT gta_sa.00746938 007468FF |. 8B0D 4070C100 MOV ECX,DWORD PTR DS:[C17040] 00746905 |. 8B15 24628D00 MOV EDX,DWORD PTR DS:[8D6224] ; gta_sa.00872ED8 0074690B |. 51 PUSH ECX ; /Title => NULL 0074690C |. 52 PUSH EDX ; |Class => "Grand theft auto San Andreas" 0074690D |. FF15 B4828500 CALL DWORD PTR DS:[<&USER32.FindWindowA>>; \FindWindowA 00746913 |. 85C0 TEST EAX,EAX 00746915 |. 74 0D JE SHORT gta_sa.00746924 00746917 |. 50 PUSH EAX ; /hWnd 00746918 |. FF15 B8828500 CALL DWORD PTR DS:[<&USER32.SetForegroun>; \SetForegroundWindow 0074691E |. B8 01000000 MOV EAX,1 00746923 |. C3 RETN 00746924 |> A1 5470C100 MOV EAX,DWORD PTR DS:[C17054] 00746929 |. 8B08 MOV ECX,DWORD PTR DS:[EAX] 0074692B |. 51 PUSH ECX ; /hWnd 0074692C |. FF15 B8828500 CALL DWORD PTR DS:[<&USER32.SetForegroun>; \SetForegroundWindow 00746932 |. B8 01000000 MOV EAX,1 00746937 |. C3 RETN 00746938 |> 33C0 XOR EAX,EAX 0074693A \. C3 RETN
Достаточно изменить JNZ SHORT gta_sa.00746938 на JMP 00746938, чтобы все было ок. Но я в первой строке куска вбил xor eax,eax, во второй retn. В результате эффект почти одинаковый.
А теперь суть:
Я не заставляю никого хватать отладчик/дизассемблер и бежать искать способы. Я обращаюсь к тем, кто исследовал гта (Особенно к Листенеру и Симану), если вы знаете про это что-нибудь, то любая информация будет полезной. Спасибо.
P.S Попутный вопрос: при сворачивании игры, довольно часто курсор автоматом прилипает к левому верхнему углу экрана (это бесит ). Так вот, как думаете, все дело в тех же api? (SetCursorPos и тд).
]]>