Jagged Alliance Center - Forum

Nowy temat Odpowiedz w temacie  [ Posty: 3 ] 
Autor Wiadomość
Starchris
Post : 09 mar 2012 20:10
Cytowanie selektywne Odpowiedz z cytatem
Offline
Awatar użytkownika
Pułkownik
Pułkownik
  • Posty: 2054
  • Dołączył: 25.06.2010


W związku z prośbą jaką otrzymałem na PW napiszę tutaj kilka słów na temat:

„Jak zmienić rozdzielczość w Jagged Alliance 2”.



1. Kod źródłowy

Jako przykład wezmę kod źródłowy do JA2 oraz kod źródłowy do JA2 Unfinished Business z działu Download.



2. Potrzebne programy

a.) Do edycji plików kodu źródłowego znakomity jest program Notepad ++ i to z niego będę brał numery linijek.
b.) Do zamiany odpowiednich wartości najlepiej użyć programu ReplacePl.
c.) Do wyszukiwania odpowiednich wartości w plikach kodu źródłowego niezastąpiony jest program Lookdisk.
d.) Do porównywania dwóch plików jednocześnie fantastycznie nadaje się program WinMerge.
e.) Do kompilacji niezbędny będzie Visual C++ (1998), a instrukcja jak skompilować kod źródłowy znajduje się w tym miejscu.



3. Definicja rozdzielczości

Zacznijmy od tego gdzie znajduje się główna definicja rozdzielczości. Otóż jest ona w katalogu „ja2 / build” w pliku „local.h” w linijce 25 i 26.

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480


Gdyby zmiana tych parametrów powodowała zmianę rozdzielczości całej gry to było by to po prostu cudowne. Niestety tak nie jest i zmiana tych parametrów spowoduje zmianę rozdzielczości tylko intra gry, głównego menu oraz (chyba) filmiku z atakiem na Omertę. Po przejściu dalej, gra będzie się wywalać do Windowsa ponieważ nie będzie miała zmienionych reszty wartości odpowiedzialnych za rozdzielczość np. dla ekranu taktycznego i strategicznego oraz dla laptopa.



4. Wartości odpowiedzialne za rozdzielczość

Największym błędem jaki twórcy kodu źródłowego zrobili to wpisanie wszędzie gdzie było to potrzebne wartości: 640 i 480. Dlatego teraz gdy chcemy zmienić rozdzielczość dla całej gry to musimy wpisać tam inne wartości, dla przykładu 800 i 600, 1024 i 768 lub inne. Takich miejsc w całym kodzie (nie pamiętam dokładnie) jest kilka tysięcy i wszystkie trzeba zmienić.

Na szczęście język C++ daje nam możliwość takich zmian, które spowodują, że nie będziemy musieli za każdym razem zmieniać tych kilku tysięcy wartości dla zmiany rozdzielczości na inną ale jednak trzeba będzie ten jeden raz zamienić wszystkie te kilka tysięcy wartości na inne bardziej, że tak powiem dla programisty przyjazne.



5. Poprawna zamiana

Więc co musimy zrobić aby to wykonać. Otóż wszędzie gdzie mamy wartości 640 i 480 nie wpisujemy 800 i 600 czy inne podobne wartości tylko wyrażenie dokładnie takie samo jakie jest w głównej definicji czyli odpowiednio SCREEN_WIDTH oraz SCREEN_HEIGHT (z wyjątkiem głównej definicji tam nic nie ruszamy).

Co ta zmiana nam da. Otóż dzięki tej zmianie wystarczy wpisać w głównej definicji nową rozdzielczość np. zmienić 640 i 480 na 800 i 600 i przez to od razu w całej grze mamy zmienioną rozdzielczość na nową.

Dla mało obeznanych z językiem C++ może to wydać się trochę nie zrozumiałe więc postaram się to jakoś prościej wytłumaczyć na poniższym przykładzie.


Mamy definicję w postaci koloru np. czerwonego

#define kolor czerwony

i mamy miejsca, do których ta definicja się odwołuje

…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……



Teraz, żeby zmienić kolor np. na niebieski to musimy zmienić wszystkie te wartości.

#define kolor niebieski

…..( niebieski)……
…..( niebieski)……
…..( niebieski)……
…..( niebieski)……
…..( niebieski)……
…..( niebieski)……



I teraz za każdym razem musimy wszystko zmieniać aby zmienić kolor na inny, a przypominam, że w kodzie źródłowym takich wartości dotyczących rozdzielczości jest kilka tysięcy. Dlatego lepszym sposobem jest poniższy sposób.


Mamy definicję w postaci koloru np. czerwonego

#define kolor czerwony

i mamy miejsca, do których ta definicja się odwołuje

…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……
…..( czerwony)……


Teraz żeby raz na zawsze zmienić wszystkie wartości na przyjazne programiście, to trzeba te wszystkie wartości zmienić na następujace

#define kolor czerwony

…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……



Teraz aby zmienić kolor na np. niebieski to jedyne co musimy zrobić to zmienić główną definicję.

#define kolor niebieski

…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……
…..( kolor)……


Dzięki temu zabiegowi od razu w całej grze mamy zmienioną rozdzielczość na nową.



6. Sposoby zamiany

Teraz najważniejsze pytanie w jaki sposób zmienić te kilka tysięcy wartości na przyjazne programiście w jak najkrótszym czasie. Otóż zmianę rozdzielczości w JA2 możemy wykonać na dwa sposoby.

1. Pierwszy sposób to ręczny sposób – trwa naprawdę cholernie długo ale mamy pewność, że zostało to wykonane dokładnie ale nie mamy pewności, że czegoś nie pominęliśmy.
2. Drugi sposób to automatyczny sposób – trwa dosłownie kilka minut ale nie mamy pewności, że wszystko zostało wykonane dobrze dlatego musimy posprawdzać wiele miejsc w kodzie źródłowym w celu sprawdzenia poprawności działań.

Ja w moim projekcie JA2 1.14 wykonywałem to w sposób automatyczny i trudno jest mi powiedzieć czy to jest przyczyna migotania dolnej części ekranu czy może po prostu jeszcze czegoś nie wykonałem.


a.) Sposób automatyczny

Do wykonania sposobu automatycznego będziemy potrzebowali specjalnych programów zmieniających tekst w wielu folderach i plikach na raz. Jest wiele takich programów ale ja się posłużyłem ReplacePL i to na nim pokaże jak to wykonać

Otwieramy ten program. Po otwarciu zaznaczamy opcję „zmiany w plikach” oraz tuż obok niej „+ podkatalogi”. Teraz w prawym oknie tam gdzie mamy foldery, wybieramy katalog nadrzędny (domyślnie source) dla głównych folderów, z których składa się kod źródłowy czyli ”ja2” oraz „Standard Gaming Platform”.

Teraz w polu tuż obok opcji „+ podkatalogi” wpisujemy: .c
W polu „tekst” wpisujemy: 640
a w polu „nowy tekst” wpisujemy: SCREEN_WIDTH

Gdy to wykonamy musimy kliknąć na przycisk „wykonaj” i zamienianie powinno się rozpocząć. Nie powinno ono trwać dłużej niż kilka sekund no chyba, że mamy komputer z okresu JA1 w co wątpie.

Teraz powyższą operację musimy wykonać dla:

W polu „tekst” wpisujemy: 480
a w polu „nowy tekst” wpisujemy: SCREEN_HEIGHT

Teraz jeszcze raz musimyz wykonać powyższe operacje (zarówno dla 640 jak i 480) ale tym razem musimy w polu tuż obok opcji „+ podzakładki” wpisać: .h


b.) Problemy po zamianie

Problem z taką zamianą jest taki, że jest kilkadziesiąt wartości, 640 i 480, których nie wolno zmieniać jak i również są takie wartości (640 i 480), które są częścią innych wartości np. 000640000. Po tej zamianie ta wartość będzie błędna bo będzie wyglądać tak: 000SCREEN_WIDTH0000 i to trzeba poprawić.

Teraz jak znaleźć wszystkie takie wartości. Do tego celu posłużyłem się kodem źródłowym z Jagged Alliance 2 Unfinished Business, w którym cała zamiana jest już wykonana prawidłowo (wszystkie odpowiednie wartości 640 i 480 zostały tam zamienione na SCREEN_BUFFER_WIDTH oraz na SCREEN_BUFFER_HEIGHT). Wystarczy przeszukać cały kod źródłowy do JA2 UB na występowanie wartości 640 i 480 (ja ich miałem dosłownie kilkadziesiąt więc naprawdę nie jest to dużo) i porównać je z miejscami w już zmienionym kodzie źródłowym do JA2 i poprawić je na właściwe. Do wykonania tego zadania posłużyłem się programem Lookdisk.

Po otwarciu programu klikamy na zakładkę „Search Text”, a następnie w nowo otwartym oknie wpisujesz 640 Nie zaznaczamy żadnych opcji wszystko ma być odznaczone. Klikamy na „Ok.” potem wybierasz katalog z kodem źródłowym JA2 UB i u samej góry klikamy na "Search". W polu „Filename” ma być gwiazdka. Nic więcej tam nie wpisujemy. To samo później wykonujemy dla wartości: 480

Wszelkie znalezione wartości porównujemy ze zmienionym kodem źródłowym do JA2 i poprawiamy je jeśli będzie trzeba. Do tego celu najlepiej użyć programu WinMerge.



To by było tyle tak w ogólnym skrócie. Proszę pisać śmiało gdyby jednak coś Wam nie wychodziło lub coś było dla Was niezrozumiałe.

_________________
Obrazek
Poradniki Modera


*
 
marcinl0
Post : 09 mar 2012 20:59
Cytowanie selektywne Odpowiedz z cytatem
Offline
Plutonowy
Plutonowy
  • Posty: 162
  • Dołączył: 03.03.2012


Chris, wszystko pięknie, ale czy nie dałoby się "zapodać" jakichś gotowców dla niekumatych w programowaniu - plików do JA2 i JA UB please...


*
 
Starchris
Post : 09 mar 2012 21:07
Cytowanie selektywne Odpowiedz z cytatem
Offline
Awatar użytkownika
Pułkownik
Pułkownik
  • Posty: 2054
  • Dołączył: 25.06.2010


marcinl0 pisze:
Chris, wszystko pięknie, ale czy nie dałoby się "zapodać" jakichś gotowców dla niekumatych w programowaniu - plików do JA2 i JA UB please...

Próbowałem zmienić rozdzielczość dla JA2 ale nie udało mi się i modyfikacja, która miała to zawierać na razie leży odłogiem. Natomiast do JA2 Unfinished Business gotowca masz w tym miejscu

Ewentualnie zmiana rozdzielczości dla JA2 z 640x480 na 800x600. Gotowiec jest tutaj

_________________
Obrazek
Poradniki Modera


*
 
Nowy temat Odpowiedz w temacie


cron