Skocz do zawartości

Top down terrain creator


I am Lord

Rekomendowane odpowiedzi

Tytuł:Top down terrain creator

 

Gatunek: edytor map

 

Opis:

 

Witam jako że pracuję na gierką stworzyłem na jej potrzeby edytor w którym mógłbym łatwo stworzyć teren 2D w widoku z góry. Trochę go zmodyfikowałem i teraz możecie podziwiać jego wersję stand-alone :P

Daję wam także źródła w postaci plików .gm81 tak aby każdy mógł sobie go dostosować do swoich potrzeb. Np. dorobić do niego możliwość stawiania obiektów. Program składa się z 4 folderów:

- maps - tutaj zapisywane są mapki w postaci jawnej

- mask - tutaj wkładamy obrazki png w odcieniach szarości są to maski które się zamienią w pędzle do rysowania

- textures - tutaj wkładamy własne

teksturki o rozmiarach tych samych co maski

- tools - wygenerowane pędzle

 

Download

edytor v1.02 : 1.5MB

Maski

textury

przykład wczytwania mapy do gry :4MB

 

change log

v1.02 
dodano:
- wstęga pędzli została posortowana według masek, doszły dodatkowe przyciski ( scrollem mozna przewijać jak się najedzie myszką )

bug fixy:
- błąd w przycisku 'nowe pędzle', ilość masek nie była sprawdzana  tylko textury.

v1.01 
bug fixy:
- program sie wysypywał gdy w folderze 'mask' była tylko 1 maska

 

jak dodać pędzle

aby dodać nowe pędzle trzeba stworzyć maskę i texturę, wkładamy je odpowiednio do folderu 'mask' i 'textures'.

Textura powinna mieć rozmiar maski, gdyby była większa to zostanie wycięty tylko środek, gdy mniejsza to nie zostanie wczytana. Zapisujemy ją w rozszerzeniu png.

Maska powinna mieć rozmiar 128x128, taki obrazek musi być w odcieniach szarości z jasnością ustawioną na połowę ( wtedy iteracja malowania będzie poprawnie działać ), zapisujemy w rozszerzeniu png.

Na koniec wystarczy kliknąc przycisk 'nowe pedzle' by je wygenerować.

 

interface

hud.jpg

klawisze

WSAD lub strzałki - przesuwanie widokiem

ŚPM lub PPM - przeciąganie widoku

LPM - postaw texturkę

Scroll na obszarze roboczym lub + - na numerycznej - skalowanie texturek

Scroll na wstędze - przewijanie masek

T - chowa/pokazuje textury

 

Sposób w jaki mapy są zapisywane

Mapy zapisywane są w folderze 'maps' w postaci jawnej, to oznacza że nie są zabezpieczone w żaden sposób przed ich edycja, o to musisz się zatroszczyć już sam. Mapa jest podzielona na surfacy o wielkości 512x512 i to one są zapisywane w folderze mapy w postaci plików .png. Jak wiadomo png jest kompresowany bezstratnie z tąd taka duża waga plików. Teoretycznie używając jakiegoś dlla do zapisu w formacie jpg dało by radę je zmniejszyć kosztem wyglądu.

W folderze mapy zapisywany jest plik tekstowy info.map w nim będą zapisywane właściwości mapki jak np. nazwa i wymiary gabarytowe. W przyszłości pewnie stworzę do tego obsługę stawiania obiektów więc takowe informacje pojawią się w tym pliku.

 

Co zrobić by wczytać mapę do gry

Należy przed wywołaniem wczytywania stworzyć zmienne globalne

GML
globalvar map_w, map_h, map_name;

Teraz skopiować te 2 skrypty do naszej gierki:

GML (inforead)
/*

info_read(file)

wczytuje plik info.map, w nim przechowywane sa dane o szerkosci i wysokosci mapy.

 

Mozesz dostosowac sobie endytor do wlasnych potrzeb tak by np. w pliku info.map zapisywane byly jeszcze

dane o obiektach postawionych na mapie

*/

var _file;

_file = file_text_open_read( argument0 );

map_name = file_text_read_string( _file ); file_text_readln( _file );

map_w = file_text_read_real( _file ); file_text_readln( _file );

map_h = file_text_read_real( _file ); file_text_readln( _file );

 

file_text_close( _file );

GML (openmap)
// open_map( fname );

/*

Skrypt otwiera mape pochodzaca z edytora. Za argument podaje sie sciezke do pliku info.map

 

Wczytany background jest tilesami o wielkosci block_size

block_size musi sie zgadzac wymiarami gabarytowymi plikow png w folderze mapy inaczej tilesy nie beda pasowac

*/

 

var _n, _dir, _s, _f, _tempf;

 

_f = argument0;

if ( _f = "" ) exit;

if ( !file_exists( _f ) ) exit;

 

info_read( _f );

block_size = 512;

 

view_xview = 0;

view_yview = 0;

 

_f = filename_path( _f );

 

w_count = ceil( map_w / block_size );

h_count = ceil( map_h / block_size );

 

for ( i = 0; i < w_count; i += 1 )

for ( j = 0; j < h_count; j += 1 )

{

_tempf = background_add( _f + "i"+string(i) + "j" + string(j) + ".png", 0, 0 );

tile_add( _tempf, 0, 0, block_size, block_size, i * block_size, j * block_size, 10000 );

}

I wywołać skrypt open_map() np. w 'creation code' rooma podając w argumencie ścieżkę dostępu do pliku info.map

GML
globalvar map_w, map_h, map_name;

open_map( "level1\info.map");

 

Na pewno jeszcze będę to wszystko udoskonalał

 

 

 

Autorzy:

Programowanie: Huder

Grafika: Huder

 

Screeny:

https://gmclan.org/up539_5_screen3.html

https://gmclan.org/up539_5_screen1.html

https://gmclan.org/up539_5_screen2.html

Odnośnik do komentarza
Udostępnij na innych stronach

Szczerze mówiąc, na screenach wygląda lepiej niż w praktyce : P

Tekstury nakładają się na siebie czasem trochę dziwnie i pojedyncze rodzaje też wyglądają nieładnie po pokryciu większego terenu. Ale pomijając to, bardzo fajny programik, tyle że troszkę niedopracowany.

Odnośnik do komentarza
Udostępnij na innych stronach

Szczerze mówiąc, na screenach wygląda lepiej niż w praktyce : P

Tekstury nakładają się na siebie czasem trochę dziwnie i pojedyncze rodzaje też wyglądają nieładnie po pokryciu większego terenu. Ale pomijając to, bardzo fajny programik, tyle że troszkę niedopracowany.

Wszystko zależy od tego jak ustawiasz skok i iterację odpowiedni dobór tych paramterów przynosi dobre wyniki jak na moich screenach. Praktyka czyni mistrza :P Po za tym to jak efektywne będą pędzle zależy dużo od tekstur jakie wkładasz i maski. Teksturki ze screenów można pobrać tutaj: http://givemetextures.com/Dirt.php nie umieściłem ich w programie ze względu na licencję.

Odnośnik do komentarza
Udostępnij na innych stronach

Niezły pomysł. Dla początkujących i tych średnio wtajemniczonych ten program to na pewno zbawienie.

W najbliższym czasie wykombinuję coś podobnego, co zeżre mniej miejsca na dysku i trochę więcej pracy procesora.

Odnośnik do komentarza
Udostępnij na innych stronach

Niezły pomysł. Dla początkujących i tych średnio wtajemniczonych ten program to na pewno zbawienie.

W najbliższym czasie wykombinuję coś podobnego, co zeżre mniej miejsca na dysku i trochę więcej pracy procesora.

Jedyne wyjście to chyba zapis do jpg. Nie chciałem zaciągać w to dllów.

Odnośnik do komentarza
Udostępnij na innych stronach

Da się jeszcze lepiej. W grze "Spellforce", gdzie cała akcja rozłożona jest na jednej siatce, każdy kwadrat składający się na siatkę ma przypisaną teksturę, więc można by wykorzystać tylko jedną heightmapę, a więc jedną warstwę.

Odnośnik do komentarza
Udostępnij na innych stronach

Da się jeszcze lepiej. W grze "Spellforce", gdzie cała akcja rozłożona jest na jednej siatce, każdy kwadrat składający się na siatkę ma przypisaną teksturę, więc można by wykorzystać tylko jedną heightmapę, a więc jedną warstwę.

jakoś tego sobie nie potrafię wyobrazić, gdzie o takim czymś czytałeś?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...