Addictive & compulsive
LÖVE (is all you need)
Я человек простой.
Более того, я уверен, что человек — вообще штука простая, типа машины Тьюринга, только не машина, а человек. Человек Тьюринга.
Впрочем, нет, человек Лэнгтона — еще смешнее.
Во втором — совершенно халтурном — сезоне Westworld’а попытались эту мысль использовать, но вышло грубо, тупо и не интересно. Мол, алгоритм всего человека влезает в книгу, а сами люди, создавая человекоподобных роботов, намудрили и сделали их гораздо сложнее — потому что не знали, как сделать проще!
Что-то такое я в последнее время и думаю — что человек это набор примитивных элементов, который, естественно, собственной примитивности не осознает.
По подождите расходиться, тут есть еще такое понятие, как «красота». Например, фрактал рисуется по очень простой схеме с помощью рекурсии, но ведь он красивый. То же самое и с человеком и его творениями. Когда что-то прекрасное создается с помощью чего-то примитивного, это называется «гениальность».
Когда одна строчка кода вам и стихи поет, и картины танцует, и даже минеты делает — есть все причины называть автора этой строчки гением, даже если автор — это «эволюция».
Спасающая (или, наоборот, мрачная?) мысль — в том, что человек не может постигнуть своей простоты (и слава богу), мысль, известная, также, как «невозможность выйти из платоновой пещеры» — поэтому я довольно недоверчиво отношусь к технарям, которые пошли в психологи, все поняли и теперь «раскладывают по полочкам», гоните их из профессии ссаными тряпками!
С другой стороны, если что-то можно упростить — это нужно упростить. «Боже, дай мне мудрость отличить то, что можно упростить от того, что упростить нельзя».
Так вот, продолжаем про фреймворки.
Очень люблю примитивные вещи. Может быть это потому, что детство мое прошло небогато, и к роскоши я не привык, а может потому, что хочется поменьше иметь дела с ходом чужих мыслей — у вас все равно не получится сделать мне удобно, поэтому дайте мне самое необходимое, а дальше я все обустрою сам.
Время от времени я скучаю по примитивному программированию — оно в корне отличается от моей текущей работы, на которой я даже не притворяюсь, будто что-то понимаю или что-то создаю, «and now for something completely different», поэтому играл, например, в Shenzhen I/O — компьютерную игру, где надо программировать на ассемблере!
Я знаю, что некоторые люди спят и в гробу видят, что я (снова) начну заниматься играми, надеюсь, это расплывчатое вступление их отпугнуло, и они не дочитали до этого места.
Поизучал несколько фрейморков для создания игр — не потому, что хочу сделать собственный Fallout, а потому что Shenzhen I/O я уже прошел, Exаpunks не зашли, а попрограммировать что-нибудь хочется.
Разумеется, почти все они не понравились, кроме чувства юмора и качества документации Godot’а. Ну и правильно, от людей, которые назвали фреймворк Godot’ом, ожидать следует только такое.
Годот неплох, хотя и слишком непримитивный.
И тут — внезапно — LÖVE.
С одной стороны — никакого GUI, IDE и прочих конструкторов. С другой стороны, никакой командной строки, компиляций и прочих красноглазых вещей. Ты просто создаешь директорию, в ней — файл main.lua, который редактируешь, естественно, в Sublime text, а потом перетаскиваешь мышкой директорию в love.app — и все работает!
Внутри файла main.lua, как легко догадаться, язык lua, прекрасный своим примитивизом и минимализмом, например:
«Lua does not offer a safe navigation operator, and we do not think it should. Lua is minimalistic.»Excerpt From: Roberto Ierusalimschy. «Programming in Lua 4ed.» iBooks.
«У нас в языке этого нет, и мы думаем, что это правильно».
Кроме примитивизма, Луа создает определенные удобства, которые ничего не стоят, но создают ощущение заботы, например:
«These trailing commas are optional, but are always valid:
a = {[1] = "red", [2] = "green", [3] = "blue",}
This flexibility frees programs that generate Lua constructors from the need to handle the last element as a special case.»Excerpt From: Roberto Ierusalimschy. «Programming in Lua 4ed.» iBooks.
Или, скажем, индексы в таблицах в Луа начинаются с единицы. (!!!) Или, например, в функцию можно передать любое количество параметров, ненужные просто отсекутся (без ошибки), возвращать можно тоже любое количество (и это будет не массив). Ну и, конечно, нестрогая типизация и прочие «послабления».
function swap (a,b) return b,a end
a, b = swap(a,b)
Lua предоставляет некоторые очень мощные, но примитивные вещи, типа таблиц, содержимое которых может быть каким угодно (включая функции), то есть, таблицы в lua — это на самом деле объекты. С их помощью можно легко самому сделать ООП, а можно не делать. Они же выступают в роли массивов, последовательностей, списков и что там еще в остальных языках есть?
Вроде как[citation needed] Lua — скриптовый язык номер один для скриптования в играх, а тут можно целиком на нем игру написать.
Что же касается LÖVE, то он такой же примитивный и берет на себя главным образом вывод графики и основной игровой цикл.
В файле main.lua можно переназначить три функции:
love.load () — которая вызывается при старте,
love.update (dt) — которая вызывается каждые сколько-то миллисекунд (передается в dt)
love.draw () — которая вызывается каждый кадр и в которой происходит отрисовка
Все, остальное вы сами. Но и ничего больше и не надо, на самом-то деле.
Вот, например, содержимое main.lua для иллюстрации:
function love.update(dt) function love.draw()function love.load()
x = 0
y = 0
image = love.graphics.newImage("image.png")
end
x = x + dt * 100
y = y + dt * 100
end
love.graphics.draw(image, x, y)
end
Картинка для отвлечения внимания:
В данный момент LÖVE видится, как правильный способ
Ну и, конечно, +10 очков за название. Все хотят делать игры с любовью, тем более, что настоящие игры на нем тоже можно писать.
Этика блядства
Картинка в картинке
Старший ребенок познакомился недавно с таким же фанатом компьютерных игр, и они зацепились языком на несколько часов, пока мы все гуляли. Я это краем уха слушал.
Сделал два вывода:
1. Дети не видят «из чего это сделано», что, определенно, помогает им вовлекаться. Они (все еще?) предпочитают внешний вид, а не «пользу», десять разных мечей — это десять разных мечей, а не класс «меч» с разной графикой и разными единицами повреждений.
Поэтому дети могут часами обсуждать «нюансы».
Со взрослыми такая штука уже не прокатит, в лучшем случае получим комедийный эффект:
Пододвинув это на еще один уровень вверх, получим феномен, который я называю ПДН: «погремушки для невротиков», когда Обычные Люди так же вовлекаются, но уже «в жизнь», совершенно не видя, из чего она сделана, а необычные люди видят Изнанку Всех Вещей, поэтому им скучно.
2. Дети считают «разработчиков» культовыми фигурами, но тоже игроками, просто в 20 раз сильнее. Множественные фантазии, на тему «разработчик может сделать себе меч, который убивает одним ударом» или даже «может ли разработчик сделать меч, который пробивает любой щит и щит, который останавливает любой меч, и что победит?». Впрочем, это уже где-то было!
Та же картина наблюдается и у более взрослых детей, вплоть до любого возраста. Когда я в последний раз делал игру, она превратилась в полигон социальных экспериментов.
Люди, в свою очередь, за участие в экспериментах платили всевозможными очень смешными теориями заговоров и представлениями о том, как у разработчиков все устроено. Все это очень напоминало греческие мифы про по-людски мелочных богов, но на Олимпе, которые оттуда зачем-то спускались к земным женщинам. «Разработчики просто меня не любят» как «немилость богов».
Но дело даже не в том, что разработчики «выше» и «лучше», просто у них совершенно чуждые по отношению к миру игры интересы. Например, семью кормить.
Отсюда, кстати, смешные отзывы школоты в каком-нибудь google play к играм под андроид, над которыми (над отзывами, а не играми) все смеются. Ну, вы знаете эти отзывы: «разработчики, вам что, жалко что ли, сделать все бесплатным?».
Дети — даже если знают, что в реальном мире есть деньги, не понимают, что разработчики стоят за пределами игры. «Разработчики не играют». В голове не укладывается не то, что за игру надо платить, а то, что есть мир игры, и мир не-игры, соотношение этих миров детям пока плохо поддается осмыслению.
Натягивая это все, как на глобус, на метафору «люди vs боги» получаем понятную картину. «Как Бог это допустил?».
А вот так —
Впрочем, оптимистичный вариант состоит в том, что бог занят более важными делами, всесилен он только в нашем мире, а в его реальности ему тоже надо кормить семью.
В этом случае вопрос «может ли Бог создать камень, который сам не сможет поднять» можно рассматривать с позиций тайн текущего мироздания, а можно — «какого божественного лингама это ему сдалось?» или «что делать, если заказчик пришел с противоречивыми требованиями?» («Есть ли у бога проблемы обычных людей?». Смешной вывод в обратную сторону: если у человека нет проблем обычных людей, то он видится нам, как стоящий ближе к богам. А откуда мы знаем, может он просто дефективный?).
В продолжение темы — видел на реддите пост «как мой отец играет в hearthstone». Делает он это как попало: сидя на толчке, по 15 минут в день, не пытаясь улучшиться, импульсивно покупает паки, не играет в ranked.
Вывод, конечно, грустный — «и вот таких кажуалов доит blizzard».
Это с точки зрения нормального, серьезного игрока, разумеется.
С точки зрения отца — он получает не очень дорогое, но очень эмоциональное занятие на то время, пока он срет. Он не просаживает туда все деньги, а время от времени позволяет себе лотерею в виде бустера.
He fucking LOVES the random RNG. I actually explained to him how most competitive players would like it to be mostly removed from the game, and his response was «why? It’s so cool and fun when that shit happens».
Вопрос, конечно, «и кто из них идиот?».
(К слову, я бросил играть в hearthstone, когда понял, что лучше всего относиться ко этой игре, как к одной большой лотерее, и даже собрал себе очень смешную колоду с максимум RNG — но я просто не азартен).
Перескакивая на несколько шагов вперед, тут напрашивается вывод, что в меру развитой и духовно поросший человек осознает, что все иллюзорно и умеет вовлекаться-развовлекаться в любую активность, при этом не теряя себя («не заигрываясь»), умеет нырять и выныривать (потому что без выныриваний это называется «аддикция»), что делает его жизнь богатой и разнообразной.
Либо, отскакивая на несколько шагов назад — человек может «повзрослеть» и выбрать себе «главный» мир, внутри этого мира — «главное» занятие, а все остальное объявить «не серьезным» — этот выбор более простой и поэтому более популярный.
И напоследок, подклею кусочек из черновиков, тоже про игры.
«Рогалики» (rogue-like) — самый честный жанр компьютерных игр. Ты корячишься, корячишься, а в конце обязательно дохнешь.
The Flame in the Flood — атмосферный кажуальный рогалик. Апокалипсис. Все умерли. Ты плывешь по реке на плоту, изредка причаливая к берегу, где собираешь лут, необходимый для выживания и плывешь дальше. Сама игра скорее медитативная, «на любителя», чем серьезный survival. 6/10
Но есть две мысли, помимо «жизнь похожа на чашку чая реку».
Первая — на тему «бог и игровой дизайн»: то, что наш мир — процедурно генерируемый (тут у ученых сомнений уже мало) вовсе не отрицает наличие творца, который эти [beep] процедуры придумал. Просто творец ленив и не стал прописывать для каждого скрипты.
Вторая — не мысль, а эмоция. Я мало играю в игры, в основном «смотрю», иногда по старой памяти рождаются разные мысли «было бы хорошо сделать», спустя некоторое время нахожу готовые реализации и радуюсь. Например, бой в Darkest Dungeon.
Применительно к рогаликам подумал, что было бы хорошо оставлять пару предметов в наследство следующему игроку, следующей версии себя, раз они все равно дохнут.
В The Flame in the Flood эта механика реализована прекрасно именно с точки зрения той самой «атмосферы»: в начале игры показывается «мультик», как собака-попутчик находит труп и притаскивает рюкзак с этого трупа тебе.
В конце игры — когда тебя убивают — те вещи, которые лежат в рюкзаке собаки, сохраняются.
Можно сказать, что она притаскивает тебе именно этот рюкзак в начале игры.
Mathemagic alpha
Два года назад мы со старшим ребенком пробовали Stencyl, сейчас — Unity.
Я ее ни разу не открывал, решил попробовать, заодно показать сыну, «как игры делаются». Хотя, если быть до конца откровенным, я, как порядочный отец, решил показать сыну «как игры делаются» в первую очередь, а если получится — получить удовольствие самому.
(Не получилось, но было сносно. «В процессе создания ни один ребенок не пострадал». Зато, возможно, это один из таких моментов «помню, в детстве, с папой...». Впрочем, мне понравилась система частиц, как легко видно по «спецэффектам»).
С меня — программирование и игровой дизайн, с Глеба — графика и звуки. Потратили две недели.
Я потратил (в основном на изучение Unity, в свободное от работы время), а не «потратили». Потом скомпилировал ребенку на планшет под Android. Вот, записал с него видео.
Конечно, он играть не будет. Но сам процесс должен быть познавателен.
Может, доделаем и выложим.