Stary dom



Autor: Wojciech Zientara, wydawca: Bajtek, rok: 1987.



http://www.freespace.com.au/imagehosting/images/713306358881940.gif



„Ten stary dom ma jeszcze wiele niespodzianek dla nieostrożnych. Wpisz program i wejdź do domu — jeśli się odważysz”.



„Znalazłeś się nagle w starym domu i musisz się z niego wydostać, lecz przed wyjściem musisz znaleźć hasło i 100 $. W drodze do wyjścia napotkasz wiele przeszkód jak ciemne pokoje, zamknięte drzwi lub pokoje bez podłogi. Dom ten zamieszkuje również wiele dziwnych stworów, które nie lubią, gdy zakłóca im się spokój”.



To wstęp do gry zamieszczony w „Bajtku” z kwietnia 1987 roku. Sama gra jest jedną z najciekawszych, pomimo widocznych błędów w samej jej strukturze (np. możemy zapłacić potworowi okup, chociaż nie mamy czym), i zarazem nielicznych gier drukowanych w tym czasopiśmie. Mimo tych drobnych wad gra jest wciągająca.



Na szczęście, drogi czytelniku, nie musisz wpisywać „Starego domu”, bo osobiście uczyniłem to już dawno, w 1988 roku. Nie było to proste, bo wówczas nie drukowano kodów kontrolnych a znaki z CONTROL i w inwersie drukowano w specjalnej transkrypcji. Ostatecznie po wielu korektach gra zadziałała, jak należy. Prawie zadziałała... W kodzie programu odkryłem błąd krytyczny, konkretnie w linii 770:



770 F=B^B^B:IF 1.2*SP>S AND RND(0)>0.4 THEN R=R+1



Wygląda niewinnie, jednak „linia opóźniająca” F=B^B^B zawiera pułapkę. W pewnych warunkach następuje przekroczenie dopuszczalnego zakresu liczb, przerwanie wykonywania programu i wyświetlenie straszącego gracza komunikatu o błędzie nr 11.



Można odnieść wrażenie, że redakcja Bajtka celowo umieszczała w drukowanych listingach „pluskwy”, aby przekonać się, czy ktoś te gry wklepuje – a może to tylko moje złudzenie? Tak czy owak, wprowadziłem następującą zmianę:



770 F=1^1^1:IF 1.2*SP>S AND RND(0)>0.4 THEN R=R+1



Działa tak samo, ale bez ryzyka błędu. Druga poprawka dotyczy pewnego znaleziska. Autor chyba nie mógł zdecydować się czy chodzi o łupki, czy łubki. W linii 590, 5060, 5160 pojawiają się „łupki”, ale na liście znalezisk w linii 4040 są już „łubki”. Ponieważ nie słyszałem o leczniczych właściwościach łupków, w przeciwieństwie do łubków, to konsekwentnie wprowadziłem wszędzie tę drugą nazwę. Trzecia zmiana jest już wyłącznie kosmetyczna, polegająca na usunięciu błędu ortograficznego (!) w linii 959 (zamiana litery „J” na „I” w słowie „OBIEKTOW”).



To tyle, jeśli chodzi o poprawki w oryginalnym listingu. Aha, dodałem jeszcze linie REM 1 - 3, aby jakoś odróżnić tę wersję od innych. Przy okazji: czytelnicy wątku „W krainie BASIC-a” mogą zaznajomić się w tym momencie z prawdziwie oryginalnym „Starym domem” (po uwzględnieniu powyższych, moim zdaniem niezbędnych trzech poprawek). Nigdzie w sieci nie znalazłem takiej wersji. Wszystkie zawierają zmiany lub błędy przepisywania.



Nie sposób w tym miejscu nie wspomnieć o kontrowersjach związanych z autorstwem tej gry. Pewien trop, który podsunął zresztą sam Zientara (o czym z chwilę), wskazuje, że może to być gra przepisana z jakiegoś zagranicznego pisma, być może tylko dostosowana do Atari. Jednak na planszy tytułowej „Starego domu” widnieje jako autor wyłącznie Wojciech Zientara. Czyżby orędownik przestrzegania praw autorskich podpisał swoim nazwiskiem nie swoją pracę? Nie ma na to dowodu, a słaba pamięć Zientary dotycząca okresu jego pracy w Bajtku wyjaśnieniu tej kwestii nie pomaga. Z drugiej strony przyznał się w jednym z wywiadów, że większość publikowanych w Bajtku gier pochodzi z zagranicznych wydawnictw, w tym gra „Bitwa o Anglię”, a przecież w dwóch miejscach tej gry możemy przeczytać:



http://i.imgbox.com/4gmaNX0u.gif



Wróćmy do „Starego domu”. Dopóki ktoś nie natrafi gdzieś na oryginalną wersję (jeżeli istnieje) albo nie pojawią się inne dowody, pozostańmy przy autorstwie W. Zientary.



Ci, którzy uważnie śledzą co dzieje się w tym wątku, pewnie zastanawiają się od dłuższego czasu czy osobiście gmerałem w trzewiach tej gry. Przyznaję się – tak.



Kiedyś grając, próbowałem ukończyć ją już od dwóch godzin.  Nie udawało mi się to, bo co rusz byłem przenoszony na start. I gdy tak znowu będąc przeniesionym na start, zaraz w następnym ruchu znów zostałem przeniesiony na start (!), powiedziałem: dość! Coś tym trzeba zrobić! Dodatkową motywacją były też zauważone, może nie błędy, a raczej niedociągnięcia. Oto moje zmiany:



- Linia 10: ustawienie „na sztywno” RAMTOP-u na wartość 152.

- Linie 420 – 685: zostało usunięte niepotrzebnie wielokrotnie powtarzające się polecenie POSITION 2,22.

- Linie 600 – 610. Oryginalnie hasło losowane jest tak samo, jak „wypadki losowe”, ale wyświetlane dwukrotnie rzadziej (l. 600). Czas wyświetlenia komunikatu reguluje pętla FOR-NEXT w linii 610. I ta pętla jest aktywowana również, gdy hasło nie jest wyświetlane. W efekcie pojawia się czasami sytuacja, że program przez kilka sekund „nic nie robi”. Po zmianach zatrzymanie programu następuje tylko, gdy hasło jest wyświetlane.

– Linie 680 – 685: dwukrotne zmniejszenie częstotliwości przeniesienia gracza na start.

- Linia 1090. Oryginalnie program kończył się poleceniem END. Aby ponownie zagrać, trzeba było wpisać RUN. Teraz po zakończeniu automatycznie następuje restart gry.

- Linia 2040: dodana informacja o modyfikacji (wyświetlana na ekranie). W konsekwencji część poleceń z tej linii została przeniesiona do nowej 2045.

- Linie 5000 – 5160: niewielkie zmiany w instrukcji, np. z oryginalnej wynika, że można kupować prowiant, a tak nie jest.

- Linie 29000 i następne, zmiana generatora znaków na szybki. Teraz inicjalizacja programu zajmuje 9 sekund zamiast 29.



Ponadto wprowadziłem możliwość opuszczenia gry w dowolnym momencie (z wyj. chwili rysowania planszy) klawiszem ESC. Zmiany w liniach 20 i 6000 – 6220 są tego konsekwencją.



Jeżeli ktoś ma własne wersje „Starego domu”, to proszę o wrzucenie ich tutaj.



I to by było na tyle, jak mawiał Jan Tadeusz Stanisławski, profesor mniemanologii stosowanej.