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
Этот код нам очень знаком, так что проблем возникнуть не должно.
На этом мы закончили создание одиночной боевой системы - т.е. для случая, когда на поле один враг и один игрок. Через неделю-две подумываю написать урок для случая, когда игроков и врагов несколько. Если понравилось - ставьте плюсы, пишите отзывы и ждите следующий урок. До свидания.
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 ( ) едва ли для этого урока актуальна разница Логично. Говорить о направлении нулевого вектора бессмысленно.
Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
|
|
| |