FAQ  •  Szukaj  •  Użytkownicy  •  Grupy •  Galerie   •  Rejestracja  •  Profil  •  Zaloguj się, by sprawdzić wiadomości  •  Zaloguj
 
 
 Nauka robienie gier na engin'ie Dink Smallwood Zobacz następny temat
Zobacz poprzedni temat
Napisz nowy tematOdpowiedz do tematu
Autor Wiadomość
GOKUSSJ6
Shinobi
Shinobi



Dołączył: 30 Cze 2006
Posty: 329
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z Domu

PostWysłany: Pon 17:52, 20 Sie 2007 Powrót do góry

Każdy chce zrobić sobie grę RPG w stylu Legend of Zelda lecz nie ma takich programów którego można zrobić.Lecz gdy w 1997 roku pojawił się gra Dink Smallwood i stał się grą feeware'ową można zrobić na jej engin'ie.Zrobiłem ten temat żeby nauczyć was jak zrobić swoją własną przygodówkę w stylu LoZ.(Być może zrobicie na niej gry związane z Dragon Ball :] ).Jeśli ktoś się chce zapisać to pisać w tym temacie i dodam kilka tutków(W tym podstawy).To nie oszustwo.Ja umiem robić gry(d-mod) na Dink Smallwood.

P.S.Stworzyłem ten temat gdyż nie samym NES'em człowiek żyje Wink .


Post został pochwalony 0 razy
Zobacz profil autora
flclflcl
Shogun
Shogun



Dołączył: 07 Kwi 2006
Posty: 1584
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Nie 14:14, 26 Sie 2007 Powrót do góry

Ja jestem chętny
Bardzo mnie ciekawi to wszystko
Nauczaj mnie mistrzu


Post został pochwalony 0 razy
Zobacz profil autora
GOKUSSJ6
Shinobi
Shinobi



Dołączył: 30 Cze 2006
Posty: 329
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z Domu

PostWysłany: Pon 8:48, 27 Sie 2007 Powrót do góry

Ok.Dodaje teraz wstęp co trzeba i zasady robienie d-mod'a + 4 tutki:
I.Podstawowe programy i klawisze.
Najpierw żeby zrobić D-mod potrzebny ci jest:
-Dink Smallwood v.1.08 - [link widoczny dla zalogowanych]
-WinDinkEdit Plus(Jeśli jesteś taki mocny to skorzystaj z DinkEdit po zainstalowaniu Dink'a Smallwood'a ale na razie skorzystaj z tego) - [link widoczny dla zalogowanych]
-Notatnik(Wiesz gdzie go znajdziesz Razz)
-Dink Aural+ (Żebyś nie miał długiej pauzy gdy zmienia się muzyka + obsługuje pliki MP3) - [link widoczny dla zalogowanych]
-Easy DinkC(Dla poprawiania błędów w skryptcie) - [link widoczny dla zalogowanych]
-Skeleton B(Szkielet potrzebny do robienie d-mod'a.Jest także z WinDinkEdit ale najlepiej skorzystaj z tego) - [link widoczny dla zalogowanych]

O robienie D-mod'ów:
-Używaj tylko MIDI oraz MIDI konwertowane na MP3.Nie możesz używać muzyki MP3 takie jak Queen,Prodigy itp. gdyż jest niezgodne z prawem(Chyba że to są MIDI)!
-Wszystkie skrypty są zapisane z rozszerzeniem .c które można odczytywać notatnikiem lecz pliki z rozszerzeniem .d nie da się gdyż są konwertowane tak aby nie można edytować skryptów(Tylko autor może to zrobić).
-Skrypty wrogów i przedmiotów znajdziesz w folderze develop/source w folderze w którym zainstalowałeś Dink Smallwood
-Zawsze używaj ScreenMatch żeby sprit'y nie przecieły się ze screen'em
-Nigdy nie edytuj utwardzenia ziemi/podłogi!Inaczej zedytowane utwardzenie zostaje wklejone na całą mapę(Możesz tylko zedytować utwardzenie sprit'a)
-Większość skryptów po nawiasie kończymy ; (nie dotyczy tego komenda "if")

Podstawowe klawisze dla WinDinkEdit:
Z + strzałka w lewo/prawo lub góra/dół - cięcie/przywracanie sprita o jeden piksel w rzędzie w lewą stronę/prawą stronę.
X + strzałka w lewo/prawo lub góra/dół - przywracanie/cięcie sprita o jeden piksel w rzędzie w prawą stronę/lewą stronę.
R - Tryb sprita
E - Galeria sprit'ów(Tylko gdy jesteś w Trybie Sprit'owania)/Galeria utwardzeń(Tylko gdy jesteś w trybie utwardzenia)
T - Typ Ziemi
1-0 lub u - Galeria podłogi/ziemi
H - Typ utwardzenia
Page Up/Down - Następna/Poprzednia strona galerii(Tylko w trybie sprit'owania i utwardzenia)
Shift(Przytrzymaj) - Automatyczne stworzenie utwardzeń(max. 4 punkty)(Tylko w trybie utwardzenia)
C - Kopiuj(Tylko w trybie ziemi lub w trybie utwardzeni'a)
S - Wklej postać/ziemię/utwardzenie
Escape - Powrót
Spacja - Zobacz minimapę ze sprit'ami(Edytując screen przytrzymaj żeby zobaczyć utwardzenia)
TAB - Zobacz minimapę(Bez pokazania sprit'ów)
M - ScreenMatch
4(Na numpadzie) - Włącz/Wyłącz automatyczne utwardzenie sprita po wybraniu w galerii sprit'ów.
L - Importuj Screen z danego d-mod'a.
Q - Edytuj utwardzenie ziemi/powierzchni(Tylko w Trybie Utwardzenia) lub edytuj utwardzenie sprita(Tylko w Trybie Sprit'owania)
PPM(Prawy Przycisk Myszy) - Opcje sprit'a(Tylko w trybie spritowania) lub opcja screena(Tylko w trybie ziemi i utwardzenia)


II.Podstawowy skrypt rozmowy.
Robienie skryptów jest bardzo łatwe.Oto podstawowy skrypt rozmowy bohatera z krzaczkiem z wyjaśnieniem
Kod:

void talk(void)
{
freeze(1);
say_stop("Yo ziom.", 1);
say_stop("`1Yo.", &current_sprite);
say_stop("Co tam?", 1);
say_stop("`1A nic tylko chce się zemścić za tego kto mnie nasikał", &current_sprite);
say_stop("Aha.", 1);
unfreeze(1);
}


Kod:
void talk(void)

jest podstawową komendą rozmowy i każdy void musi zacząć od { i kończyć się na } np.
Kod:

void talk(void)
{
say("Jakiś skrypt", 1);
}

say_stop jest to komenda rozmowy i po wpisaniu go otwórz nawias i użyj " żeby zacząć rozmowę i kończyć go.Potem po zakończeniu cudzysłowiu wstaw przecinek i spacja a po nim wpisz 1 żeby to bohater mówił albo &current_sprite żeby dany sprit w którym dodaliśmy dla niego skrypt gadał.Różnice między say_stop a say jest to że postać z komendą say nie da się ominąć oraz kontynuuje wykonanie komend bez ominięcia tekstu za pomocą spacji.

`1 po otwartym cudzyłowiu określa jaki kolor musi mieć czcionka.Jest ich 15:
`1 - Różowy
`2 - Ciemnozielony
`3 - Błękitny
`4 - Pomarańczowy
`5 - Fioletowy
`6 - brązowo-pomarańczowy
`7 - Szary
`8 - Ciemnoszary
`9 - niebieski
`0 - Zielony
`! - Zółty(Domyślny)
`@- Zółty(Domyślny)
`# - Czerwony
`$ - Żółty(domyślny)
`% - Biały
Bez żadnego koloru - Żółty(Domyślny)

komendy takie jak freeze() używa się do tego żeby dana postać się nie poruszała a unfreeze() żeby mógł się ruszyć.To bardzo ważne!Jeśli chcesz żeby dany sprit który dla niego dodałeś ten skrypt też nie mógł się ruszyć po prostu wpisz freeze(&current_sprite);
a żeby odmrozić wpisz unfreeze(&current_sprite);

I pamiętaj! Główny bohater jest zawsze 1!

III.Robienie pierwszej mapki.

Robienie mapki jest bardzo łatwe w WinDinkEdit gdy załadowałeś szkielet wciśnij prawym klikiem na jakiś fioletowy kwadracik i wybierz "New Screen"
Image
Potem stworzyliśmy screena tyle że ziemia nie jest w naszym dobrym guście
[link widoczny dla zalogowanych]
Wchodzimy w tryb ziemi i wciskamy 1(Albo od razu jeden to przejdziesz od razu do galerii wraz z trybem ziemi) i wybieramy na przykład taką ziemię:
[link widoczny dla zalogowanych]
i wciskamy C i wracamy do screena wciskając ESC.
Wybieramy ziemię na przykład taką:
Image
i wciskamy S.
Mamy teraz taką ziemię:
[link widoczny dla zalogowanych]
Zapisujemy,włączamy grę i mamy już swoją mapkę:
[link widoczny dla zalogowanych]

Uwaga!Każda ziemia/powierzchia ma swoją domyślną utwardzenie!

Jeśli macie jakieś pytania to wysłać mi na PW.

P.S Sorki że obrazki są zbyt duże.
BTW może to zachęci to robienia jakiś D-modów.
A tak zapomniałem co to jest d-mod.D-mod jest to samo jak mod do gry i możemy na nim robić własne przygodówki(Nie tylko z Dink'iem).Skrót oznacza DinkModule a skrypty nazywają się DinkC.


EDIT: OK teraz dodaje kolejne tutki:
IV.Brain
Pewnie po zabawie z edytorem natknęliście na opcje zwaną Bran.Do czego ono służy?Służy do tego żeby sprit sam został skryptowany i oto 17 brainów z wyjaśnieniem co robi:
Brain 0 - Sprit nic nie robi + żadnej animacji
Brain 1 - Brain dla Dinka.Nie dodawać dla danego sprit'a!
Brain 2 - Nie wiadomo
Brain 3 - Animacja + dźwięk kwaczenia(Używaj tylko dla kaczek)
Brain 4 - TO samo co z Brain 3 tyle że jest dźwięk chrumkania(Używaj tylko dla świń)
Brain 5 - Służy do tego że animacja jest włączona i zatrzymuje się w ostatniej klatce
Brain 6 - To samo co z Brain 5 tyle że po ostatniej klatce powtarza animację
Brain 7 - To samo co z Brain 5 tyle że dana sekwencja sprita nie widać.
Brain 8 - Nie Używana
Brain 9 - Jest to brain dla potworów.Gdy uderzysz danego potwora z tym brain'em będą cię gonić.
Brain 10 - Tak samo jak z Brain 9 tyle że nie goni cie
Brain 11 - Brain dla pocisku z powtórzeniem animacji
Brain 12 - Sprit zmniejsza się i powięsza się
Brain 13 - Brain dla wskaźniku myszy
Brain 14 - Brain dla Przycisku
Brain 15 - Brain dla cienia
Brain 16 - Dany sprit ma cechy ludzkie.Chodzi, rozgląda się i nie goni cię gdy go uderzysz.
Brain 17 - To samo co z Brain'em 11 tyle że bez powtarzania animacji.
I to tyle.

V.Ustawienie miejsca startu
W Skeleton B domyślnym miejscem startem jest screen 400,X:180,Y:250 i ukierunek postaci na 8.Jak to zmienić?Proste.Wejdź do folderu z nazwa twojego d-moda i wejdź do folderu STORY.Otwórz skrypt START-1.C i mamy taki skrypt:
Kod:

//for start button

void main( void )
{
    int &crap;
}

void buttonon( void )
{
    sp_pframe(&current_sprite, 2);
    Playsound(20,22050,0,0,0);
}

void buttonoff( void )
{
    sp_pframe(&current_sprite, 1);
    Playsound(21,22050,0,0,0);
}

void click ( void )
{
    //lets start a new game
    Say_xy("`%Please wait. (Creating new game)", 0, 394);
    wait(1);

    //This is where you would change the room Dink starts in!!
    &player_map = 400;

    //This is where you would change the location Dink is going to show up
    //on this first screen...
    sp_x(1, 180);
    sp_y(1, 250);

    //Change dink from a mouse pointer into a human being. :)
    sp_base_walk(1, 70);
    sp_base_attack(1, 100);
    set_mode(2); //turn game on
    reset_timer();
    sp_dir(1, 8);
    sp_brain(1, 1);
    sp_que(1, 0);
    sp_noclip(1, 0);

    //Now, if you WANTED, you could set Dink's orininal variables so he
    //could start out with a little money & power if you want... Simply
    //comment out these lines if you want Dink to have nothing as far as
    //stats go when the game begins. Also, Dink starts with 10 LifeMax
    //(hit points).

    &strength = 3;
    &defense = 2;
    &magic = 1;
    &gold = 25;
    //&lifemax = 20;
    //&life = &lifemax;
    //&level = 2;

    //lets give him fists to start out with, and arm him with the fists.
    add_item("item-fst",438, 1);
    &cur_weapon = 1;
    arm_weapon();

    //Clear the screen black in preparation for the first room of the game.
    fill_screen(0);

    //This turns on the "status bar" for the beginning of the game. If you
    //want to have an "intro", simply comment out the next two lines, then
    //do them both after your intro is over...

    &update_status = 1;
    draw_status();

    //We're done, so let's kill this task & the game will begin!
    kill_this_task();
}

&player_map = 400 określa w którym screen'ie ma startować gra.Screenów jest max 768 w edytorze.
sp_x określa współrzędne X
sp_y określa współrzędne Y
sp_dir określa w którym kierunku ma stać dana postać.
Informacje o screen'ie,wsółrzędne x i y znajdziecie w dolnym prawym rogu ekranu edytora.
Kierunki dla komendy sp_dir jest na numpadzie na klawiaturze(Strzałki pod cyframi).

VI.Rozmowa z dwoma osobami
Po tym gdy już znasz podstawy komendy rozmów czas na trochę zaawansowaną skrypt w którym bohater rozmawia z dwoma osobami.
Jest klika sposobów na to lecz ja polecam używać komendę "int" oto przykład skryptu:
Kod:

void main(void)
{
int &koles = create_sprite(130, 100, 16, 581, 1);
}
void talk(void)
{
freeze(1);
freeze(&koles);
say_stop("Yo ziomy", 1);
say_stop("`2Yo.", &current_sprite);
say_stop("`3Yo.", &koles);
say_stop("Co tam?", 1);
say_stop("`2A spoko", &current_sprite);
say_stop("`3U mnie tez.", &koles);
unfreeze(1);
unfreeze(&koles);
}

ak zauważyłeś dodałem void main(void) do czego on służy?Żeby skrypt działał od razu bez gadania i innych działań tylko od razu!
Jest także taka komenda w void main(void) "int &koles = create_sprite(130, 100, 16, 581, 1);"

co oznacza?Oznacza to że tworzysz kolejny sprit w naszym screen'ie bez edytora!Oto wyjaśnienie:
Kod:
int &koles = create_sprite(współrzędne x,współrzędne y,typ brain,sekwencja,klatka);

jeszcze zauważyłeś że dodałem freeze dla &koles?Dlaczego gdyż w nawiasie wpisujesz dla kogo jest ta komenda(Tylko w niektórych skryptach) oraz podczas gadania zamiast &current_sprite jest też &koles żeby to sprit którego stworzyłeś wraz z komendą int to powiedział.A komendę unfreeze to dowiesz się od razu.

VII.Podstawowe void'y.
Jak zauważyłeś w tutku są 2 voidy ale jest jeszcze więcej i napiszę podstawowe voidy używane w oryginalnej grze:

void main(void) - Tutaj są komendy które włączają bez żadnej akcjii tylko od razu!
void talk(void) - Tutaj możesz dodawać komendy które działają gdy zaczniesz rozmawiać.
void hit(void) - Tutaj możesz dodawać komendy które działają gdy zaatakujesz jakąś postać.
void die(void) - Tutaj możesz dodawać komendy które działają gdy dana osoba zginie.
void attack(void) - Tutaj możesz dodawać komendy które działają gdy zostajesz zaatakowany.
void push(void) - Tutaj możesz dodawać komendy które działają gdy zaczniesz coś pchać.
Możesz także stworzyć swój własny void lecz nie wiem co się stanie.Zobacz na skrypty D-mod'a "Dinky Dimension: FIAT" to z pewnością zrozumiesz(chyba):
[link widoczny dla zalogowanych]


VIII.Globale.
Globale.Jesteś ciekaw do czego one służą?A więc służą do robienie swoich quest'ów,nowe statusy itp. wszystkie globale znajdują się w MAIN.C i oto skrypt:
Kod:

//main.c run when dink is started

void main()
{

//let's initialize all our globals first.........
// These globals are REQUIRED by dink.exe (it directly uses them)

  make_global_int("&exp",0);
  make_global_int("&strength", 1);
  make_global_int("&defense", 0);
  make_global_int("&cur_weapon", 0);
  make_global_int("&cur_magic", 0);
  make_global_int("&gold", 0);
  make_global_int("&magic", 0);
  make_global_int("&magic_level", 0);
  make_global_int("&vision", 0);
  make_global_int("&result", 0);
  make_global_int("&speed", 1);
  make_global_int("&timing", 0);
  make_global_int("&lifemax", 10);
  make_global_int("&life", 10);
  make_global_int("&level", 1);
  make_global_int("&player_map", 0);
  make_global_int("&last_text", 0);
  make_global_int("&update_status", 0);
  make_global_int("&missile_target", 0);
  make_global_int("&missle_source", 0);
  make_global_int("&enemy_sprite", 0);
  make_global_int("&magic_cost", 0);
  make_global_int("&save_x", 0);
  make_global_int("&save_y", 0);
  make_global_int("&dinklogo", 0);

// Add your own globals here. Remember, you only get about 200 of them
// total, so be sure you don't go overboard.
 
  make_global_int("&story", 0);

//Now we're done... Dink knows to run START.C automatically next....

    debug("Dink started. Time to <Your Dmod Name Goes Here>");
    kill_this_task();
}

Jak widzisz to są właśnie globale.To co podałem są to podstawowe globale którego NIE WOLNO USUNĄĆ(NAWET &STORY global).Jeśli chcesz dodać jakiś global to możesz tylko pod globalem
Kod:

make_global_int("&story", 0);

Oto wyjaśnienie w komendzie globali:
make_global_int("&nazwa_globali", numer);

Jak już mówiłem dzięki temu możesz zrobić questy,nowe statusy itp. lecz możesz tylko dodać max. 200 global'ów.
IX.Komenda move,move_stop i wait.
Jeśli chcemy żeby główny bohater lub sprit zaczął chodzić do danego miejsca NAWET gdy jest włączona komenda freeze to mamy do wyboru dwa skrypty:
move
move_stop
Jak to się robi?Proste i oto przykładowy skrypt wykonany przeze mnie:
Kod:

void talk(void)
{
freeze(1);
freeze(&current_sprite);
say_stop("Ej ziomus czemu nie idziesz sie pokapac?", 1);
say_stop("`2Bo tam są rekiny!", &current_sprite);
say_stop("Bzdura.", 1);
move_stop(1, 6, 150, 1);
sp_dir(1, 4);
say_stop("`2Nie wchodz tam mowie serio!Tam sa rekiny!", &current_sprite);
say_stop("Ta akurat.", 1);
move_stop(1, 6, 300, 1);
wait(2000);
sp_dir(1, 4);
say_stop("Tu nie ma zadnych rekinow.", 1);
say_stop("`2Jest!", &current_sprite);
say_stop("Na jeziorze?", 1);
say_stop("`2Tak.", &current_sprite);
sp_dir(1, 2);
wait(3000);
sp_dir(1, 4);
say_stop("Tumanie!Na jeziorze nie ma rekinow.Tylko ryby!", 1);
say_stop("`2Serio?", 1);
move(1, 4, 75, 1);
say_stop("Serio.", 1);
unfreeze(1);
unfreeze(&current_sprite);
}

A więc zaczniemy od tego co trzeba dodawać w komendzie move i move_stop:
Kod:

move_stop(kto, kierunek, współrzędne, czy mozna chodzic po utwardzonym miejscu);
move(kto, kierunek, współrzędne, czy mozna chodzic po utwardzonym miejscu);

Kto - dodałem 1 gdyż gł. bohater jest zawsze 1.
kierunek - tak samo jak z komendą sp_dir
współrzędne - Gdy mamy kierunek 4 i 6 to wpisujemy współrzędne Y a w przypadku 8 i 2 współrzędne X.
czy mozna chodzic po utwardzonym miejscu - Jeśli chcesz żeby postać mogła chodzić po utwardzonym miejscu wpisz 1 a jeśli nie to wpisz 0.
komenda move jest taka sama jak move_stop lecz działanie jak w komendzie say.

Komenda wait służy do tego ile czasu minie dla wykonywanie kolejnych komend.1000 to jedna sekunda.

I to tyle.

X.Chodzenie spritów.
Z pewnością chcecie zrobić tak żeby dany sprit chodził.Jak to zrobić?
1.Najpierw wybierz ludzika z galerii spritów np. mag.
2.Kliknij prawym klikiem na niego i zrób tak:
-Ustaw Brain na 16.
-Wciśnij Auto tam gdzie jest base_walk
-Ustaw Speed na 1
Wciśnij OK i zapisz grę.
Mamy już pierwszego żywego człowieka Smile

UWAGA!Nie dodawaj utwardzenia bo inaczej będzie stać na miejscu!

XI.Ekran wybierania.

W oryginalnej grze jak zauważyliście można zrobić ekran wybrania takie jak przedstaw się,opowiedz o itp.Oto skrypt jak to zrobić
Kod:

void talk(void)
{
freeze(1);
freeze(&current_sprite);
choice_start();
"Przedstaw sie"
"Opowiedz swoj ulubiony cytat"
"Niewazne"
choice_end();

if (&result == 1)
{
say_stop("Nazywam sie GOKUSSJ6.Jedyny w Polsce ktory umie robic d-mody", 1);
say_stop("`1Milo cie poznac panie GOKUSSJ6 ja jestem Juzio zulem.", &current_sprite);
unfreeze(1);
unfreeze(&current_sprite);
}
if (&result == 2)
{
say_stop("Ej chcesz uslyszyc moj ulubiony cytat?", 1);
say_stop("`1No pewnie.", &current_sprite);
say_stop("Pokemon jest jak Moda na Sukces.Pelen niekonczacych sie idiotyzmu xD.", 1);
say_stop("`1LOL!", &current_sprite);
unfreeze(1);
unfreeze(&current_sprite);
}
if (&result == 3)
{
unfreeze(1);
unfreeze(&current_sprite);
}
}

Jak widzisz dodałem komendy o nazwie choice_start() i choice_end() do czego one służą?
Służa do tego żeby rozpocząć wybieranie co możemy gadać.Między choice_start a choice_end wpisujemy opcje wraz z cudzysłem.Globalem wybrania jest &result.Jeśli wpisujemy if (&result == 1) to zacznie się akcja gdy wybierzemy "Przedstaw sie" a jeśli wybierzemy "Opowiedz swoj ulubiony cytat" to zacznie załadować to co jest w if (&result == 2).Pamiętajmy że gdy wpisujemy if (&global == 1) zaczynamy wstawiać { jak w voidy a kończymy }.W if (&result == 3) wstawiłem dwie klamerki gdyż kończymy trzeci rezultat i kończymy dany void.
Jest kilka znaczków dla if (&result i innych globali)
== - gdy jest równy
< - mniejszy od
> - większy
<= - mniejszy lub jest równy
>= - większy lub jest równy
!= - nie jest równy

Oprócz if (&result) możemy użyć także dla innych komend np.
if (sp_dir(1, 2); == 1), if (sp_x(1, 300); != 1) itp.

XII.Robienie questa
Robienie questów jest bardzo łatwe.W MAIN.C możesz dodać global z własnym questem lub użyć globala &story.Weźmy że stworzyłem global o nazwie &quest.Oto przykładowy skrypt:
Kod:

void talk(void)
{
freeze(1);
freeze(&current_sprite);
choice_start();
"Przedstaw się"
(&quest == 0)"Zapytaj co sie stalo"
"Niewazne"

if (&result == 1)
{
say_stop("Yo jestem GOKUSSJ6 a ty?", 1);
say_stop("`5Yo ja jestem Gucio.", &current_sprite);
unfreeze(1);
unfreeze(&current_sprite);
}
if (&result == 2)
{
if (&quest == 0)
{
say_stop("Co sie stalo?", 1);
say_stop("`5Zgubilem swoja wodke.Pomozesz mi go znalezc?", &current_sprite);
say_stop("Ok.", 1);
unfreeze(1);
unfreeze(&current_sprite);
}
&quest = 1
}
if (&result == 3)
{
unfreeze(1);
unfreeze(&current_sprite);
}

A teraz czas na wyjaśnienia.
Jak widzisz dodałem do ekranu wyberania (&quest == 0) bez cudzysłowiu.Po co?Po to że gdy jeśli &quest jest 0 to pokaże się ta opcja wybrania.Po zrobieniu takiej komendy należy dodać także pod &result if (&quest == 0).Jeśli tego nie dodasz to nie zobaczysz komunikatu i skrypt nie będzie działał funkcjonalnie.Po zamknięciu if (&quest == 0) dodałem komendę &quest = 1 żeby już po rozmowie &quest == 0 zmienił się na &quest == 1.A teraz przejdźmy n ukończenie questa dla Gucia.
Kod:

void talk(void)
{
freeze(1);
freeze(&current_sprite);
choice_start();
"Zapytaj co sprzedaje"
(&quest == 1)"Zapytaj o wodke"
"Niewazne"
choice_end();

if (&result == 1)
{
say_stop("Co sprzedajesz?", 1);
say_stop("`3Wodke.", &current_sprite);
say_stop("Aha.", 1);
unfreeze(1);
unfreeze(&current_sprite);
}
if (&result == 2)
{
if (&quest == 1)
{
say_stop("Chcialbym kupic ta wodke", 1);
say_stop("`3A prosze wez go za darmo gdyz jestes moim pierwszym klientem", &current_sprite);
say_stop("Dzieki", 1);
}
&quest = 2
}
if (&result == 3)
{
unfreeze(1);
unfreeze(&current_sprite);
}
}

ok teraz gdy już zrobiliśmy skrypt dla sprzedawcy wódki czas na zminę w skryptcie Gucia Smile.
Kod:

oid talk(void)
{
freeze(1);
freeze(&current_sprite);
choice_start();
"Przedstaw się"
(&quest == 0)"Zapytaj co sie stalo"
(&quest == 2)"Daj mu wodke"
"Niewazne"

if (&result == 1)
{
say_stop("Yo jestem GOKUSSJ6 a ty?", 1);
say_stop("`5Yo ja jestem Gucio.", &current_sprite);
unfreeze(1);
unfreeze(&current_sprite);
}
if (&result == 2)
{
if (&quest == 0)
{
say_stop("Co sie stalo?", 1);
say_stop("`5Zgubilem swoja wodke.Pomozesz mi go znalezc?", &current_sprite);
say_stop("Ok.", 1);
unfreeze(1);
unfreeze(&current_sprite);
}
&quest = 1
}
if (&result == 3)
{
if (&quest == 2)
{
say_stop("Prosze oto wodka.", 1);
say_stop("Dzieki masz tu kase", &current_sprite);
&gold += 500;
}
&quest = 3
}
if (&result == 4)
{
unfreeze(1);
unfreeze(&current_sprite);
}

Teraz gdy już ukończyliśmy questa dla Gucia musimy teraz dodać &quest na 3.Bo gdy zostawimy na 2 to komunikat się pokaże cały czas a więc dodać &quest na 3 żeby go nie pokazać.Jak zauważyliście jest jeszcze nowa komenda dotyczący globali &gold.&gold jest podstawowym globalem w MAIN.C i określa ilość sztuk złota. ten += określa ile złota dodać czyli jeśli wpisujemy &gold += 500 to dostaniemy 500 sztuk złota.Możemy także tą kase odjąć.Wystarczy wpisać zamiast + na -.

[ Dodano: 22 Sierpień 07, 10:13 ]
XIII.Warpowanie
Zacznijmy teraz od warpowania.Tej komendy możemy użyć do wejścia lub wyjścia z domu,przenoszenie,pójść na górę itp.Robienie warpów jest bardzo łatwe i napiszę jak z niego skorzystać.
Najpierw wybuduj dom(Sekwencja:63,klatka:1) a potem zrób drzwi(Sekwencja:63,klatka:2 lub 3) i postaw gdzie chcesz.Potem wybierz sekwencje otwierania drzwi(Sekwencja:61/62/50/51,klatka:1) i dodaj utwardzenie w Propeties(Wciskając prawym klikiem na sprite) zaznaczając Hard.
[link widoczny dla zalogowanych]
Potem w Propeties skopiuj sekwencję drzwi w którym dodałeś utwardzenie i wklej do touch sequence żeby była animacja otwierania drzwi po dotknięciu.
Potem stwórz kolejny screen który będzie określał co jest w środku(Rada po stworzeniu screena kliknij prawym klikiem na screena i zaznacz Inside żeby rozpoznać który screen dzieje się w środku domu,jaskin itp.)
[link widoczny dla zalogowanych]
Potem w galerii spritów wybieramy stół(Sekwencja:87, klatka: dowolna),dodajemy utwardzenie i w type wybieramy Invisible.Postaw niewidzialne drzwi do wyjścia.

Wróćmy teraz na zewnątrz.Postaw animację drzwi do drugiego,potem kliknij prawym klikiem na niego i wybierz Set Warp Begin.Wróć do środka i postaw w którym terenie ma się znajować bohater gdy zostaje przeniesiony.Jeśli wybierzesz jakiś punkt kliknij prawym klikiem i wybierz Set Warp End.Zrób tak samo z niewidzialnym stołem tyle że na zewnątrz.

Mamy już warp drzwi a teraz na schody.Zrób kolejny screen żeby określił jako pierwsze piętro potem na parterze dodaj schodzy prowadzące do góry(Sekwencja:428, klatka:1 lub 3)i na dół na 1 piętrze(Sekwencja:428, klatka:2 lub 4).Dla schodów prowadzący dół ustaw głębię(Dept que) na -10 w Propeties.Potem dla obu schód wpisz w Sounds w Protepies liczbę 39 żeby po dotknięciu załadował dźwięk nr. 39(Dźwięk schodzenia lub pójście po schodach).

A teraz czas na jaskinię.Zrób jaskinię gdzieś(sekwencja:89,klatka: 9) i wstaw dla niego skrypt s1-hole(Znajdziesz go w folderze develop/source).I otwórz ten skrypt.
Kod:

void main( void )
{
preload_seq(452);
}


void touch( void )
{
if (&life < 1) return;

freeze(1);
sp_x(1, 274);
sp_y(1, 195);
sp_seq(1, 452);
sp_frame(1, 1);
sp_nocontrol(1, 1); //dink can't move until anim is done!
sp_touch_damage(&current_sprite, 0);
sp_brain(1, 0);
wait(2000);
sp_brain(1, 1);
&player_map = 131;
sp_x(1, 289);
sp_y(1, 377);
load_screen(131);
draw_screen();
}

Pod freeze(1); mamy dwie skrypty związane ze współrzędnem x i y.Określają animację jak gł. bohater wchodzi do jaskini więc ustaw tam gdzie jest jaskinia a komendy pod sp_brain(1, 1) określa gdzie bohater ma być przenoszony.

I to tyle.

Pamiętaj!Gdy dodałeś do sprita Set warp begin a na przeszkodzie stoi drugi sprit w którym chcesz dodać punkt warpowania.Nie martw się.Gdy wybierzesz Set warp Begin to będzie określał tylko współrzędne x i y zamiast spritów.

I jeszcze jedno.Żeby warpowanie działało sprit MUSI być utwardzony!

XIV.Utwardzenia.

Utwardzenia.Do czego one służą?Służą do tego żeby danapostać nie mogła przejść przez jakiś teren żeby nie wyglądało tak jakby przechodził przez ściany.WYstępują 5 typów utwardzeń:
Żółty - Podstawowe utwardzenie dla teren.Pociski nie przechodzą.
Błękitny(Low) - Podstawowe utwardzenie dla teren.Pociski przechodzą.
Różowy(Unknow) - Nieznane
Szary - Utwardzenie dla sprite'ów.Pociski nie przechodzą.
Czerwony - Utwardzenie dla spite'a z dodana funkcją warpowani'a.Pociski nie przechodzą.Postać może warpować po dotknięciu.

Robiąc domy mamy utwardzenie dla sprite'a lecz gdy go włączymy to będzie dotyczyło tylko pola w którym jest i postać może przejść przez sprite'a gdy nie jest pole utwardzone.CO trzeba zrobić?Proste.Wejdź w tryb utwardzenia.Przytrzymając Shift kliknij na dane miejsce i ustaw tak żeby linie były dookoła domu(Jak już mówiłem max. ilość punktów jest 4).Gdy nam się udaje będziemy mieli coś takiego:
[link widoczny dla zalogowanych]
Lecz niestety część nie jest utwardzona a więc wchodzimy w galerię(Klawisz E) gdy jesteśmy w trybie utwardzenia i na ostatnią stronę.Mamy teraz takie utwardzenia które są używane dla domów:
[link widoczny dla zalogowanych]
Wybieramy jedno z nich i dodajemy.Ja zrobiłem coś takiego:
[link widoczny dla zalogowanych]

Pamietajmy jednak aby sprit z włączonym warpem dosięgnął do nieutwardzonej ziemi.Możemy to sprawdzić wybierając File->Play Dmod...

I to tyle.

UWAGA!Gdy kopiujemy ziemię to dane utwardzenie też zostaje skopiowany!

Zedytuje ten post gdy dodaje jakieś tutki(Lub napisze bez).

Jeśli macie jakieś pytania to proszę pogadać ze mną.


Post został pochwalony 0 razy
Zobacz profil autora
GOKUSSJ6
Shinobi
Shinobi



Dołączył: 30 Cze 2006
Posty: 329
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z Domu

PostWysłany: Wto 11:43, 28 Sie 2007 Powrót do góry

XV.Aktywacja skryptu po dotknięciu sprita.

Pewnie zobaczyliście w poradniku o void'ach i chcecie zrobić żeby dany skrypt działał po dotknięciu lecz jakoś wam nie działa.Oto co należy zrobić:
Najpierw nacznijmy od void main.Dodajemy komendę sp_touch_damage(&current_sprite, -1)
Kod:

void main(void)
{
sp_touch_damage(&current_sprite, -1);
}

Dlaczego dodałem -1?Żeby w tej komendzie działał skrypt po dotknięciu.A więc kontynuujmy.
Kod:

void main(void)
{
sp_touch_damage(&current_sprite, -1);
}
void touch(void)
{
say("Nie wchodze tam.Boje sie ciemnosci.", 1);
move_stop(1, 6, 150, 1);
}

Jak widzisz po void main dodajemy kolejny void "touch" żeby ten skrypt działał w jednym pliku.I to tyle.


Post został pochwalony 0 razy
Zobacz profil autora
flclflcl
Shogun
Shogun



Dołączył: 07 Kwi 2006
Posty: 1584
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Wto 20:42, 28 Sie 2007 Powrót do góry

Kurde troszkę nauki mam
Trzeba usiąść w sobotę i pouczyć się


Post został pochwalony 0 razy
Zobacz profil autora
GOKUSSJ6
Shinobi
Shinobi



Dołączył: 30 Cze 2006
Posty: 329
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z Domu

PostWysłany: Śro 11:07, 29 Sie 2007 Powrót do góry

flclflcl napisał:
Kurde troszkę nauki mam
Trzeba usiąść w sobotę i pouczyć się

Oj tak.Lecz szybko się nauczysz gdyż robienie takich komend jest łatwe i zrozumiesz od razu.

Dodaje kolejny tut.

XVI.Intro
Pewnie chcecie zrobić intro za pomocą komend move_stop,say_stop i innych komend.Cóż najpierw otwórzmy skrypt "START-1.c"
Kod:

//for start button

void main( void )
{
    int &crap;
}

void buttonon( void )
{
    sp_pframe(&current_sprite, 2);
    Playsound(20,22050,0,0,0);
}

void buttonoff( void )
{
    sp_pframe(&current_sprite, 1);
    Playsound(21,22050,0,0,0);
}

void click ( void )
{
    //lets start a new game
    Say_xy("`%Please wait. (Creating new game)", 0, 394);
    wait(1);

    //This is where you would change the room Dink starts in!!
    &player_map = 400;

    //This is where you would change the location Dink is going to show up
    //on this first screen...
    sp_x(1, 180);
    sp_y(1, 250);

    //Change dink from a mouse pointer into a human being. :)
    sp_base_walk(1, 70);
    sp_base_attack(1, 100);
    set_mode(2); //turn game on
    reset_timer();
    sp_dir(1, 8);
    sp_brain(1, 1);
    sp_que(1, 0);
    sp_noclip(1, 0);

    //Now, if you WANTED, you could set Dink's orininal variables so he
    //could start out with a little money & power if you want... Simply
    //comment out these lines if you want Dink to have nothing as far as
    //stats go when the game begins. Also, Dink starts with 10 LifeMax
    //(hit points).

    &strength = 3;
    &defense = 2;
    &magic = 1;
    &gold = 25;
    //&lifemax = 20;
    //&life = &lifemax;
    //&level = 2;

    //lets give him fists to start out with, and arm him with the fists.
    add_item("item-fst",438, 1);
    &cur_weapon = 1;
    arm_weapon();

    //Clear the screen black in preparation for the first room of the game.
    fill_screen(0);

    //This turns on the "status bar" for the beginning of the game. If you
    //want to have an "intro", simply comment out the next two lines, then
    //do them both after your intro is over...

    &update_status = 1;
    draw_status();

    //We're done, so let's kill this task & the game will begin!
    kill_this_task();
}


Usuwamy komendy &update_Status = 1; i draw_status(); żeby nie pojawił się status-bar(To co pokazuje ile masz żyć,siłę itp.).A teraz robimy skrypt.Oto skrypt z mojego d-mod'a "The Legend of the Dink III - The Fall of Imperial Seth DEMO Version":

Kod:

///Don't RIP!
void main(void)
{
int &matridge = create_sprite(240, 160, 16, 567, 1);
int &fireplace = create_sprite(471, 106, 6, 86, 1);
sp_seq(&fireplace, 86);
sp_dir(1, 2);
sp_dir(&matridge, 2);
sp_base_walk(&matridge, 560);
sp_speed(&matridge, 2);
freeze(1);
freeze(&matridge);
wait(750);
sp_dir(1, 6);
sp_dir(&matridge, 4);
say_stop("Holy shit Matridge what we should do now?", 1);
say_stop("`0We have to escape Dink.", &matridge);
say_stop("How?!We are probably surrounded about 50 goblins or more!", 1);
say_stop("`0I knew it that it'll be useful.", &matridge);
say_stop("What are you talking about?", 1);
say_stop("`0I made a secret passage on the fireplace.", &matridge);
say_stop("Sweet!", 1);
move_stop(&matridge, 6, 290, 1);
move_stop(&matridge, 2, 245, 1);
move(1, 6, 290, 1);
move_stop(&matridge, 6, 475, 1);
move(1, 2, 245, 1);
move_stop(&matridge, 8, 125, 1);
move_stop(1, 6, 480, 1);
move_stop(1, 8, 125, 1);
sp_nodraw(&fireplace, 1);
int &fireplace2 = create_sprite(480, 99, 0, 64, 6);
sp_dir(&matridge, 6);
sp_dir(1, 4);
say_stop("`0Ok Dink take the book and find a road to Stonebrook.", &matridge);
say_stop("Why?Is that mean's that i'm going to home and have a rest?", 1);
say_stop("`0No Dink.In your homeplace probably there is Seth's mansion and probably others will need yur help", &matridge);
say_stop("Allright.", 1);
move(&matridge, 6, 480, 1);
move(&matridge, 2, 255, 1);
move_stop(1, 4, 470, 1);
sp_nodraw(1, 1);
int &dinkc = create_sprite(465, 144, 7, 452, 1);
sp_seq(&dinkc, 452);
wait(3000);
say_stop("Matridge.You won't go with me?", &fireplace2);
sp_dir(&matridge, 7);
say_stop("`0No.I'll stay here and take care of goblins.", &matridge);
say_stop("`0Good bye Dink.", &matridge);
say("Wait!Come with m...", &fireplace2);
wait(250);
sp_nodraw(&fireplace2, 1);
sp_nodraw(&fireplace, 0);
wait(500);
sp_dir(&matridge, 1);
say_stop("`0Come on stupid goblins i'll take care of ya!", &matridge);
fade_down();
sp_nodraw(1, 0);
sp_base_walk(1, 70);
sp_base_attack(1, 100);
sp_brain(1, 1);
sp_que(1, 0);
sp_noclip(1, 0);
sp_active(&kill, 0);
wait(500);
script_attach(1000);
fill_screen(0);
&player_map = 735;
load_screen(735);
draw_screen();
sp_x(1, 315);
sp_y(1, 280);
sp_dir(1, 8);
fade_up();

kill_this_task();
}
///Don't RIP!

Jeśli chcemy żeby intro wciąż leciał lecz na innej screen'ie to dodajemy to:

Kod:

fade_down();
sp_nodraw(1, 0);
sp_base_walk(1, 70);
sp_base_attack(1, 100);
sp_brain(1, 1);
sp_que(1, 0);
sp_noclip(1, 0);
sp_active(&kill, 0);
wait(500);
script_attach(1000);
fill_screen(0);
&player_map = 735;
load_screen(735);
draw_screen();
sp_x(1, 315);
sp_y(1, 280);
sp_dir(1, 8);
fade_up();

kill_this_task();


Komenda "&player_map =" służy do tego w którym screen'ie ma być bohater.
Komenda load_screen(); służy do tego który screen załadować.(Ładując screen pamiętaj żeby dodac także komendę draw_screen(); ).
Określamy teraz współrzędne x,y i w którym kierunku ma patrzeć bohater.
Pamiętaj żeby dodać script_attack(1000) (Nie zmieniać numeru dla tej komendy ma być 1000!) żeby można załadować kolejny skrypt.
I jeszcze pamiętaj gdy kończąc te komendy:
Kod:

fade_down();
sp_nodraw(1, 0);
sp_base_walk(1, 70);
sp_base_attack(1, 100);
sp_brain(1, 1);
sp_que(1, 0);
sp_noclip(1, 0);
sp_active(&kill, 0);
wait(500);
script_attach(1000);
fill_screen(0);
&player_map = 735;
load_screen(735);
draw_screen();
sp_x(1, 315);
sp_y(1, 280);
sp_dir(1, 8);
fade_up();

dodaj komendę kill_this_task(); żeby nie występował jakieś błędy.
A teraz czas na ukończenie tego intra.Jak zwykle skrypt z mojego d-moda kończący to intro:
Kod:

///Don't RIP!
void main(void)
{
if (&story == 0)
{
freeze(1);
say_stop("Oh well let's find the road to my home.", 1);
sp_dir(1, 2);
say_stop_xy("`0Argh!", 0, 350);
move(1, 2, 320, 1);
say_stop("Matridge!No!", 1);
say_stop_xy("`4Tuk dat wizurd to thy casule und thruw hum tu thy pryson.", 0, 350);
say_stop_xy("`4Rust uxplure the huse fur Dunk Smulwuud.", 0, 350);
say("Poor Matridge.It'll be better if i'll the road FAST!", 1);
say_stop_xy("`2Yus cuptun!", 0, 350);
wait(1000);
unfreeze(1);
&update_status = 1;
draw_status();
&story = 1
}
}
///Don't RIP!

Jak widzisz dodałem teraz pod komendą unfreeze(1); komendy który usunąłeś ze skryptu "START-1.c".Dlaczego?Żeby pojawił się już statusbar i rozpocząć grę.Global &story można użyć także dla intra.


Post został pochwalony 0 razy
Zobacz profil autora
GOKUSSJ6
Shinobi
Shinobi



Dołączył: 30 Cze 2006
Posty: 329
Przeczytał: 0 tematów

Ostrzeżeń: 0/5
Skąd: Z Domu

PostWysłany: Wto 15:17, 04 Wrz 2007 Powrót do góry

Dodaje kolejny tut.(napisałem jako nowy post żeby was przypomnieć że wciąż temat istnieje)

XV.Dodawanie utwardzenia bez edytora
Ok teraz czas na trochę zaawansowaną komendę.Tworząc sprite za pomocą komendy
Kod:

int &nazwa = create_sprite

zauważyliście że nie ma utwardzenia.Jak zrobić żeby stworzony sprit z tego komendu dodać utwardzenie?Bardzo proste.Oto przykładowy skrypt.(Tym razem wyjaśnienie są w tym skrypcie jako /// gdyż silnik ignoruje te znaki dlatego że są uznawane za wyjaśnienie co robi ten skrypt i tego omija.)
Kod:

void main(void)
{
///Tworzymy sprit łóżka
int &lozko = create_sprite(237, 282, 0, 64, 3);
///Dodajemy skrypt dotyczący utwardzenia.
///Ustawiając na 1 nie będzie można go utwardzić
///Ustawiając na 0 można dany sprit utwardzić
sp_hard(&lozko, 0);
///Teraz dodajemy komendę żeby od razu dodać utwardzenie
draw_hard_sprite();
///Jest jeszcze komenda draw_hard_map(); lecz radze używać draw_hard_sprite();
}

I to tyle.


Post został pochwalony 0 razy
Zobacz profil autora
flclflcl
Shogun
Shogun



Dołączył: 07 Kwi 2006
Posty: 1584
Przeczytał: 0 tematów

Pomógł: 3 razy
Ostrzeżeń: 0/5

PostWysłany: Czw 11:05, 06 Wrz 2007 Powrót do góry

Kurde jak dla mnie czarna magia ale powoli się uczę może coś mi wyjdzie


Post został pochwalony 0 razy
Zobacz profil autora
Wyświetl posty z ostatnich:      
Napisz nowy tematOdpowiedz do tematu


 Skocz do:   



Zobacz następny temat
Zobacz poprzedni temat
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001/3 phpBB Group :: FI Theme :: Wszystkie czasy w strefie CET (Europa)
 
 
Regulamin