Никаких прототипов, прозрачный код, хороший инструментарий — 10 принципов игровой разработки от Джона Ромеро

16 августа один из основателей студии id Software Джон Ромеро выступил на конференции для разработчиков GDC Europe. В своей лекции разработчик вспомнил былые времена и сформулировал 10 философских принципов, которым следовал он и сотрудники студии все эти годы.

Фото с конференции GameLab

Что-то из этого покажется вам безумным, но в то время нам было по двадцать лет, ничто не могло нам помешать. Всё началось с создания демо-версии Super Mario 3 по заказу компании Nintendo, лицензирования движка Commander Keen и создания техники попиксельной прокрутки экрана в игре Dangerous Dave. Тогда и родилась id Software

один из основателей id Software, Джон Ромеро

После долгих рассказов о том, с чего началась студия id Software, Ромеро перешел к финальной части. Джон выделил 10 ключевых заповедей, которым должен следовать каждый разработчик, чтобы создать лучшую игру, на которую он только способен.

1. Никаких прототипов. Просто делайте игру. Работайте над ней по пути. Если видите что-то, что можно сделать лучше — делайте и не откладывайте на потом. Сохраняйте код в таком виде, чтобы игру можно было выпустить хоть завтра. Мы выясняли, что нам нужно, и сразу же начинали с этим работать.

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

3. Код должен быть максимально простым. Постоянно просматривайте свои функции и думайте, что надо сделать, чтобы они стали ещё проще. До Quake все наши игры были написаны на чистом C, даже не на C++.

4. Хорошие инструменты помогают создавать хорошие игры. Потратьте время на создание инструментов. В 1991 году я написал редактор клеток под названием Ted (Tile Editor). После он был использован в 33 играх.

5. Самой лучшей командой тестировщиков были мы сами. Никто, кроме нас, не видел всех тех страшных багов и ошибок. Не тратьте время других. Тестируйте свои игры сами.

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

7. Используйте платформу разработки, заточенную под будущие системы. Doom был разработан на платформе NeXTSTEP, которая могла бы работать не только на системе DOS.

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

9. Используйте инкапсуляцию (способность объектов скрывать некоторые свои данные и способы их обработки от внешней среды — прим. редакции), чтобы во всей программе код работал одинаково. Это минимизирует ошибки и экономит время.

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

{ "author_name": "Николай Чумаков", "author_type": "editor", "tags": [], "comments": 7, "likes": 11, "favorites": 0, "is_advertisement": false, "subsite_label": "gamedev", "id": 730, "is_wide": true }
{ "id": 730, "author_id": 773, "diff_limit": 1000, "urls": {"diff":"\/comments\/730\/get","add":"\/comments\/730\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/730"}, "attach_limit": 2, "max_comment_text_length": 5000 }

7 комментариев 7 комм.

Популярные

По порядку

Написать комментарий...

Tony Bear

1

Ромеро все верно толкует, только совет про инкапсуляцию свидетельствует о том что он не программировал лет 15-20 )))
Современные программисты даже не знаю как можно не инкапсулировать данные)))

Ответить

Sergey Babaev

Tony
2

да он просто прикольный чувак еще в целом)

Ответить

Vincent Pride

Tony
1

Да ладно, посмотрите как сейчас все в Unity пишут - делают публичные поля в скриптах, потом в инспекторе в эти поля пихают другие скрипты, и в итоге получается один большой ком спагетти, из которого нельзя ничто удалить / изменить, не поломав все остальное.

Ответить

Nick Shtefan

0

Даже не знаю насколько можно верить его советам, учитывая то, каким провалом была Daikatana.

Ответить

Sergey Babaev

Nick
1

да провалы у всех есть, Даикатана это воспоминание из детства - первая моя лицензионная игра которая по тем или иным причинам не заработала и вместо игры (пусть и плохой) я получил день с беготной до магазина и возврата диска) Но это я к чему - даикитана говно мамонта, про которое и вспоминать смысла нет... беда в том, что за столько лет Ромеро даже таких вялых попыток возрождения как даикитана не предпринял. Если верить книге "властелины Дум" - он конечно нафармил до конца жизни, но рынок меняется постоянно...

Ответить

Vladimir Kovtun

Sergey
0

Тем не менее, советы более чем актуальны. Как минимум 6 из 10.

Ответить

Sergey Babaev

Vladimir
3

так одно другому не противоречит)

Ответить
0

Прямой эфир

Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]