IPB

Witaj Gościu ( Zaloguj | Rejestruj )

> Uwaga!

Uwaga!
To forum służy do zamieszczania gotowych przykładów i silników, nie do poszukiwań!

 
Reply to this topicStart new topic
Generator podziemii, bo po co samemu tworzyć mapy, skoro komputer może to zrobić za nas
Ocena 5 V
 
Amaterasu
post 1.04.2016 - 23:47
Post #1


Forum Veteran
*****

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 391
Dołączył: 12.10.2012
Skąd: Końskie
Team: no matter
Uploader
Ostrzeżenia:
(0%) -----


Generatory to potężne narzędzia, pozwalające na ułatwienie życia designerowi (do pewnego stopnia - projektant musi zdecydować, jak dane obiekty mają być generowane). Ten generator ma za zadanie stworzyć, na podstawie zdefiniowanych przez użytkownika parametrów, coś na kształt poziomu do gry. Wychodzi mu to nieźle, wg mnie, więc szkoda by było, gdybym się tym z nikim nie podzielił.
Zatem, proszę. LINK


Generator ma następujące opcje:
a ) Modyfikacja metody działania algorytmu generowania pierwotnego szumu
Zanim wyjaśnię, przejrzyjcie artykuł o zastosowanym algorytmie generowania szumu. Iteration flags oznacza, które iteracje zostaną wykonane - tzn. dla liczby 27 (011011) zostaną wykonane iteracje 1, 2, 4, 5 - to spowoduje, że szum będzie miększy, a mapa - bardziej gładka. Im większa mapa, tym więcej iteracji - ilość iteracji rośnie logarytmicznie do większego z rozmiarów mapy (dla mapy 80x64 log2(80)=6.32<=7, zatem zostanie wykonanych 7 iteracji). Iteration amplification start pokazuje, jak duży wpływ będzie miała pierwsza iteracja, a iteration amplification speed - jak duży wpływ będą miały kolejne iteracje.
b ) Tworzenie losowych bąbli
Bąble można sobie wyobrazić jako łagodne pagórki (lub strome, zależnie od blob intensity). Można regulować ich liczbę (blob number) i ich rozmiar (blob radius - promień każdego bąbla mieści się w przedziale od blob_radius/2 do blob_radius).
c ) Tworzenie pierścienia
Pierścień powoduje stworzenie doliny lub wzniesienia na środku. Zależnie od ring radius, pierścień będzie obejmował całą mapę (1), nic (0), lub pewien fragment (wartości pośrednie). Wysoki ring inner intensity stworzy wzniesienie, a wysoki ring outer intensity - dolinę. Uwaga - liczy się różnica między ring inner a ring outer, nie ich absolutne wartości.
d ) Tworzenie linii (korytarzy)
Linie można sobie wyobrażać jako coś na kształt bruzdy - im większe line intensity, tym większa szansa, że w tym miejscu będzie podłoga. Można modyfikować ilość linii (line number) i ich szerokość (line width).
e ) Tworzenie ściany zewnętrznej
Ściana zewnętrzna to użyteczny modyfikator, który zamyka teren naokoło mapy. Od border intensity zależy, jak duże szanse są na powstanie ściany, a od border inner edge i border outer edge zależy grubość ściany. (UWAGA: w tej chwili jest bug powodujący, że zmiana outer edge nie działa tak, jak powinna - niewielki problem, bo i tak zwykle jest na wartości 1, ale na razie nie zmieniać)
f ) Zmiana wielkości mapy
Niby nic, a cieszy.

g ) Modyfikacja progu tworzenia ścian
Dzięki tej opcji, niezależnie od jakości szumu, powstała mapa zawsze będzie zawierała zdefiniowany przez bias floor percentage procent pól będących podłogą (bierze pod uwagę jedynie szum, modyfikacja mapy może spowodować, że mniejszy procent pól będzie podłogą). Bias randomization to parametr definiujący, jak mocno krawędzie ścian będą poszarpane (zależnie od kontrastu szumu, ten parametr powinien być mały lub całkiem spory - domyśnie 0).
h ) Usuwanie dziur w ścianach
Ustawienie holes removal na Y spowoduje, że zostaną zlikwidowane wszystkie dziury, których wielkość jest nie większa niż holes minimum size. Dla algorytmu dziurą jest każde pole, które jest podłogą, a rozmiarem dziury - ilość wszystkich pól, do których można dotrzeć z danego pola bez przechodzenia przez ściany. (Holes diagonal check oznacza, że pola, które sąsiadują z dziurą jedynie po przekątnej również są dołączane do dziury)

Pozostałe opcje są jedynie pomocnicze:
Generate from current noise wczytuje ponownie mapę z wygenerowanego wcześniej szumu, wykorzystując parametry z punktów g) i h)
Save/Load preset pozwala na zapisanie/wczytanie ustawień modyfikowanych w programie, aby móc z nich generować własne mapy
Save map zapisuje mapę do pliku, jeżeli masz chęć wykorzystać wygenerowaną mapę w swojej grze. Odczyt wykonuje się za pomocą funkcji file_to_map, znajdującej się w projekcie. Ściana to 0, podłoga to 1. Mapa jest wczytana do ds_grid.

Sterowanie:
Spacja - generuj nową mapę
Shift - przełączaj pomiędzy widokiem minimapy (noise/map)
Ctrl - przełączaj pomiędzy trybem interfejsu (pre-processing, post-processing)
Strzałki - zmiana pozycji widoku

To chyba tyle póki co. Projekt jest w wersji 1.0, na razie nie mam ochoty tego ulepszać : P


--------------------
Cute little toy
Muuuuczek567
Go to the top of the page
 
+Quote Post
post 1.04.2016 - 23:47
Post #





Wiek:



Uploader


Pani kontekstowa pokazuje swe wdzięki tylko w Valhalli lub wszędzie jeżeli nie jesteś zalogowany(a)! :3
Go to the top of the page
 
Quote Post
I am Lord
post 2.04.2016 - 10:50
Post #2


Trzymam Sword
Ikona grupy

Wiek: 26 lat
Grupa: ♔ Zwycięzca CA 2016 ♔
Postów: 4,460
Dołączył: 16.12.2005
Skąd: Piła

Huder


Nagrody:
Mistrz Ligi24 (2013)

Uploader
Ostrzeżenia:
(0%) -----


GML
___________________________________________
################################################################################
############
FATAL ERROR in
action number 1
of Mouse Event for Glob Left Pressed
for object tiledrawer:

make_color_hsv argument 3 incorrect type (5) expecting a Number (YYGI32)
at gml_Script_noise_to_surface (line 9) - draw_point_color(i,j,make_color_hsv(0,0,ngr[# i,j]));
################################################################################
############
--------------------------------------------------------------------------------------------
stack frame is
gml_Script_noise_to_surface (line 9)
called from - gml_Object_tiledrawer_GlobalLeftButtonPressed_1 (line 44) - sf=noise_to_surface(ng);


Po wgraniu pliku z presetem i kliknięciem na coś tam


Wiesz co mógłbyś jeszcze dodać? Opcję centrowania mapy w post proc oraz opcję która by usuwała wszystkie jaskinie niezależne które są duże tak by została 1. Jest usuwanie małych plam ale nadal mogą się zrobić 2 porównywalnie duże które nie mają ze sobą połączenia. Możliwość ich połączenia lub usunięcia mniejszej było by dobrym pomysłem.


--------------------
Acziwment unloked
Ciekawsze moje gry:
Ukończone: NewtonPong Android
Nieukończone:Maze Strategy
Compostowe: DungeonMazeShooter, ScorchedTanks, Atargatis, RedvsBlue, Wspomnienia
Go to the top of the page
 
+Quote Post
Amaterasu
post 2.04.2016 - 17:06
Post #3


Forum Veteran
*****

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 391
Dołączył: 12.10.2012
Skąd: Końskie
Team: no matter
Uploader
Ostrzeżenia:
(0%) -----


Wiem na czym polega błąd. Zajmę się tym za chwilę, jak również łączeniem jaskiń.
Czym miałoby być centrowanie mapy?


--------------------
Cute little toy
Muuuuczek567
Go to the top of the page
 
+Quote Post
Jakim
post 2.04.2016 - 17:31
Post #4


Master of Posts
********

Wiek: 25 lat
Grupa: Użytkownicy
Postów: 1,101
Dołączył: 3.12.2005
Skąd: Katowice
Uploader
Ostrzeżenia:
(0%) -----


Nie mam okazji teraz stestować, ale szacuneczek za generator.

Centrowanie? Chyba chodzi o to, by znaleźć "środek" planszy i ustawić tam origin, rajt?


--------------------
jakim.bandcamp.com - nowy album Murmurs!
Go to the top of the page
 
+Quote Post
Amaterasu
post 2.04.2016 - 18:22
Post #5


Forum Veteran
*****

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 391
Dołączył: 12.10.2012
Skąd: Końskie
Team: no matter
Uploader
Ostrzeżenia:
(0%) -----


No tak, ale nie bardzo rozumiem, czym, i gdzie, miałby być "środek planszy". Mój generator dla map o wymiarach nie będących tymi samymi potęgami dwójki bierze wycinek szumu z najmniejszego kwadratu większego od mapy, z samego środka, i dopiero na nim wykonuje wszystkie operacje.
Chodzi o bounding box mapy? Takie coś też dałoby się zrobić, ale czy jest potrzeba?

Zrobiłem już łączenie jaskiń, niedługo wystawię kolejną wersję.


--------------------
Cute little toy
Muuuuczek567
Go to the top of the page
 
+Quote Post
Amaterasu
post 2.04.2016 - 19:03
Post #6


Forum Veteran
*****

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 391
Dołączył: 12.10.2012
Skąd: Końskie
Team: no matter
Uploader
Ostrzeżenia:
(0%) -----


Nowa wersja (oznaczmy ją 1.1), a w niej:
-Dodane: opcja łączenia ze sobą dziur korytarzami o wybranej szerokości. Metoda póki co prymitywna - łączone są ze sobą środki dziur, co nie zawsze oznacza, że dziury zostaną połączone.
-Dodane: preset small_closed_mountain (jak wam się poszczęści, to zobaczycie w nim problemy tej metody łączenia dziur)
-Naprawione: błąd związany ze zmianą rozdzielczości mapy przed jej wygenerowaniem, co powodowało problemy z ponownym generowaniem mapy z istniejącego szumu
-Naprawione: Opcja holes diagonal check nie pokazuje już swojej liczbowej wartości
-Wczytanie starszych presetów nie wywoła błędów
W planach:
-Dodanie kompatybilności presetów
-Ulepszenie metody łączenia dziur ze sobą
-Dodanie pomieszczeń (na poziomie mapy)
LINK


--------------------
Cute little toy
Muuuuczek567
Go to the top of the page
 
+Quote Post
I am Lord
post 2.04.2016 - 22:11
Post #7


Trzymam Sword
Ikona grupy

Wiek: 26 lat
Grupa: ♔ Zwycięzca CA 2016 ♔
Postów: 4,460
Dołączył: 16.12.2005
Skąd: Piła

Huder


Nagrody:
Mistrz Ligi24 (2013)

Uploader
Ostrzeżenia:
(0%) -----


No jak to czym ma być środek. Długość wykopanych bloków po H i V dzielisz na 2 z osobna i na tej podstawie przesuwasz je tak by były na środku grida.


--------------------
Acziwment unloked
Ciekawsze moje gry:
Ukończone: NewtonPong Android
Nieukończone:Maze Strategy
Compostowe: DungeonMazeShooter, ScorchedTanks, Atargatis, RedvsBlue, Wspomnienia
Go to the top of the page
 
+Quote Post
Amaterasu
post 3.04.2016 - 0:11
Post #8


Forum Veteran
*****

Wiek: 21 lat
Grupa: Użytkownicy
Postów: 391
Dołączył: 12.10.2012
Skąd: Końskie
Team: no matter
Uploader
Ostrzeżenia:
(0%) -----


czyli crop


--------------------
Cute little toy
Muuuuczek567
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 użytkownik(ów) przegląda ten temat (1 gości i 0 anonimowych użytkowników)
0 Użytkownicy:

 



RSS Wersja Lo-Fi Aktualny czas: 22.02.2017 - 13:57