atarionline.pl His Dark Majesty - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorilmenit
    • CommentTime22 Jul 2009
     
    Załączam 10 z planowanych 20 map gry wraz z edytorem.
    Mapy są w oddzielnym katalogu, zaś edytor wczytuje jedynie level.ter i level.uni z aktualnego katalogu. Trzeba je więc do edycji przenieść do nadkatalogu pod powyższymi nazwami.

    Do wczytania w edytorze przygotowany jest level 4. Testowałem w nim nowy pomysl, czyli siły sprzymierzone (jednostki kierowane przez AI, ale będące po Twojej stronie) oraz rozmieszczanie jednostek przed bitwą przez gracza.
    Aby rozmieścić jednostki podczas gry trzeba wybrać je z listy na dole i umieścić na '*'. Ma się ograniczoną pulę punktów. To, ile jednostka kosztuje jeszcze muszę zbalansować.
    • 2: CommentAuthormarok
    • CommentTime23 Jul 2009
     
    W temacie kompresji map.
    ->link<-

    Mozna chyba zrezygnowac ze znakow konca linii w definicjach map.
    • 3: CommentAuthormono
    • CommentTime23 Jul 2009 zmieniony
     
    A czy inflate nie był przypadkiem dość wymagający (32k na słownik - dyskutowaliśmy o tym w wątku dotyczącym handlera dla .zip'ów ->link<- )?
    Zwykłe RLE się tu nie sprawdzi?
    • 4: CommentAuthorilmenit
    • CommentTime23 Jul 2009
     
    Znaków końca linii oczywiście nie będzie - trzymam dane aktualnie w czytelnej postaci, a będą "kompilowane" dopiero przed dołączeniem ich do pliku wykonywalnego.

    Myślę, że do kompresji spokojnie wystarczy jakiś RLE.
    Terenów jest 12 rodzajów - 251/12=21, czyli w jednym bajcie mogę zakodować 21 powtarzające się znaki.

    Jednostki zwykle nie powtarzają się w linii i jest ich na mapie maksymalnie 64. Rodzajów jednostek jest 26. Mapa to 24x20. Kodując je jako gracz/komputer (1 bit),typ (5 bitów),pozycja_x (5 bitów),pozycja_y (5 bitów) jestem w stanie zmieścić się w dokładnie dwóch bajtach na jednostkę.
    Łącznie da to 50-300 bajtów na mapę.
    • 5: CommentAuthormarok
    • CommentTime23 Jul 2009
     
    "Sam algorytm inflate potrzebuje całego bufora 32kB do kopiowania z niego powtórzonych fragmentów (głębiej nie sięga). Zrobienie krótszego bufora będzie wymagało zaaplikowania któregoś z ograniczeń: (...)
    3) ograniczenie od góry długości plików w archiwum do mniej niż 32kB."

    W tym fragmencie chodzi najwyrazniej o to, ze przy duzych plikach >32kB moze zachodzic potrzeba odwolania sie do danych w pamieci az do 32 kB wstecz. Danych, ktore zostaly juz rozpakowane, w celu ich powielenia przy biezacej (dalszej) dekompresji.
    • 6: CommentAuthormarok
    • CommentTime23 Jul 2009
     
    ilmenit: Moim zdaniem najlepszym rozwiazaniem jest inflate.
    "
    The routine uses three memory areas:
    inflate - code and initialized data (509 bytes)
    inflate_data - uninitialized data (764 bytes)
    inflate_zp - variables on page zero (10 bytes)
    "

    Spakowalem pliki level04.ter i *.uni. Wynik to 116 i 88 bajtow.
    • 7: CommentAuthorilmenit
    • CommentTime23 Jul 2009
     
    Sprawdziłem RLE - jest dla map średnio o 15% gorsze niż inflate. Przy 20 mapach uwzględniając rozmiar inflate wyjdzie właściwie na to samo. Gdyby dodać więcej map (a pomysły na ciekawe bitwy i fabułę mam), zysk byłby większy... Ale inflate potrzebuje aż 10 bajtów w page zero. Pokombinuję, czy da się użyć do tego celu zmiennych wykorzystywanych przez kompilator na page zero.
    Thnx.
    • 8: CommentAuthormono
    • CommentTime24 Jul 2009 zmieniony
     
    Moje wyniki z RLE (kompresowane pliki bez znaków EOL):
    98  level01.ter
    18 level01.uni
    210 level02.ter
    38 level02.uni
    226 level03.ter
    44 level03.uni
    208 level04.ter
    98 level04.uni
    281 level05.ter
    54 level05.uni
    248 level06.ter
    60 level06.uni
    354 level07.ter
    52 level07.uni
    326 level08.ter
    64 level08.uni
    304 level09.ter
    78 level09.uni

    łącznie 2761 zamiast 8640 (kompresja 68.04%).

    Nie wiem, jak inflate Foxa, ale zip -r9 pokazuje:
    35 level01.ter
    16 level01.uni
    36 level02.ter
    30 level02.uni
    102 level03.ter
    37 level03.uni
    100 level04.ter
    76 level04.uni
    131 level05.ter
    43 level05.uni
    126 level06.ter
    43 level06.uni
    143 level07.ter
    46 level07.uni
    132 level08.ter
    48 level08.uni
    117 level09.ter
    60 level09.uni

    łącznie 1321 zamiast 8640 (kompresja 84.71%).
    Inflate daje 2x lepszy wynik.

    Próbowaliście używać algorytmu Foxa? Z ciekawości - jakie daje wyniki?

    Kompresja odbywała się za pomocą:
    $ java -jar rlecodec.jar encode < data/level01.ter.bin > data/level01.ter.bin.rle

    dekompresja za pomocą:
    $ java -jar rlecodec.jar decode < data/level01.ter.bin.rle > data/level01.ter.bin.rle.orig

    weryfikacja za pomocą:
    $ cmp data/level01.ter.bin data/level01.ter.bin.rle.orig


    Źródła są dostępne w ->link<- .

    Edit: Ech - wystarczyło spojrzeć do przykładów MADS :) A ja głupi pisałem swojego RLE...

    Edit2: Wyniki z deflatera Fox'a pokrywają się z zipem. Jednak warto użyć deflatera jak mówił Marok :)
    • 9: CommentAuthorilmenit
    • CommentTime24 Jul 2009
     
    Mój kompresor wykorzystuje to, co napisałem powyżej - jest 12 rodzajów terenu, co pozwala uzyskać lepszą kompresję. Przykłady:
    28 level01.ter
    184 level07.ter
    149 level09.ter

    Mimo tego po przemyśleniu i tak wykorzystam kod Foxa. Zysk na samych mapach nie będzie duży w stosunku do mojego, ale inflate przyda się do kompresji innych elementów (muzyka, obrazki, teksty w grze). Wciąż jestem za tym, aby gra chodziła na małym Atari z 64KB ramu.
    • 10: CommentAuthormarok
    • CommentTime24 Jul 2009
     
    " 100 level04.ter
    76 level04.uni"

    Deflator.exe ze strony dedykowanej inflate na atari, pakuje dokladnie z takim rezultatem oba te pliki (reszty nie sprawdzalem) po usunieciu znakow EOL.

    Metoda opisana przez ilmenita do pakowania map terenow, mimo iz jest bardzo prosta, wg moich szacunkow daloby sie spakowac plik level04.ter do objetosci okolo 110 bajtow.
    • 11:
       
      CommentAuthorKaz
    • CommentTime25 Jul 2009
     
    Chcialem sie wtracic oftopicznie (chociaz w sumie nie, bo ten watek jest ogolnie o "His Dark Majesty": ta gra ma szanse byc jedna z najlepszych w swoim gatunku na Atari. Przynajmniej pod wzgledem interfejsu uzytkownika. Trzymam kciuki.
    • 12: CommentAuthorGonzo
    • CommentTime25 Jul 2009
     
    W zasadzie gry tego typu zawsze odpuszczałem sobie, ale to się zapowiada!
    • 13: CommentAuthorilmenit
    • CommentTime25 Jul 2009
     
    Specjalnie dla Kaza preview interfejsu użytkownika z małą bitwą do rozegrania :)

    Jak się steruje zdradzać nie będę, bo jestem ciekawy, czy sterowanie jest intuicyjne. Jedynie wyjaśnienia może wymagać zakończenie tury - trzeba przytrzymać fire przez kilka sekund.
    To demo ma kilka znanych mi bugów, ale za bardzo nie przeszkadzają w prezentacji.
    Jestem ciekawy Waszych komentarzy.

    Znaczenie ikonek
    1. Ikony stałe
    Tarcza - obrona (podstawowa+-modyfikator). Poniżej dodatek od terenu.
    Miecz - bazowa siła ataku (Siła jest proporcjonalna do wytrzymałości)
    Zasięg - minimalny-maksymalny
    Serduszko - wytrzymałość (popularne HP).

    2. Ikony warunkowe:
    Żółwik - jednostka po ruchu nie może atakować
    1-ka - jednostka ma pierwszeństwo w zadawaniu obrażeń. Negowane, gdy zostanie wcześniej zaatakowana.
    Wybuch - eksplodujące pociski. Jednostka nie odpowiada ogniem będąc zaatakowana.
    Czaszka - atak nekromantyczny. Zabijając zmienia w zombie.
    But - tratowanie. Jednostki konne, gdy atakują w linii prostej z conajmniej dwóch pól, mają podwójny atak. Przy zabiciu wroga zajmują jego pozycję.
  1.  
    Czy mozna/sens dodac obsluge myszki? Np takiej od amigi lub st?
    • 15:
       
      CommentAuthorKaz
    • CommentTime25 Jul 2009
     
    WujekDobraRada - moim zdaniem jest sens (jestem zwolennikiem zasady, ze im wiecej opcji tym lepiej), chociaz tutaj joyem gra sie bardzo przyjemnie.

    Ilmenit - pogralem, interfejs jest dobry, nie mialem zadnych wiekszych problemow. Oczywiscie dopiero lektura opisu wyjasnila mi tajniki pojawiajacych sie zolwi i butow :). To tak na szybko, zagram wiecej w niedziele.
    • 16: CommentAuthormarok
    • CommentTime25 Jul 2009 zmieniony
     
    Odnosnie sterowania joyem rzeczywiscie idzie to gladko, mozna zastanowic sie czy nie warto dodac ruchow na skos, chociaz to nie jest wcale konieczne. Proponowalbym jednak dodac obsluge klawiatura, np. klawiszami kursora. To jest dosc uwazam wazne.

    Co do raportu o ewentualnych bledach czy niedopracowaniach, to w obszarze podswietlania duszkami zauwazylem pewna niedoskonalosc. Podswietlane na zielonkawo pola na ktore jednostka przeciwnika moze sie przemiescic w kolejnej turze ruchu, zmieniaja kolor po nacisnieciu na jednostke wlasna, ktora wykonala juz ruch w tej turze, na kolor wlasciwy podswietleniu jednostek wlasnych.

    EDIT:
    Jednostka OGRE (+7 shield) na terenie TOWER lub WALL (+3) staje sie niezniszczalna (razem +10 shield, Damage: 0).

    EDIT(2):
    Zdarzyla sie nastepujaca sytuacja. Na pewnym etapie gry jedno z pol gry stalo sie niedostepne dla jednostek. Nie moga na nie wejsc. Nie potrafie stwierdzic w jakich okolicznosciach sie to stalo (na pewno nie grzebalem pod monitorem w emulatorze). Pole to podpisane jest jako Plain (jak byc powinno), ale moze przybrac wizerunek innego terenu. Opisalbym to jako brak odswiezenia wizerunku tego konkretnego pola gry na podstawie zawartosci mapy terenu kiedy zachodzi koniecznosc naniesienia innego fragmentu planszy na ekran.

    W razie potrzeby moge dodac do zalacznika zrzut stanu emulatora, ktory ilustruje powyzsza sytuacje.

    Drobniejsze jeszcze spostrzezenie.
    Jesli jednostka przeciwna stoi na jednej linii z jednostka ktora ma ruch, to mimo iz z rachunku wynikaloby iz mozliwe jest zajecie pola za jednostka przeciwna, a lezacego na tej wpolnej linii (obchodzac jednostke przeciwna), to jest to niemozliwe, bo pola takie nigdy nie sa podswietlone.
    Wystarczy jednak by jednostka znalazla sie jedno pole obok, aby nie zaistniala wspolna linia lewo-prawo, gora-dol, a zajecie dowolnego pola (takze w linii prostej tyle ze na skos) za jednostka przeciwna staje sie mozliwe.
    Wydaje mi sie, ze podobnych ograniczen byc nie powinno (chociaz to moze bardziej skutek poboczny algorytmu kodu niz celowe zamierzenie).
    Natomiast sama idea koniecznosci obejscia pola zajetego przez jednostke przeciwna (w odroznieniu od pol zajmowanych przez jednostki wlasne, ktore umozliwiaja przejscie po sobie) jest bardzo sluszna i na pewno nie warto jej zmianiac.

    Edit(3): dodany save z emulatora
    • 17: CommentAuthorilmenit
    • CommentTime27 Jul 2009
     
    Hej,

    a) Rzeczywiście, w podświetlaniu jest błąd. Do poprawy.
    b) Ogra da się osłabić przed atakiem. Każda kolejno atakująca jednostka zmniejsza obronność broniącego się o 1. Można to zrobić z daleka (np. łucznicy) lub otoczyć ją i zaatakować w jednej turze (symuluje to atak z flanki).
    Zmienię to jednak tak, że kolejna atakująca jednostka będzie zmniejszać obronność o 2. Będzie to znacznie bardziej "realistyczne" i będzie trzeba trzymać formację, żeby nie dać własnej jednostki otoczyć.
    c) Wiem chyba o co chodzi z niemożnością wejścia na pole - wynika to zapewne z błędu przy przekształcaniu zabitej jednostki w zombie.
    Jeżeli możesz, to załącz do posta save z emulatora.
    d) Niemożność zajęcia pola za jednostką wynika z "aproksymacjnego" wyliczania kosztu drogi. Czyni to algorytm bardo szybkim bez użycia dodatkowej pamięci. Opis tu: ->link<-
    Zauważyłem to już wcześniej, ale uznałem, że bardzo nie przeszkadza...
    • 18: CommentAuthormarok
    • CommentTime27 Jul 2009
     
    "Ogra da się osłabić przed atakiem. Każda kolejno atakująca jednostka zmniejsza obronność broniącego się o 1. Można to zrobić z daleka (np. łucznicy) lub otoczyć ją i zaatakować w jednej turze (symuluje to atak z flanki)."

    Wydaje mi sie ze w pewnej szczegolnej sytuacji poki co tak nie jest, co pewnie bez wiekszego klopotu da sie poprawic. Chodzi o jednostke OGRE na terenie dajacym +3 obrony.
    W zalaczniku dodany stan emulatora.
    • 19: CommentAuthorilmenit
    • CommentTime27 Jul 2009
     
    Rzeczywiście, jest błąd z tym ogrem...
    • 20: CommentAuthorilmenit
    • CommentTime27 Jul 2009
     
    - Ogr poprawiony. W przypadku obrażeń 0 nie była zmniejszana obronność jednostki.
    - Poprawione podświetlanie jednostki wroga. Przy okazji znalazłem inny błąd takiego podświetlania i poprawiłem :)
    - Poprawiony błąd z zombie. Flaga mapy oznaczająca, że jest na polu Twoja jednostka nie była zerowana.
    • 21: CommentAuthormarok
    • CommentTime27 Jul 2009
     
    "Przy okazji znalazłem inny błąd takiego podświetlania i poprawiłem :)"
    Ciekawe o co chodzi.
    Byc moze zle to zaobserwowalem, ale mialem wrazenie, ze jednostki sterowane przez komputer wzajemnie sie blokuja, ale tylko na etapie podswietlania pol mozliwych do zajecia w nastepnej turze, bo realnie poruszaja sie zgodnie z zasada przenikalnosci wlasnych jednostek.
    Zgaduje wiec ze moze o to chodzi.


    "Poprawiony błąd z zombie. Flaga mapy oznaczająca, że jest na polu Twoja jednostka nie była zerowana."
    Mam pytanie. Czy moj przypadek (z zalacznika postu 66) byl wlasnie spowodowany powyzszym bledem i czy byla szansa to jakos potwierdzic na podstawie podpietego zalacznika? (czy to bardziej intuicja)

    Taka drobnostka, ale podziele sie. Kiedy jednostka wlasna ma podswietlone pola dostepne do zajecia w turze, to brakuje mi mozliwosci opuszczenia tej wizualizacji poprzez nacisniecie ponowne na ta jednostke. Opuszczenie to nastepuje po nacisnieciu na wolne od jednostek pole (co jest sluszne i byc moze wystarczajace). Nie dziala tez bezposrednie przelaczenie z jednostki wlasnej na jednostke przeciwnika (aby zobaczyc rowniez jej zakres ruchu w turze po naszej; w druga strone dziala).
    Ponowne nacisniecie jednostki wlasnej przy podswietlaniu pol do zajecia w turze sluzy teraz przelaczeniu sie w tryb wyznaczenia jednostki przeciwnej do zaatakowania (o ile znajduje sie jakas w zasiegu). Ale mozna to chyba razem polaczyc.

    Skorzystalem z okazji i zajrzalem do kodu zaprezentowanego na forum atariage ktory zostal polecony analizie w zwiazku z ilustracja algorytmu wyznaczania pol w zasiegu (do podswietlenia).
    Tamten kod jest kompletny jesli chodzi o to zadanie (dla tej innej gry)? Chodzi mi o to, ze wyglada to mi jakby realizacja tego zadania odbywala sie w zaprezentowanej czesci kodu jedynie w cwiartce (od playera w prawo i dol). A reszty brakowalo. Pytam, bo to troche mnie zaciekawilo.

    Chwilowo to tyle :)
    • 22: CommentAuthorilmenit
    • CommentTime27 Jul 2009 zmieniony
     
    a) Tak, chodziło o podświetlanie i przenikanie jednostek wroga.
    b) Przypadek z posta 66 był spowodowany powyższym błędem. Nie potwierdzałem go ostatecznie na podstawie załącznika, ale przy teście udało mi się powtórzyć sytuację.
    c) Spróbuję połączyć zgodnie z sugestią przełączanie kontekstu jednostki na atak i ruch.
    d) Kod na obliczanie Field of view do drugiej gry jest kompletny. Zerknij na załączniki do tamtego posta.

    Kaz, prośba o dodanie cytowania do postów! :)

    Narysowałem w wolnej chwili część postaci występujących w planowanej fabule gry. Będą wyświetlane na dole, w polu tekstowym obok ich kwestii.



    Dla czytających - naprawdę będę potrzebował pomocy odnośnie udźwiękowienia i umuzycznienia gry ->link<-
    • 23:
       
      CommentAuthorKaz
    • CommentTime28 Jul 2009 zmieniony
     

    ilmenit:

    Kaz, prośba o dodanie cytowania do postów! :)


    Cytowac mozna za pomoca bbcode, jak widac powyzej.

    PS. Grafiki pierwsza klasa. Po co Ci w ogole grafik? :)
    PS2. A jaka jest w ogole fabula, tak z grubsza chociaz?
    • 24: CommentAuthormarok
    • CommentTime28 Jul 2009
     
    "c) Spróbuję połączyć zgodnie z sugestią przełączanie kontekstu jednostki na atak i ruch."

    Jesli mozna to ja jeszcze raz (postram sie w miare jasno) napisze jaka mam sugestie bo nie do konca jestem pewien czy mnie dobrze zrozumiales (poza tym wcale nie musze miec racji i warto zeby ktos jeszcze sie wypowiedzial).

    Po nacisnieciu fire na wlasnej jednostce podswietlaja sie mozliwe do zajecia przez nia pola w biezacej turze.
    Po ponownym nacisnieciu na ta sama jednostke mozliwe sa dwie sytuacje (jesli nic mi sie nie pomylilo):
    1) albo jednostka przechodzi w stan ataku (podswietlone na pomaranczowo bedace w zasiegu ataku jednostki przeciwnika) a warunkiem jest obecnosc w zasiegu ataku wrogiej jednostki,
    2) albo nacisniecie fire dokladnie nic nie zmienia (jest ignorowane),

    Jesli jest to ta sytuacja 1), to kolejne (juz trzecie) nacisniecie na ta sama jednostke powoduje powrot do punktu wyjscia sprzed pierwszego nacisniecia fire na jednostce.

    Moja sugestia ogranicza sie wiec tylko do tego, zeby w sytuacji 2) drugie nacisniecie fire skutkowalo jak trzecie w sytuacji 1).

    Takze nie zachodzi pelna analogia kiedy zamiarem jest przelaczenie sie z jednostki przeciwnika na jednostke wlasna (co jest mozliwe po jednym nacisnieciu fire) a podobnym zamiarem w druga strone z jednostki wlasnej na przeciwnika (co juz nie jest mozliwe tylko jednym nacisnieciem fire).

    Chodzi mi w tym wszystkim o pewna symetrycznosc zachowan programu i poniekad wygode.

    I cos czego jeszcze nie poruszalem.
    Jednostka Knights ma specjalna zdolnosc ktora przeklada sie na podwojny atak i mozliwosc zajecia pozycji jednostki zaatakowanej i zniszczonej (bardzo ciekawe rozwiazanie). Chodzi mi tylko o to, ze tym sposobem mozliwe jest wykonanie ruchu o 6 a nie 5 pol w danym kierunku w jednej turze (przy sprzyjajacych okolicznosciach). Mozna to nazwac pewnym trikiem zwiekszenia zasiegu ruchu.

    Jesli nie byloby to trudne to moze warto byloby mozliwosc podwojonego ataku z mozliwoscia zajecia pozycji wroga ograniczyc dodatkowo o zasieg do 4 pol do jednostki atakowanej (zasieg-1)?

    Natomiast moze byc juz znacznie trudniejsze dokonanie takiej zmiany w zasadzie gry, ze ta specjalna zdolnosc bedzie opcjonalna (bo moze ze wzgledow taktycznych zajecie pozycji wroga okaze sie w naszych kalkulacjach mniej korzystne).
    Ta ostatnia sugestia jest jednak najmniej wazna z tych wspominanych, a przy tym chyba klopotliwa do wykonania, wiec formuluje ja tylko zeby podzielic sie swoimi przemysleniami.
    • 25: CommentAuthorilmenit
    • CommentTime28 Jul 2009
     
    Odnośnie podświetlania zgadzam się, takie zachowanie jest bardziej intuicyjne.
    Mam za to inne pytanie - nie wiem, czy zauważyłeś, ale nie musisz przełączać jednostki w tryb ataku, żeby zaatakować wroga, który jest w zasięgu. Przy podświetlonym ruchu wystarczy na wroga kliknąć. No i teraz jest kwestia, czy podświetlić takiego wroga na żółto, czy pozostawić bez podświetlenia. Ze względu na ograniczenia sprzętu nie mogę podświetlić jednocześnie pól ruchu na żółto i jednostek w zasięgu na czerwono.
    Aktualnie nie jest podświetlany.

    Specjalny atak Knights ma symulować szarżę, czyli silny atak z wbiciem się w linię nieprzyjaciela. Zwiększony zasięg w tym przypadku uważam, że jest akceptowalny. Skoro jednostka się "rozpędzała" przez 5 pól, to niech sobie wjedzie i na 6 :)
    Myślę jednak, czy zamiast podwójnego ataku nie zwiększyć dwukrotnie obrażeń.
    • 26: CommentAuthorilmenit
    • CommentTime28 Jul 2009
     
    Odnośnie fabuły - no nie wiem, czy spojlerować... ;)
    Planowany tekst z intra (zanim go dostanie w łapy do poprawy jakiś native speaker) i teksty ze "scenopisu" do czterech pierwszych bitew.

    "The world has never been a quiet place. However the Dark Army that came ten years ago turned everything into chaos. The time of terror and sorrow become the reality for everyone. The virtue king of the land has been killed and his son has been put into prison for eternal abasement. After a years you forgot not only how to be a prince, but also the smell of a trees, heat of the sun and touch of the wind. The hope has been lost. Forever?"

    1. Escape

    click. (door to your cell open)
    squire: my prince! stand up! i came for you.
    you: who are you?
    squire: i'm your servant, my prince. we have to hurry.
    guard: stop right there! guards! the prisoner is escaping!
    hint: choose your unit with fire and move it in highlighted range.
    hint: too attack an enemy choose your unit again.
    you: the last one for now. let's go to free the other prisoners.,

    2. Freeing up prisoners

    squire: we have to go now!
    you: not so fast. we need a weapon from these guards.
    guard: you will not run away!
    hint: attack enemy with multiple units to get attack bonus.
    squire: good, these swords are handy. our friends are waiting outside.

    3. Outside the prison

    squire: look, partisans have been detected and the cavalry is going to trample them. our only hope is to hide in the forest.
    hint: terrain gives defensive bonus.
    cavalryman: trample those poachers!
    hint: cavalry is able to trample on plains.
    hint: to trample cavalry must get an impetus not turning around during movement.
    hint: archers are ranged units. they cannot attack after move nor fight in close combat.
    wounded cavalryman: do not kill me!"
    you: give me one reason why shall we let you live.
    wounded cavalryman: your majesty, my family was always loyal to the king. i did not know that you are alive! after so many years...
    wounded cavalryman: your highness, i know where the last friendly army quarter, let me take you there.

    4. The first big battle with deployment

    count mordvander: you pathethic remains of the old time. accept the new ruler or perish!
    baron julius: never, mordvander! my whole family awaits for avenge!
    squire: we are just in time to help. the battle will start in a minute.
    hint: place your units on the square fields on the west.
    hint: ballista shoots explosive missiles, however it's not very accurate.
    baron julius: prince! is that really you? me and my army, we are at your service!
    • 27: CommentAuthormarok
    • CommentTime28 Jul 2009
     
    Rzeczywiscie nie zauwazylem tej mozliwosci.
    Moim zdaniem pozostawilbym bez podswietlania, chociaz to drugie rozwiazanie tez jest dopuszczalna opcja.

    "Myślę jednak, czy zamiast podwójnego ataku nie zwiększyć dwukrotnie obrażeń."

    Moze ten specjal jesli bylby aktywny powinien dodatkowo dezaktywowac specjal first strike jednostki przeciwnej przyjmujacej atak?
    Odnosnie wersji czy zwiekszone obrazenia czy podwojny atak, to nie mam wyrobionego zdania.

    Jeszcze sobie cos przypomnialem.
    W obliczaniu obrazen w grze w zasadzie nie ma elementu losowego, jak sadze. Pewna niekonsekwencja z tej perspektywy wydaje sie wiec dopuszczenie do tego, ze jednostka typu Cannon moze trafic obok celu.
    Moim zdaniem powinno sie zdecydowac czy rozgrywka opierac sie ma na elemencie losowym czy nie. Jesli tak, to czynnik ten powinien byc powszechniejszy niz ten tylko przypadek.
    Poza tym, jesli pocisk moze trafiac obok (takze poza swoj zasieg, jak mi sie wydaje) to warto moze dodac mozliwosc celowania nie tylko w jednostke przeciwna ale tez w dowolne pole (np. celujac obok jednostki wrogiej a dalej od wlasnej niz byloby to celujac bezposrednio we wroga).
    • 28: CommentAuthorilmenit
    • CommentTime28 Jul 2009 zmieniony
     
    "Moze ten specjal jesli bylby aktywny powinien dodatkowo dezaktywowac specjal first strike jednostki przeciwnej przyjmujacej atak?"

    Nie, wtedy kawaleria byłaby zbyt potężna. Specjalnie pikinierzy mają first-strike, aby byli w stanie powstrzymać szarżują kawalerię (jak w:


    :)

    "W obliczaniu obrazen w grze w zasadzie nie ma elementu losowego, jak sadze. Pewna niekonsekwencja z tej perspektywy wydaje sie wiec dopuszczenie do tego, ze jednostka typu Cannon moze trafic obok celu."

    Wprowadzony element losowy ma na celu osłabienie jednostek balistycznych, aby odpowiadały "rzeczywistości" i służyły bardziej jako broń oblężnicza, a nie snajperska.
    Podobny efekt "rozrzutu" wprowadziłem początkowo do łuczników i kuszników, ale efekt mi się nie podobał.
    Grałeś w Medieval Total War? Tam łuczników trzeba wycofać, gdy dojdzie do walki wręcz obu armii, ponieważ grad strzał zaczyna ranić też Twoje jednostki będące w zwarciu (co jest logiczne).
    Ostatecznie jednak łucznicy i kusznicy ataku na obszar mieć nie będą - mniej realistyczne, ale większa "grywalność".
    • 29: CommentAuthormarok
    • CommentTime28 Jul 2009
     
    Widze ze masz to dobrze przemyslane.
    W gre o jaka pytasz nie gralem, ale z ocena opisanego ograniczenia zastosowania lucznikow sie zgadzam (bardziej realistyczne).

    Trzeba przyznac ze lucznicy w Twojej grze to tez potezna jednostka, ktora z drugiej (czy trzeciej) linii moze bardzo wplynac na losy rozgrywki i w zwiazku z tym warto zastanowic sie moze jeszcze nad pewnymi ograniczeniami lub efektami ubocznymi jej uzycia, piszac kolokwialnie.

    Tak jak juz pisales wielokrotnie problemem jest sensowne zbilansowanie sily poszczegolnych jednostek wzgledem pozostalych.
    • 30: CommentAuthormarok
    • CommentTime28 Jul 2009 zmieniony
     
    Wykrylem dosc powazny blad.
    Raporuje.
    Ogr uciekl do rogu planszy. Jednostka Cannon probowalem go oslabic a ta chybila (mialem wrazenie ze trafila w pole powyzej nad Ogrem, bo jakbym widzial tam malenki fragmencik wybuchu, ale moglo mi sie tylko wydac).
    Wydaje mi sie ze pocisk nawet chybiony powinien czesciowo oslabic Ogra (bo powinien pasc w pole obok, niezaleznie z ktorej strony) a tego nie zrobil, natomiast uderzyl w dwie rozrzucone na planszy moje jednostki. Zupelnie oddalone od celu.

    Na potwierdzenie zalaczam zrzut stanu emulatora.
    Powiem tylko ze w turze zdarzylem wykonac ruch dwoma jednostami Wizardem i Cannonem i tylko raz oslabic Orga (Wizardem). Mozna zauwazyc ze dwie pozostale moje jednostki, ktore juz w tej turze ruchu wykonac nie moga, zostaly zaatakowane w sposob o jakim tu pisze (pociskiem wlasnej jednostki). Maja wiec przy symbolu tarczy w statystyce po myslniku cyfre 1.
    Nie widze Knightow na planszy, ale chyba stracilem je podczas normalnej gry, tylko nie zanotowalem tego w pamieci.

    Dodane:
    Wlasnie zauwazylem dodatkowe anomalie. Pole w 3 linii od gory i 5 kolumnie od prawej jest nieodswiezane czyli mimo ze teren to Plain moze zawierac rozna postac graficzna, a jednostka nie moze wejsc na to pole. Podobny przypadek juz sie pojawil z innej najprawdopodobnie przyczyny, o czym dyskutowalismy w poprzednich watkach dyskusji.
    Dodatkowo jeszcze jedno pole (jeden z terenow House) ma ta sama charakterystyke, czyli nie mozna na nie wejsc i bywa roznie przedstawiane.
    Wydaje mi sie (jestem tego niemal pewien) ze pojawilo sie to wszystko po tej sytuacji z uzyciem jednostki Cannon i trafieniu w pole poza obszarem planszy.
    Po zakonczeniu tury przez gracza, dochodzi do jeszcze bardziej niepokojacych zjawisk. Ogr wykonuje ruch i zaraz potem, nie wiedziec czemu, dochodzi do przeskrolowania widoku na plansze w dolny jej rejon, gdzie jednostek przeciwnika nie ma, a kursora nie daje sie zauwazyc.
    Dopiero ruch joyem (tylko w lewo lub dol) przywraca widok gornego rejonu planszy, a sam kursor zmienia pozycje z rogu planszy (mimo ze mogl byc gdzie indziej pozostawiony przez gracza na koncu tury). Oprocz tego na moment powyzej wyswietlanego obszaru planszy (wtedy dolnej czesci) tam gdzie grafika sie nie pojawia w trackie gry, bardziej w lewym rogu ekranu, pojawia sie na moment fragment jakiejs grafiki, prawdopodobnie na duszkach.

    Moze opisywanie tego nie jest celowe skoro jest zalacznik, ale chcialem zwrocic uwage na wszystkie szczegoly tych anomalii.
    • 31: CommentAuthorilmenit
    • CommentTime29 Jul 2009
     
    Czyżby klasyczny błąd przepełnienia bufora :) Trafiłeś poza planszę i musiało nadpisać jakieś dane.
    Będzie do przedebugowania i poprawy.
    Załączam wersję, w której błędy, o których pisałem były poprawione.
    • 32: CommentAuthormarok
    • CommentTime29 Jul 2009
     
    Zassane. Dzieki.
    Postaram sie powtorzyc sytuacje ktora spowodowala opisywane anomalie na tej poprawionej wersji, zobaczymy czy zaistnieja jakies roznice.

    Moze tylko dopowiem, ze wydaje mi sie ze dwie jednostki Knights mi ubylo raczej w wyniku tego feralnego ostrzlu a nie podczas normalnej gry (czego wczesniej nie bylem pewien). Byly one najpewniej na polach na ktore pozniej nie mozna wejsc.

    Jesli przeciagnac gre na kolejne tury, to za kazdym razem powtarzaja sie te same efekty (scrolling w dol planszy nie wiadomo po co i bez widocznego kursora na ekranie, plus efekt na duszkach w lewym rogu).

    Oczywiscie zgadzam sie, ze teoria o nadpisaniu danych jest najbardziej prawdopodobna.
    • 33: CommentAuthormarok
    • CommentTime29 Jul 2009
     
    Proba doprowadzenia do powtorki sytuacji opisywanej przeze mnie wczoraj nie powiodla sie dotad.

    Zastalem jednak bardzo dziwne jak dla mnie zachowanie programu z czym chcialbym sie podzielic z Autorem, w celu wyjasnienia ciekawego dla mnie zjawiska.

    Mianowicie kiedu juz jednostka Ogre znalazla sie ponownie w rogu planszy, nagralem stan emulatora jako punkt wyjsciowy do eksperymentu z ostrzeliwaniem jej przez jednostke Cannon. Za kazdym razem (a bylo tego znacznie ponad 10. prob) wykonywalem nastepujace czynnosci: w kazdej turze jednostka Cannon dokonywalem ostrzalu Ogra, reszta jednostek nie byla (zwykle) poruszana i nie uczestniczyla w ataku (zawsze).
    Za kazdym razem do zniszczenia Ogra potrzebowalem 4. tur przy czym zawsze pociski ladowaly nastepujaco: 2 razy na lewo od Ogra, 1. w niego i 1. znow na lewo. Dodam ze Ogr nie ruszal sie w trakcie swojej tury ruchu.
    Mnie zadziwia ta powtarzalnosc zdarzen. Element losowy o jaki podejrzewalem jednostki typu Cannon, wyglada na to, nie pasuje do tego zjawiska, a to gdzie pada pocisk z takich jednostek, mam przypuszczenie, jest jakos przeliczane.
    Zatem pytanie do Autora, czy rzeczywiscie to gdzie spadnie pocisk z jednostki typu Cannon jest jakos wyliczane, a element losowy nie wystepuje?

    Dodaje zalacznik, gdyby ktos chcial sprawdzic.
    • 34: CommentAuthorilmenit
    • CommentTime29 Jul 2009
     
    Tu akurat nie ma nic zaskakującego. Generator liczb pseudolosowych języka C przy określonym zapisanym stanie emulatora będzie generował zawsze tę samą sekwencję, bo jest inicjowany jedynie na początku pracy programu.
    • 35: CommentAuthormarok
    • CommentTime29 Jul 2009
     
    Dziekuje za wyjasnienie.
    • 36: CommentAuthormarok
    • CommentTime1 Aug 2009
     
    Chce tylko potwierdzic, ze najnowsza dostepna wersja reaguje dokladnie tymi samymi bledami na ostrzal wrogiej jednostki w rogu planszy, jesli pocisk z Cannon trafi za plansze od jej gornej strony.
    • 37: CommentAuthorilmenit
    • CommentTime1 Aug 2009
     
    Dzięki za informację. Dodałem sprawdzenie zakresu i powinno być OK. Teraz mam całość rozgrzebaną bo:
    - dodałem mapy o zmiennej wielkości (w małych bitwach duża mapa 24x20 nie miała sensu)
    - w edytorze dodałem możliwość edycji i przeglądania wielu map
    - dodaję właśnie eksportowanie z edytora zestawu przetworzonych map wraz z jednostkami, tekstami i rysunkami twarzy, czyli budowanie kampanii. Kiedy to będzie, podstawowa wersja gry będzie ukończona :)
    Wciąż jest szansa, że zmieszczę się w planowanych 64KB...
    - Na dodanie czekają w kolejności (do wersji 128KB+): muzyka, efekty dźwiękowe, intro, outro, być może ilustracje pomiędzy niektórymi etapami w grze.

    Trudno się zmusić do pracy nad grą, kiedy za oknem TAKA pogoda ;)
    • 38:
       
      CommentAuthorKaz
    • CommentTime7 Aug 2009
     
    U mnie za oknem pada ;). Czy moglbys opublikowac nowsza wersje - mam troche czasu na testowanie.
    • 39: CommentAuthorilmenit
    • CommentTime7 Aug 2009
     
    Kod jest wciąż rozgrzebany, bo łączę wszystko w całość. Na szczęście zrobiłem już eksportowanie/importowanie map do/z binarnego, docelowego formatu. Dzięki temu wszystko zajmuje znacznie miej miejsca. Postaram się zmontować dzisiaj wersję do testów.
    • 40: CommentAuthorilmenit
    • CommentTime7 Aug 2009 zmieniony
     
    Zmontowałem wersję mającą kilka pierwszych poziomów kampanii i załączam ją do posta.



    Na razie jeszcze nie są wykorzystywane przy kwestiach twarze postaci, ale będą one wyglądały tak:



    Aha, teksty oczywiście się przeskakuje za pomocą fire.

    Po zabiciu wszystkich wrogów trzeba zakończyć turę, bo jeszcze nie zmieniłem, że dopiero wtedy są sprawdzane warunki zwycięstwa.
    • 41:
       
      CommentAuthorKaz
    • CommentTime7 Aug 2009
     
    Czy przewidujesz delikatne pulsowanie koloru ramki kursora? Mozna by uzyc roznych odcieni, zeby wygladalo to dobrze. Kursor bylby lepiej widoczny w niektorych okolicznosciach.
    • 42:
       
      CommentAuthorxeen
    • CommentTime8 Aug 2009
     
    bardzo miodne - aż żal testować przed pełną wersją:))
    nie wiem czy dobrze rozumiem, ale jak ruszę jednostką ale nie zaatakuję, to nie mogę do niej powrócić by zaatakować?
    • 43:
       
      CommentAuthorxeen
    • CommentTime9 Aug 2009
     
    nie wiem też, czy to jest tak pomyślane, że łucznicy (mimo obecności wroga w pobliżu), mimo wszystko mogą strzelać do innych jednostek oddalonych (a do bezpośrednich atakujących nie). W heroes'ach było to niemożliwe i miało jakieś tam uzasadnienie, czy w HDM idea jest nieco inna (może strzelać można, ale zmienia się efektywność)?
    • 44:
       
      CommentAuthorxeen
    • CommentTime9 Aug 2009
     
    podczas gdy dostałem łupnia, gierka zawisła w trakcie "checing ending conditions" na jednej z plansz
    załączam stan emulatora
    • 45: CommentAuthormarok
    • CommentTime9 Aug 2009
     
    xeen: wydaje mi sie ze znam odpowiedzi na powyzsze pytania, wiec moze odpowiem w zastepstwie :)

    Jesli sie ruszysz i nie zaatakujesz zanim sie przelaczysz z tej jednostki, to juz trudno, stalo sie, szansa przepadla.
    W moim odczuciu to zupelnie typowe rozwiazanie w tego typu grach.

    Odnosnie watpliwosci z lucznikami. Zauwaz ze przy charakterystyce jednoski lucznikow widnieje miedzy innymi zapis 2-4, ktory odnosi sie do zasiegu broni tej jednostki. Oznacza to, ze jednostka lucznikow z definicji (tak juz ma) atakuje jednostki wrogie jedynie w zasiegu takiej liczby pol.

    Zasieg to najkrotsza droga mozliwa do wytyczenia miedzy jednostaka lucznikow a kazdym innym polem gry bez zwracania uwagi na typ terenu wszystkich pol na tej drodze (przy ruchu jednostka ta sama droga moze zajmowac wiecej jednostek ruchu niz jednostek zasiegu jest miedzy oboma polami, mozna powiedziec ze to droga powietrzna pocisku, ktora sie nie odnosi do charakterystyki poszczegolnych pol tej drogi).

    W zalozeniu gry pola bezposredniego sasiedztwa znajduja sie jedynie w poziomie i pionie (nie na skos). Zasieg wytyczamy wlasnie przechodzac miedzy polami bezposredniego sasiedztwa najkrotsza mozliwa droga.
    • 46:
       
      CommentAuthorxeen
    • CommentTime9 Aug 2009
     
    dzięki marok,
    jak dla mnie to jest ok - tylko chciałem podpytać czy taki był zamiar jeżeli chodzi o łuczników:)
    co do ataku to można się przyzwyczaić

    właśnie chyba odkryłem nowy błąd,
    coś jest nie tak z przesuwaniem mapy
    zostają elementy z poprzedniego ekranu - załączam zrzut
    z domkiem w miejscu gdzie go nie ma (ruch mapy i zniknie)
    załączam zrzut emulatora....
    • 47:
       
      CommentAuthorxeen
    • CommentTime9 Aug 2009 zmieniony
     
    na tej samej planszy wygrałem i program znów się zawiesił
    być może tutaj kończy się wersja "demo" :D

    ponadto przy każdej turze pewnej jednostki cały czas pojawiał się tekst początkowy i trzeba było wciskać fire
    być może to też efekt zamierzony
    (objawia się to na poprzednim zrzucie emulatora).
    • 48: CommentAuthormarok
    • CommentTime9 Aug 2009 zmieniony
     
    xeen: dokladnie tak, na tej planszy konczy sie, wyglada na to, wersja demo, ktora byla zdaje sie przygotowywana troche w pospiechu.

    "ponadto przy każdej turze pewnej jednostki cały czas pojawiał się tekst początkowy i trzeba było wciskać fire"

    O ile dobrze zrozumialem problem, to chyba tak nie powinno byc (nie odnotowalem podobnego przypadku by ten sam tekst pojawial sie w kazdej nastepnej turze, tym bardziej przy wskazywaniu na ta sama jednostke). Jesli mozesz dostarczyc swiadczacy o tym stan elmulatora, to pewnie byloby to z pozytkiem dla projektu ilmenita.

    Z pierwszego zalacznika trudno mi sie o tym przekonac, a to ze gra sie zatrzymuje pewnie ma zwiazek z tym o czym Autor gry pisal tak: "Po zabiciu wszystkich wrogów trzeba zakończyć turę, bo jeszcze nie zmieniłem, że dopiero wtedy są sprawdzane warunki zwycięstwa."
    W kazdym razie prawdopodobnie zaistnienie takiej sytuacji tlumaczy sie zrozumialym niedopracowaniem tej wersji dema tworzonej na szybko (moim zdaniem to swiadome zaniechania w kodzie).

    Drugi zalacznik jest wazny wg mnie. Byloby bardzo istotne gdybys byl w stanie podac okolicznosci w skutek ktorych ten blad sie pojawil.
    Oprocz miejsca wskazanego przez Ciebie dostrzeglem jeszcze dwa (pierwsze o jedno pole w lewo i dol, drugie cztety pola w prawo). Te pola nie sa odswiezane graficznie. Moga "udawac" inne. Zadna jednostka nie moze na nie wejsc, co pozwala latwo je zlokalizowac poprzez podswietlanie pol, kiedy wkazujemy na jednostke ktora sie jeszcze nie poruszyla w turze. Problem sie juz pojawial, ale bardzo mozliwe ze tym razem przyczyna jest inna.
    Zauwazyles moze, czy na tych polach byly wczesniej jednostki ktore niespodziewanie zniklely?

    edit:
    Sprawa powtarzanego komunikatu wyjasnila sie o tyle, ze widac to w drugim zalaczniku. Moze to byc pewnego rodzaju efekt towarzyszacy glownemu bledowi z tymi nieodswiezonymi graficznie polami gry.
    • 49:
       
      CommentAuthorxeen
    • CommentTime9 Aug 2009
     
    wystarczy zakończyć turę na załączniku house.a8s
    ostatni rycerzyk (ten z wioski) przy każdym ruchu powtarza ten sam tekst w kółko co turę - tak jak na początku.

    co do replikacji tej sytuacji z domkami - powalczę, na razie to był jedyny przypadek odkryty. Replikuje się za każdym razem na tym zrzucie house.a8s. wystarczy podjechać na samą górę i zjechać na dół - być może to coś pomoże...
    • 50: CommentAuthorilmenit
    • CommentTime10 Aug 2009
     
    Miło wrócić z weekendu i zobaczyć, że gra się podoba :)
    Demo rzeczywiście było przygotowane na szybko, późno w nocy w piątek, ale chciałem pozostawić je do potestowania przez weekend. Poziomów w demie jest 5 i po nich gra kończy działanie.
    Po ruchu i opuszczeniu jednostki nie można jej ponownie wybrać. Mogę dorobić możliwość ataku, ale jak napisał Marok - aktualne zachowanie jest "standardem" w tego typu grach. Być może dodam też możliwość anulowania ruchu.

    Błędom się przyjrzę, dzięki za raporty :)

    Wiem z czego może wynikać błąd odświeżania, ale nie wiem, dlaczego tam się znalazł. Być może powstał wraz z nowym sposobem umieszczania jednostek na mapie i pojawiającym się w dalszych turach "wsparciem".

    @Kaz - pulsowanie kursora to dobry pomysł. Dodam.

    Jeszcze raz dzięki za testowanie :)