Własny fix ddraw.dll dla starej gry 'Wacki".

1

Witam. Odnawiam ten temat z nowymi konkretami, bo z tłumaczeniem ddraw.dll dla C&C Red Alert z C na Delphi wyszło mi nieciekawie, bo nie działa. A słabo ogarniam wskaźniki oraz interface'y, zarówno w Delphi, a tymbardziej w językach C podobnych - dlatego znalazłem inne ddfixy na sieci. Między innymi do gier "Knights and Merhants" oraz "Thief" a takze do serii "Wing Comander" i do tej ostatniej są źródla w C++. Dołaczam archiwum *.rar z dwoma podkatalogami w podkatalogu. W DDHACK_ORIGINAL_SOURCE jest oryginalne źródło w C++, a w podkatalogu DDHACK_TRANSLATED_TO_DELPHI moje kombinacje. Funkcja logf została zamieniona na wyświetlającą MessageBoxy, bo w debugowaniu dllki pod OllymDbg na przykład nie mam wprawy. Także posłużyłem się po lamersku MessageBoxami. Samą grę w wersji poprawioen przeze mnie tak aby działała byz CD czy montowania obrazu ISO wraz z paczką kodeków do wyświetlenia video w pliku wymagane_kodeki_dla_gry_wacki_uruchom.exe umieściłem na: http://olesio.eu/wacki_tc.rar I teraz tak jeżeli w kodzie mam jako komentarz te linijkę

  // bez tworzenia surface Wacki pokazuja Intro w oknie...
  //lplpDDSurface := TMyIDDrawSurface1.Create(lpDDSurfaceDesc);

to gra pokazuje początkowe intro w prawidłowej palecie barw bez ubijania explorer.exe jednak jeżeli pominiemy intro Escapem to gra się wywala na CreateSurface, a jeżeli odkomentujemy tworzenie tego obiektu - interface'u to nie pokaże się nawet intro, a ostatni MessageBox jaki ujrzymy przed wywaleniem gry to TMyIDDrawSurface1.GetPalette. Prosil bym kogoś o pomoc w napisaniu tego no właśnie można to chyba nazwać wrapperem. Ja nie mam doświadczenia w językach C podonych jak i w DirectX. Pisałem do autora CNCDDRAW ale nie odpisał, a autor tego fixa do Wing Commandera projekt porzucił i nie ma zamiaru go już rozwijać, więc nie wiem czy dało by radę liczyć na jego pomoc. Z góry dziękuję za wszelkie odpowiedzi i wskazówki od Was. A i dodam, że wiem iż oryginalny kod eksportuje więcej funkcji, ale mi zależy tylko na wrapperze na DirectDrawCreate, bo takowej używa gra "Wacki". Natomiast oryginalny dll dla Wing Commanderów wyświetla prawie ok tylko intro dla gry "Książe i Tchórz", a w samej grze już grafika wygląda jak puzzle i do tego miga, także na pewno bez przeróbek kodu się nie uda, więc liczę tutaj na pomoc osób bardziej doświadczonych ode mnie.

0

Odświeżam...

Wygooglowałem coś takiego: http://forum.team17.com/showthread.php?t=38762 że też wcześniej nie przyszlo mi do glowy aby Zasuspendować explorera kiedy aktywna jest gra zamiast go ubijac przed grą. Moje dzieło jest do pobrania z: http://olesio.eu/ddraw wraz ze źródłem. Dla "Wacków" działa w sumie ok, poza filmikami, które będą mieć "pokaszanione" kolory jeżeli przełączymy się Alt+Tab'em. W sumie można by spróbować zablokować Alt+Tab w funkcji obsługi okna albo jakimś hookiem, ale już nie kombinowałem, bo późna pora, trzeba pospać bo dzisiaj po południu trzeba iść do pracy. Jakby jednak ktoś z Was pisał kiedys wrapper do jakiejś gry i robił to też w Delphi yo prosze się podzielcie swoim kodem. Jak Moderator na forum Team17 dopuści mój post jako ostatni póki co w tym wątku pod adresem powyżej to będziecie mieli opisane jakie gry poza Wackami testowałem. Na przykład dla emulatora ZX Spectruma RealSpec i C&C RedAlert ta moja ddraw.dll się o wiele lepiej sprawdziła niż CNCDDRAW, ponieważ nie zależy mi na super rozdzielczościach, a i scroll myszką w C&CRedAlert działa prawidłowo, a nie tak szybko że nie da się grać, a także filmiki się nie przycinają, a po przełaczeniu Alt+Tabem i powrocie do okna kolory nadal są w porządku. Mam nadzieję, że moje kombinacje się komuś przydały. Po prostu jak googlowałem za wrapperem ddraw.dll ale w Delphi to od razu znalazłem ten topic, w sumie tak to jest jak się wcześniej szuka tak, że natrafia się tylko na nieuniwersalne rozwiązania w C/C++ w postaci wrapperów tylko dla konkretnych tytułów gier.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0