1. В чём идея
Я решил сделать шипы, последовательно появляющиеся из соседних клеток. Вот как на этом ролике:



2. Графика для шипов
Я нарисовал чарсет для этих шипов (а то имеющиеся толстенькие конусы меня не очень устраивали):



3. Событие для шипов
Создаём событие, в котором устанавливаем графику для шипов и следующие настройки (частоту ставим максимальную, а от скорости будет зависеть, насколько быстро они перемещаются):



4. Маршрут для шипов
Основные события для того, чтобы шипы выскакивали из-под пола и перемещались на соседнюю клетку, будут происходить в маршруте. Выглядит он примерно так:



В момент перемещения на соседнюю клетку шипы становятся невидимыми, чтобы игрок не видел переползания их графики. Ожиданием настраивается скорость выползания шипов из-под пола.

5. Скрипт для звука шипов
Это скрипт для того, чтобы громкость звука, с которым шипы выскакивают, уменьшалась, когда они удаляются от игрока. Он состоит из двух строчек. В первой вычисляется расстояние от шипов до игрока. Это значение записывается в переменную (в моём случае это переменная №8):

Код:
$gameVariables.setValue(8, Math.abs($gamePlayer.x - $gameMap.event(this._eventId).x) + Math.abs($gamePlayer.y - $gameMap.event(this._eventId).y));
Во второй строчке проигрывается звук (это звук из файла «Evasion2»). Я решил, что на расстоянии в 16 клеток от игрока звука не будет вообще. Громкость уменьшается на 5 за каждую клетку расстояния между игроком и шипами:

Код:
if ($gameVariables.value(8) <16) {AudioManager.playSe({name: 'Evasion2', volume: (80 - ($gameVariables.value(8) * 5)), pitch: 100})};
6. Возвращение шипов на исходную позицию
Когда шипы достигают конечной точки своего маршрута (в моём случае координаты 19 по горизонтали), они возвращаются в начальную позицию. А точнее, в клетку слева от начальной позиции, потому что сразу после этого они делают шаг вправо:

Код:
if ($gameMap.event(this._eventId).x === 19) {$gameMap.event(this._eventId).locate(3, 17)};
7. Нанесение урона
Как вы заметили, в самом событии шипов нет ничего, что бы наносило урон игроку. Они просто выскакивают. Вначале я планировал сделать урон при касании, однако это работало плохо, могло нанести урон, когда игрок пробегает через убранные шипы, или не нанести, когда он просто стоит на месте, а шипы проходят сквозь него. Поэтому я сделал нанесение урона отдельным событием:



В чём его смысл? Когда шипы появляются из-под пола, в их маршруте включается триггер (в моём случае, это переключатель №31), после чего начинает работать событие нанесения урона (параллельно!). Оно проверяет, совпадает ли координата игрока с координатой шипов (у меня событие шипов называется «Ловушка») и, если совпадает, происходят световые и звуковые эффекты нанесения урона, и у игрока отнимается ХП.
После этого (важно!) я отключаю переключатель, чтобы это событие перестало работать, иначе ХП отнимется не один раз, а будет убывать всё время, пока игрок с шипами находятся на одной клетке (обнулится почти моментально).

8. Дополнительные фишки
Ничто не мешает разместить на карте несколько таких шипов, надо только сравнивать координаты каждого из событий шипов с координатой игрока в событии нанесения урона.
Не обязательно двигать эти шипы только по прямой, они могут иметь любую траекторию: но надо будет либо вписывать её всю в маршрут события, либо обозначать точки поворота, в которых событие будет переключаться на страницу с другим маршрутом.
Я вовсе отключаю эти шипы, когда игрок отходит от них достаточно далеко, просто чтобы не тратили ресурсы на вычисления.
На видео движется сразу пара шипов. Чтобы не делать два события, я сделал из шипов чарсет в две клетки по вертикали, так что получилось одно событие с графикой из двух шипов одни над другими. В этом случае при нанесении урона, я проверяю не только координату события шипов, но и координату на 1 клетку выше его.