Пятница, 22 Ноября 2024, 23:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
[Создание боевой системы для игр в GM8] (Статья)
errorofsystemДата: Пятница, 07 Августа 2015, 13:37 | Сообщение # 1
был не раз
Сейчас нет на сайте
В общем, здравствуйте. Думаю, многие задумывались над созданием некоторых RPG-проектов, типа Final Fantasy. Для многих, опять же, не нашлось решений, кроме как game maker'а. И пускай, для инвентаря в интернете огромное количество уроков и исходников, но для боевой системы их практически нет. В данной статье я попробую описать хотя бы алгоритм и простой пример создания боевой системы для jrpg в game maker.



На картинке выше - боевая система первой final fantasy. На подобие такой мы и попытаемся реализовать, однако, она будет проще в том плане, что рассчитана только на одного персонажа и одного оппонента. И так, поехали.

Предположим, у нас есть один персонаж, который и будет драться. Тогда поехали. Для того, чтобы все получилось, в создании должен быть код (или же кусок его), наподобие следующего:

Код
powerr=10//где 10 - величина характеристики "атака" меняется, если на игроке есть какие либо доспехи. Так же данная величина может меняться с увеличением уровня игрока или на усмотрение разработчика.

health=100//величина характеристики "здоровье". Меняется аналогично силе.

magic=7//величина дополнительной характеристики "магия". Меняется аналогично вышеописанным переменным.


И так - основные характеристики указаны. Предположим, существует некий obj_enemy - т.е. объект врага. Задаем ему вышеописанные характеристики, однако health надо бы заменить на hp. Добавим в create врага еще и следующий код:

Код
typeattack=3//typeattack - тип атаки. Удар рукой - это 0, удар ногой - это 1, магия - это 2. Соответственно, отсутствие атаки 0 это 3.


Возвращаемся к объекту игрока (через которого и будем реализовывать всю систему). Удар, допустим, осуществляется по кнопке "пробел" сразу после удара врага. Тогда дописываем в create:

Код
hit=true//Данная переменная определяет, возможен ли удар в данный момент. Если ее значение true - возможен, в противном случае - нет.


А после пишем в событие нажатия на пробел:

Код
if hit=true then attack=show_message_ext('Select attack.','Punch','Kick','Magic')//Выводим на экран окно выбора типа атаки.
else
{}


Допустим, удар рукой - более сильный, ногой - более слабый. Магический удар зависит от величины характеристики магии. Тогда пишем (в то же нажатие на пробел):

Код
if attack=0 then obj_enemy.hp-=powerr*irandom(2)//Т.к. irandom - функция, возвращающая целое случайное число, то у врага будет отнято значение силы игрока, умноженное на случайное значение от 0 и до 2.

if attack=1 then obj_enemy.hp-=powerr*irandom(5)//см. выше, однако максимум, на который будет умножатся величина силы - это уже не 2, а 5.

if attack=2 then obj_enemy.hp-=magic*3//Искренне надеюсь, что это вам объяснять не придется.

attack=false


Перейдем к врагу. Все характеристики у него уже указаны, а значит, нужно только прописать код для атаки. Это делается достаточно просто. Пишем в step:

Код
if obj_player.hit=false
{
typeattack=irandom(3)
alarm[0]=1
}//Думаю, это понятно.


В Alarm 0 - записываем следующее:

Код
if attack=0 then obj_player.health-=powerr*irandom(2)

if attack=1 then obj_player.health-=powerr*irandom(5)

if attack=2 then obj_player.health-=magic*3

obj_player.attack=true


Этот код нам очень знаком, так что проблем возникнуть не должно.

На этом мы закончили создание одиночной боевой системы - т.е. для случая, когда на поле один враг и один игрок. Через неделю-две подумываю написать урок для случая, когда игроков и врагов несколько. Если понравилось - ставьте плюсы, пишите отзывы и ждите следующий урок. До свидания. smile

P.S. Если где-то будут ошибки, пишите. Авось я где напортачил в статье.


Сообщение отредактировал errorofsystem - Пятница, 07 Августа 2015, 15:50
AnthemДата: Пятница, 07 Августа 2015, 18:32 | Сообщение # 2
Д'Артаньян
Сейчас нет на сайте
А это вообще актуально, писать статью для ГМ8?

Текстовый контент для вашей игры (бесплатно)
Сценарист, геймдизайнер для Вашей игры
TymonrДата: Пятница, 07 Августа 2015, 19:03 | Сообщение # 3
With OpenSource forever
Сейчас нет на сайте
Anthem, ну, вопщем-то едва ли для этого урока актуальна разница между GM8 и GMS

Если вы решили обратиться к нам за помощью, не становитесь в позицию неудачника. И не ведите себя как неудачник. Лучший способ получить быстрый и чуткий ответ, - спрашивать как победитель — спрашивать как человек умный, уверенный в себе и знающий, которому просто понадобилась помощь при решении одной конкретной проблемы.
Как правильно задавать вопросы в технических форумах
GudleifrДата: Пятница, 07 Августа 2015, 19:15 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата Tymonr ()
едва ли для этого урока актуальна разница
Логично. Говорить о направлении нулевого вектора бессмысленно.


Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг