forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Алгоритмика (http://forum.boolean.name/forumdisplay.php?f=21)
-   -   Система оружия (http://forum.boolean.name/showthread.php?t=20304)

ant0N 28.05.2016 14:29

Система оружия
 
Как бы сделать, чтобы было легко добавлять бесконечно много нового оружия в игру.

Кто какие варианты видит? У кого-нибудь был опыт в этом?

Arton 28.05.2016 15:14

Ответ: Система оружия
 
Придумать систему для оружия, определится заранее что можно, что нельзя.
Составить универсальный, а возможно и расширяемый список параметров оружия: скорострельность, перезарядка, тип снаряда (пули), шанс критического повреждения, эффект кровотечения (отнимает здоровье по времени) какой вид повреждений может нанести, например пуля не только пронзает но и взрывается.
Игра в списке оружия будет натыкаться на название пушки, которое отсылает к её описанию. А там уже, моделька оружия, икона в интерфейсе, файл анимации, параметры пушки и т. д.

По крайней мере я бы сделал как-то так :dontknow:

Taugeshtu 28.05.2016 15:44

Ответ: Система оружия
 
Хорошо сделано в серии action RPG "Borderlands".
Там, насколько я понимаю, за вычетом сотни уникальных пушек каждый ствол делается из "запчастей", каждая запчасть модифицирует базовые параметры оружия определённого типа.

Следим за руками:
1. Тип оружия (снайперка, автомат, пистолет, гранатомёт, etc.)
2. Производитель (тебе может и не подойдёт; в борделе у каждого вендора был свой "flavor")
3. Собственно, запчасти: приклад, коробка, ствол, рукоятка, прицел, магазин.
4. Уровень пушки (опять же, тебе может не подойти)

По байту на каждый кусочек паззла - вот и получили "код" пушки. Дальше комбинируем как понравится/делаем генератор. Расширение арсенала: сделал новый приклад - сразу получил много-много новых возможных комбинаций.
В "запчасти" можно ещё докинуть паттерн выстрелов (как временной, так и пространственный - одиночные/burst/очередь; в одну точку/дробовик/линией/крестиком), какие-нибудь эффекты типа упомянутых кровотечения/сжигания/взрывов/кислоты.

P.S.
Помню, как развлекался с редактором сейвов во втором борделе, подгоняя запчасти на понравившуюся мне снайперку, чтобы сделать себе идеальное оружие)) Было бы круто, конечно, если бы в игре была возможность запилить пушку "на заказ"...

ant0N 28.05.2016 16:47

Ответ: Система оружия
 
не, я наверное неправильно задал вопрос.
Меня интересует реализация системы оружия в коде (абстрактный пример). Т.е как правильно написать базовую систему, чтобы она получилась простой и гибкой.
Создать класс болванки и потом только подменять модель оружия и параметры?

Nex 28.05.2016 18:34

Ответ: Система оружия
 
Цитата:

Сообщение от ant0N (Сообщение 306244)
не, я наверное неправильно задал вопрос.
Меня интересует реализация системы оружия в коде (абстрактный пример). Т.е как правильно написать базовую систему, чтобы она получилась простой и гибкой.
Создать класс болванки и потом только подменять модель оружия и параметры?

Тебе уже написали способы аля контра и аля борделенд/фаллаут4/прочий_рпг_шутер.

Если по говнокоду, то создаешь класс Weapon и в нем описываешь все возможные варианты оружия. Далее если ты на Unity3d можно при помощи enum задавать допустим тип "пуль" - пуля, лазер, ракета, гранаты. Добавляешь методы Fire(), Reload(), Drop(), etc.

Можно более правильно. Создаешь базовый класс Weapon и описываешь общие методы и поля у всего оружия (например скорость перезарядки, урон, ссылка на модельку/анимацию). Далее для каждого типа оружия/стрельбы (обычное, лазерное, ракетницы, гранотометы) создаешь свой класс, перезаписываешь базовые методы override Fire, Reload, Drop, etc., в которых уточняешь конкретные тонкости для данного типа оружия/стрельбы (например если пули, то пули летят прямо и может быть имеют некоторую скорость полета. Если лазер, то моментальный урон после выстрела. Если гранатомет, то гранаты вылетают по некоторой траектории., etc).

Далее в скрипте игрока делаешь поле public Weapon weapon. И тебе будут доступны методы weapon.Fire(), weapon.Reload(), weapon.Drop(), etc не зависимо каким способом сделал. Вызывая эти методы оружие будет стрелять, перезаряжаться, падать, etc.

Если бы ты уточнил что ты именно хочешь от системы оружия, то можно было бы конкретней написать абстрактный код. А так возможных способов создания мильен.

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


Часовой пояс GMT +4, время: 05:26.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot