Topic: Что будет в INSTEAD 1.6.3

Начинаю тему новых фич, которые появятся в 1.6.3
Понятно, что список еще не зафиксирован.

  * bugfix in phrase handling w/o parameter; - ошибка pon/poff без параметра после function
  * bugfix in zip unpack;  - Many dirs in zip
  * wroom module added;  - как vroom но с доп фичами (старое/новое название, функции итд(                                                                     
  * nouse module added;  - более просто писать реакции на невозможность сделать use;
  * new dlg module: -- новые диалоги                                                                         
  * - better dlg syntax;                                                                     
  * - psub/pret/pjump/pstart;                                                                 
  * - dlg:last() -- the last answer                                                           
  * - stead.phrase_prefix;                                                                   
  * compose in sprite;  -- работа с прозрачными спрайтами                                                                     
  * game.onact/onwalk/onuse/oninv handlers; -- обработчики перед действиями игрока, позволяют блокировать дейтсивя
  * counters module; -- статистика действий (act/use/inv/walk)

UPD: будет опция отмены fading
UPD2: будет модуль для работы с меню как в зеркале, зн и пр.

Re: Что будет в INSTEAD 1.6.3

Ждём. Активный выход новых версий IMHO очень пользительно для платформы.

Re: Что будет в INSTEAD 1.6.3

Кстати, фич-реквест  smile
Можно переименовать Выбор игры в Библиотеку игр в меню?
А то я из путаю постоянно.

Re: Что будет в INSTEAD 1.6.3

А в чем фича onact/oninv/etc? Как-то раньше и без них блокировать можно было, или я не понимаю чего-то smile

Re: Что будет в INSTEAD 1.6.3

Ну например, игрок поранил руку и надо запретить ему брать предметы, пока он не придет в мед-пункт. Не надо хардкодить действие во все предметы, а только написать onact.

Еще пример - часто не хватает счетчиков, например первый раз предмет не берется, а второй - берется. Эти счетчики теперь работают на on-обработчиках.

По-поводу Выбор игры в Библиотеку игр -- мне даже немного не удобно отвечать отказом, но "Библиотека игр" мне категорически не нравится. В любом случае, можно для себя переименовать в lang/ru.ini

Re: Что будет в INSTEAD 1.6.3

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

I Am TheFuestu

Re: Что будет в INSTEAD 1.6.3

Пройди хотя бы раз режим обучения. Там все написано.

Re: Что будет в INSTEAD 1.6.3

Обновление информации о новых фичах 1.6.3:

1) диалог ожидания если запись сейва длится > 0.7 сек
2) xact теперь ищутся рекурсивно во всей сцене (возможность вложенных в obj, xact)
3) в xact модуле добавлен xwalk - для быстрого перехода по ссылкам

Re: Что будет в INSTEAD 1.6.3

Даешь рабочую клавиатуру для Маемо!!!

Qui habet aures audiendi, audiat...

Re: Что будет в INSTEAD 1.6.3

Даёшь, jmaks, даёшь! smile Присылай патч! smile

Re: Что будет в INSTEAD 1.6.3

Описал на вики новые модули для 1.7.0 (counters, nouse, wroom).

Re: Что будет в INSTEAD 1.6.3

Описал модуль Триггер. http://instead.syscall.ru/wiki/ru/gamed … es/trigger

По-моему он давно уже назревал. smile Мне понадобился для диалогов.

Описал модуль nolife.

Re: Что будет в INSTEAD 1.6.3

dsc/xdsc функции не предназначены для манипуляции объектами. Они только для показа состояния.
Используйте: entered/enter/left/exit/act/use/used/inv/life.

P.S. прошу перенести часть ветки в "вопроы"

Re: Что будет в INSTEAD 1.6.3

Начал делать модуль cutscene. Насколько есть смысл помещать его в 1.6.3?
Идея модуля, мы пишем что то вроде:

Hello
<pause 1000>
World!
<pic new.png>
<fading 16>
<cut Дальше>

То-есть удобно для заставок.

Re: Что будет в INSTEAD 1.6.3

Закинь его в svn. Кому надо будет возьмет, а там со следующим релизом прикрутишь

Qui habet aures audiendi, audiat...

Re: Что будет в INSTEAD 1.6.3

Почему-то эти новые модули мне что-то сильно напоминают  roll

Re: Что будет в INSTEAD 1.6.3

Да, название cutscene спер у тебя. smile Идея триггеров тоже давно витала. В общем, я все таки добавил модули cutscene и fonts в svn. Потестирую. Если кому интересно, вот пример:

instead_version "1.6.3"
require "cutscene"
require "fonts"


function init()
    s1 = font('georgia.ttf', 30);
    s2 = font('georgia.ttf', 15);
end

main = cutscene {
    nam = true;
    dsc = function(s)
        pn (txtc(s1:txt "INSTEAD"))
        pn "{fading}"
        pn (txtc(s2:txt "http://instead.syscall.ru"))
        pn "{code print 'a'}"
        pn "{fading}"
        pn ("{cut}{walk r2}")
    end;
}

r2 = cutscene {
    entered = function(s)
        pn (txtc(s1:txt "The End!"))
    end;
    nam = 'end';
    way =  {'r2'};
}

В принципе, сработает и на 1.6.1, если подложить два модуля из svn.

Поддерживаются теги: {pause} - задержка, {pause <n>} - в мс, {cls} - очистить вывод, {cut} - ждать нажатия на кнопку, {cut <what>} - what - что вывести на кнопке,  {walk <what>} - переход,  {code <what>} - выполнить код. {pic <what>} - заменить картинку, {fading} - вывод с эффектом перехода (выводится то, что попало в вывод выше), {fading <n> } - n - число шагов перехода (0 - 255).

Фактически, cutscene эмулирует последовательное выполнение.

Пока судьба  модулей под вопросом.
Варианты:
1) добавить но не документировать
2) добавить в examples
3) Добавить и документировать

Проблема в том, что в будущей версии уже довольно много фич, которые никто не тестировал. Vorov2 - может ты поможешь?

Re: Что будет в INSTEAD 1.6.3

Судя по примеру, тут нужен не объект cutscene, а универсальный механизм вставки кода в текст, так чтобы и в обычной комнате dsc = 'Blah blah {fading} Blah' работало.

Ну или функция типа:
dsc = fun('Blah blah {fading} Blah')

Re: Что будет в INSTEAD 1.6.3

Увы, так не получится. INSTEAD на обработчиках построен. В cutscene эмулируется последовательное выполнение за счет всяких внутренних вещей, типа timerа. Заняты обработчики enter и left. Причем dsc формируется один раз, при входе в комнату, и выполняется как программа.

В принципе, можно в cutscene и объекты использовать и xact, но это по-моему совсем зло будет.

Можно сделать room = cutscene и писать dsc комнаты как ты написал выше: dsc = "Привет{pause}мир!" и будет работать,
но только в dsc комнаты.

Re: Что будет в INSTEAD 1.6.3

Вообще странновато выглядит этот cutscene. Я бы предложил его в 1.6.3. не добавлять пока - пока это скорее proof of concept.
Потестировать могу, но из меня не очень тестер  smile

Re: Что будет в INSTEAD 1.6.3

Согласен, так же как и шрифты, впрочем. Поэтому сомневаюсь. С другой стороны, каждый второй пишет свои версии, а выдумать что-то кардинально другое я не могу smile

dsc тупо становится программой, хотя запись

dsc = {
  "a",
  "{pause}",
  "b",
}

тоже работает.

Re: Что будет в INSTEAD 1.6.3

Ну так пусть пока и лежит отдельно, отзывы собирает. По содержанию модуль полезный, но по форме немного странный smile
А народ по-прежнему будет писать что-то свое, просто потому что у тебя фейдинг на три миллисекунды быстрее, чем нужно  big_smile

Re: Что будет в INSTEAD 1.6.3

Так {fading с параметром} и все. smile
Насчет отзывов - вот давай с тебя и начнем.

Какие странности ты видишь?

Re: Что будет в INSTEAD 1.6.3

Я здесь вижу две задачи:

1. Механизм макросов для строк
2. Анимации, всяческие эффекты и проч.


1. Макросы

Макросы полезны и их стоит сделать. Можно использовать аналогичный синтаксис. Я себе добавил функцию txt, которая позволяет писать что-то типа:

dsc = txt("Привет, {someobj._username}!")

Сюда же можно добавить и форматирование, которое сейчас сделано неудобно. По типу:

dsc = txt("<i>Привет</i>, <b>{someobj._username}!</b>")

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

2. Анимации, т.е. кадрирование

Представление этого в виде специального ДСЛ-я, как в случае с макросами, наверное, вариант - но вот какой-то странный. У меня цепляет глаз то, что внутри одного dsc фактически содержатся разные кадры. Да и  синтаксис избыточен. Предположим, я хочу сменить несколько картинок по таймеру, т.е. сделать, собственно, анимашку. Используя свой объект, я напишу:

blah = animation {
  frames = { 'pic1', 'pic2', 'pic3' ... }
 ,rate = 100
,next = 'anotherscene'
}

Мне кажется, это короче и читабельнее, чем аналог на твоем cutscene -  а ведь делается такое за пять минут на коленке.
В идеале набор кадров должен выглядеть как набор кадров, т.е. вот так:

someobj {
  frames = frames {
                     'frame1', 'frame2'
                }
}

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

function extroom(v)
  local userTimer = v.timer;
  
  v._animation = false;--Для примера, флаг, что включена анимация
  v.timer = function(s)
              if s._animation then
                return ...; --Вызываем все, что нам нужно вызвать
              end
              
              if userTimer ~= nil then
                return userTimer(s);
              end
            end
end

Функция frames включает для комнаты флажок _animation -- и теперь вызываются твои функции, а не пользовательские.
Также способ перехода от одно кадра к другому должен задаваться не после каждого кадра, а применяться ко всем кадрам по типу:

frames {
  fade(...), --Задали фейдинг для всех кадров
  frame1,
  frame2,
  fade(...), --Переопределили, применяется ко всему следующим кадрам
  ...
}

Ну вот как-то так. Кадром может быть либо текст, либо картинка - их вставку можно сделать через специальные функции типа frame_pic, frame_txt, которые добавляют их в буфер.

Re: Что будет в INSTEAD 1.6.3

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

Если переписать твой вариант в виде обычной цепочки функций:

 dsc = function(s)
        pn (txtc(s1:txt "INSTEAD"))
        pn "{fading}"
        pn (txtc(s2:txt "http://instead.syscall.ru"))
        pn "{code print 'a'}"
        pn "{fading}"
        pn ("{cut}{walk r2}")
    end;

получится короче и читабельнее.