Przenoszenie HW

 

    W związku z licznymi pytaniami dotyczącymi przenosin HW w grach, w których z jakiś powodów jest to wymagane, zamieszczam informacje jakie otrzymałem od Delisa, który już przez to przeszedł - co powinno innym graczom pomóc w kruszeniu lodów związanych z takimi przypadkami. Sprawa była już poruszana w roku 2000 na forum pl.rec.gry.strategiczne . Jeżeli ktoś miałby jeszcze jakieś informacje na ten temat - proszę o kontakt - mail na stronie głównej.

Cichy

 

Maar: Mam pytanko - czy ktoś miał doświadczenia z przenosinami HW w ustawionym świecie.

 

O, właśnie cały ostatni weekend spędziłem na rozwiązywaniu tego problemu :) (w związku z gra Stars16)

 

Maar: Ustawienie świata nie stanowi problemu - problem rodzi się wówczas gdy próbuję poprzenosić HW - zaraz potem jest corupted. Ewentualnie jak ustawić HW jeszcze przed tworzeniem świata. Próbowałem to robić w universe creator z valhali (mapper nie daje możliwości przenosin)

 

    HW tak naprawdę nie da się przenosić metoda bezinwazyjna (nie dotykając plików innych niż *.xy). Wynika to z właśnie struktury tego pliku, i sposobu w jaki Stars! Zapamiętuje HW i inne planety. Żeby rozjaśnić problem zacznę od pliku ze wszechświatem (czyli *.xy) Składa się on z 3 części.

 

Czesc 1 - nagłówkowa

zajmuje 84 bajty, jest w niej sygnatura danej gry, zakodowana nazwa gry inne tego typu rzeczy.

 

Czesc 2 - właściwa

 najważniejsza :) po kolei mamy definicje wszystkich planet. Po 4 bajty na każda, czyli:

10 bitów - x - przesuniecie w poziomie od poprzedniej planety, czyli na przykład jeżeli tu wpiszemy 5, a ostatnia planeta miała współrzędną x=1017, to ta będzie miała 1022

12 bitów - y - przesuniecie w pionie względem PIERWSZEJ planety.

10 bitów - nazwa planety

 

Czesc 3 - kończąca

4 bajty, na 3 jest zawarta ilość graczy, znaczenia innych jeszcze nie wydedukowałem.

 

    Ok. No wiec w czym teraz leży problem. Mianowicie w dwóch rzeczach - po pierwsze trzeba zauważyć, ze planety są zapisywane w tym pliku w kolejności ich występowania od lewej do prawej (bo przesuniecie x względem ostatniej planety musi być >, lub = 0) Druga sprawa - w tym pliku nie ma zapisanego położenia HW (i bardzo dobrze, bo jest niekodowany, w przeciwieństwie do innych).

    Wynika z tego, ze gdzieś w którymś pliku (zapewne *.hst), są zapisane HW graczy, jako po prostu numer planety z pliku xy. Czyli na przykład 20 - wtedy HW gracza któregoś znajduje się na planecie zdefiniowanej od 85+(19*4) bajtu.

    Wniosek z powyższych rozważań jest prosty - na lewo od HW zawsze będzie tyle samo gwiazd nie zależnie co będziemy robić. No chyba, ze zaczniemy grzebać w *.hst.

   

    Sposobem na obejście powyższych rzeczy są 2 metody (najlepiej stosowane razem). Będzie tutaj nam pomocny Random seed występujący od wersji 2.70i (o istnieniu którego dowiedziałem się od Nitki, jak tez o pierwszej metodzie, chyba nie zastrzegasz sobie praw autorskich?:)

Pierwsza metoda: Generujemy wszechświat z jakimś Random seedem, patrzymy na położenie HW graczy, i zamieniamy ich miejscami wedle potrzeb, generując z tym samym Random seedem, ale zmieniając kolejność ras w pliku *.def. Tutaj jest jeden z problemów występujących z rasami które na starcie dostają 2 planety, ale juz mi się nie chce pisać jakie, wiec każdy może empirycznie do tego dojść.

Druga metoda: (z cyklu brute-force;) Piszemy sobie program który dla każdego random seeda zrobi co następuje:

wygeneruje wszechświat z pliku *.def

dowie się jakie są położenia HW graczy (najłatwiej to zrobić zrzucając *.map i *.pla dla każdego gracza, też automatycznie oczywiście)

Wywala wynik na ekran, ewentualnie oblicza w jakim stopniu nasza galaktyka nas zadowala.

 

    Metoda całkiem przyjemna, biorąc pod uwagę, ze wszystkich możliwych random seedow jest 65536, ale jak to mówią nie ma róży bez kolców :( . Odpalanie Stars! ma to do siebie, ze trwa okropnie długo - około 2 - 3 s. Dla 16 graczy, sprawdzenie jednego random seeda trwa ponad minutę. W sobotę generując świat dla Stars16 sprawdziłem ich "tylko" 500, ale trwało to około 9 godzin;) Swoja droga chyba pobiłem rekord ilości uruchamiania Stars! na jednym kompie - odpaliły mi się około 8500 razy:)

Ta ostatnia metoda jest jak juz mówiłem całkiem dobra i przyjemna, aczkolwiek powolna.

    Stosując ja razem z pierwsza, da się wygenerować całkiem przyjemne układy, prawie w dowolnych konfiguracjach. (tak jak to ma miejsce we wspomnianej Stars16)

 

To chyba by było na tyle. Mam nadzieje, ze te informacje w jakimś stopniu się Tobie przydadzą.

 

Aha i jeszcze jedno, o czym nie wspomniałem - oczywiście planety można bez problemu przesuwać w pionie, a także w poziomie w ograniczonym zakresie (dopóki nie będziemy chcieli zmienić kolejności planet:), i właśnie cos takiego robią te wszystkie creatory i mappery.

Jednak o wiele ciekawsze galaktyki wychodzą jeśli się napisze swój program do generowania.

 


Delis

(rav_jacz@poczta.onet.pl)

"Stars - HW"

Źródło: pl.rec.gry.strategiczne

14.03.2000