Блог ☯

среда, 13 сентября 2017 г.

Как сделать гранаты в игре?

Сегодня сделал гранаты в своей игре. В общем-то делать их довольно просто в GameMaker, практически никаких сложностей возникать не должно.

Как сделать гранаты в игре?

Как всегда, сделал короткое видео на эту тему, уже с моими комментариями:


Я сделал 3 объекта

1 - Гранаты на полу (3 шт.). Это предмет.

Если герой с ними "сталкивается", то он их поднимает и может использовать. 

2 - Граната в полёте. Тут больше деталей дальше.

Как это я делать думаю понятно. Аналогично выстрелу пули (как сделать пулю вы можете нагуглить за 1 минуту), но только создаём гранату вместо пули.

Я прописал в create скорость в зависимости от... (Об этом ниже). Ну и столкновение и отскок делается даже с помощью стандартной штуки

Как сделать гранаты в игре?

Не забудьте прописать глубину (depth) так, что-бы она перелетала препятствия, а не летела под объектами. Если у вас везде стоит 0, то тут можно добавить -1 (будет над ними). 

3 - Взрыв

Я взял область 50х50 (спрайт), убрал его отображение (visible) и прописал в создании:

  • image_xscale = 2;
  • image_yscale = 2;

Это означает удвоенную область спрайта (100х100). Так много чего можно сделать, это просто что-бы не делать отдельные спрайты под каждую такую штуку. 

Взрыв понятно что делает, я думаю. Убивает врагов и героя. Для просторы я сделал что он убивает всегда и сразу, при касании, но можно было прописать сложнее, например урон в зависимости от дистанции от эпицентра. Что-то типа:

damage = round( 200 / distance_to_object(o_hero) );

Тогда правда взрыв нужно было прописывать не большой областью, а точкой. 

И прописывать урон не в коллизии с объектом, а при создании взрыва (эпицентра).

Тот код что я дал работал бы так:

Если граната жахнула на расстоянии 200 пикселей от героя, от урон от неё = 1. 

Напоминаю что у меня в игре у всех 4 жизни, и 6 с бронёй. 

Если она жахнула ближе, например 100 пикселей от героя, то урон уже 200 / 100 = 2
Если прям там-же где герой (50), тогда урон 4 и гарантированное убийство если ты без брони. Система была-бы достаточно интересной и лучше чем у меня сейчас.



3 режима броска гранат


1 - Стандартный. Граната взрывается через 2 секунды, скорость полёта 6.

Дальность броска 2*30*6 = 360 пикселей. 

2 - Бросок сидя. Граната взрывается через 2 секунды, скорость полёта 3.

Дальность броска 2*30*3 = 180 пикселей. 

3 - Бросок с разбега. Граната взрывается через 2 секунды, скорость полёта 9. 

Дальность броска 2*30*9 = 540 пикселей. 

Вот в этом и получается фишка. Игрок который наловчиться, сможет пользоваться гранатами гораздо эффективнее, зная когда нужно кинуть с разбега, а когда сидя.

Плюс чисто физически для игрока это прикольное соло на клавиатуре, все эти зажимания кнопок, переключения и комбинации.

Я хочу что-бы в моей игре опытный игрок кто может быстро и грамотно управляться с героем, проходил её красиво и что-бы даже это стоило каких-то условных мувиков (видео где герой красиво и технично сражается). 

Так-же я сделал бег. Зажиманием пробела ускоряет движение героя на 2, но в этом режиме нельзя стрелять (но можно кидать гранаты). Это дало герою больше гибкости, а игра стана динамичнее. Выстрелил - убежал, прибежал - отстрелялся и т.д.

Теперь всё это есть. Удобнее стала игра с тяжёлой снайперкой, теперь можно с помощью бега быстро менять позицию. А с MP5 так и вообще игра стала куда веселее, герой просто летает по карте. Примерно так-же с дробовиком.

Играть стало веселее. Плюс мне нужен был этот бежим бега для гранат. 

Еще прикол в том что при рекошете скорость гранаты замедляется в 2 раза, так выглядит более реалистично. А при броске через стекло, замедляется на 25%.

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

Не знаю нужно это или нет, но в некоторых ситуациях может пригодиться. К примеру сделать условный зазор внизу дверей через который можно катать гранату.

А если её кинуть стандартно, то она попадёт в дверь и отскочит. 



Виды гранат


1 - Боевая. Стандартная. Область поражение 100х100. 
Урон разный, в зависимости от дальности от эпицентра. Контузия (потеря слуха). 

2 - Свето-шумовая, оглушающая. При взрыве оглушает на 1-3 секунды (в зависимости от дальности от эпицентра). Контузия и слепота как бонус. Прикольно закидывать в комнаты перед началом штурма. 

3 - Дымовая. Тут вообще можно прикольнуться и совместить со скрытностью. Бросаешь и создаётся область где героя плохо видно. Допустим 200х200, не слабая. И можно так накидать 3-5 штук и сделать себе путь где можно пройти и тебя не увидят. 

4 - Огненная. Тут полезно с той точки зрения что я хочу потом делать огнемёт и область пожара буду делать в любом случае. 

5 - Ядовитая, радиоактивная. Ну это уже чушь, но почему-бы и нет? Тут есть интересные элементы механики. Противогаз и защитный костюм (как у героя, так и у врагов), бочки с отравой. Миссии в заброшенном хранилище ядерных отходов. 

Ну и хочу сделать мину (ставить на M) и бомбу (B). Это уже чуток другая песня, но тут не очень трудно. Эффект взрыва от мины аналогичен взрыву гранаты, как и у бомбы. Если ты двигаешься вприсядку то мина на взрывается под тобой и её можно подобрать. А если бегаешь или ходишь, наступив она рванёт.

Ставить их на путях патрулирования врагов, в проходах и т.д.

На этом всё, другие мои статьи читайте в специальном разделе про геймдев: