Эссе о разработке игр, мышлении и книгах

Как я знакомлюсь с историей

История — наука во многом субъективная — каждый трактует её как хочет. Поэтому я стараюсь избегать исторических книг от историков. Особенно от современных. Особенно жизнеописаний. Особенно научно-популярных.

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

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

Когда человек пишет что-то, он, обычно, хочет повлиять на своих современников. Максимум, на ближайших потомков. Поэтому, через 100, 200, 1000 лет после автора, становится намного легче вычленять суть из его текстов:

  • Совершенно точно автор не пытается залезть именно в ваш мозг.
  • Мир сильно изменился и многие авторские искажения видны на контрасте.
  • Контекст, в котором жил автор, известен не хуже, чем современная повестка, а часто — лучше. Это упрощает понимание мыслей и поступков автора.
  • Вклад автора в развитие цивилизации, его место в истории, если не определены точно, то по крайней мере под них размечена область на его полотне.
  • Часто известно зачем именно автор писал свои тексты.

Конечно, не всегда получается придерживаться этого принципа.

Например, книга Изобретение науки явно под него не попадает, но в её случае альтернативного подхода к изучению темы быть не может — исключение, подтверждающее правило.

В остальном же, читать явно пропагандистские Записки Цезаря или наполовину технический судовой журнал Джеймса Кука, о котором будет следующий пост, в плане восприятия информации на много легче, чем книги наших современников. Вы могли обратить внимание, что в их обзорах я периодически жалуюсь на проскальзывание повестки со слабым обоснованием.

Python & OpenAPI

Покопался в OpenAPI и его интеграции с Python. Глубоко не лез — только чтобы закрыть собственные вопросы.

OpenAPI — спецификация API web-сервисов, выросшая из Swagger — описывает свойства API, чтобы по описанию генерировать документацию, клиентские и серверные библиотеки.

Swagger — проприетарная штука, OpenAPI — открытая. Поэтому сам Swagger я не смотрел — в наше время не стоит завязываться на такое, если у вас нет мешка с деньгами и вагона с юристами.

Также не смотрел интеграцию OpenAPI с другими языками. Где-то всё будет лучше, где-то — хуже. Думаю, лучше всего поддерживаться OpenAPI должно для JavaScript, так как фронтендерам оно больше всех пользы несёт.

Далее, тезисно, моё мнение.

Далее

Как придумать подземелье

Источник: [Pinterest](https://www.pinterest.com/pin/559994534913996418/?)

Источник: Pinterest

В пост о генерации подземелий часто приходят люди, которые ищут урок по придумыванию подземелья, а не по программированию. Для партии в D&D, например.

Чтобы никто не ушёл обиженным, вот небольшой набор рекомендаций на тему. Рекомендации подойдут не только для подземелий, но и для разработки любой локации.

Дополнительно советую почитать:

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

Далее

Типы в Python не радуют

Сделал ещё один заход на контроль типов в Python. На этот раз со стороны собственной библиотеки для контроля изменений типов переменных в runtime.

Общие выводы ясны из названия поста, хотя полученная библиотека более-менее работает и я попытаюсь её со временем довести до ума. Если разработчики Python наведут порядок у себя в проекте.

Задумка

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

Краткое обоснование:

  1. Важная часть семантики программы на динамическом языке программирования конструируется во время выполнения программы.
  2. Поэтому закодировать её статически не получится — сложно и дорого.
  3. Поэтому статический анализ типов для динамических языков не пригоден — он игнорирует критические части логики и провоцирует разработчиков на создание костылей для обхода этого игнорирования.
  4. Поэтому анализировать типы имеет смысл только время выполнения программы.

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

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

Библиотеку для такой функциональности я и попытался реализовать, но столкнулся с суровой реальностью.

Далее

Пространство механик ММО

Примерная иллюстрация идеи. _Направления осей можно выбирать произвольно._
Рисовал своей рукой. Старался :-D

Примерная иллюстрация идеи. Направления осей можно выбирать произвольно.
Рисовал своей рукой. Старался :-D

Давно крутил в голове формальный подход к выбору механик для ММО, но чего-то не хватало. Спасибо дискуссии на mmozg.net — нашёл недостающую размерность.

Идея в следующем.

Чтобы игра была долго интересна целевой аудитории, её механики должны закрывать некоторый набор потребностей игроков.

Самый простой пример — психотипы Бартла. Планируя механики для игры, необходимо позаботиться, чтобы они закрывали потребности каждого психотипа. В идеале. То есть нужны механики для achievers, killers, socializers и explorers. Не обязательно по одной на каждый тип. Можно по несколько, а можно и так, чтобы одна механика закрывала несколько типов.

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

Мне же интересно посмотреть на сами механики, динамику игры и именно в контексте ММО. Безотносительно свойств самих игроков.

Поэтому я попробовал представить игровые механики как объекты в многомерном пространстве (механик) и выделить в этом пространстве ортогональные оси.

Далее