Как да направим куест с GameMaker
Как да направим куест с GameMaker

Автор:Solano

------------
СПРАЙТОВЕ
---------------------
Спрайтовете които ще ползваме са следните:на нашия герой във всички посоки,легло,хамбургер,молив и стена.Можете
да ги намерите в папката с ръководството.
---------------------
SOUND
---------------------
Sound не съм слагал.Ако искате Вие си добавете някакъв ;-)
---------------------
СКРИПТОВЕ
---------------------
Най-лесно ще стане като си добавите 3 скрипта на мястото със скриптовете.Те са съответно използване,
разглеждане и вземане на предмет.Добавете първия,чрез add менюто и после add script.Ще го наречем use.Първото,
което трябва да се направи е следното:

choiceList = "";
for (i = 0; i <= guy.invlength; i += 1)
Този скрипт е за начина на избиране на предметите.Нататък скрипта трябва да продължи така:
current = guy.inventory[i];
if (current = burger)
choiceList += "Хамбургер|";
if (current = pensil)
choiceList += "Молив|";
}
choiceList += "Откажи"

chosen_item = guy.inventory[show_menu(choiceList, i)];


Този скрипт е за inventory-то на нашия човек и е в случав,когато изберем използвай и се покаже менюто с опция
кой предмет да използваме.Предметите, които можете да използвате са хамбургер и молив.И последното, което трябва да
добавите е това:

if (argument0 = bed)
{
if (chosen_item = burger)
show_message("Да бе!Няма да си цапам леглото с кетчуп!");
if (chosen_item = pensil)
show_message("По леглото не си шаркам.");
}

if (argument0 = wall)
{
if (chosen_item = burger)
show_message("Такааа.Готово дупката е готова и вече съм готов да изляза на свобода.")
}

Това са предметите,върху които да извършвате действията.Те са стена и легло.Както виждате тук има аругменти.И в
двата случая те трябва да са argument0.След това вече е мястото, при което е опция за селектираната тема.При леглото
има 2 неща,които могат да се използват,докато при стената е само един.И така целия скрипт трябва да изглежда по
следния начин:

choiceList = "";
for (i = 0; i <= guy.invlength; i += 1)
{
current = guy.inventory[i];
if (current = burger)
choiceList += "Хамбургер|";
if (current = pensil)
choiceList += "Молив|";
}
choiceList += "Откажи"

chosen_item = guy.inventory[show_menu(choiceList, i)];

if (argument0 = bed)
{
if (chosen_item = burger)
show_message("Да бе!Няма да си цапам леглото с кетчуп!");
if (chosen_item = pensil)
show_message("По леглото не си шаркам.");
}

if (argument0 = wall)
{
if (chosen_item = burger)
show_message("Такааа.Готово дупката е готова и вече съм готов да изляза на свобода.")
}


Сега добавете втори скрипт и го наречете examine.Toва е,когато разглеждате даден предмет.Тук има 4 аргумента.Тоест,
толкова, колкото предмети има в играта.Примерно ако трябва да го направим за леглото, скрипта трябва да изглежда
тала:
if (argument0 = bed)
{
show_message(Моето легло)
По същия начин става и с другите предмети-просто пишете аргумента,предмета и какво съобщение да излезе.Ето как
изглежда целия скрипт-

if (argument0 = burger)
{
show_message("Това е хамбургер,който жена ми донесе преди малко.");
}

if (argument0 = bed)
{
show_message("Моето легло.");
}

if (argument0 = pensil)
{
show_message("Toва е моят молив-понякога си шаркам по стените.");
}

if (argument0 = wall)
show_message("Стената-мястотo през което трябва да изкопая дупка, за да се измъкна.");
Сега добавете третия последен скрипт,който ще ни трява тук.Наречете го get.Той е за случая, когато прибирате предмет
във вашето inventory.В играта има 2 предмета, които могат да бъдат взети-хамбургера и молива.Ето как трябва да изглежда
скрипта в случая с хамбургера:

if (argument0 = burger)
{
show_message("Супер, жена ми е сложила в хамбургера неща,с които ще се махна от тук.");
with (burger) instance_destroy();
guy.inventory[guy.invlength] = burger;
guy.invlength += 1;

Тук скрипта започва по същия начин като предишния,но след това има голяма разлика.След като се появи съобщението
хамбургера изчезва заради това:"with (burger) instance_destroy();:.Тоест хамбургера се разрушава(изчезва) и отива
в inventory-то.След това трябва да направите същото и с млива.Скрипта трябва да излежда така:
if (argument0 = pensil)
{
show_message("Добре.");
with (pensil) instance_destroy();
guy.inventory[guy.invlength] = pensil;
guy.invlength += 1;
}
Единствената разлика с предишния е само,че ще трябва да смените имената и съобщението.И така целия скрипт трябва да
е този:

if (argument0 = burger)
{
show_message("Супер, жена ми е сложила в хамбургера неща,с които ше се махна от тук.");
with (burger) instance_destroy();
guy.inventory[guy.invlength] = burger;
guy.invlength += 1;
}

if (argument0 = pensil)
{
show_message("Добре.");
with (pensil) instance_destroy();
guy.inventory[guy.invlength] = pensil;
guy.invlength += 1;
}
----------------------------
OБЕКТИТЕ
----------------------------
Сега вече можем да започнем да направим обектите.
----------------------------
Първо добавете леглото.Наречете го bed.Опцийте solid и visible трябва да са включени.Сега използвайте add event и
натиснете на create.От менюто с actions изберете set variable и вътре напишете за variable self.name и за value bed.Това
беше просто, за да имаме името на леглото.Сега да се пренесем на човека,който ще управляваме ние.Аз съм си го
нарекъл guy.Наречете го и Вие така.Тук също solid и visible трябва да са включени.При add event,първо добавете
create и после при actions менюто добавете execute a piece of code.Вътре добавете следното:
self.image_speed = 0.1;
self.dest_x = self.x;
self.dest_y = self.y;

self.invlength = 0;

От този скрипт се определя движението на играча-неговата скорост и също така се прави да се използва мишката.
Тук сме готови сега добавете втория event, който да е step.Тук сега имаме да направим малко повечко неща.При
action менюто отидете на controls и от там изберете if a button is pressed,като вътре изберте left button,тоест левия
бутон.Това го правим, защото ще използваме левия бутон на мишката, за да движим нашия играч.След това от същото
controls меню изберете start of a block.След него пък се върнете обратно на move опцийте и изберете move towards a point.
Тук трябва да има следното нещо.

x mouse_x
y mouse_y
speed 1

Това би трябвало да сте го разбрали,а ако не сте го тук отново просължаваме да направим да се движи нашия човек
с мишката.С move towards a point свършихме.Сега отново добавете execute a piece of code и вътре пишете:
guy.dest_y = mouse_y;
guy.dest_x = mouse_x;
След този скрипт добавете end of a block и отново добавете скрипт.Този сега е много важен, така че му обърнете много
внимание.Ето го първо как изглежда целия:
if (self.direction >=0 && self.direction < 60)
self.sprite_index = right;
if (self.direction >= 60 && self.direction < 120)
self.sprite_index = up;
if (self.direction >= 120 && self.direction < 210)
self.sprite_index = left;
if (self.direction >= 210 && self.direction < 300)
self.sprite_index = down;
if (self.direction >= 300)
self.sprite_index = right;

if ((abs(self.dest_x - self.x) < 1) && (abs(self.dest_y - self.y) < 1))
{
self.dest_x = self.x;
self.dest_y = self.y;
self.speed = 0;
}
else
move_towards_point(self.dest_x,self.dest_y,1.5);


if (self.speed > 0)
self.image_single = -1;
else
self.image_single = 0;

Тук става въпрос за следното.Значи нашия човек се движи, но през цялото време не можем да го оставим като се движи
да е с лице към нас или само с гръб към нас, затова с този скрипт се описва как да се променя спрайта в зависимост
от движението на нашия човек.Това по принцип се прави лесно с change the sprite,но когато движенето е с мишката е
малко по специфично и затова използвам този код.Надявам сте да сте разбрали всичко за actions събитията, но ако има
такива, които не са ме разбрали ето как трябва да изглежда цялото actions меню"
---------------------------
if left mouse button is pressed
Start of a block
Move towards a point
Execut a piece of code
End of a block
Execute a piece of code

С Create и Step сме готови.Сега ни остава само едно да добавим какво ще се случи, когато играча се сблъска с стената
Изберете collision with wall добавете един скрипт и в него пишете:
self.speed = 0;
self.dest_x = self.x;
self.dest_y = self.y;
Това просто оказва да не се случи така че да минаваме през стени.Тук сме готови,само ни остана да сменим цифрата
при depth.Вместо 0 трябва да е -1.Сега е време да добавим и обекта стената.Наречете я wall и сложете съответстващият
и спрайт.Тук също solid и visible трябва да са маркирани.Има още едно нещо,което трябва да се направи на стената, но
тук ще се върна после.А сега в време да добавим и двата обекта,които всъщност правят играта quest.Добавете един
обект и го наречете clickable_object.После изберете create, а в actions менюто добавете set the value of variable.Вътре той
трябва да изглежда така;

Variable self.name
Value nothing.
Чрез това определихме името.Сега от "add event" изберете mouse и там "right button".Сега ще определим какво ще стане,
когато играчът натисне десния бутон на мишката върху предмет.Сега добавете и следния код:

if (distance_to_object(guy) < 20)
{

doing = show_menu('Разгледай|Използвай', 4);
if (doing = 0)
{
examine(self.object_index,0,0);
}
if (doing = 1)
{
use(self.object_index,0,0);
}

}
else
{

show_message("Mного си далеч.");

}

Този скрипт описва 2 неща.Първото е,че когато играчът е на растояние по-малко от 20 излиза менюто, което в зависимост
от предмета има опций като разгледай и използвай.А второто е, че ако разстоянието е повече от 20 при кликане на
предмета излиза съобщението "Много си далеч".С този обект сме готови,както разрахте той е за обектите, върху които
можем да кликаме.Сега ще направим още един, който обаче този път ще е за предметите,които можем да вземаме.
Добавете обекта и го наречетe takeable_object.Сега по подобие на предишния отново от add event добавете create и след
това от actions менюто set the value of variable.Тук отново до variable пишете self.name, а до value-nothing.След като
сте готови с това пак добавете и опцията за кликане с десния бутон.Добавете и execute a piece of code и пишете:



if (distance_to_object(guy) < 20)
{

doing = show_menu('Разгледай|Вземи', 4);
if (doing = 0)
{
examine(self.object_index,0,0);
}
if (doing = 1)
{
get(self.object_index,0,0);
}

}
else
{

show_message("Mного си далеч.");

}

Toва много прилича на предишния скрипт, но този път разликата е там, че вместо разгледай и използвай, тук са
застъпени опцийте при разглеждането и вземането.С обектите почти свършихме останаха ни само бургера и молива.
При тях почти няма нищо да правим.Просто ги добавете определете спрайтовете и сега е време да обърнем време и на
нещо друго.Отдолу под мястото където се определят спрайтовете има едно нещо наречено parent.Натиснете там и
изберете takeable_object и за хамбургера и за молива.Чрез това направихме тези 2 предмета да се водят от скриптовете
написани в takeable_object.Чрез тези скриптове тези 2 предмета са предмети, които могат да бъдат взети.Сега се върнете
на обектите bed и wall и с тях по същи начин ще определим техния "parent".Само че те не са неща, които могат да бъдат
взети, а само неща, които могат да бъдат разгледани и затова техния "parent" ще бъде "clickable_object".Ами с
действията на обкетите приключихме.Сега само ни остава да си направим стаята.

-------------------------
СТАЯТА
-------------------------
Тук няма много да изпадам в подробности.Просто добавете си стая oт add room и сложете леглото, молива,хамбургера и
нашия герой,където си поискате.След това изберете си стената и нея оградете стаята, така че играчът да не може да
излиза извън нея.Ами това е сега е време да стартирате играта и да я изпровате


Очаквайте още. Veryhappy

Скоро ще кача и картинките.


/ Трябва да сте регистриран за да напишете коментар /