Skocz do zawartości

[Delphi] Warhammer - prosta ale rozbudowana gra...


Spellsinger

Polecane posty

Wybaczcie jeśli będzie trochę chaotycznie napisane, ale nie wiedziałem jak to lepiej wyjaśnić...

 

A, i żeby nie było - piszę w Delphi ;-)

 

Sprawa jest taka: wskrzesiłem swój stary projekt zrobienia gry rpg opartej na Warhammer Fantasy Roleplay (mechanika + świat = właściwie wszystko). Jestem raczej początkującym programistą, pisanie w Delphi (wcześniej w TP) było tylko hobby bo i tak studiuję angielski i nie mam czasu ;-) Wracam do gry, projekt jest realizacją od zera starego pomysłu, poprzednia wersja poszła do binarnego nieba jak mi dysk sformatowało :-/

Tyle tytułem wstępu chyba wystarczy, teraz założenia programu:

 

* cRPG - cechy postaci i świat z WFRP, ma to być właściwie przełożenie Warmłotka na kompa, tak dla mojej i kumpli wygody żeby można było sobie pograć samemu z kompem przygody, na które nie zawsze jest czas na sesji... czytaj, zdobyć dużo doświadczenia, "podpakować" drużynę, w ogóle grać drużyną marzeń bez graczy którzy by ją psuli :-P Będzie więc zdobywanie punktów doświadczenia za wykonywanie zadań i prawdopodobnie także za zabijanie potworków (jeszcze się waham). Bardziej będzie przypominać pomysłem Icewind Dale niż np. Baldur's Gate czy Planescape'a - na początku tworzymy drużynę maksymalnie 6 bohaterów i jazda, nie ma doczepiania i odłączania postaci w trakcie gry. Mają natomiast być questy poboczne w dużych ilościach, ale to już samo dopracowywanie fabuły będzie.

 

* Gra tekstowa z oprawą graficzną - zbudowane zwyczajnie jako aplikacja windowsowa. Nie czuję się na siłach, aby tworzyć wszystko od zera, engine graficzny, fizykę gry i całą resztę - dlatego postanowiłem z tego zrezygnować. Na ekranie głównym gry mamy więc: z prawej strony umieszczone pionowo portrety bohaterów (dzięki którym można się przełączać między nimi - w wyborze ekwipunku itp.). Z lewej, także pionowo, przyciski gry takie jak: gra, mapa, dziennik, ekwipunek, opcje itp (vel gry na Infinity Engine). W środku mamy miejsce na obrazek (panoramiczny obrazek ukazujący aktualne miejsce gry: wnętrze karczmy, las nocą, miasto, trakt, ważny BN itp) a pod spodem spory ekran "fabularny" - RichEdit na którym wyświetlane są wszelkie opisy miejsc, tu przeprowadza się dialogi - niżej mamy przyciski "dalej" i przyciski wyboru opcji (np. którą opcję dialogową wybieramy lub gdzie chcemy iść dalej) od 1 do 7. No i button czyszczenia ekranu ;-). W trybie walki ten ekran jest zastępowany przez inny, podobny: tu mamy RichEdit gdzie wyświetlany jest przebieg walki (kto kogo trafił, za ile i czy w ogóle skutecznie itp), portrety przeciwników wraz z wskaźnikami życia i przyciski wyboru trybu walki: gdy przychodzi runda któregoś bohatera wybieramy czy atakujemy normalnie, agresywnie, defensywnie, tak czy siak i wtedy walka leci automatycznie dalej.

 

* Fabuła paragrafowa, modułowa - sama gra to zbiór procedur odpowiadających za tworzenie przedmiotów, potworków, kopiowania ich do odpowiednich tablic, przeprowadzania walki, wyświetlania dialogów... waśnie, a skąd te dialogi i cała fabuła? Tu sercem jest plik tekstowy z zapisaną w nim przygodą/kampanią. Zapisany musi być w odpowiedni sposób tak, aby program po wskazaniu odpowiedniego pliku szedł dalej już sam. jest to więc chyba prosty kompilator, który przekłada to z pliku na właściwą grę. Mamy tam deklaracje zdarzeń w {}, teksty w [] są wyświetlane dla gracza na ekranie fabularnym, do tego procedury jak GOTO#zdarzenie (odsyła do innego zdarzenia w pliku - de facto odpowiada za akcję w grze), OPTIONS#zdarzenie1#zdarzenie2#zdarzenie3 (jak GOTO ale idzie tam gdzie wybierze gracz), COMBAT#enemy1#enemy2#enemy3 (uruchamia tryb walki z zadeklarowanymi przeciwnikami), TEST#cecha#zdarzenie1#zdarzenie2 (testuje cechę u któregoś z bohaterów i wysyła do zdarzenie1 albo do zdarzenie2 jeśli test nie był zdany) itp itd. Jedno zdarzenie nie jest więc miejscem konkretnym, ale jakby sytuacją, która może się powtórzyć lub nie. Jak w starych grach paragrafowych - chcesz to, idź do paragrafu takiego, wybierasz tamto - przeczytaj paragraf ten i tamten... Przed tworzeniem fabuły przydałyby się rysować sobie drzewka-schematy fabuły i według tego piszemy paragrafy. Przykładem mogą być odwiedziny w jakimś mieście: najpierw mamy opis miasta ogólny (zdarzenie#1), a potem dajemy graczowi wybór (#2): idziesz do karczmy (#3) na targ (#4) na arenę walk (#5) czy opuszczasz miasto? (#6). Przy czym po wykonaniu zdarzenia 3, 4 i 5 wracalibyśmy do zdarzenia 2 - gracz może krążyć w tej pętli w nieskończoność. Mam nadzieję, że zrozumieliście mniej więcej o co mi biega...

 

* Wykonanie: aplikacja w Delphi - chcę jednak zminimalizować "Windowsowy" wygląd - zamiast buttonów są/będą Image odpowiednie, okna tekstowe RichEdit (głównie), ekwipunek to ListBox (można drag&drop przedmioty z ekwipunku na aktywną broń, ubraną zbroję itp). Robię wszystko na jednej formie korzystając z dwóch głównych PageControli (z ukrytymi nagłówkami TabSheet) - GamePageControl na którym mamy ekrany ekwipunku, gry, walki, magii, dziennika, handlu, mapy i całej reszty. Przyciski gry, umieszczone na dole okno podpowiedzi i portret bohaterów zamieszczone są obok, na na samym GamePageControl. Wszystko to razem zaś jest umieszczone na głównym MainPageControl (zajmującym cały ekran) - na jednej stronie. Pozostałe to ekran powitalny gry, ekran ładowania (o ile będzie używany), główne meny gry i może coś jeszcze. Pytanie, czy to będzie działać sprawnie? Jakoś wolę tak robić niż wszystko na osobnych formach, ale może ma to jakieś wady z których nie zdaję sobie sprawy?

 

* Save & Load - myślę, że nie będzie to trudne, wystarczy zapisać w pliku tekstowym (tylko z takimi sobie radzę, nie ćwiczyłem nigdy na innych więc nie chcę sobie życia komplikować) aktualnego stanu wszystkich postaci, ich ekwipunku itd, nazwy aktualnego zdarzenia w którym jesteśmy (logiczne - aby po wczytaniu przejść od razu do niego zamiast grać od początku) i stanem kilku globalnych zmiennych fabularnych. Co to jest to ostatnie? Wymyśliłem, że fabuła na paragrafach będzie dobra, ale także w niej czasem mogą się przydać jakieś czynniki zmienne, np. po jakiejś rozmowie coś się odblokowuje i mamy w jakimś miejscu teraz dodatkową opcję wyboru dostępną (wcześniej niewidoczną) lub po porostu żeby nie można było zabijać bossów po parę razy - gdy takiego ubijemy zmieni się zmienna i od tej pory wracając w tamto miejsce nie będziemy nikogo spotykać już a program odeśle nas dalej... Wymyśliłem zadeklarowanie kilku-kilkunastu zmiennych jak np. trigger1, trigger2, trigger3: shortint; które na początku gry są zerowane, ale w trakcie ich stan się zmienia i jest to właśnie zapisywane w zapisywania gry a odczytywane w trakcie jej wczytywania. (też chyba logiczne :-P). Programowo te zmienne nic właściwie nie znaczą - sens nadaje im dopiero sam twórca przygody i w każdej przygodzie, kampanii mogą znaczyć być używane do czego innego.

 

Acha, ta mapa którą wspominam to taka ogólna jak była w Baldur's Gate na przykład - odkrywa sie wraz z eksploracją świata przez gracza i pozwala na szybsze (w czasie rzeczywistym) podróżowanie z miejsca do miejsca.

 

Zmienne rysunki - oprócz image'ów przycisków i ogólnego wyglądu gry mamy jeszcze obrazki pokazywane zależnie od wyboru gracza - np. jako tło w konkretnych zdarzeniach; a także portrety bohaterów. Zdecydowałem się zrobić wszystkie odpowiednie bitmapy i wrzucić je w jeden plik .RES skompilowany do samego programu, także odczytywanie i wyświetlanie nie powinno nastręczać programowi problemów - odpowiednia nazwa wyświetli odpowiedni obrazek i tyle.

 

Z założenia piszę główną przygodę lub kampanię gry a na umieszczenie wszystkiego w pliku tekstowym zdecydowałem się z paru powodów: po pierwsze, mogę potem wprowadzić ewentualne poprawki modyfikując sam plik przygody w trybie tekstowym - nie muszę od nowa kompilować działającego programu (jak już będzie gotowy oczywiście). Po drugie, mógłbym zbudować prosty edytor skryptów przygody dla własnej wygody w modyfikacji... ale mógłbym go wtedy też bez problemów udostępnić wraz z samym programem znajomym i wszystkim chętnym - dzięki temu każdy mógłby wysilić się na napisanie jakiejś własnej przygody, kampanii i dodaniu jej do gry. Uczyniłoby to program bardziej żywotnym, to coś jak edytor map w grach rts, może nawet więcej ;-)

 

GOTOWE DO TEJ PORY jest:

programik, który wczytuje sobie jednego ustalonego wcześniej bohatera i plik skryptu przygody i jedziemy: sama przygoda do dosłownie demo na paręnaście linijek, pozwala pokluczyć w po wydarzeniach, jeden z wyborów uruchamia tryb walki gdzie nasz bohater masakruje trzy gobliny. Brak ekwipunku, mapy i całej reszty - niedawno zacząłem, ale krok po kroku...

 

Acha, jeśli by się znalazł ktoś zainteresowany jakimkolwiek rozwojem projektu, czy to kodzeniem czy grafiką - śmiało, zapraszam. Nie oferuję nic oprócz współuczestnictwa w projekcie bo nie mam i nie zamierzam przeznaczać pieniędzy na ten cel - także wszelkie oferty typu "wykonam oprawę graficzną tanio" będą albo odrzucane, albo po prostu ignorowane. Tak po prawdzie nikogo nie szukam, myślę, że odpowiednim nakładem pracy, inwencji i dobrych chęci albo projekt skończę albo przynajmniej dojdę gdzieś daleko :-P No ale jakby ktoś się konkretnie "napalił" to jestem otwarty na wszystko, wystarczą choćby sugestie i pomysły.

 

No to chyba tyle, jak mi się coś jeszcze przypomni to napiszę... tymczasem czekam na opinie i komentarze szanownych forumowiczów dotyczące dowolnych aspektów projektu... po to tego posta zamieszczam ;-) Chętnie odpowiem na wszelkie pytania. Pozdrawiam wszystkich ;-)

 

 

/EDIT dobra KKKas, dziękuję za komentarz treściwy :]

Link do komentarza
Udostępnij na innych stronach

Tak po prawdzie nikogo nie szukam, myślę, że odpowiednim nakładem pracy, inwencji i dobrych chęci albo projekt skończę albo przynajmniej dojdę gdzieś daleko :-P

 

Moim zdaniem założenia są zbyt rozległe, zrobienie cRPG w pojedynkę to są raczej lata pracy przy bardzo dużej determinacji (oczywiście mówię o zrobieniu czegoś co chcieli by oglądać inni).

Skąd ja to znam :P

 

Czytałeś może artykuły z Warsztatu w sekcji "Tworzenie gier"? Warto się z tym zapoznać.

http://www.gamedev.pl/articles.php

 

Zbyt dużo miejsca poświęciłeś na opis małoznacznych szczegółów, do zaprezentowania których wystarczyłby 1 rzut oka na screen :D

 

Pozdrawiam.

Link do komentarza
Udostępnij na innych stronach

TSr, czytałem, znalazłem ten link gdzieś na forum jakiś czas temu już ;-)

 

Ja tam mam zamiar w wakacje na tym posiedzieć... zwróć uwagę, że sporo pracy mam jakby już zrobione, gdyż czerpię z gotowego systemu: świat, cechy, mechanika - po prostu gry crpg opartej na Warhu nie było, powstaje tylko wersja mmorpg, a ja bym chciał w coś takiego zagrać... i postanowiłem sobie napisać. Zasadniczo w prostej formie to już działa, wystarczy przygodę bardziej sensowną opisać bo mam na razie tylko jedno miasteczko do testów :-P Muszę rozbudować walkę o szczegółowe krytyki (na razie obowiązuje wszystkich zasada Nagłej Śmierci), usprawnić testy cech, edytor postaci by się przydał... A grafikę robię w wolnym czasie jak mi się kodowanie znudzi albo przejada (co parę godzin robię przerwy żeby odświeżyć umysł) - czerpię z artów do fabularnego Warhammera jak i z wersji bitewnej. Muzyka byłaby największym problemem, bo kompletnie się na tworzeniu nie znam, hehe :-p Albo wykorzystam gotowe kawałki (płyta "Era", soundtrack z "Conana") albo posiedzę w końcu w jakimś kombajnie muzycznym żeby coś potworzyć... A prawa autorskie muzyki? Wiem, wiem, ale Warhammera też bez zezwolenia używam właściwie... skoro tworzę wszystko docelowo na własny użytek, to chyba nikt mnie nie powstrzyma, co? Podręczniki oryginalne mam, płyty z muzyką też, tylko konwersje na mp3 wykonam na użytek programu...

 

A zależało by mi bardziej na opiniach dotyczących tego, czy da rade to wszystko zamieścić na PageControlach czy nie będzie z tym żadnych problemów, tak samo te pliki tekstowe do przechowywania przygód i sejwów, tablice rekordów z danymi postaci, przedmiotów - może koledzy programiści mają jakieś rady/uwagi/zastrzeżenia/ostrzeżenia?

 

Np. taka kwestia: procedura czytająca skrypty ma podaną zmienną string której ma szukać, otwiera sobie plik i jedzie po nim od początku do końca w szukając nawiasów {} i sprawdza czy nazwa zdarzenia jest taka jak to czego szuka, jeśli tak to wykonuje dalsze instrukcje, a jeśli to leci dalej. Pytanie brzmi, czy operacje na plikach nie będą zwalniały jeśli te pliki będą całkiem spore? Z drugiej strony jeśli będą spore to samo wczytanie ich w tablice zajmie trochę czasu, prawda? Czy wyszukiwanie i ogólnie wszystkie działania na takiej tablicy wczytanej z pliku przyspieszą działanie programu? Zakładam, że rozbudowany ksrypt przygody może docelowo zawierać tysiące zdarzeń...

Link do komentarza
Udostępnij na innych stronach

No spoko spoko

 

Czy to będzie dobrze działało na PageControlach to się okaże w praktyce ;)

Wykorzystanie plików tekstowych do zapisu czemu nie. Jeśli to mają być na prawdę ogromne pliki to lepiej zastosować jakąś prostą bazę danych (sqLite). Może warto też pomyśleć nad zastosowaniem XML'a - do tego gotowe komponenty są.

Link do komentarza
Udostępnij na innych stronach

jeżeli nie chcesz robić grafiki i próbujesz z niej rezygnować, to może zrezygnuj całkowicie.

RPG może być bardzo dobrą tekstówką.

 

Przykładowo, widziałem jakiś czastemu u kolegi RPG, w którym steruje się chyba tylko 6 klawiszami. -> Nort South East West Up Down

 

Masz 6 postaci, więc możesz zastosować komendy dwuznakowe, np.cyfra postaci + litera polecenia. Ewentualnie coś w schemacie 1n2n3s4w5w6u (lub przy lepszym algorytmie analizującym polecenia 12n3s45w6u)

jak robisz rozmowy, to pewnie na zasadzie: postać coś mówi, gracz ma wybrać jedną z 3 odpowiedzi :) - czyli zatrudniasz jeszcze abc i załatwione

ps: nie czytałem całego tematu

Link do komentarza
Udostępnij na innych stronach

  • 9 months later...

Ha, nekromancję będę uprawiał tera ;-P Bo temat był długo martwy i zapomniany, projekt w sumie też leżał odłogiem bo jakoś czasu nie miałem ani weny. Ale ostatnimi czasy wena wróciła ;-) Założenia projektu zostają takie same, dla zainteresowanych do ściągnięcia małe (2,5mb) i krótkie bardzo very alfa alfa version demo. To tylko prezentuje to co do tej pory zaimplementowałem w programie, wiele jeszcze zostało, cała magia, działający ekwipunek itp.

 

 

http://www.sendspace.pl/file/8qDPVIaL/

 

Wystarczy wypakować i uruchomić exeka, lookając w /Scenario/demo.txt można wyczaić prostym sposobem jak to mniej więcej działa ;-) (BTW - na razie to txt wszystko, później dodam kodowanie przy odczycie/zapisie żeby potencjalny gracz za łatwo czegoś nie popsuł gmerając samemu)

Link do komentarza
Udostępnij na innych stronach

Heyka :rolleyes:

 

z ciekawości zobaczyłem sobie Twój programik...

 

...i z marszu mała uwaga: jeśli robisz okno, nie blokuj możliwości jego przesuwania!!!

 

a najlepiej przejdź na pełny ekran i na podstawie Screen.Width oraz Screen.Height obliczaj

 

wielkość używanych kontrolek, aby zawsze wszystko było widoczne.

 

Pozdrawiam!

Link do komentarza
Udostępnij na innych stronach

  • 2 weeks later...

Aktualizacja projektu ;-)

 

Demko do pobrania z

 

http://www.sendspace.pl/file/7fQRvJud/

 

Teraz jest włączona opcja full screen, więc nie powinno być narzekania na brak możliwości przesuwania okna ;-)

Błąd z "list index out of bound" poprawiony. Ogólnie w ekwipunku działa już drag&drop poprawnie.

 

Jakieś inne opinie, komentarze?

Link do komentarza
Udostępnij na innych stronach

1) Masz blad podczas walki z mutantami. wywala ze nie moze czegos dodac do Richedit

2) Kolczate rekawice moge nalozyc na ramiona, hmm... niezle musialem je naciagnac chyba :D

3) mam w rece nr 1 dwureczny topor najwyzszej jakosci, a druga reke mam pusta... wiec wsadzilem w nia tarcze :) dziala :) Mam osprzetu na 3 rece ;)

4) zerknalem do plikow z opisem scenariusza i postaci. obydwa przerobilbym na XML'a oszczedzi ci to wielu problemow w przyszlosci jak bedziesz rozbudowywal gre.

 

tyla odemnie.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

1) podobny błąd z richeditem był u kumpla, na Xp-ku... a u mnie i innych znajomych, także na XP-kach działa bez problemu, prawdopodobnie coś z czcionkami lub procedurą wklejającą tekst... pracuję nad tym

2) chodzi generalnie o pancerz na ręce ;-P Płytowe naramienniki, skórzane to rękawice lub ewentualnie karwasze, a kolcze? Naramienniki kolcze? Rękawy kolcze? Na razie dałem rękawice z braku lepszego pomysłu.

3) nie dopisałem jeszcze blokady tarczy przy broni oburęcznej, ale piszę to w tej chwili właściwie ;-) Także spoko, nie będzie można używać tarczy i łuku czy oburęcznego topora ;-)

Zauważę tylko że chwilowo parowanie i tak jeszcze nie działa więc tarcza to ozdobnik jedynie xD

4) Nie znam XMLa. Ale dzięki za radę, poszukam źródeł, zobaczę z czym to się je i czy dam radę to opanować na tyle by tego użyć. Na razie planowałem użycie zwykłych plików tekstowych z szyfrowaniem (chwilowo tylko jest bez) i zrobienie w najbliższym czasie edytorów przedmiotów, postaci, scenariuszy żeby nie siedzieć w notatniku i przypadkiem gdzieś linii nie pomylić.

 

Dzięki za zainteresowanie i uwagi, Toster.

Link do komentarza
Udostępnij na innych stronach

Rzeczywiście, jest błąd przy przenoszeniu przedmiotów zabranych z innych lokacji niż główne inventory. A raczej był bo już poprawiłem (u siebie, będzie działać jak dam do ściągnięcia kolejną wersję), dzięki Teiwaz ;-)

 

Acha, wreszcie przebrnąłem przez drag&drop do końca (no co, początkujący jestem) i teraz już nie trzeba ściągać przedmiotu żeby założyć w to miejsce inny - zamienią się automatycznie, jeśli coś było w danym miejscu wcześniej to wrzuci się do głównego ekwipunku.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...