środa, 27 lutego 2013

EX3 - DosBox podstawy, partie trois

Aloha dzielni i niestrudzeni fani staroci. W trzeciej części DosBox'a 101 zarówno pogadam co nieco o pamięci jak i jej manualnym zarządzaniem w programie oraz ostro potrzepię joysticka przy jakiejś gierce. Wszelkim zgorszonym śpieszę z tłumaczeniami - spokojnie, dziś dodamy obsługę joysticka lub gamepada w DB, aby wyzwolić się od demonicznego jarzma klawiatury, zwłaszcza w platformówkach.

Zacznijmy od tej szybszej rzeczy - pamięci. Oszczędzę wam nudnego wykładu z Architektury Komputerów czy innych Mikroukładów i wszystko szybciutko wyjaśnię w żołnierskim przekazie - aplikacje DOSowe domyślnie korzystają z tzw. pamięci konwencjonalnej (pierwsze 640 kilobajtów pamięci operacyjnej komputera) oraz bloku pamięci wyższej (UMB/Upper Memory Block, obszar adresowy od 640 kilobajta do 1 megabajta pamięci, zazwyczaj używany przez najróżniejsze sterowniki). Większość gier dodatkowo używa specyfikacji pamięci poszerzonej/rozszerzonej (XMS - Extended Memory Specification oraz EMS - Expanded Memory Specification, XMS pozwala na dostęp do pamięci rozszerzonej, powyżej pierwszego megabajta. EMS umożliwia odnoszenie się do adresów pamięci poszerzonej - przestrzeni adresowej znajdującej się także powyżej pierwszego megabajta). Domyślnie w DosBox'ie wszystko jest pięknie i ładnie skonfigurowane, jednak mogą zdarzyć się przypadki, w których niezbędne będzie małe ręczne podłubanie.

Przede wszystkim należy ogarnąć, gdzie właściwie będziemy wprowadzać zmiany (można na dwa sposoby, ale o drugim za chwilę). W Menu Start, będąc na pozycji DosBox'a, odpal Edit Configuration (lub będąc w katalogu programu [domyślnie: C:\Program Files\DOSBox-0.74] uruchom plik DOSBox 0.74 Options.bat), a twym oczętom ukaże się niezwykłej urody plik konfiguracyjny (i to w Notatniku!), w którym dzisiaj nieco pogrzebiemy.

Pierwsze czego można się nauczyć to manualne ustalenie rozmiaru całkowitej pamięci dla programu. Domyślnie jest ona ustawiona na 16 Megabajtów, co w zupełności wystarczy większości gier - jednak co niektóre tytuły mogą być ciut opasłe (Blood, System Shock) i wymagać nieco więcej embeków. W celu zwiększenia pamięci dla DB odszukaj sekcję [dosbox] i zamień następującą linijkę:

memsize=wartość
na, powiedzmy

memsize=25
Zapisujemy i gotowe! Właśnie przydzieliliśmy 24 MB dla aplikacji DOSowych. Moment, zapewne teraz się zbulwersujesz, że „chwila, kolego, ja tu cyfrę 25 wpisałem, co ty mi tu za głupoty pieprzysz z 24, w ryja chcesz?” Spokojnie, jak mówiłem wcześniej - pierwszy megabajt jest zawsze używany przez pamięć konwencjonalną i UMB (to tzw. pamięć niska), dlatego też dla pamięci XMS/EMS (i aplikacji wykorzystujących te rozszerzenia) zostają pozostałe 24 megabajty. Innymi słowy - zawsze wpisuj wartość o jeden większą, niż ta, którą chcesz. Jak można było zauważyć w pliku config domyślnie DB ma ustawione 16 MB, ale dla aplikacji tak naprawdę zostaje ich 15. Ah, i jeszcze jedna kwestia - DOS nie zobaczy więcej pamięci niż 64 megabajty więc nie ma sensu wpisywać tam wartości wyższych niż owe 64.

Przydział pamięci ogarnięty, szampany wypite, gratulacje otrzymane. Co dalej? Ręczne operowanie pamięcią XMS/EMS. Domyślnie te specyfikacje są zawsze włączone, co jest jak najbardziej logiczne. Ale zaraz! Istnieją różne chytre gry (notabene Ultima VII), które strasznie wybrzydzają pod DosBox'em, twierdząc że mamy odpalone jakieś szatańskie menadżery pamięci, co może się objawić komunikatem w stylu


A to członek męski jeden! Spokojnie, i na to jest sposób - gierka z takim komunikatem po prostu niespecjalnie lubi się z mechanizmem EMS w DosBox'ie. W sekcji [dos] pliku konfiguracyjnego zamień linijkę 

ems=true
na

ems=false
Zapisz - i gitara, wyłączając specyfikację pamięci poszerzonej umożliwisz uruchomienie takowych gierek w DB. Należy także wspomnieć, że podobną rzecz możesz zrobić zarówno z pamięcią XMS i UMB (chociaż nie jestem do końca pewien, po co miałbyś to robić, ale - klient nasz pan, jak opisujemy wszystko to wszystko!). Podobnie jak w przypadku pamięci EMS wystarczy jedynie zamienić wartość z true na false:

xms=false
umb=false
I tyle. Cóż, zapewne takie skakanie z wartości true na false i na odwrót może być ciut męczące, tak wiecznie otwierać ten plik konfiguracyjny i zapisywać. Wobec tego teraz powiem o drugim sposobie, jako że tą cięższą drogę ogarnąłeś i posiadłeś mistyczną wiedzę - powyższe komendy można wpisać od razu z poziomu DosBox'a - te będą obowiązywać jednorazowo, do zamknięcia. Innymi słowy nic nie stoi na przeszkodzie by wpisać w DB


a to spokojnie zadziała. Zauważ, że użyłem tutaj także komendy mem, która wypisze na ekranie obecne wartości wszystkich aktywnych pamięci. Niewymagane to to do nauczenia - ot, tylko taka ciekawostka.

I to właściwie wszystko co powinno się wiedzieć o pamięciach DOSowych, by spokojnie sobie pograć. Ale to nie koniec jeżeli chodzi o sam tutorial - teraz, moi drodzy Skywalkerzy, nauczymy się podpinać i używać joysticka/gamepada w DosBox'ie. Włos może się zjeżyć na głowie każdemu, kto dowie się, że drążek uciechy konfigurować będziemy w 3 miejscach, jednak nie lękajcie się, albowiem całość jest niezwykle prosta. 

Pierwsze miejsce? Plik konfiguracyjny. Czym prędzej z powrotem szturmuj go i odnajdź sekcję [joystick]. Zobaczysz tam 5 różnych wartości:

  • joysticktype określa z jakiego typu joysticka/gamepada będziemy korzystać i ile ich ma być - 2 ośki (co za tym idzie - 2 joysticki), 4 ośki, a może i flightstick. Tą wartośc można domyślnie zostawić na auto, aby program sam rozpoznał podłączone przez nas urządzenie. Jeżeli jednak chcemy pograć z kimś to należy tutaj wpisać 2axis, aby program mógł rozpoznać oba joysticki
  • timed ustala czasowe przerwy dla używanych osi joysticka/gamepada - domyślnie jest włączona, ale należy ją ustawić na false, gdy zauważymy w grze drgania/delikatne ruchy bohatera, nawet gdy w ogóle nie dotykamy żadnej gałki analogowej/przycisku
  • autofire chyba nie wymaga komentarza - znane jeszcze z nieśmiertelnych Pegazusów emulowanie ciągłego, gwałtownego wciskania przycisku, kiedy ten jest naciśnięty i przytrzymany
  • swap34 (nie mylić z zasadą 34) podmienia 3 oś urządzenia z 4. Teoretycznie jest to przydatne dla niektórych typów joysticków (niestety, widać nie dla mojego), domyślnie false
  • buttonwrap pozwala na opakowanie ilości przycisków na joysticku/gamepadzie z korespondującymi przyciskami emulowanymi, domyślnie na true
Nie powinno wam to przysporzyć żadnych siwych włosów na głowie, jednak aby być wybitnie user friendly - oto moje ustawienia dla bezprzewodowego gamepada z Xbox'a 360 (grywam na nim na kompie, używając odbiornika):

joysticktype=4axis
timed=false
autofire=false
swap34=false
buttonwrap=true
Wszystko jak najbardziej śmiga, używając powyższych ustawień.

Ok, pierwsze koty za płoty, plik konfiguracyjny gotowy. Jak sprawdzić, czy póki co wszystko jest ok? Zerknij na konsolę programu po uruchomieniu, powinno tam figurować twoje urządzenie:


Teraz uwaga, bo będą największe jaja: w kolejnym kroku należy zdefiniować zachowanie joysticka w pliku mapującym (tzw. mapperze). O Chryste, cóż to za diabelskie rzeczy trzeba zrobić? Całkiem proste, wbrew pozorom. Mając odpalonego DosBox'a naciśnij Control i F1 a ujrzysz piękną tablicę z rozkładem klawiszy. Nas interesuje obszar zakreślony na czerwono, o nazwach „Axis 1/2” oraz „Axis 3/4”. To tam właśnie należy ustalić zachowania gałek analogowych/d-padów/przycisków:


A robi się to tak: klikasz na wybraną pozycję na tablicy, a wtedy na dole pojawią się dodatkowe przyciski oraz informacje:


Aby połączyć zdarzenie z wartością naciśnij przycisk Add i wtedy wykonaj odpowiednią akcję za pomocą joysticka/gamepada. Jeżeli walnięty został burak - naciśnij Del i spróbuj ponownie, a jeśli wszystko poszło ok - kliknij Save. I tak z każdym zdarzeniem po kolei. I już śpieszę z wyjaśnieniami poszczególnych. Fakt, będzie nieco łopatologicznie i podstawówkowo, ale ten tutorial jest dla wszystkich, także tych niekoniecznie obytych z terminologią joysticków/gamepadów. Dla typu 2axis te pola będą nazwane odpowiednio Joystick 1 i Joystick 2.

Axis 1/2:
  • Y- to ruch w górę, porusz gałką analogową w górę lub wciśnij górę na d-padzie
  • Y+ to ruch w dół, porusz gałką analogową w dół lub wciśnij dół na d-padzie
  • X- to ruch w lewo, porusz gałką analogową w lewo lub wciśnij lewo na d-padzie
  • X+ to ruch w prawo, porusz gałką analogową w prawo lub wciśnij prawo na d-padzie 
  • 1 to przycisk 0 (zazwyczaj główny), wciśnij przycisk na urządzeniu, który chcesz przypisać do przycisku 0
  • 2 to przycisk 1, wciśnij wciśnij przycisk na urządzeniu, który chcesz przypisać do przycisku 1
 Axis 3/4:
(Uwaga, achtung, wnimanie! Jeżeli wpisałeś typ joysticka 2axis w pliku konfiguracyjnym, to ten blok służy do edycji zachowania DRUGIEGO joysticka! Wszystkie ruchy osi X/Y jak i oba przyciski muszą być skonfigurowane na drugim urządzeniu!)
  • 3 to przycisk 2, wciśnij przycisk na urządzeniu, który chcesz przypisać do przycisku 2
  • 4 to przycisk 3,  wciśnij przycisk na urządzeniu, który chcesz przypisać do przycisku 3
(to powyżej to tylko jeżeli korzystasz z typu 4axis. Możesz dodatkowo tutaj także zdefiniować drugą oś, podobnie jak tą pierwszą, jednak to nie jest aż tak wymagane, gdyż większość gier i tak z niej nie korzystała [chyba że chcesz np. pograć w Quake'a na gamepadzie])

Wszystkie informacje można wyczytać z linijek Event i Bind, po naciśnięciu na dane zdarzenie, aby mieć pewność, że wszystko jest ok. Powiadasz że jest ok i jesteś tego pewien? Super. Zatem kliknij Save na samym dole okna mappera (ten główny Save z pierwszego screena, kiedy przy linijce Event widnieje napis „none”!) i odpal swoją gierę. Teraz nie pozostaje nic innego jak kalibracja urządzenia w samej grze. Zazwyczaj można ją znaleźć w opcjach samej gry, widnieje jako „control methods”, „joystick”, „calibrate joystick” czy w ogóle „choose input method/device”. Rzadziej wybór joysticka odbywa się przez program konfiguracyjny (tak, ten sam co wybór karty dźwiękowej!). Cóż, wszystko to zależy od samej gry. Poniżej przykładowa kalibracja:


Jeżeli w tym miejscu program odczytuje zmiany na osiach X/Y jak i reaguje na naciśnięcie przycisku - gratulacje, urządzenie jest gotowe do gry. DosBox zapamiętuje wszelkie ustawienia dla naszego joysticka/gamepada, jednak jeżeli chcesz użyć innego urządzenia to musisz je skonfigurować w mapperze i grze od nowa - ustawienia są zapisywane wyłącznie dla tego jednego, unikatowego kontrolera. 

Z nieco bardziej zaawansowanych i ambitnych rzeczy można wspomnieć, że joystick/gamepad tak naprawdę w mapperze można podpiąć i pod normalne klawisze na klawiaturze - różne bindy pod eventy można podpinać także na klawiaturce na górze programu mapującego - zatem nic nie stoi na przeszkodzie, by np. przypisać naciśnięcie przycisku A na padzie jako naciśnięcie spacji czy w ogóle gałkę analogową jako klawisze kursora - to także zadziała i będzie reagować. Innymi słowy - można grać na joysticku/gamepadzie w gry, które domyślnie nie wspierają obsługi takiego kontrolera. Co prawda rezultat może być różny i niekoniecznie cieszyć, ale takowa opcja istnieje.

Rany, ale się rozpisałem, szacun, jeżeli tutaj dotarłeś nieznudzony i w jednym kawałku. Oto udało się przebrnąć przez trzecią część kursu DosBox'a. I owszem - będzie kolejna. W następnej już w ogóle wskoczymy na wyższy poziom wtajemniczenia, pisząc o spreparowanych skrótach do uruchamiania gier jak i emulacji karty Gravis Ultrasound, w celu uzyskania najwyższej jakości dźwięku w programie. Do napisania zatem!

Brak komentarzy:

Prześlij komentarz

Komentarze, sugestie, przemyślenia? Wal śmiało!