Tworzenie dobrych map

Tworzenie dobrych map
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

Cześć wszystkim!

Pracuję nad grą i jestem na etapie projektowania mapy. Chciałbym, żeby mapa w mojej grze była pełna życia, bogata w detale i interesujące obiekty, które przyciągną uwagę gracza. Szukam poradników lub wskazówek, które pomogą mi w tworzeniu dynamicznych środowisk. Będę wdzięczny za każdy link lub poradę, która może pomóc.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6632
3
tBane napisał(a):

Chciałbym, żeby mapa w mojej grze była pełna życia, bogata w detale i interesujące obiekty, które przyciągną uwagę gracza.

Brzmi jak Heroes 3.

Drzewka, góry, przedmioty do zbierania, ścieżki, obiekty do odwiedzenia, tereny trawiaste, tereny śnieżne, wrogowie do pokonania...
O takie detale Ci chodzi?

W Heroes 3 Complete na GOG masz nawet gotowy edytor map. Wystarczy, że zaimplementujesz wczytywanie plików h3m w Twojej grze :]

Albo przynajmniej odgapisz co nieco, jeśli pasuje to do Twojej wizji projektu.

W tej grze jest pełno map. Można też przeglądnąć te stworzone przez graczy.


🕹️⌨️🖥️🖱️🎮
edytowany 4x, ostatnio: Spine
AN
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 10 godzin
  • Postów:973
0

@Spine autorowi raczej chodzi o algorytmy.
@tBane w minecrafcie mają ciekawy generator, jest sporo różnych filmików na YT jak to działa


Zdalna praca dla Senior Python Developerów --> PW
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

@anonimowy Raczej chodzi mi o sam proces tworzenia - skąd czerpać pomysły na tworzenie świata, jak go wypełniać, by był interesujący i ciekawy. Z algorytmami nie mam problemu, raczej zależy mi na inspiracji i metodach, które pomogą stworzyć świat pełen szczegółów i detali


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
Boski
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 4 godziny
  • Postów:132
1

poszukaj pod terminem 'level design', to cała ogromna gałąź gamedevu. Tutorialów też masa (nie podpowiem, które są warte uwagi, bo nie zagłębiałem się)

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12166
2
tBane napisał(a):

@anonimowy Raczej chodzi mi o sam proces tworzenia - skąd czerpać pomysły na tworzenie świata, jak go wypełniać, by był interesujący i ciekawy.

Zależy od typu mapy — jeśli potrzebujesz stworzyć mapę z jakąś realną lokalizacją, to najlepszym źródłem inspiracji jest Google i zdjęcia takich miejscówek. Natomiast jeśli interesują Cię lokacje nierealne (które nie istnieją w prawdziwym świecie), to już jest trudniej, bo trzeba umieć myśleć abstrakcyjnie. Ale zawsze możesz szukać inspiracji w innych, podobnych grach, bo na tym to wszystko polega — kierujesz się inspiracjami, zamiast wymyślaniem wszystkiego od absolutnych podstaw. Pamiętaj, że bardziej niepowtarzalny świat wymyślisz, tym większa szansa, że gracze go nie ogarną (bo nigdzie wcześniej czegoś takiego nie widzieli).

Poza tym nie napisałeś czy interesuje Cię mapa statyczna, czy generowana dynamicznie (proceduralnie).


Zwróć tylko uwagę na to, aby mapy nie były przepchane zawartością, czyli aby gracz nie czuł się nimi przytłoczony. Pustawe też być nie mogą, bo gracz będzie nimi znudzony — tutaj potrzebny jest balans. Co nadal nie zmienia faktu, że pewne części mapy mogą być ubogie w detale, a inne posiadać ich mnóstwo. To wszystko zależy od Twoich oczekiwań oraz od specyfiki projektu.

Za dużo tutaj jest do omówienia, aby to jakoś sensownie zmieścić w jednym czy kilku postach. Ot tworzenie map to zajebiście obszerny temat i dotyczy bardzo wielu aspektów. W skrócie, mapy powinny być interesujące i wygodne do eksplorowania. Unikaj wielkich i ubogich w detale obszarów; unikaj wymuszania dużej ilości backtrackingu (bo to wnerwia); unikaj konstruowania map w taki sposób, aby gracz miał bardzo ograniczony ruch lub był niewidoczny na ekranie.

Polecam do tego celu skorzystać z metodyki top-down — od ogółu do szczegółu. Najpierw wymyśl typy dużych obszarów i gdzie się będą względem siebie znajdować, potem dla każdego obszaru wymyśl jego zawartość (ta może się składać z podobszarów, składających się z mniejszych itd.). Cały czas miej na uwadze to jak one będą ze sobą połączone, tak aby realizowały założenia rozgrywki (fabuły). Przy czym najpierw dobrze by było mieć zarys fabuły.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
loza_prowizoryczna
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 8 godzin
  • Postów:1606
0
tBane napisał(a):

Będę wdzięczny za każdy link lub poradę, która może pomóc.

Bez pier***lenia.


Przetrzyma wszystko
Zobacz pozostałe 3 komentarze
flowCRANE
Ile jeszcze off-topu chcesz wnieść do tematu?
loza_prowizoryczna
1. Tektonika płyt to teoria chyba że jesteś z tych co wolą puchnącą ziemię 2. Prezentacja nie ma nic do rzeczy bo tektonika płyt może zostać uogólniona na płaszczyźnie (i w ten sposób zazwyczaj jest analizowana) 3. Nie napisał, ty za to napisałeś 4. Więc ma dobrą podstawę by zacząć bo renderery operują w 3D nawet jeśli projekcja jest spłaszczana do 2D 5. Szukam poradników lub wskazówek, które pomogą mi w tworzeniu dynamicznych środowisk 6. Ale szuka podbudowy teoretycznej.
loza_prowizoryczna
@flowCRANE: Od tego są komentarze, a to ty zadajesz pytania.
flowCRANE
Twój post jest off-topem (w dodatku wulgarnym) i zamiast w ogóle komentować, powinienem ten post usunąć. Chcesz wrzucić link to spoko, ale niech kieruje do materiałów omawiających dobre praktyki, a nie do narzędzia, które żadnych praktyk nie prezentuje, a więc jest bezużyteczne w kontekście tego wątku.
loza_prowizoryczna
zamiast w ogóle komentować, powinienem ten post usunąć - lecz wciąż masz wątpliwości. ale niech kieruje do materiałów omawiających dobre praktyki przecież właśnie omawiamy dobre praktyki, oczywiście możesz usunąć post ale w tym wypadku usuniesz też merytorykę. Choć jest też taka zasada że nie korzystamy z owoców z zatrutego drzewa :)
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

Jak na razie mam coś takiego. Co jeszcze można by dodac do terenów nadbrzeża ?
Obecnie są:
-drzewa
-rośliny
-skały
-kamyki
-kłoda

RPG2D 153.png
screenshot-20241103213140.png


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
edytowany 1x, ostatnio: tBane
flowCRANE
Leżaki i parawany. ;)
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12166
1

Kamyki wystające ponad lustro wody? Chyba że będzie z tym problem, ze względu na implementację wody. Łódkę też możesz dodać, np. taką rozpierdzieloną, niezdatną do pływania (jako element dekoracji).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
cerrato
Czyli robimy klona HoMM3? 😛
flowCRANE
To dobra gra była, można co nieco z niej podpatrzeć. ;)
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

Kamyki wystające znad lustra wody raczej niemożliwe do zaimplementowania, a ta łódka nie będzie pasować niestety :-/ dodam jeszcze w niektórych miejscach małe roślinki to powinno załatwić sprawę


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
edytowany 1x, ostatnio: tBane
ToTomki
  • Rejestracja:około 7 lat
  • Ostatnio:dzień
  • Postów:1320
0

Dlaczego niemożliwe do zaimplementowania?

tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

@ToTomki nie wiem jak się za to zabrać, by napisać to w miarę optymalnie.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
edytowany 1x, ostatnio: tBane
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12166
0

To może inaczej — napisz co konkretnie sprawia problem w silniku, co uniemożliwia tworzenie obiektów na wodzie. Może rozwiązanie tego problemu wcale nie jest trudne do znalezienia.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
tBane
Tester Beta
  • Rejestracja:ponad rok
  • Ostatnio:27 minut
  • Lokalizacja:Poznań
  • Postów:288
0

Przede wszystkim to pracuję z 2D. Renderuję świat w następujący sposób: Terrain, Water, GameObjects. Nie da się częściowo zarysować kamieni wodą, gdyż woda to jeden duży obiekt 2D.


W wolnych chwilach od codzienności programuję hobbystycznie Edytor gier RPG 2D.
Technologie, z których korzystam to C++ oraz SFML 2.X.
loza_prowizoryczna
Jak zagęścisz siatkę to wszystko się da.
loza_prowizoryczna
Teselacja. Wodę można poddać teselacji.
tBane
a jak to zrobić w SFML 2.X ?
loza_prowizoryczna
Nie wiem, wg. moderatora Autorowi zależy na teorii tworzenia dobrych map (w dodatku w 2D), a nie na narzędzi do ich tworzenia. Przykro mi.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12166
0
tBane napisał(a):

Przede wszystkim to pracuję z 2D.

Nie szkodzi. Możesz korzystać wyłącznie z dwuwymiarowych obiektów, a mimo to stworzyć świat wyglądający jak trójwymiarowy. Ot zobacz sobie jakie cuda ludzie potrafili robić z rzutem izometrycznym. 😉

Nie da się częściowo zarysować kamieni wodą, gdyż woda to jeden duży obiekt 2D.

Ten problem da się łatwo rozwiązać, korzystając z warstw. Nie tylko mógłbyś swobodnie renderować wodę, ale i stawiać obiekty na wodzie. Ba, mógłbyś też imitować ich częściowe wystawanie ponad wodę — wystarczy aby warstwa wody była półprzezroczysta.

W uproszczeniu — na warstwie umieszczonej najniżej renderujesz dno i fragmenty obiektów znajdujące się pod wodą, na warstwie wyżej renderujesz wodę (półprzezroczystą i z szumem, czyli shader robi to co chcesz), a na warstwie wyżej wody renderujesz fragmenty obiektów wystające ponad lustro wody.

Warstwy są bardzo łatwe w implementacji, a do tego dają niesamowicie dużo możliwości. Do tego ich obsługa w edytorze dawałaby Ci nie tylko możliwość tworzenia sztuczek wizualnych (tak jak z tymi obiektami w połowie wystającymi z wody), ale też ułatwiłaby Ci tworzenie samych map. Mógłbyś np. pokazać tylko tę warstwę, na której pracujesz, a resztę ukryć — obiekty z innych warstw nie przeszkadzałyby Ci np. podczas wypełniania warstwy podłoża (np. budynki czy drzewa nie zasłaniałyby terenu).

Renderowanie mapy złożonej z warstw jest banalne — na teksturach warstw renderujesz kafle/obiekty, a na koniec teksturę każdej warstwy renderujesz w oknie, od tej najniższej (np. dna zbiorników wodnych, obiekty podwodne, lustro wody, podłoże, obiekty na podłożu). Tych warstw możesz mieć dowolnie dużo, w zależności od wymagań. Przy czym fragmenty obiektów wystających ponad wodę mogą być zawarte w tej warstwie, która posiada obiekty renderowane po namalowaniu terenu (nie musi być dla nich warstwy dedykowanej).

Natomiast kolejność renderowania obiektów w pojedynczej warstwie zależy od ich z-order — standardowo. Zapewne trzymasz je w jakiejś liście, więc te renderujesz od pierwszego obiektu w liście, do ostatniego.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
Zobacz pozostałe 2 komentarze
tBane
wydaje się proste. Ale jednak następnym razem z tego skorzystam :-) teraz staram się napisać jak najprościej gierkę, byleby działała. To dopiero mój pierwszy projekt ! :-)
flowCRANE
Spoko, rób jak uważasz. ;)
flowCRANE
Ale pamiętaj, że im więcej ograniczeń będziesz miał w silniku, tym mniej będziesz mógł zrobić. No i trudno nam będzie cokolwiek doradzić w temacie tworzenia map i uzupełniania ich obiektami, skoro nie dość, że możliwości są ograniczone, to w dodatku nie wiemy gdzie te ograniczenia są i czego dotyczą. Natomiast ich obchodzenie może być drutowaniem kodu, a może i tworzeniem spaghetti.
flowCRANE
Napisz może w poście co da się zrobić w tym silniku i na tej podstawie coś spróbujemy wymyślić.
tBane
Można dodawać tylko obiekty 2D. Nie ma żadnego systemu imitującego 3D poza sortowaniem obiektów w osi Y i raczej w tej grze nie będzie, jak zresztą widac na załączonym screenie. Potrzebuję obiektów 2D do gry. Jak na razie mam: roślinki/ziółka pasywne, grzyby, zioła, drzewa, głazy, ścieżki (parę kamieni), kamyczki, trzcinę oraz obaloną kłodę, Dodam jeszcze studnię jak się nauczę ją rysować :D
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)