Делаю простую ABS для своей игры с закосом под 8 бит.
ABS почти готова, основана на ивентах и плагинах сообщества.
Сразу укажу плагины, которые использую для создания боевки:
YEP.event_copier, YEP.event_spawner, YEP.eventProxActivate
SuperOrangeMovementEX (4 direction, 2 tile sections).
DK_full_input
Благодаря этим плагинам удалось сделать неплохой ИИ врагам, отзывчивое перемещение и т.д.
Event_spawner - позволил создать врагам стрельбу в игрока, снарядами.
Event_prox - зону активации поведения врагов.
SOMovementEX - отзывчивое управление.
DK_full_input - назначение атаки на кнопку Z, в дальнейшем и другие штуки.
Итак, казалось бы, все идеально. Поведение врага меня полностью устраивает. Он передвигается по карте логично, целится в игрока, стреляет в него и т.д. Его можно спокойно копировать, так как его поведение не привязано к ID. Но как раз таки по этой причине проблема и возникает! Чтобы поведение врага работало таким удобным образом, - враг должен быть параллельным событием. Чтобы подробнее описать проблему, покажу как устроен враг:
Спойлер страницы врага:
1) Параллельный триггер запускающий поведение игрока.
2) Триггер кнопки действия, должен активироваться во время удара игрока по врагу.
3) Смерть врага, + переключатель врага включен. (вообще смерть врага может быть сразу на второй странице, но я делал это чтобы сбрасывать переключатели врагов когда игрок далеко уходит, этакий ручной спавн)
Итак, проблема в том, что я не могу реализовать атаку игрока по врагу! При нажатии на клавишу Z, которая по совместительству является 'ок'.
Как это должно работать:
"Когда игрок нажимает на Z, идет проверка того, рядом ли находится игрок с врагом. Если игрок находится рядом (на одну клетку), то включается триггер "коллизия". В этот момент игрок может ударить врага, так как теперь у него работает вторая страница с тригером на нажатие кнопки. (Правда враг ничего не сможет сделать, когда игрок рядом. Это небольшая проблема). Если же игрок не рядом с врагом, то коллизия отключена.
Что пошло не так?
1) Я знаю, что вроде как-то можно проверить рядом ли игрок с событием, но не помню.
2) И более серьезная проблема, - при копировании каждый враг имеет свой уникальный ид. Проверка того рядом ли игрок с событием не должна включать в себя ид события. Нужно чтобы она проверяла ВСЕХ ВРАГОВ. Что можно сделать скорее всего скриптом, через event_note. Например, каждый враг будет иметь примечание 'enemy'. Если событие имеет это примечание, - проверяется рядом ли с ним игрок. И если игрок с ним рядом, - коллизия вкл. В теории, как-то так. Но как это сделать на практике, - не имею понятия. :<
Неудачные попытки:
Пробовал альтернативный путь. Создал на карте событие маску, которая появлялась перед игроком каждый раз, когда кнопка атаки нажата. И если враг касался события маска, - коллизия включалась. Но этот вариант работает некорректно, потому что я использую pixel movement, поделив каждый квадрат на 2. И без этого игра становится слишком топорной.
Поэтому создание события маски - не вариант.
Социальные закладки