RSS
Pages: 1 ... 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 ... 70
[>] О творчестве (цитаты)
std.hugeping
hugeping(ping,1) — All
2020-09-08 20:45:41


Aug 23, 2018 · 2 min read

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

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

Главный элемент творчества — чувство личной свободы.
(Чехов)

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

Совершенства достигает лишь тот, кто отказывается от всяческих средств, ведущих к сознательной утрировке.
(Поль Валери)

Если бы мы могли совершенно не принимать в расчет все правила и общепринятые способы, которыми делаются фильмы, книги и проч., какие бы замечательные вещи можно было бы создавать! Мы совершенно разучились наблюдать. Наблюдение мы заменили деланием по шаблону.
(Тарковский)

Чтобы хорошо писать, надо разучиться грамматике.
(Гёте)

Чем недоступнее рассудку произведение, тем оно выше.
(Гёте)

Кто хочет понять поэта, должен идти в страну поэта.
(Гёте)

Мне важно установить в этом фильме то специфически человеческое, нерастворимое, неразложимое, что кристаллизуется в душе каждого и составляет его ценность. Ведь при всём том, что внешне герои, казалось бы, терпят фиаско, на самом деле каждый из них обретает нечто неоценимо более важное: веру, ощущение в себе самого главного. Это главное живёт в каждом человеке.
(Тарковский о “Сталкере”)

Я не пишу песни для кого-либо специально. Конечно, мне хочется, чтобы все люди могли меня понять… Но… Я не знаю. Песни которые я пишу (мы пишем), и песни которые мы играем. Мы делаем только так как мы хотим.
(В. Цой)

Набрать нужное количество слов — это не самое трудное. Куда труднее сочинить рассказ как таковой; литературное творчество — процесс загадочный до жути. Вам так хочется сделать все правильно, вы лезете вон из кожи, на каждом шагу беспощадно судите себя — и в итоге оказываетесь в глухом тупике. Тысячи и тысячи написанных слов не сложились во что-либо приемлемое; среди дикого сумбура невозможно найти правильный курс.
Р.Шекли

[>] Bolder Dash с БК0010–01
std.hugeping
hugeping(ping,1) — All
2020-09-08 20:49:46


Мне повезло, программировать я начал в лет 13, когда у нас в стране появились доступные компьютеры. Я был счастливым обладателем машины под названием БК0010–01. Конечно, сейчас даже стыдно озвучивать её характеристики. Но главное — на этом можно было программировать! Вообще, в каком то смысле было проще. В то время всё было просто. Железо — простое. Программы — простые. Сегодня, между человеком и машиной столько слоёв абстракции, что пробиться сквозь них очень тяжело. А в то время, ты мог программировать прямо в машинных кодах. Или вообще, на листке бумаги… Аналоговый мир впервые встретился с цифровым. (Кстати, успех таких проектов как PICO-8 или TIC-80 объясняется, как мне кажется, попыткой снова придать программированию простоту и радость творчества, которую у нас забрали.)

Так вот, я из тех людей, которые научились программировать благодаря играм. Я играл в игры и хотел делать такие же. Это и было основным стимулом для изучения возможностей БК. Одной из первых игр, в которые я играл была игра Bolder Dash.



Конечно, я тогда не мог знать, что Bolder Dash не самобытная игра на БК. Игра поразила меня своей сложностью. В то время я едва смог пройти несколько уровней, но не оставлял попыток пройти игру дальше.

Интересно, что потом, когда у меня появился уже x86 компьютер и я познакомился с разными вариантами Bolder Dash, я каждый раз был разочарован. Да, в этих играх человечек тоже толкал камни в разные стороны, но… Игра была абсолютно иной! В ней не было интеллектуальности! Скорее, рутинные уровни. Тяжёлое впечатление, словно ты играешь в sudoku или разгадываешь кроссворд. Каждый раз я с теплом вспоминал болдера с “бэкашки”…

В одной из версий INSTEAD, я добавил возможность создавать простые 2-D игры. Вот тогда (или чуть позже) я и вспомнил про Bolder Dash.

Мне хотелось сделать не просто клон, а точную копию игры. Поэтому, я вооружился дизассемблером PDP-11 и… Начал реверсить код.

Кстати, в то время я уже знал, что автор игры на БК (Мелентьев А.В.) был вдохновлён игрой Bolder Dash на Atari. Но он не играл в неё, а просто видел. После этого, он по памяти написал свою реализацию. Как здорово, что он не скопировал оригинал, и получилась совершенно новая игра!

Реверс кода PDP-11 оказался приятной и несложной задачей, буквально за несколько дней я воссоздал оригинальный алгоритм на Lua. С некоторыми улучшениями. :) Интересно, но я обратил внимание на тот факт, что функции часто начинались с “красивых” адресов, а между блоками кода часто были пропуски. Тогда я не мог этого понять, но ответ оказался простым! Игра писалась непосредственно в машинных кодах! Без использования ассемблера!

Кстати, вот так выглядит первый уровень игры в Lua реализации.

--$Name:STANDARD
--$Name(ru):СТАНДАРТ
maps = {
-- 0
"################",
"#+@@@@@@@@@@@@@#",
"#::::::@@::::::#",
"#::::::@@::::::#",
"#::::::@@::::::#",
"#:::@@@@@@@@:::#",
"#:::@::::::@:::#",
"#:::@: $$ :@:::#",
"#:::@: $$ :@:::#",
"#:::@: $$ :@:::#",
"#::##########::#",
"#::    %     ::#",
"#::          ::#",
"#::@@@@$$@@@@::#",
"#::::::::::::::#",
"################",

Ещё несколько дней, и болдер даш заработал на INSTEAD!

Когда я рассказывал об игре знакомым и говорил, что это “Болдер Даш”, всегда происходил эффект ложного узнавания. Люди думали, что понимают о чём идёт речь, и это мешало. Так как этот “Болдер” совершенно самобытная игра. Поэтому, я назвал игру “Miner Bold”.

Прямо сейчас, вы можете поиграть в Miner Bold. А я пока продолжу.

Так в чём же уникальность гнёмплея этой игры, по сравнению с оригинальным Bolder Dash, которого мы все знаем?

Фактически, это аркадная головоломка. Игра — набор простых с виду уровней, каждый из которых имеет индивидуальные особенности. Каждый из которых проходится за пару минут (если знать — как). Но если не проявить смекалку, каждый уровень может стать блокадой.

В физике тоже есть нюансы. Например, вы можете толкать камни вверх. А также, делать это на лету… В некоторых ситуациях… :) В некоторых ситуациях, можно даже “пугать” врагов. Конечно, эта механика следствие очень простого кода, но и она придаёт игре свой шарм.

Кроме оригинальных уровней, я добавил библиотеку дополнительных лабиринтов. Игра пишет демки успешных прохождений, которыми можно потом обмениваться (Пишутся они в каталог с сейвами). Если не нажимать на кнопки при старте, то игра покажет уже записанные демки. Также запустить демку можно кнопочкой “d” из меню выбора уровня (предварительно записав демку или взяв ее у товарища и подложив в каталог с игрой).

В игру можно играть на Android с помощью жестов. Только играйте двумя руками одновременно, тогда управление становится не хуже клавиатурного. Проверено мной и сыном, игра проходима. :)
Всем БКшникам — привет! :)

https://www.youtube.com/watch?v=ghZ3iQQj0iI

[>] Эффективность против простоты
std.hugeping
hugeping(ping,1) — All
2020-09-08 20:53:37


Простой код — изящный и понятный код. Он работает предсказуемым образом, в нём легко выявить ошибки ещё на стадии написания. Наконец, он просто красив! Какой программист не стремится к простому коду? Когда мы представляем себе идеальный код — мы обычно имеем в виду именно простой, красивый исходный код! Но почему мы пишем нечто совсем другое?

Уравнение прямой — что может быть проще?

Ах + Ву + С = 0

Формула существует в мире идеальном. Но попробуем нарисовать отрезок прямой в грубой действительности — на растровом мониторе. Мы можем, конечно, выразить y через x и, увеличивая на 1 x, рассчитывать y. (Или x от y, для вертикальных отрезков). Потом ставить пиксель в координаты (x, y). Простой алгоритм. Только, никто так не делает. Медленно, неэффективно. Вы наверняка слышали об алгоритме Брезенхэма, который используется в таких случаях. К примеру, реализация рисования отрезка в INSTEAD (на C), выглядит так:

static __inline void line0(struct lua_pixels *hdr, int x1, int y1, int dx, int dy, int xd, unsigned char *col)
{
    int dy2 = dy * 2;
    int dyx2 = dy2 - dx * 2;
    int err = dy2 - dx;
    unsigned char *ptr = NULL;
    int w = hdr->w; int h = hdr->h;    int ly = w * 4;
    int lx = xd * 4;    while ((x1 < 0 || y1 < 0 || x1 >= w) && dx --) {
        if (err >= 0) {
            y1 ++;
            err += dyx2;
        } else {
            err += dy2;
        }
        x1 += xd;
    }
    if (dx < 0)
        return;
    ptr = (unsigned char*)(hdr + 1);
    ptr += (y1 * w + x1) << 2;    pixel(col, ptr);
    while (dx --) {
        if (err >= 0) {
            y1 ++;
            if (y1 >= h)
                break;
            ptr += ly;
            err += dyx2;
        } else {
            err += dy2;
        }
        x1 += xd;
        if (x1 >= w || x1 < 0)
            break;
        ptr += lx;
        pixel(col, ptr);
    }
    return;
}

static __inline void line1(struct lua_pixels *hdr, int x1, int y1, int dx, int dy, int xd, unsigned char *col)
{
    int dx2 = dx * 2;
    int dxy2 = dx2 - dy * 2;
    int err = dx2 - dy;
    int w = hdr->w; int h = hdr->h;
    unsigned char *ptr = NULL;
    int ly = w * 4;
    int lx = xd * 4;    while ((x1 < 0 || y1 < 0 || x1 >= w) && dy --) {
        if (err >= 0) {
                x1 += xd;
            err += dxy2;
        } else {
            err += dx2;
        }
        y1 ++;
    }
    if (dy < 0)
        return;    ptr = (unsigned char*)(hdr + 1);
    ptr += (y1 * w + x1) << 2;    pixel(col, ptr);    while (dy --) {
        if (err >= 0) {
            x1 += xd;
            if (x1 < 0 || x1 >= w)
                break;
            ptr += lx;
            err += dxy2;
        } else {
            err += dx2;
        }
        y1 ++;
        if (y1 >= h)
            break;
        ptr += ly;
        pixel(col, ptr);
    }
    return;
}

static void line(struct lua_pixels *src, 
int x1, int y1, int x2, int y2, 
int r, int g, int b, int a)
{
    int dx, dy, tmp;
    unsigned char col[4];
    if (y1 > y2) {
        tmp = y1; y1 = y2; y2 = tmp;
        tmp = x1; x1 = x2; x2 = tmp;
    }
    col[0] = r; col[1] = g; col[2] = b; col[3] = a;
    if (y1 >= src->h)
        return;
    if (y2 < 0)
        return;
    if (x1 < x2) {
        if (x2 < 0)
            return;
        if (x1 >= src->w)
            return;
    } else {
        if (x1 < 0)
            return;
        if (x2 >= src->w)
            return;
    }
    dx = x2 - x1;
    dy = y2 - y1;
    if (dx > 0) {
        if (dx > dy) {
            line0(src, x1, y1, dx, dy, 1, col);
        } else {
            line1(src, x1, y1, dx, dy, 1, col);
        }
    } else {
        dx = -dx;
        if (dx > dy) {
            line0(src, x1, y1, dx, dy, -1, col);
        } else {
            line1(src, x1, y1, dx, dy, -1, col);
        }
    }
    src->dirty = 1;
}

И это — весрия без анти-альясинга… Согласитесь, понять из алгоритма, что именно он делает, не так-то просто…

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

Я очень люблю OpenBSD за её простоту. Если сравнивать с современным Linux — это небо и земля! Но я понимаю, что за простоту пришлось заплатить… эффективностью. Ядро Linux очень сложное! Очень хитрые способы синхронизации (взять хотя бы rcu) разросшийся код системных вызовов… Даже если сравнивать один и тот же код разных версий — разница будет видна невооружённым глазом. Например, код из версии ядра 3.16:

void __napi_complete(struct napi_struct *n)
{
    BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state));
    BUG_ON(n->gro_list);
    list_del(&n->poll_list);
    smp_mb__before_atomic();
    clear_bit(NAPI_STATE_SCHED, &n->state);
}
void napi_complete(struct napi_struct *n)
{
    unsigned long flags;`    /*
     * don't let napi dequeue from the cpu poll list
     * just in case its running on a different cpu
     */
    if (unlikely(test_bit(NAPI_STATE_NPSVC, &n->state)))
        return;`    napi_gro_flush(n, false);
    local_irq_save(flags);
    __napi_complete(n);
    local_irq_restore(flags);
}

А вот аналогичный код, но уже из 4.18

bool napi_complete_done(struct napi_struct *n, int work_done)
{
    unsigned long flags, val, new;    /*
     * 1) Don't let napi dequeue from the cpu poll list
     *    just in case its running on a different cpu.
     * 2) If we are busy polling, do nothing here, we have
     *    the guarantee we will be called later.
     */
    if (unlikely(n->state & (NAPIF_STATE_NPSVC |
                 NAPIF_STATE_IN_BUSY_POLL)))
        return false;    if (n->gro_list) {
        unsigned long timeout = 0;        if (work_done)
            timeout = n->dev->gro_flush_timeout;        if (timeout)
            hrtimer_start(&n->timer, ns_to_ktime(timeout),
                      HRTIMER_MODE_REL_PINNED);
        else
            napi_gro_flush(n, false);
    }
    if (unlikely(!list_empty(&n->poll_list))) {
        /* If n->poll_list is not empty, we need to mask irqs */
        local_irq_save(flags);
        list_del_init(&n->poll_list);
        local_irq_restore(flags);
    }    do {
        val = READ_ONCE(n->state);        WARN_ON_ONCE(!(val & NAPIF_STATE_SCHED));        new = val & ~(NAPIF_STATE_MISSED | NAPIF_STATE_SCHED);        /* If STATE_MISSED was set, leave STATE_SCHED set,
         * because we will call napi->poll() one more time.
         * This C code was suggested by Alexander Duyck to help gcc.
         */
        new |= (val & NAPIF_STATE_MISSED) / NAPIF_STATE_MISSED *
                            NAPIF_STATE_SCHED;
    } while (cmpxchg(&n->state, val, new) != val);    if (unlikely(val & NAPIF_STATE_MISSED)) {
        __napi_schedule(n);
        return false;
    }    return true;
}
EXPORT_SYMBOL(napi_complete_done);

Кроме очевидного увеличения объёма кода тут присутствует любопытный фрагмент. Обратите внимание на конструкцию:

new |= (val & NAPIF_STATE_MISSED) / NAPIF_STATE_MISSED * NAPIF_STATE_SCHED;

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

Сложность кода растёт, простота теряется… Нельзя назвать ядро Linux примером плохого кода, но и красивым этот код можно назвать лишь с натяжкой.

К сожалению, мир в котором мы живём — это мир компромиссов.

Мы можем следовать одному из принципов:

- Linux — стихийная хакерская разработка;
- OpenBSD — принцип простоты в абсолюте;
- Проект https://suckless.org/ — принцип простоты до абсурда.

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

[>] Re: Язык и сознание
std.hugeping
hugeping(ping,1) — hugeping
2020-09-08 21:05:33


Иллюстрация #1
1.png
1.png
[>] Re: Язык и сознание
std.hugeping
hugeping(ping,1) — hugeping
2020-09-08 21:06:26


Иллюстрация #2
2.png
2.png
[>] Произведение и время
std.hugeping
hugeping(ping,1) — All
2020-09-08 21:21:01


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

Меня всегда интересовал механизм этого узнавания. Каким образом произведение вдруг становится признанным? Что или кто является критерием?



Вот и “Моби Дик” Германа Мелвилла не был принят современниками. Приведу несколько цитат:

> «Моби Дик» не был принят литературной критикой и не получил успеха у читателей. От Мелвилла отвернулись. Мелвилл жил в Питтсфильде до 1863 года, продолжая писать и борясь с нуждой. Несколько книг, выпущенных им за эти годы, не восстановили его литературной репутации.

> После разгромной критики вышедшего спустя год готического романа «Пьер, или Двусмысленности» (Pierre, or The Ambiguities, 1852), — где изображён писатель, который среди шумной толпы чувствует себя таким же одиноким, как на полюсе, — Мелвилл стал публиковаться анонимно, печатая рассказы в журналах.

> Когда Мелвилл умер в 1891 году, то был уже настолько забыт, что автор короткого некролога в «Нью-Йорк таймс» не сумел правильно написать его имя.

> С 1920-х началось переосмысление Мелвилла, и его признали классиком мировой литературы.

Началось переосмысление. Выглядит загадочно, правда? В английской статье на Wikipedia этот момент описан подробнее (спасибо @techniX).

> The “Melville Revival” of the late 1910s and 1920s brought about a reassessment of his work. The centennial of his birth was in 1919. Carl Van Doren’s 1917 article on Melville in a standard history of American literature was the start of renewed appreciation. Van Doren also encouraged Raymond Weaver, who wrote the author’s first full-length biography, Herman Melville: Mariner and Mystic (1921).

По русски об этом можно прочитать в этой статье. https://daily.afisha.ru/brain/1028-mobi-dik-germana-melvilla-nesvoevremennyj-shedevr/ Итак, американский критик и биограф Карл Ван Дорен https://en.wikipedia.org/wiki/Carl_Van_Doren написал статью, потом (на 100-летие автора), посвятил целый раздел в своей книге. Способствовал созданию биографии… И вот, закрутилось!

Так что, после 70 лет люди, наконец, доросли до понимания творчества Мелвилла? Или, может быть, вернулась мода на романтизм? Или в 1851 году критики “перекрыли кислород”, а через 70 лет нашёлся другой критик? Не знаю, я не искусствовед и я могу только удивляться.

Эта история интересна тем, что показывает нам удивительный и простой факт — произведение существует вне времени! Или даже “сквозь” время. Автора давно нет с нами, но в умах, сердцах людей снова создаются образы, которые чувствовал и создавал писатель. А бумага, оказывается, это довольно надёжный носитель информации!

Мы живём в цифровую эпоху. Что будет с десятками тысяч игр, художественных и музыкальных произведений через 50, 70, 100 лет? Станет ли что-нибудь из этого наследием культуры, или все сгинет в забытье и устаревших технологиях? Очевидно, сейчас мы наблюдаем “перенасыщение”, но кто в наши дни возьмёт на себя роль “критерия”? Или всё, что нам остаётся — хранить традицию? Узнал бы цифровой мир нового Достоевского, или талантливый автор был бы задушен монетизацией, мотивацией, изучением ЦА и другими особенностями современного “культурного рынка”?

Интересные вопросы, на которые лично у меня нет ответов.

[>] Язык и сознание
std.hugeping
hugeping(ping,1) — All
2020-09-09 08:10:50


Пока Haiku захавала мой мозг (разбираюсь в потрохах системы, сделал пару коммитов в ядро), писать что-то осмысленное в блог некогда. :) Поэтому сегодня поделюсь отвлечёнными мыслями насчет взаимного влияния языка и мышления.

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

ii://yEBVIVlseU2SZu5WbOVC

Так вот. Я, конечно, понимал, что английский вариант будет проще, но не ожидал, что настолько проще!

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

Раньше я считал, что сознание не сильно завязано на язык. Думал я это на основании собственного опыта интуитивного мышления, когда замечал, что мысли часто не облекаются в слова. То-есть, человеческая архитектура, на фундаментальном уровне, не зависит от “прошивки”. Но теперь мне кажется, что язык определённо влияет на сознание и это влияние существенно.

Один простой пример. В русском языке у нас большинство неодушевлённых предметов имеет род. В английском не так. Конечно, там тоже есть “ship” как “she” и так далее, но это все-таки скорее исключение. То-есть, говоря “ложка” или “нож” — я ловлю себя на мысли, что моё отношение к этим предметам окрашивается в разные оттенки в зависимости от рода! В английском это “it” — и всё тут. С точки зрения разума — всё верно. Это предмет, какой тут может быть род?

Но в русском, я действительно чувствую, что подушка — это “она”. Что топор — это “он”. Если вы со мной не согласны, проведите мысленный эксперимент. Представьте, что “облако” получило мужской род (“облак летит по небу”). Или “топор” стал женского рода (“Топр была острой”). Уверен, разницу вы почувствуете.

Винтовка и карабин. Согласитесь, оба слова, означая похожие вещи, осознаются по-разному! А ещё мне кажется, что это осознание будет разным у мужчин и женщин. Удивительно! Таких примеров можно привести массу, и это даже забавно — обнаруживать в себе эмоциональное отношение к неодушевлённым вещам.

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

ii://iIKozvIkN197sjQFx2Hh

Так что русский язык очень эмоционален и выразителен. И мне лично это нравится. Почему? Не потому ли, что я уже изменён языком (прошивкой)? Или, все-таки, потому, что мой язык мне соответствует?

В общем, философия языка, должно быть, очень глубокая и интересная тема…


P.S. Edited: 2020-09-09 06:10:02

[>] Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — All
2020-09-09 08:21:00


> Опубликовано 09.05.2010

Уже больше года назад, увидела свет первая публичная версия INSTEAD и игра «Возвращение квантового кота». В то же время я написал статью в электронный журнал LGT о том, как создавался движок…

# Стать режиссёром

После просмотра захватывающего фильма или чтения полюбившейся книги кто из нас не ставил себя на место режиссёра или писателя? Подобрать актеров. Продумать сюжет. Сделать все так, как кажется правильным. Что касается меня, то я всегда мечтал написать свою историю. В эпоху постмодернизма большинство сюжетов — это циничные (хотя и изысканные) истории. Я хорошо помню чувство разочарования, когда мы с другом выходили из кинотеатра, посмотрев только что вышедшие новые «Звездные Войны». Я же всегда хотел написать историю, в которой бы смешались романтика и фантастика, я хотел создать «классическую» историю. Но я не был режиссёром, не был писателем, я был программистом.

Еще учась в институте, воспитанные лучшими квестами Lucas Arts, мы с моим другом пытались писать графический «плоский» квест, но как это часто бывает не хватило мотивации, да и терпения… Я писал тогда на смеси ассемблера и C. В результате не был написан даже движок.

Несколько лет назад, уже работая с Linux, я узнал о таком старом жанре компьютерных игр, как Interactive Fiction (интерактивная литература). Было похоже, что это то-что нужно! Днем рождения жанра считается 1975 год, когда Уилл Кроутер написал первый текстовый квест, Adventure. В этом квесте общение с игроком осуществлялось посредством ввода и вывода текстовой информации. Эта особенность и стала ключевой для игр жанра IF. Многие IF-игры очень похожи на книги. Кроме того, так как вывод игры это текст — автор не обязан быть художником, создание IF игры в целом гораздо проще создания графического квеста в стиле 90х. При этом, как и в случае интересной книги, сюжет определяет все. Фактически — написание такой игры это написание сценария — огромный простор для творчества, посильного для одного человека.

На данный момент, самыми популярными и старыми платформами для создания IF игр являются TADS и Inform. Для своего первого квеста я выбрал Inform. Но тут возникла сложность — русский язык гораздо тяжелее анализировать (парсить). К счастью, на тот момент Денисом Гаевым уже была сделана русификация Inform компилятора и я начал писать пробную историю на Inform.

Inform был удивителен! Я понял, что применение объектно-ориентированного подхода в программировании объектов реального мира — захватывающая и творческая задача. Помню, как программировал поведение лифта, имитируя его движения с этажа на этаж, раскрытие дверей, состояние кнопок… Через несколько дней я дал попробовать то, что получалось коллегам по работе и сделал следующие неутешительные выводы.

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

Русский Inform был отложен. Но я все еще хотел написать свой квест.

# Первая попытка

Состояние жанра IF в Росии далеко от того, чтобы вызывать оптимизм. Тем не менее существуют проекты, которые являясь платформами для IF игр не реализуют парсерный ввод. В качестве примеров можно привести платформы URQ и QSP. Игры на этих платформах относят к так называемому «менюшному» типу, когда пользователь фактически выбирает варианты действий, хотя вывод игры по-прежнему является текстом. Графика и звуки тоже могут поддерживаться движком, но они скорее дополнение — как иллюстрации в книге.

Потратив некоторое время на изучение существующих движков я понял, что они не подходят. Я уже был «испорчен» Inform’ом в том смысле, что мне нравилась объектная ориентированность языка. Кроме того, я был в то время «фанатичным» и последовательным Linux’оидом, а данные платформы изначально были написаны для DOS и Windows. Качество существующих квестов под эти платформы меня тоже не удовлетворило, особенно в сравнении с английскими аналогами, и я начал продумывать свой движок.

В качестве языка я сначала планировал использовать какой-то простой basic-подобный скриптовый язык, но как-то наткнулся на Lua и был поражён его простотой, расширяемостью и лёгкостью его встраивания в C. И я просто начал писать движок на Lua.

В качестве идеи была выбрана следующая модель:

Внутри мир игры является объектно-ориентированным. Что-то вроде упрощённого Inform.

Диалоги должны выглядеть в стиле квестов 90-х. Вообще, диалоги всегда были одной из любимых особенностей графических квестов.

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

Схема взаимодействий объектов выбрана примерно такая, как она сделана в игре Goblins: игрок выбирает мышкой объект или действует объектом на другой объект — тоже мышкой, щелкая по словам, представляющие объекты. Игрок может переходить с локации на локацию, щёлкая по их именам.

Первоначальная версия движка на Lua оказалась очень простой — несколько сотен строк. Кроме того, движок писался одновременно с игрой — я просто включал в движок все то, что упрощало код игры. Так родилась тестовая версия квеста о сотрудниках института в котором я работал и об их борьбе со злом. Движок, как я уже сказал, представлял собой просто скрипт на lua, взаимодействие с ним осуществлялось через стандартный ввод/вывод. Это позволило реализовать графический интерфейс просто как надстройку, написанную на tcl/tk. Это был unix way — очень просто. Выглядело, конечно, грубовато, но в качестве концепта годилось. Весь проект — чуть больше 1000 строк, не считая 2000 строк самой игры.

Идея графического интерфейса была предельно проста. Слева: текст с игрой. Справа — столбец с объектами инвентаря. Кликая мышкой можно было взаимодействовать с объектами и комбинировать их.


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

# Обратно в 80-е

Все это время в моем подсознании зрела мысль, что квест еще не написан, а движок — не идеален… Я прочитал документацию по Lua еще раз и понял что все, что я написал — хлам. К счастью хлама было не много, и я переписал движок с чистого листа, учитывая ошибки и узкие места игры — концепта. На этот раз получилось около полутора тысяч строк на Lua, все еще достаточно просто и гораздо проще (и, надеюсь, достаточно гибко), чем существующие «менюшные» движки. И вот, дописывая движок меня прорвало — я начал писать свой «первый» квест, о хакере дауншифтире и парадоксах квантовой механики. Как и в случае с концептом, движок дорабатывался во время написания игры. В отличие от игры-концепта, я изначально планировал консольное, а не графическое управление игрой. С одной стороны, это добавляло шарма и сближало игру с классическими IF играми, с другой стороны — использование библиотеки readline делало управление игрой довольно комфортной.

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

Игру я писал «запоем», около месяца, и когда, наконец она была готова — я с трепетом отдал ее знакомым друзьям программистам.

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

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

# Графика

Не знаю, как пришла идея сделать игру похожей на визуальную новеллу? Наверное, это стало следствием понимания необходимости написания для игры графического интерфейса. Интерфейс tcl/tk, конечно, не тянул на то, чтобы стать основным, и я начал писать библиотеку для отрисовки текста на основе SDL. Идея была в том, чтобы написать среду для запуска игр, написанных под движок, с возможностью менять вид интерфейса в зависимости от игры. Кроме того, после изучения некоторых движков, в том числе и движка для визуальных новелл, я решил, что такая среда должна быть очень простой.

Написав основу, я ради интереса попробовал вставить произвольную картинку на первую страницу игры, над текстом описания сцены и… понял, что у меня получается новая игра. Тогда я не выдержал и достал свой недорогой планшет Wacom Graphire, когда-то купленный мной для обработки фотографий и благополучно забытый, запустил gimp и попробовал нарисовать картинку для первой сцены. Просто сделал набросок, как мог… Посмотрев результат в игре я понял, что нужно рисовать дальше…

Я осознавал, что я не художник, и поэтому я решил обратить этот недостаток в достоинство, выбрав в качестве иллюстраций простые наброски… Подтверждение того, что идея может сработать, я обнаружил в детской книге про медвежонка Паддингтона, которую я купил для своей дочки, и в которой было полно подобных простеньких рисунков. Они смотрелись вполне гармонично, не смотря на примитивизм, и даже обладали каким-то своим шармом. Я стал рисовать и игра, по мере заполнения её простыми черно-белыми набросками, стала походить на книжку с авторскими (какими они, собственно, и являлись) рисунками. В некоторых случаях я брал фотографии и стилизовал их под наброски, сначала выделяя границы в gimp, а затем прорисовывая и корректируя их руками.

Для этого использовалась следующая нехитрая техника:

1.Создать копию слоя.
2.На верхнем слое: инвертировать цвет.
3.Гауссовое размытие верхнего слоя.
4.50% прозрачности верхнего слоя.
5.Объеденить видимые слои.
6.Порог.
7.Ручная работа.

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

Параллельно шла работа над графической средой, которая действительно оказалась довольно простой в реализации. Всего менее четырех с половиной тысяч строк кода на C. Это было гораздо проще всего того, что я видел.

В конце встал вопрос по поводу оформления интерфейса моей первой игры. Для рисования графических элементов я использовал Inkscape, который успел полюбить при разработке прошлой SDL игры — Color Lines. Основной проблемой стал подбор удачной подложки под текст и графику. Изначально я думал использовать просто белый фон, да и картинки были нарисованы с учётом белого фона. Но посидев пару часов со своим другом Сергеем, была выбрана подложка в виде старой книжной страницы для текста и ещё одна замысловатая текстура — для подложки под инвентарь. Правда возникла проблема — наброски были нарисованы на белом фоне и просто так рисовать их поверх текстуры было нельзя. Но, как оказалось, в gimp это решалось очень просто — переводом слоя в альфа-канал. (Слой->Прозрачность->Цвет в альфа-канал). Результат нам очень понравился.

#Звук

Примерно в это время команда с http://websound.ru выпустила диск ремэйков олдскул треков — reTracked #2 http://retracked.org Закачав его в свою Nokia N800 я был очарован композицией Liberty. Я и раньше подумывал о звуковом сопровождении игры, но теперь я знал точно, что будет играть в последней сцене.

Итак, для музыкального сопровождения я искал старые олдскульные модули и пытался осмысленно их распределить по эпизодам моей первой истории. Со стороны движка никаких сложностей не было, библиотека SDL-mixer умеет играть модули практически всех форматов.

# Эффект LOR

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

Небольшое сообщество, собранное вокруг IF игр в России это в основном Windows пользователи, и я собирался попросить кого-нибудь портировать мою игрушку под эту систему, сам я не использовал Windows с тех пор, когда перестал под неё программировать. Теоретически, процесс обещал быть простым — SDL и lua — кросс платформенные вещи и давно собраны для Windows. Но так вышло, что единственный знакомый мне Windows программист (кстати, он же портировал Color Lines) был занят другими делами и я, сделав тарболл, просто выложил его на страничку, быстро созданную на google sites. Потом я кинул ссылку на linux.org.ru и уехал домой.

Результат меня поразил. Посетители linux.org.ru пробовали мою игру и она им нравилась! Вы должны знать особенности данного ресурса, чтобы понять, что это означало для меня. Фактически, не было ни одного негативного отзыва. Люди играли в мою игру! Конечно те, кто так или иначе были знакомы с жанром, но все-таки это было неожиданно. В результате превышения трафика (я так и не нашел информации, какая именно граница считается у них лимитирующей) google sites временно отключил мою страничку и мне пришлось переносить проект в google code http://instead.googlecode.com и на всякий случай — на sourceforge. Потом, несколько человек писали мне в jabber и я исправил несколько ошибок в движке.

# Что дальше?

Instead — так я назвал платформу, легко собирается в Unix среде, например, практически без изменений он собрался для Nokia N8XX, но все-еще не собран для Windows пользователей. Я думаю, что рано или поздно версия для Windows должна появиться, но пока её нет. Что касается развития платформы, то я придерживаюсь той мысли, что платформа это средство, а не цель. Главное — это интересная история. Движок — всего лишь способ запустить игру. Если найдутся люди, которые напишут что-нибудь на instead, и потребуется расширение возможностей движка — они будут расширены.

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

[>] Re: Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — hugeping
2020-09-09 08:29:00


Иллюстрация #1
1.png
1.png
[>] Re: Сказки про INSTEAD: как всё начиналось
std.club
hugeping(ping,1) — hugeping
2020-09-09 08:29:45


Иллюстрация #2
2.png
2.png
[>] Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — All
2020-09-09 11:18:31


Сегодня выложил документацию: https://github.com/gl00my/ii-go
Также, сменил формат лент с RSS на Atom.

[>] Re: Спойлеры в клубе
std.club
hugeping(ping,1) — Peter
2020-09-09 11:22:14


> Теперь, если в вашем сообщении встречается строчка: %%spoiler%%

На новом движке ii-go теперь по другому.

@spoiler: А это спойлер!

!релйопс отэ А :reliops@

[>] Re: Ленты RSS в клубе
std.club
hugeping(ping,1) — Peter
2020-09-09 11:25:19


> Теперь можно получать сводную ленту из нескольких эх. Например, все эхи инстеда в одной RSS ленте:
> authstr можно посмотреть в личном профиле

На новом движке ii-go не так:

http://hugeping.tk/echo/all/rss - Все сообщения
http://hugeping.tk/echo/echo.name/rss - Выбранная эха echo.name
http://hugeping.tk/to/User/rss - Сообщения для User
http://hugeping.tk/from/User/rss - Сообщения от User

[>] Личная страница hugeping
ping.local
hugeping(ping,1) — All
2020-09-12 11:21:59


Информация о станции ping: ii://rOf069UX8K24yAzvWa9N

Блог: https://hugeping.ru
Капсула в gemini: gemini://hugeping.ru

Движок INSTEAD: http://instead.hugeping.ru
Парсерный минимализм: https://parser.hugeping.ru

Некоторые из моих игр: https://instead.itch.io
Все игры на INSTEAD можно найти здесь: http://instead-games.ru

github:
https://github.com/hugeping
https://github.com/instead-hub

Telegram: https://t.me/hugeping
Jabber: hugeping@404.city




P.S. Edited: 2023-11-06 15:01:13

[>] Краткая информация по этому узлу
ping.local
hugeping(ping,1) — All
2020-09-09 16:39:37


Добро пожаловать на станцию ping!

Станция ping - авторский проект Петра Косых (hugeping) ( ii://ay2xlGQxSQ0tZQqXwwku ). Функционирование станции ping не связано с поддержкой каких-либо проектов или общественно-полезной деятельностью. Станцию следует воспринимать как личный проект для самовыражения, который развивается в соответствии с видением его основателя в режиме жёсткой диктатуры.

Эта станция - островок спокойствия в зловонном море современного коммерческого интернета. Глоток принципов KISS для изголодавшихся по свободному от социальных элементов общению.

Движок форума называется ii-go: https://github.com/hugeping/ii-go

Станция ping - один из узлов в сети idec: https://github.com/idec-net/new-docs/blob/master/main.md

Для вас это означает то, что вы можете забирать все сообщения к себе, или поднять свой узел и обмениваться собщениями с узлом ping.

Каждая из лент/эх доступна по RSS, так вы можете отслеживать новые сообщения.

Ниже приводится краткая справка по форматированию сообщений в ii-go.

Если вам нужно вставить код. Начните его со строки ==== и закончите строкой ====

print("Hello, world!")

Далее рассмотрим остальные теги (каждый из них представлен исходным кодом и представлением в сообщении.

@spoiler: Это спойлер!
!релйопс отЭ :reliops@

> Это цитирование
> Это цитирование


P.S. Это комментарии
// И это тоже
P.S. Это комментарии
// И это тоже

# Это заголовок
## Заголовок 2
### Заголовок 3
=== Или используйте для заголовков символ =
# Это заголовок
## Заголовок 2
### Заголовок 3
=== Или используйте для заголовков символ =

Вы можете вставлять картинки в формате xpm2 или xpm3 прямо в тексте. Но помните об ограничении на размер. Изображения до 128x128 в палитре 64 цветов скорее всего подойдут. ;)



Вы можете загрузить себе автар в профиле, тоже скопировав xpm файл в форму. Где делать xpm? Точно умеет gimp.

И, наконец, вы можете сделать аттач файла - написав специальный тег и имя файла, а затем скопировав данные в формате base64:

@base64: logo.png
base64 данные до конца сообщения
logo.png
logo.png
[>] ii-tool clean
ping.local
hugeping(ping,1) — hugeping
2020-09-09 18:08:32


Когда кто-то редактирует сообщение, то в базу добавляется новая версия этого сообщения. Я добавил в ii-tool команду clean, которая удаляет все старые версии сообщений и сокращает размер базы.

Команду стоит применять во время выключенного сервера ii-go.

[>] Короткие заметки
std.hugeping
hugeping(ping,1) — All
2020-09-09 21:01:21


В этот топик буду писать короткие мысли и прочий флуд.
P.S. Edited: 2020-12-03 13:35:55

[>] matterbridge - объединение чатов на go
std.hugeping
hugeping(ping,1) — hugeping
2020-09-09 21:03:14


Сегодня нагуглил такой вот проектик: https://github.com/42wim/matterbridge
На go. Связывает несколько чатов в один. Испытал с чатами инстеда - discord, jabber и telegram. Просто настраиватея и работает! Оставил крутиться на малинке. :)

[>] Re: ii-tool clean
ping.local
hugeping(ping,1) — hugeping
2020-09-10 09:29:53


Долго думал, какую favicon поставить для узла. В итоге, остановился на этом:



[>] http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 09:59:06


Чем больше шлифую ii-go, тем больше мне нравится то, что получается.

Откуда во мне появилась тяга к такой вот экстремальщине? Не знаю.

Процесс, похоже, идёт последовательно.

Сначала мне понравился Linux, потом тайловые оконные менеджеры, потом OpenBSD, потом заинтересовался Plan9...

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

А вот с играми или тем же ii-go, ты никогда заранее не знаешь, что из этого всего выйдет. :) Нода, конечно, не получилась совсем уж минималистичной. Думаю, она занимает около 64кб кода на go. Но всё-таки, если сравнивать с мейнстримом...

В общем, иногда нужно вот так встряхнуться, сбросить тонны bloated слоёв и ... полететь... :)



P.S. Вот взять даже эту картинку. Что бы мы сделали на нормальном форуме? Фигак jpg на 1мб, фигак аттач. Форум фигак в postgresql. А тут? Я нашел картинку, довёл ее до нативного разрешения, привёл к 4-цветной палитре и вставил в тело сообщения. Сообщение превратилось в base64 строку и добавилось в конец текстового файла базы. Ну, разве это не прекрасно? :) Почувствуйте красоту в простом!

[>] Re: http://hugeping.tk как арт-проект
std.hugeping
boscholeg(ping,5) — hugeping
2020-09-10 10:08:51


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

[>] Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 10:19:01


> Если бы тут не тусовались одни программисты и им сочувствующие, я бы решил, что ты хочешь отвадить всех.

Ну, когда ты начинаешь думать о том, чтобы привлечь кого-то - начинаются компромиссы. :) А тут пока их просто нет. Всё прям так, как я хотел. :)

[>] Re: Bolder Dash с БК0010–01
std.hugeping
boscholeg(ping,5) — hugeping
2020-09-10 10:32:36


ЗАВИСТЬ!!! Ужасная зависть меня обуревает!
Не был обладателем ни БК ни Спеки. Компьютеры видал только в игровом зале и на кружке в школе. БКшку и и еще Искру в школе толком не давали использовать они были скорее для красоты. На БК можно было писать программы, но сохранять в память их учитель не разрешал. Я хранил программы написанные на бейсике в общей тетрадке. Каждое занятие начиналось с того, что я начинал забивать программу по новой.
Мне удалось добраться до компьютера уже только в 1994 и это уже был 486. Отец увидал мое стремление и решил, что этому стоит содействовать. Но игры он считал пустой тратой времени и поэтому играл я крайне редко. Ситуация изменилась лишь когда я освоился и начал меняться программами с друзьями и знакомыми. Таскал собой 2-3 пачки дискет. А потом я получил CD привод и купил первый сборник игрушек Classic Games #5.....
Так что, твоя игрушка мне в новинку, как и большинство других старых игр. Обязательно попробую поиграться и сыну покажу.
P.S. Edited: 2020-09-10 08:32:25

[>] Re: http://hugeping.tk как арт-проект
std.hugeping
boscholeg(ping,5) — hugeping
2020-09-10 10:34:54


Петр чем читать новые сообщения? Есть какой-то клиент?
Где про это почитать?

[>] Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 11:08:13


> Петр чем читать новые сообщения? Есть какой-то клиент?
Где про это почитать?

Вообще, вот: https://ii-net.tk/

Но можно просто RSS зацепить: ii://MaNXQnvizFFCxbmm7303

[>] Re: Bolder Dash с БК0010–01
std.hugeping
hugeping(ping,1) — boscholeg
2020-09-10 11:11:55


> На БК можно было писать программы, но сохранять в память их учитель не разрешал.

Да, помню такая же штука была. Писал игру. Поиграли. Выключили - всё. :)

> Обязательно попробую поиграться и сыну покажу.

Там есть встроенный спрятанный редактор. На компе кажется нажать E в момент выбора уровня или в самом уровне. А на андроиде, какая-то хитрая комбинация касаний. :) У меня сын делал уровни с интересом и давал мне проходить. Ещё игра пишет демки прохождений.

[>] Re: http://hugeping.tk как арт-проект
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 11:13:19


Ну и у всех этих /rss ссылок можно убрать rss - будут просто странички.

Вообще, все эти ссылки доступны из интерфейса. Потыкай в заголовке на название эхи на разных страничках - разберёшься.

[>] Перенос club.syscall.ru на станцию ping
std.club
hugeping(ping,1) — All
2020-09-10 12:38:52


Назад пути нет. Делегирую домены на сервера Яндекс. В относительно скором времени club.syscall.ru и syscall.ru будут указывать на станцию http://hugeping.tk

База поинтов не сохранится, но сообщения сохранятся. Если вы заинтересованы в общении на станции, уже можно регистрироваться на https://hugeping.tk
Новая станция больше похожа на форум.

Сервер крутится на малинке, как будет со стабильностью - не знаю. Статус проекта - личный арт-проект без всякой ответственности. http://hugeping.tk/rOf069UX8K24yAzvWa9N#rOf069UX8K24yAzvWa9N

В общем, поехали! :)

[>] Поведение клика на дату последнего сообщения на главной
ping.local
hugeping(ping,1) — hugeping
2020-09-10 13:00:49


Поменял поведение клика на дату сообщения на главной странице.

Теперь клик приведёт вас к последним 100 сообщениям в выбранной эхе. Тогда вы не пропустите новые сообщения из других топиков.

Чтобы вернуться в привычный вид топиков - нажмите на символ # у сообщения (перейти к сообщению) или на название эхи в шапке ноды.

[>] Re: Обновления ii-go (движка узла ping)
ping.local
hugeping(ping,1) — hugeping
2020-09-10 20:36:20


Теперь узел должен работать по https.

https://hugeping.tk или https://club.syscall.ru - должны работать.

Для обеспечения поддержки https используется reverse proxy: https://github.com/gl00my/ii-go/tree/master/contrib/secure

Зависимость autocert внешняяm, но компонент необязательный, поэтому принцип KISS ii-go не нарушен. :)

[>] Переезд состоялся
std.hugeping
hugeping(ping,1) — hugeping
2020-09-10 21:28:53


Вот и всё.

Дроплет syscall.ru на DigitalOcean, который служил верой и правдой 7 лет - дропнут. Долго не мог себя заставить нажать кнопочку Destroy. Заходил посмотреть "в последний раз". Но надо уметь выбрасывать старый хлам, чтобы освободить пространство, в том числе и для мыслей.

Так что, вместо syscall и вороха блогов теперь останется только https://hugeping.tk

Маленький, простой, быстрый...

P.S. https://syscall.ru и https://club.syscall.ru тоже работают, и ведут на https://hugeping.tk



[>] Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — hugeping
2020-09-12 13:31:15


В связи с переездом все подкасты INSTEAD перенесены сюда: https://soundcloud.com/hugeping
P.S. Edited: 2020-09-12 11:31:08

[>] Re: Bolder Dash с БК0010–01
std.hugeping
artur(ping,3) — hugeping
2020-09-11 20:05:21


А вот про редактор уровней не знал!
Таки полезно читать обсуждения=)
На мобилках кстати очень удобно играть. Надо побаловаться с редактором уровней...

[>] Re: Подкасты переехали на soundcloud
std.club
artur(ping,3) — hugeping
2020-09-12 13:32:42


А можно подкасты загрузить в ВК?
P.S. Edited: 2020-09-12 11:32:38

[>] Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 13:32:35


> А можно подкасты загрузить в ВК?

Я честно говоря не знаю что и как там делать. И немного побаиваюсь vk. :) Пусть пока в soundcloud полежат. Тем более, что уже неактуальны.
P.S. Edited: 2020-09-12 11:32:31

[>] Re: Подкасты переехали на soundcloud
std.club
artur(ping,3) — hugeping
2020-09-12 13:32:26


Ну я загружу туда. Всё равно можно записать автора. Запишу "INSTEAD сообщество" и т.п. В группе инстеда в ВК можно добавить как в альбом сообщества.
P.S. Edited: 2020-09-12 11:32:22

[>] Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 13:32:19


> Ну я загружу туда.

Честно говоря, мне кажется наши подкасты там вызовут нездоровую реакцию. Может не стоит?

С другой стороны, смотри сам. Я осяду здесь, а соц-сети пусть живут где-то там. :)
P.S. Edited: 2020-09-12 11:32:13

[>] Re: Подкасты переехали на soundcloud
std.club
artur(ping,3) — hugeping
2020-09-12 13:32:10


Боюсь, что группа инстеда "локальна". А подкасты видно будет через группу. Можно в принципе ещё и ограничить просмотр аудио, емнип.
Подкасты в ВК по разным направлениям, вообще, есть. Так что, думаю, подобный формат не вызовет непонимания у людей. Особенно у тех, кто вообще в эту группу вошёл=)
P.S. Edited: 2020-09-12 11:32:06

[>] Re: Подкасты переехали на soundcloud
std.club
artur(ping,3) — hugeping
2020-09-12 13:32:02


Но если не надо --> не буду
P.S. Edited: 2020-09-12 11:31:57

[>] Re: Спойлеры в клубе
std.club
boscholeg(ping,5) — hugeping
2020-09-11 23:18:47


А как назад расшифровать? Зеркальцем воспользоваться?

[>] Re: Подкасты переехали на soundcloud
std.club
hugeping(ping,1) — artur
2020-09-12 13:31:54


> Но если не надо --> не буду

Смотри на своё усмотрение. Мне ещё тут предлагали в яндекс-музыку залить. Вроде бы есть раздел: не музыка.

Подкасты нужно писать рассчитанные на широкую аудиторию, все-таки. А сейчас так и вообще - видео.

Где я, где инстед и где видео? :)
P.S. Edited: 2020-09-12 11:31:49

[>] Re: Спойлеры в клубе
std.club
hugeping(ping,1) — boscholeg
2020-09-11 23:20:35


> А как назад расшифровать? Зеркальцем воспользоваться?

Ага. Или мозгом. :)

[>] Re: Подкасты переехали на soundcloud
std.club
vmg(tavern,32) — hugeping
2020-09-12 13:31:45


hugeping> С другой стороны, смотри сам. Я осяду здесь, а соц-сети пусть живут где-то там. :)

Ты не принадлежишь к телу, друг? Тело едино, так говорит Лэндрю! © «Star Trek»
P.S. Edited: 2020-09-12 11:31:40

[>] Re: Подкасты переехали на soundcloud
std.club
Andrew Lobanov(tavern,1) — hugeping
2020-09-12 13:31:36


hugeping> Где я, где инстед и где видео? :)

Однако, юбилейный подкаст очень классный был :)
P.S. Edited: 2020-09-12 11:31:32

[>] Нелинейность в сюжетных играх
std.hugeping
hugeping(ping,1) — All
2020-09-12 12:23:11


// Опубликовано Aug 23, 2018

Недавно посмотрел ролик на YouTube про игру No Man’s Sky. Красивая игра. Одной из особенностей игры является то, что в ней широко применяется процедурная генерация. Примерно, как это было сделано в Elite, в которой генерировались звёздные карты, названия систем и экономика. Только в NMS этот приём выведен на новый технологический уровень. Генерируются формы жизни, поверхности планет и прочее и прочее.

В Elite игрок был свободен в выборе того, что он делает в мире игры. В NMS мы видим подобное. Искусственный мир без явного задания ограничений действий. Песочница. Успех Minecraft говорит нам, что такого рода игры могут быть популярными. Ещё один пример: Dwarf Fortress. Если честно, ни в одну из упомянутых игр я не играл. Во-первых, я вообще мало играю в современные игры. Во-вторых, я не большой любитель историй, рассказанных компьютером.

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

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

Во-вторых, саму игру мы можем выполнить в виде модели, которая пытается моделировать поведение героев, мотивы, эмоции…

Наверное, вы сейчас решили что это отличная идея, а я веду к тому, что симуляция в сюжетных играх — это прекрасно! Должен сознаться, лично я не вижу в этом подходе никакой творческой ценности.

Дело в том, что для меня, в сюжетных играх (как и в литературе, кино, театре) самым важным является не вариативность, а … сюжет! А сюжет — это раскрытие смысла! Как время в нашем мире это актуализация нашей свободы воли, так и сюжет игры служит цели раскрытия смысла!

Конечно, если мы играем в гоночную игру, мы вряд ли ожидаем от игры чего-то большего, чем сама гонка. Или, играя в рогалик, мы не ждём от такой игры какого-то осмысленного сюжета. Всё это понятно. Но мы говорим о сюжетных играх!

Я написал только одну нелинейную игру, это “Карантин”. http://instead-games.ru/game.php?ID=124 В игре мы встречаемся с врагом, которого не знаем заранее. Фактически, это детективная история завёрнутая в стилистику рассказа Джона В. Кэмпбелла «Кто идёт?». Игра внутри себя представляет симулятор. Или, скорее, стратегию. Игра получилась очень сложной и… скучной. Да, есть люди, которым игра очень понравилась. Но для большинства игроков, она становится неинтересной после нескольких “прогонов”. Почему? Потому, что сюжет раскрывается после пары прохождений. А потом остаётся только вариативность, стратегия, интеллект… Но никакой художественной ценности…

Правда, в моей игре “Проводник” http://instead-games.ru/game.php?ID=247 две концовки. Но это тот случай, когда обе концовки просто усиливают друг друга.

Приведу другой пример. Существует такой жанр, как книги-игры. Вариативность в книгах-играх осуществляется просто за счёт того, что вся книга это сборник параграфов между которыми читатель перемещается в зависимости от своего выбора и сложившейся ситуации.

Так книга или игра? Попробуйте написать сюжет, смысл которого был бы не в вариативности самой по себе, а в передаче некоторого замысла автора. А теперь, оформите сюжет в виде сотни параграфов с запутанными связями. Это не так то просто! В большинстве случаев, такая разбивка будет служить целям вариативности, но не передачи смысла сюжета. Вариативность, ради неё самой. Итак, жанр книги-игры хорош для развлекательной литературы, но драматическое произведение втиснуть в рамки вариативности — очень непросто.

Подводя итог. Я считаю, что ценность сюжетной игры именно в смысле, который передаётся через сюжет. В таком случае, излишняя вариативность не помогает, а напротив, мешает. На мой взгляд, сюжетная игра раскрывается именно в своей линейности. А некоторая степень свободы и интерактивности служит другой цели — погружению в атмосферу игры.

Итак, чтение книг — это диалог с автором книги. И хорошо, когда автору есть что сказать. Но ведь в песочнице ребёнок играет, как будто, сам с собой? И это — тоже способ познания, в том числе — самопознания?

Да, попытка написать игру, в которой сюжет генерировался бы “случайно” и был бы интересен — сродни написанию симулятора мира, в котором мы живём.

И это всё хорошо работает лишь до тех пор, пока мы не пытаемся симулировать внутренний мир людей. Средуцированный до детерминированного алгоритма герой, не способен сказать нам что-то новое. Сознание — не алгоритм. (В качестве рекомендации к прочтению: “Новый ум короля” Р. Пенроуза).

Также, есть мнение, что смысл чего-либо рождается субъективно в читателе, а на авторе остаётся только нарратив. Без интерпретации. В таком случае, играя в песочнице, мы наблюдаем создание различных смыслов о которых мы как автор — не беспокоимся. Читатель (игрок) развлекает себя сам.

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

[>] Возвращение квантового кота: о чём игра?
std.hugeping
hugeping(ping,1) — All
2020-09-12 12:27:52


// Опубликовано Aug 23, 2018

Моя первая игра называется “Возвращение квантового кота”. Написана она была в 2009 году. Собственно говоря, с неё всё и завертелось.

По современным меркам игра очень простенькая, но если вы в неё не играли — попробуйте. http://instead-games.ru/game.php?ID=107

Об этой игре написано достаточно, поэтому я здесь не буду копи-пастить существующие статьи. Я же обещал оригинальный контент. :) Так вот, расскажу о том, какой смысл я сам вкладывал в эту игру.

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

Вообще, это неправильный метод — рассказывать о своём творчестве в плане замысла. Часто бывает, что смыслы очень сильно зависят от восприятия конкретного человека. То-есть, это всегда диалог. И тем не менее…

Главный герой — бывший хакер, ныне дауншифтер, живущий вдали от цивилизации. После визита в магазин, у него похищают его единственного друга — кота Барсика. Фраза: “Я просто пришёл забрать своего кота” — становится девизом игры. Быстро выясняется, что похититель кота связан со зловещим институтом, который расположен недалеко от места событий.

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

В игре можно почитать рассуждения о квантовых парадоксах. В частности, о гипотетическом эксперименте Шрёдингера.

Скажу сразу, что на эту игру повлияло произведение С.Льюиса “Мерзейшая мощь”. Если вы не читали её, я рекомендую эту книгу к прочтению. Образ “зловещего института” взят оттуда.

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

Главный герой просто “знает” и просто “чувствует” сердцем, что эта истина является ложью. Он делает то, что должен — спасает кота (и мир за одно) не идя ни на какие компромиссы. Правда и любовь не нуждается в рационализации.

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

Кстати, главный злодей в игре имеет своего прототипа из реального мира (конечно, персонаж игры определённым образом мифологизирован). Этот прототип на момент создания игры работал топ-менеджером и его характер представлял из себя яркую иллюстрацию человека, в котором рациональное подмяло под себя всё остальное.

Игра была встречена очень хорошо, не смотря на явные огрехи и ляпы в тексте, которые так и не были исправлены за эти 9 лет…

На этом пока всё. :) Stay tuned.

[>] Как писать свободные игры и не сойти с ума
std.hugeping
hugeping(ping,1) — All
2020-09-12 12:35:15


// Опубликовано Aug 24, 2018

Писать код с художественной точки зрения очень интересно. На работе программисты обычно пишут код, который является эффективным для той задачи, которую он решает. На самом деле, это довольно скучно. Так как чем больше ты профессионал в своей области, тем более “шаблонно” решается задача. Ты просто делаешь так как нужно и всё. Это становится ремеслом. Профессиональный программист сегодня — это ремесленник.

Поэтому я очень хорошо понимаю программистов, которые пишут игровой код для “души”. Проект INSTEAD и возник как реализация такой вот отдушины. В первую очередь он ориентировался на программистов — лириков.

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

Вот, ты написал историю, которая тебе самому кажется классной. Что дальше? Современная жизнь инди-разработчика подчиняется довольно прагматичным правилам. Продвижение своей игры “по взрослому” требует денежных вливаний, времени и запасов валерьянки. Это всё означает, что проще и правильнее играть по правилам до конца — становиться частью рынка и продавать свои игры, чтобы пытаться окупить свои затраты.

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

К сожалению, “сарафанное радио” в наши дни практически не работает, поэтому “свободному” разработчику очень сложно выйти на свою аудиторию.

Свои последние игры Другой Марс http://instead-games.ru/game.php?ID=298 и Вахта http://instead-games.ru/game.php?ID=292 я пытался “продвигать” доступными мне способами, оставаясь в рамках свободного движения. Что именно я делал?

- Я попытался оживить нашу группу vk, https://vk.com/instead.club создавая на стене новости и отчёты о проделанной работе. Также включил кросспостинг в фейсбук.
- Я публиковал новость о “Вахте” в одной из крупных групп vk (название сейчас не вспомню).
- Наш старый jabber чат был интегрирован с чатом в Telegram, https://t.me/insteadtalk что в теории сделало наш чат доступней для потенциальных энтузиастов.
- В канал Telegram https://t.me/insteadclub (не путать с чатом) я также регулярно постил новости. Не говоря уже о своём twitter. https://twitter.com/peter_ru
- Я опубликовал игры на gamin.me. Здесь https://gamin.me/posts/19471 и здесь. https://gamin.me/posts/19616
- Я создал страничку на itch.io со своими играми. https://instead.itch.io/
- Я опубликовал новости на linux.org.ru. Одна из новостей — прошла. https://www.linux.org.ru/news/games/14202683 Вторую https://www.linux.org.ru/forum/games/14385869 не пропустили из за деятельности троллей, превративших тему обсуждения в религиозный спор. Подробности. ii://mwVQifrW5SHpOBeJ9niI И пояснения. ii://lYZ4akEqAiKPfIZKs1gX Забавно, но похоже “чёрный” пиар дал лучший эффект. Это и грустно и смешно.
- Я опубликовал новость на opennet. https://www.opennet.ru/opennews/art.shtml?num=49078
- Я писал о некоторых своих играх на reddit (лень искать ссылки).
- Я опубликовал две статьи на dtf.ru. https://dtf.ru/indie/24627-moy-indi-proekt-dlinoy-v-10-let https://dtf.ru/indie/24598-parsernaya-igra-drugoy-mars
- Я присутствовал в mastodon https://mastodon.social/@hugeping , idec и zeronet (как примеры “альтернативных” сетей).

Какие выводы я могу сделать?

С одной стороны, результат есть. Я узнал, что у моих игр существует целевая аудитория. И это сильно вдохновило.

С другой стороны, количество поигравших в мои игры, по меркам индустрии, очень мало. Я оцениваю это число в районе 2000 скачек (учитывая тот факт, что статистика web запусков не ведётся). Хотя, откровенно говоря, мне не очень интересна именно статистика. :)

Выкладывание игр на itch — практически ничего не даёт само по себе. Причина понятна. Для продвижения нужны рекламные показы. Площадки не создаются просто так, площадки зарабатывают. Когда на ресурсе представлены тысячи (или уже десятки тысяч?) игр, заметить конкретную игру практически невозможно.

Публикации в своем твиттере и ресурсах в соц-сетях ничего не дают. Это тоже понятно, нет подписчиков — нет хайпа. Я пытался подсунуть твит мэтрам западной интерактивной литературы. Это частично получилось, но ретвит сам по себе тоже дал очень мало. Кое что даёт публикация ссылок на reddit.

Хороший отклик я получил после размещения публикаций на dtf.ru. Наверное, это самый положительный опыт из всех попыток.

Интересно, но адресный выход на аудиторию “альтернативных” сообществ тоже работает. Последнее наблюдение наводит на интересные размышления.

Когда ты пишешь нишевую с точки зрения “мейнстрима” вещь, выход на нишевые же сообщества, похоже, неплохой вариант! Например, INSTEAD изначально работал только на Linux системах. Какой процент пользователей Linux? 3%? 4%?. Но в абсолютных цифрах это довольно много людей. И, проект, работающий на Linux может рассчитывать быть замеченным этой аудиторией! Какой процент пользователей FreeBSD? 1%? Однако, когда INSTEAD находится в портах этой системы, можно рассчитывать на то, что игры на нём будут замечены! Всё это даёт во много раз больше, чем простая публикация игры на тематическом форуме.

Ещё один пример. Размещение статей в ZeroNet с мизерной аудиторией. Однако, размещение этих же статей в блоге на medium.com осталось абсолютно незамеченным.

Камерный театр в спальном районе Москвы может рассчитывать на маленькую, но свою аудиторию! Школьная рок-группа тоже может на неё рассчитывать. :) Остальные примеры вы можете придумать сами. Думаю, что продвижение свободной игры, это все-таки в первую очередь ориентация на “свои” сообщества. А игра по правилам индустрии — это совсем другая история. Но только проблема в том, что “альтернативные” сообщества практически вымыты из современного коммерческого интернета…

Что касается меня, то я абсолютно измотан социальным взаимодействием и негативным (редким, но токсичным!) фидбеком. В очередной раз я понимаю: программировать и сочинять истории очень захватывающая вещь, но социальное взаимодействие — изматывает и подрезает крылья.

Что дальше? Не знаю. Но запасы валерьянки подходят к концу. :)

[>] Re: Информационные следы или отцы и дети в кибернетической утопии
std.hugeping
hugeping(ping,1) — hugeping
2020-09-12 13:07:27


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

Кроме того, оказалось, что новое поколение использует совершенно чуждые старому поколению средства и поэтому почти не пересекается с "предками" в сети.

Наглядный пример противопоставления философия vs реальная жизнь. :)

Pages: 1 ... 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 ... 70