You are not logged in.
Pages: 1
Итак, давно хотел сделать запуск двух гташек (Точнее сделал).
Но вот проблема! Только что заметил, что миссия грузится только на половину при запуске (В смысле две игры запускаются, но при начале игры, у одной из них загрузка останавливается ровно на середине). Заметил только сейчас, т.к наработкой никогда не пользовался.
Как я сделал запуск двух гта:
Рокстар юзнули простой 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 и тд).
Last edited by Jack Daniel's (23-07-2011 18:43)
Offline
Offline
Надеюсь, дело не в каких-нибудь main.scm и тд
Offline
Надеюсь, дело не в каких-нибудь main.scm и тд
Ну уж точно нет!
Offline
Интересно, что вообще игра делает в момент загрузки новой игры? Просто загружает скрипты/сохранения/все то, что до этого не загрузила?
Кстати, зацените плагин fastloader:
Видео
4 секунды загрузки, без видео заставок, тайтла гта са, полосы загрузки и, судя по исходникам, там все-лишь замена байтов в ~десятке адресов...
Last edited by Jack Daniel's (07-08-2011 12:37)
Offline
@Jack Daniel's -
если есть visual studio скачай с паблика "gta_dll" и замени получившуюся дллку в папке с игрой.
после запуска игры, в папке с игрой будет файл gta_trace.log там расписано что игра загружала и какие ошибки показывала.
Offline
Во, спасибо за совет, вижуал есть.
Last edited by Jack Daniel's (08-08-2011 09:03)
Offline
Pages: 1