ПРИНТЕД #2

1 апреля 2015 г.
http://instead.syscall.ru


Привет всем, кто читает #2 выпуск ПРИНТЕДА! За этот месяц произошло не так много событий, так что выпуск будет коротенький. Но предупреждаю, что без появления новых игр вероятность выхода очередного ПРИНТЕДА начинает драматически снижаться!!! Ибо движок без игр не особенно нужен, как и, очевидно, новостные выпуски о нем.

Внимание! Не смотря на то, что сегодня 1-е апреля, выпуск не содержит никаких розыгрышей!

Еще хочу сказать, что выпуски теперь доступны в виде обычных txt файлов по адресу: http://instead.syscall.ru/printead

Петр Косых

Новости


Закрытие googlecode.com

Недавно произошло окончательно закрытие хостинга проектов googlecode.com. Как это относится к INSTEAD? Прямым образом.
Дело в том, что раньше там хостился INSTEAD и до последнего времени размещался Instead-launcher а также то, что называется официальным репозиторием игр (фактичнски, xml файл).

Поэтому, Instead-launcher переехал на github.com/instead-hub а адрес официального репозитория сменился на: http://instead.sf.net/pool/game_list.xml. Был выпущен новый Instead-launcher с исправлением некоторых ошибок и с обновленным адресом репозитория.

Корректируюший релиз INSTEAD 2.2.3

Увы, моим надеждам на долгую жизнь версии 2.2.2, высказанным в прошлом выпуске, не суждено было сбыться... Через пару недель была выпущена версия 2.2.3 содержащая исправления ошибок. Самая серьезная ошибка проявлялась в игре "ПЕРЕХОД" во время сохранения при блужданиях по лабиринту, если сделать это во время затемнения. Технически она заключается в некорректном сохранении позиции игрока в некоторых (редких) ситуациях. Так что рекомендую всем разработчикам игр обновиться.

INSTEAD в портах OpenBSD?

Я пишу этот выпуск на ноутбуке. Этот ноутбук еще вчера был хакинтошем, на котором я собирал версию для iOS. Теперь здесь стоит OpenBSD. Надо сказать, красивая и приятная система...

Значит ли это, что я перестану собирать iOS версию? Нет! Мне удалось поставить OS X в виртуальную машину и собрать INSTEAD там, так что угрозы для сборок iOS версии пока нет...

Кроме того, возрастает вероятность появления INSTEAD в портах OpenBSD, так как рано или поздно я попробую оформить INSTEAD в виде порта. Хотя есть ли хоть кто-нибудь кто запускает INSTEAD на OpenBSD? Откликнитесь!

Жизнь ИФХАБА

Нашему новому ресурсу http://ifhub.ru исполняется месяц. Можно уже попробовать оценить то что получилось и получилось ли вообще. Итак, список приятных неожиданностей и разочарований.

Топ приятных неожиданностей ИФХАБА:

  • Проект поддержали почти все активные участники ifiction.ru.
  • Энтузиазм в течении первых дней становления ресурса навсегда останется в анналах... тьфу, ну в общем, идея вдохновила.
  • В первые же дни жизни ресурса были размещены интересные материалы на тему ИЛ, которые были действительно интересно почитать.
  • Возможность минусовать пока не привела к каким-то негативным процессам.

Топ разочарований ИФХАБА:

  • Число участников невелико.
  • Постепенно энтузиазм утих, и появление новых материалов сильно замедлилось.

В общем, что ждет жанр ИЛ в общем и ИФХАБ в частности покажет время... Главная моя надежда, чтобы ресурс не превратился просто в замкнутую песочницу для развлечения самих авторов. А пока что выхлоп есть. Следите за ифхабом и пишите статьи, если не можете писать игры. :)

Материк переведен!

@vorov2 выложил полностью переведенную версию материка. Вернее, двуязычную версию. Пока она еще содержит неточности, но так или иначе -- работа подходит к концу!!! Неужели Материк попадет в стим? Также, приятной неожиданностью стал тот факт, что об INSTEAD вообще знают наши американские и немецкие "коллеги".

Игры


С играми за этот месяц не густо. А если конкретней -- игра одна. Это ремейк моего исполнения. Но об этой игрушке есть что рассказать, так что встречайте:

Клара -- расхитительница варенья // Николай Жариков

Я думал, стоит ли писать про автора этой игры или нет, и все-таки решился это сделать...

Когда то давным-давно, когда версия INSTEAD едва дошла до 1, я сделал модуль URQ и портировал на него некоторые игры. Мне очень понравились такие вещи как: "Холм фей" и "Проклятое наследство". Уже во время портирования второй игры я узнал, что автор этих игр -- Николай Жариков, автор сайта http://www.questtext.narod.ru/, трагически погиб в марте 2007 года.

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

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

Вот как то так оказались рядом все эти вещи -- серьезные и не очень. Заставляет лишний раз вспомнить о том, кто мы есть и что есть наша жизнь.

А недавно на форуме ifiction.ru Максим Ганенко выложил прекрасные иллюстрации по мотивам игры "Клара". Это тоже игра Николая, причем парсерная. Причем на платформе "6days", которая как и INSTEAD использовала lua. И я просто не мог не сделать ремейк этой игры на метапарсере....

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

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

Кружок программирования


Обработчики onact/onwalk/onuse/oninv

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

Представим себе, что главный герой поранил руку и теперь не может взаимодействовать с объектами. Как реализовать такое поведение? Или же нужно отслеживать все перемещения героя и накапливать усталость. Это часто реализуется life методом, но есть способ проще!

Начиная с версии 1.7.0 в INSTEAD присутствуют обработчики: game.onact, game.onwalk, game.onuse и game.oninv.

В отличие от таких обработчиков как use и used, они вызываются перед событием, и позволяют перехватить нормальный ход вещей.

Так, для случая с раненой рукой, можно написать:

...
game.onact = function(s, w)
    if ranen then
        p [[Я ранен!]]
        return false
    end
end;
...

Как видно из примера, обработчик может не только выполнить какие-то действия, но и запретить выполнение текущего события! (return false). Если вам нужен доступ к предмету, на которое направлено действие, то он приходит в обработчик в виде второго параметра (w).

Аналогично в обработчики onuse, onwalk и oninv приходят все параметры этих событий. Так, для onuse вы получите два объекта, которые комбинирует игрок.

Обработчик onwalk полезен для отслеживания переходов. Кроме того его можно применить и для перенаправления игрока в другую комнату при достижении какого-либо условия! Главное, избегайте рекурсий! Так как если вы делаете walk из onwalk, то это снова приведет к событию walk и вызову onwalk. Избежать рекурсии легко, например, с помощью переменной:

...
global { power = 100 };
in_walk = false
game.onwalk = function(s, w)
    if in_onwalk or w == main then -- если рекурсия или вход 
                                   -- в комнату main
                                   -- ничего не делать
        return
    end
    power = power - 1 -- уменьшаем силу при переходах
    if power < 0 then -- свалились с ног?
        p "Я устал! Я хочу спать!";
        in_onwalk = true -- избежать рекурсию
        walkin 'sleeping' -- переход в сон
        in_onwalk = false
        return false -- прекратить первоначальный переход
    end
end
...

Наверное вы уже заметили, что эти обработчики удобно было бы использовать для подсчета числа событий. Например, число произошедших act для заданного объекта. На самом деле, существует готовый модуль "counters", который как раз и использует эти обработчики.

Например:

...
require "counters"

apple = obj {
    nam = 'яблоко';
    inv = function(s)
        if inv_count(s) > 3 then
            p [[Ладно, съем!]]
            remove(s, me())
            return
        end
        p [[Да это же яблоко!]]
    end
...
}
...

Для принудительного сброса счетчика, используйте:

inv_count(что, число);

Понятно, что определены функции: walk_count, inv_count, use_count, act_count.

Если вы хотите использовать модуль counters и сами обработчики onXXXXXX, включите модуль после определения своих функций, например:

...
game.oninv = [[Я действую!]];
game.onwalk = [[Я хожу!!!]];
require 'counters'
...

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

Слухи


Первого апреля раздел слухов не работает. :)

Метафизика


Как вы знаете из этого выпуска ПРИНТЕДА, я поставил себе на ноутбук OpenBSD. Интересно, но этот факт создал в моей голове ворох мыслей и ассоциаций которыми захотелось поделиться.

Наверняка многие из любителей INSTEAD знают про Linux. Некоторые, слышали про FreeBSD. А вот про такую систему как OpenBSD, уверен, знают единицы. Поставив OpenBSD и оценив эту прекрасную систему я вдруг увидел некую аналогию с INSTEAD. Об OpenBSD знает процент от процента. Но это не мешает ей быть прекрасной системой. Она никогда не станет заменой Windows и даже Linux. Я не буду советовать ставить ее вам, но... Но она существует и она прекрасна! Она делается теми людьми и для тех людей кому она по душе. И эти отношения не испорчены деньгами и амбициями. Вокруг люди работают с Windows, некоторые ставят Linux. Адепты систем устраивают холивары на специализированных форумах. А OpenBSD не видно, разве что редкий админ поставит ее на сервер. Ее не видно, но она есть! И что то делает ее сильней всех этих систем. Например то, что она жива вопреки, казалось бы, всем законам этого мира. :)

И я вдруг осознал, что с приходом денег в какой-либо проект мое отношение к нему незаметно меняется. Например, когда я начинал заниматься Linux после Windows -- это был прорыв в плане свободы. Систему делали такие же люди как ты сам, свободную систему для нас самих. Это сильно отличалось от того, что я видел в мире Windows. Со временем Linux развился. Сегодня в него вкладываются деньги и труд множества оплачиваемых разработчиков. Linux стал нужен. Это здорово! Но в тоже время, что то изменилось. Теперь в творчество примешались "целесообразность", "бизнес" и прочие подобные вещи мира сего. Мне нравится Linux и я работаю с ним. Он не стал хуже, поймите меня правильно. Но все-таки, что то меняется...

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

Возвращаясь к ИЛ. Я знаю, например, что многие не видят ничего плохого в монетизации. Многие мечтают о работе в геймдеве. Я не вижу ничего плохого в этом, но что касается меня, то я понял, что затраченное на творчество время оправдывается не только результатом, но и мотивами.

Творчество, в основе которого лежат товарно-денежные отношения или смутное желание власти/популярности вызывает в моей душе смятение и мне не хочется этим заниматься. Так что добавление INSTEAD в порты OpenBSD обрадует меня больше, чем сотни тысяч скачек Windows версии, которых INSTEAD никогда не увидит. :)

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

До встречи на полях ПРИНТЕДА!