Tworzenie scenariuszy - część 1.Scenariusz to nic innego jak pojedyncza misja w kampanii lub zaawansowana mapa do gry wieloosobowej. Poprzez scenariusz możemy umieścić na naszej mapie jednostki, dialogi bohaterów, pułpapki, wydarzenia, nowe cele misji i wiele, wiele innych. Scenariusz daje Ci prawie nieograniczone możliwości tworzenia własnej przygody.
Programowanie scenariuszy wymaga od nas znajomości
WML (
Wesnoth Markup Language) czyli języka programowania tej gry. Jest on bardzo prosty w obsłudze jednak dość obszerny. Poznanie wszystkich jego możliwości może zająć trochę czasu, ale nie jest konieczne, jeśli chcemy tworzyć w miarę proste scenariusze. Sporym ułatwieniem są tzw.
makra, czyli bardzo użyteczne formułki zastępujące ogromne fragmenty kodu. Dla początkujących twórców jest to wielkie ułatwienie z którego będziemy często korzystać w dalszych częściach poradnika.
Tworzenie scenariusza wieloosobowego z bajerami:W poprzednim tutorialu nauczyłeś się robić scenariusze wieloosobowe do własnych map. Dzięki temu mogłeś określić ustawienia dla różnych graczy, tworzyć opisy do map i nadawać im ulepszone tytuły.
Teraz dowiesz się jak tchnąć życie w taki scenariusz. Oto nasz przykładowy scenariusz bez bajerów:
[multiplayer] id=moj_scenariusz name= _ "2p - Moj Scenariusz" map_data="{add-ons/Moj_Dodatek/mapka.map}" description= _ "To moj scenariusz multiplayer na dwóch graczy z dodatkowymi bajerami"
{DEFAULT_SCHEDULE} {DEFAULT_MUSIC_PLAYLIST}
[side] side=1 canrecruit=yes controller=human team_name=north user_team_name= _ "teamname^North" gold=150 village_gold=2 fog=yes [/side] [side] side=2 canrecruit=yes controller=human team_name=south user_team_name= _ "teamname^South" gold=150 village_gold=2 fog=yes [/side] [/multiplayer]
|
Jak widać jest to typowy scenariusz na dwóch graczy z domyślnym cyklem dnia i nocy, z normalną ścieżką dźwiękową i z aktywną mgłą - nudy. Trzeba to zmienić! A może dodamy parę jednostek do mapy dla każdej ze stron? W edytorze map nie można tego zrobić ale tu jak najbardziej. Skorzystamy tu z makra dodającego jedną jednostkę na określoną pozycję na mapie:
{UNIT STRONA TYP X Y WML}
Przykładowo pierwszej stronie (side=1) damy Smoczego Mistrza Ognia i umieścimy go na pozycji 2,4:
{UNIT 1 "Drake Blademaster" 2 4 ()}Objaśnienie:
1 to numer strony konfliktu
"Drake Blademaster" to typ jednostki (id w jej pliku .cfg). Jeśli nie znamy id jednostki możemy podpatrzeć je na tej stronie:
link2 4 to nasze współrzędne x i y na mapie na których ma pojawić się jednostka
() to miejsce na nasz dodatkowy kod wml, który modyfikowałby jednostkę. Na razie jest nam to niepotrzebne, ale gdybyśmy chcieli, aby nasz smoczek miał 1 punkt życia to wpiszemy w te nawiasy to:
hitpoints=1Tak uzupełnione makro wstawiamy do scenariusza. Możemy je umieścić gdzie chcemy, ja natomiast umieszczam je pomiędzy [side][/side] strony do której jednostka ma należeć. Wtedy mam porządek w pliku.
Dajmy jeszcze stronie 2 np. Wróżkę Elfów na pozycję 10,5. Oto jak wygląda nasz plik:
[multiplayer] id=moj_scenariusz name= _ "2p - Moj Scenariusz" map_data="{add-ons/Moj_Dodatek/mapka.map}" description= _ "To moj scenariusz multiplayer na dwóch graczy z dodatkowymi bajerami"
{DEFAULT_SCHEDULE} {DEFAULT_MUSIC_PLAYLIST}
[side] side=1 canrecruit=yes controller=human team_name=north user_team_name= _ "teamname^North" gold=150 village_gold=2 fog=yes {UNIT 1 "Drake Blademaster" 2 4 ()} [/side] [side] side=2 canrecruit=yes controller=human team_name=south user_team_name= _ "teamname^South" gold=150 village_gold=2 fog=yes {UNIT 2 "Elvish Shyde" 10 5 ()} [/side] [/multiplayer]
|
Warto teraz zapisać i zagrać w taką mapkę. Powinniśmy zauważyć, że na starcie mamy nie tylko swojego bohatera ale i dodatkową jednostkę, którą właśnie dodaliśmy.
Wiesz już jak dodawać jednostki. Teraz zajmijmy się porami dnia i nocy.
Mamy makro:
{DEFAULT_SCHEDULE} (domyślny cykl dnia i nocy). Makro to składa się z kilku mniejszych makr:
{DAWN} - świt
{MORNING} - ranek
{AFTERNOON} - popołudnie
{DUSK} - zmierzch
{FIRST_WATCH} - noc cz.1
{SECOND_WATCH} - noc cz.2
Możemy wykorzystać te informacje i zastąpić makro
{DEFAULT_SCHEDULE} właśnie tymi mniejszymi makrami i ułożyć z nich własny cykl, a nawet pousuwać określone pory tak aby nigdy nie występowały. Równie dobrze możemy zrobić jedną porę np. zmierzch. Wtedy napiszemy zamiast {DEFAULT_SCHEDULE} samo makro {DUSK}.
Ja w swoim przykładzie wydłużę domyślny cykl tak aby każda pora trwała 2 tury. Zastąpię więc {DEFAULT_SCHEDULE} czymś takim:
[multiplayer] id=moj_scenariusz name= _ "2p - Moj Scenariusz" map_data="{add-ons/Moj_Dodatek/mapka.map}" description= _ "To moj scenariusz multiplayer na dwóch graczy z dodatkowymi bajerami"
{DAWN} {DAWN} {MORNING} {MORNING} {AFTERNOON} {AFTERNOON} {DUSK} {DUSK} {FIRST_WATCH} {FIRST_WATCH} {SECOND_WATCH} {SECOND_WATCH}
{DEFAULT_MUSIC_PLAYLIST}
[side] side=1 canrecruit=yes controller=human team_name=north user_team_name= _ "teamname^North" gold=150 village_gold=2 fog=yes {UNIT 1 "Drake Blademaster" 2 4 ()} [/side] [side] side=2 canrecruit=yes controller=human team_name=south user_team_name= _ "teamname^South" gold=150 village_gold=2 fog=yes {UNIT 2 "Elvish Shyde" 10 5 ()} [/side] [/multiplayer]
|
Teraz mój scenariusz ma własny, rozszerzony cykl dnia i nocy. Robi się ciekawie. A może na zakończenie zrobimy dodatkowy warunek zwycięstwa?Wieczne załatwianie przywódcy wroga może być nudne. Wymyślmy coś nowego i prostego. Powiedzmy, że dodatkowym warunkiem wygrania na naszej mapie będzie dojście do heksa 5,5. Kto pierwszy tam dotrze wygrywa scenariusz (trochę to głupie, ale za to łatwe do zaprogramowania).
Aby stworzyć nowy warunek zwycięstwa potrzebujemy
event'u. O tym cudzie będę pisał w następnej części, dlatego od razu pokażę jak będzie wyglądał nasz nowy cel misji w WML'u:
[event]
name=moveto
[filter]
x,y=5,5
[/filter]
[endlevel]
result=victory
[/endlevel]
[/event]
Wystarczy, że umieścimy go np. w następnej linijce pod [/side]. Teraz musimy jedynie powiedzieć graczowi o istnieniu dodatkowego warunku zwycięstwa:
[event]
name=prestart
[objectives]
[objective]
description= _ "Pokonaj przywodce wroga"
condition=win
[/objective]
[objective]
description= _ "lub dostan sie do 5,5"
condition=win
[/objective]
[/objectives]
[/event]
Wrzucamy to pod nasz poprzedni event.
Wypadałoby jeszcze pokazać na mapie, który heks to 5,5. Możemy to zrobić poprzez umieszczenie takiego obrazka:

Korzystamy z makra umieszczającego obrazki na mapie:
{PLACE_IMAGE ŚCIEŻKA X Y}W tym przypadku:
{PLACE_IMAGE "items/gohere.png" 5 5}Umieszczamy to z poziomu [multiplayer] (tzn. nie wstawiamy tego wewnątrz [event], [side] itp.). Ja dałem to na koniec pliku nad [/multiplayer] ale pod [/event].
Oto jak teraz wygląda nasz scenariusz:
[multiplayer] id=moj_scenariusz name= _ "2p - Moj Scenariusz" map_data="{add-ons/Moj_Dodatek/mapka.map}" description= _ "To moj scenariusz multiplayer na dwóch graczy z dodatkowymi bajerami"
{DAWN} {DAWN} {MORNING} {MORNING} {AFTERNOON} {AFTERNOON} {DUSK} {DUSK} {FIRST_WATCH} {FIRST_WATCH} {SECOND_WATCH} {SECOND_WATCH}
{DEFAULT_MUSIC_PLAYLIST}
[side] side=1 canrecruit=yes controller=human team_name=north user_team_name= _ "teamname^North" gold=150 village_gold=2 fog=yes {UNIT 1 "Drake Blademaster" 2 4 ()} [/side] [side] side=2 canrecruit=yes controller=human team_name=south user_team_name= _ "teamname^South" gold=150 village_gold=2 fog=yes {UNIT 2 "Elvish Shyde" 10 5 ()} [/side]
[event] name=moveto
[filter] x,y=5,5 [/filter]
[endlevel] result=victory [/endlevel]
[/event]
[event] name=prestart [objectives] [objective] description= _ "Pokonaj przywodce wroga" condition=win [/objective] [objective] description= _ "lub dostan sie do 5,5" condition=win [/objective] [/objectives]
[/event]
{PLACE_IMAGE "items/gohere.png" 5 5}
[/multiplayer]
|
Tak wygląda scenariusz z dodatkowymi jednostkami na starcie, rozszerzonym cyklem dnia i nocy oraz dodatkowym warunkiem zwycięstwa. Prawda, że proste? Miłego eksperymentowania ;)
W następnym odcinku zajmiemy się już wspomnianymi
eventami oraz innymi rzeczami jak
dialogi i
filtry.