Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
18.01.2008 22:54

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Новая версия библиотеки?

Что скажешь, ГрАнд?
Уже достаточно изменений накопилось, по-моему...

Неактивен

0    0    #2
18.01.2008 23:30

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Частые обновления пугает авторов, особенно начинающих, так что не следует торопится. Все желающие могут получить от меня "альфа версию".

Неактивен

0    0    #3
18.01.2008 23:52

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Вот именно, что много необкатанных и недоделанных изменений.

Так надо, эта... обкатать и доделать. Что для этого надо?
Вообще, мне уже в голову приходят всякие еретические идеи типа юнит-тестирования. Если use-cases распишешь, можно написать автоматический (или полуавтоматический) тест библиотеки.

Неактивен

0    0    #4
04.02.2008 16:32

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Просьба протестировать www.rtads.org/libr25beta.rar.
Хотел сделать автоматическое спряжение глаголов, но это ещё изрядно времени займет. Попробуйте разные лица ГП!

Неактивен

0    0    #5
05.02.2008 19:36

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Такая неприятная особенность (было и раньше):

(примерно так)
>осм дубину стража
Который "дубину of стража" вы имеете в виду, "левый скипетр стража" или "правый скипетр стража"?


Диковато выглядит "of", и сочетание "Который дубину" (дубина описана как скипетр и имеет признак isHim).

И еще (вроде раньше обсуждали? не могу найти):

>ударить гоблина топором
Я не вижу здесь объект "гоблина топором".


Топор находится в инвентаре.

Неактивен

0    0    #6
05.02.2008 21:37

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

"дубину of стража"

Исправил, залил новую версию.


Который "дубину of стража" вы имеете в виду, "левый скипетр стража" или "правый скипетр стража"?

Синонимы могут быть разных полов и чисел. Тут либо смириться, либо свести сообщение к абстрактному "Который из объектов "дубину стража" вы имели в виду, ... " или "Упоминая "дубину стража", вы имели в виду: ...  "

>ударить гоблина топором
Я не вижу здесь объект "гоблина топором".

Код гоблина и топора, пожалуйста.

Неактивен

0    0    #7
05.02.2008 22:38

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

Попробывал реализовать атаку гоблина топором. В итоге вообще ничего не выводит. Странно. Просто пустая строка, ни ошибки, ничего. Если определять атаку гоблина в объекте топора, то все окей. Но логичнее вроде как использовать прямой объект.

До метода doAttackWith вообще дело не доходит, хотя верефикатор переопределен.

Код:

goblin : Actor
    location = startroom
    sdesc = "гоблин"
    rdesc = "гоблина"
    ddesc = "гоблину"
    vdesc = "гоблина"
    tdesc = "гоблином"
    pdesc = "гоблине"
    noun = 'гоблин' 'гоблина' 'гоблину' 'гоблином' 'гоблине' 'гоблину#d' 'гоблином#t'
    ldesc = "Это маленький зеленый гоблин."
    isHim = true
    verDoAttackWith(actor,io) = {}
    doAttackWith(actor,io) = {"Уй-я! - кричит гоблин и убегает."; return nil;}
;

topor : item
    location = Me
    sdesc = "топор"
    rdesc = "топора"
    ddesc = "топору"
    vdesc = "топор"
    tdesc = "топором"
    pdesc = "топоре"
    noun = 'топор' 'топора' 'топору' 'топором' 'топоре' 'топору#d' 'топором#t'
    ldesc = "Это топор."
    isHim = true
    verIoAttackWith(actor) = {}
;

Отредактировано - VampirE - (05.02.2008 22:59)

Неактивен

0    0    #8
06.02.2008 06:26

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Новая версия библиотеки?

- VampirE - написал:

Попробывал реализовать атаку гоблина топором. В итоге вообще ничего не выводит. Странно. Просто пустая строка, ни ошибки, ничего. Если определять атаку гоблина в объекте топора, то все окей. Но логичнее вроде как использовать прямой объект.

До метода doAttackWith вообще дело не доходит, хотя верефикатор переопределен.

Код:

goblin : Actor
    location = startroom
    sdesc = "гоблин"
    rdesc = "гоблина"
    ddesc = "гоблину"
    vdesc = "гоблина"
    tdesc = "гоблином"
    pdesc = "гоблине"
    noun = 'гоблин' 'гоблина' 'гоблину' 'гоблином' 'гоблине' 'гоблину#d' 'гоблином#t'
    ldesc = "Это маленький зеленый гоблин."
    isHim = true
    verDoAttackWith(actor,io) = {}
    doAttackWith(actor,io) = {"Уй-я! - кричит гоблин и убегает."; return nil;}
;

topor : item
    location = Me
    sdesc = "топор"
    rdesc = "топора"
    ddesc = "топору"
    vdesc = "топор"
    tdesc = "топором"
    pdesc = "топоре"
    noun = 'топор' 'топора' 'топору' 'топором' 'топоре' 'топору#d' 'топором#t'
    ldesc = "Это топор."
    isHim = true
    verIoAttackWith(actor) = {}
;

Порядок вызова: прямой объект.verDoAttackWith -> косвенный объект.verIoAttackWith -> косвенный объект.ioAttackWith. doAttackWith (для команд с косвенным объектом) автоматом никогда не вызывается, его вызов надо явно прописать в игре. Т. е. для топора укажи

Код:

ioAttackWith(actor, dobj)={dobj.doAttackWith(actor, self);

Неактивен

0    0    #9
06.02.2008 12:55

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Код:

commonAxe: item
    location = nil
    sdesc = "топор"
    rdesc = "топора"
    ddesc = "топору"
    vdesc = "топор"
    tdesc = "топором"
    pdesc = "топоре"
    noun = 'топор' 'топора' 'топору' 'топором' 'топоре' 'топору#d' 'топором#t'
    ldesc = "Обычный топор."
    isHim = true
    verIoAttackWith (a) = {}
    ioAttackWith (a, i) = { "Ты атаковал <<i.rdesc>> <<self.tdesc>>."; }
;

deadGoblin: fixeditem
    location = citadelCorridor
    sdesc = "мертвый гоблин"
    rdesc = "мертвого гоблина"
    ddesc = "мертвому гоблину"
    vdesc = "мертвого гоблина"
    tdesc = "мертвым гоблином"
    pdesc = "мертвом гоблине"
    adjective = 'мертвый' 'мертвый#t' 'мертвого' 'мертвому' 'мертвому#d' 'мертвым' 'мертвым#t' 'мертвом' 
         'труп' 'труп#t' 'трупа' 'трупу' 'трупу#d' 'трупом' 'трупом#t' 'трупе'
    noun = 'гоблин' 'гоблина' 'гоблину' 'гоблином' 'гоблине' 'гоблину#d' 'гоблином#t' 
           'труп' 'труп#t' 'трупа' 'трупу' 'трупу#d' 'трупом' 'трупом#t' 'трупе'
    verDoAttackWith (a, i) = {}
    ldesc = "Описание гоблина"
;

По определенным причинам, гоблин уже мертв. Но это не должно влиять на команду. Топор изначально в nil -- переносится в комнату програмно. Я его подобрал, топор в инвентаре. Гоблин в комнате.

"Упоминая "дубину стража", вы имели в виду: ...  "

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

Отредактировано Gremour (06.02.2008 12:58)

Неактивен

0    0    #10
06.02.2008 14:24

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

Бросил топор в комнате, подобрал. Атаковал гоблина - реакция есть.


> подобрать топор
Взят.
> атаковать мертвого гоблина топором
Ты атаковал мертвого гоблина топором.

Неактивен

0    0    #11
07.02.2008 10:17

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Обновил бету библиотеки. Прошу изучить и помучать функцию glok. На этом принципе можно сделать встроенный генератор падежей.
http://www.rtads.org/libr25beta.rar

Полезный для проверки код:

Код:

pers: object
setall(num)=
{ 
  isThem:=nil; 
  self.lico:=(num-1)/2+1;
  if (num%2=0) self.isThem:=true; 
}
;

sprag: function(num1, num2, str)
{
  local i:=1;
  while (i<=6) 
  { 
    pers.setall(i);
    glok(pers,num1,num2,str);
    " ";
    if (i%2=0) "| "; 
    i++;
  }
 "\n";
} 

sprag1: function(str)
{
  local i:=1;
  while (i<=6) 
  { 
    pers.setall(i);
    glok(pers,str);
    " ";
    if (i%2=0) "| "; 
    i++;
  }
 "\n";
} 

startroom: room  
ldesc = {
sprag(1,1,'мож'); 
sprag(3,1,'хот'); 
sprag(2,1,'вид');
sprag(2,1,'сид');
sprag(2,1,'леж');
sprag(1,2,'нес');
sprag(2,1,'нос');
sprag(2,1,'наход');
sprag(1,1,'зна');
sprag(1,1,'дума');
sprag(1,1,'име');
sprag(2,2,'выгляд');
sprag(1,1,'помога');
sprag(1,1,'представля');
sprag(1,2,'пойд');
sprag(1,1,'вылез');
sprag(2,2,'сто');
sprag(1,1,'слез');
sprag(1, 1,'пахн'); 
sprag(2,2,'говор');
sprag1('хотеть'); 
}
;

Неактивен

0    0    #12
07.02.2008 15:19

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

Не торопитесь с выпуском новой версии.
Я хочу еще оформить несколько своих хаков из "Любви" в приличный вид и предложить на рассмотрение.

Неактивен

0    0    #13
18.03.2008 15:17

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Из moveableActor:

Код:

    verGrab(item) =
    {
        "<<ZAG(self,&sdesc)>> <<glok(self,'нести')>> <<item.vdesc>> и
        не да<<self.isThem?"дут":"ст">> <<parserGetMe().ddesc>> взять <<item.itobjdesc>>. ";
    }

Некорректно работает.

>взять бутылку
Печальный владелец бутылку вина и не даст тебе взять её.

Неактивен

0    0    #14
18.03.2008 19:42

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Не могу воспроизвести этот баг. Видимо, уже исправлен.

Неактивен

0    0    #15
19.03.2008 15:57

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

В последней выложенной тобой версии (http://rtads.org/libr25beta.rar) баг есть. Вот исходник для примера:

Код:

#include <advr.t>
#include <errorru.t>
#include <stdr.t>

startroom: room
    ldesc = "Стартовая комната"
;


shopkeeper: Actor
    location = startroom
    sdesc = "торговец"
    rdesc = "торговца"
    ddesc = "торговцу"
    vdesc = "торговца"
    tdesc = "торговцом"
    pdesc = "торговце"
    noun = 'торговец' 'торговца' 'торговцу' 'торговцом' 'торговце' 'торговцу#d' 'торговцом#t'
    ldesc = " торговец"
    isHim = true
    actorDesc = "торговец с булкой в руках стоит здесь. "
;

bread: item
    location = shopkeeper
    sdesc = "булка"
    rdesc = "булки"
    ddesc = "булке"
    vdesc = "булку"
    tdesc = "булкой"
    pdesc = "булке"
    noun = 'булка' 'булки' 'булке' 'булку' 'булкой' 'булкою' 'булке#d' 'булкой#t' 'булкою#t'
    ldesc = " булка"
    isHer = true
;

>взять булку
Торговец булку и не даст тебе взять её.

Неактивен

0    0    #16
19.03.2008 17:52

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

Подтверждаю, в advr.t от 7.02.08 есть такая ошибка.
Связана с тем, что не срабатывает функция glok(self, 'нести'), которая просто ничего не выводит. Т.е. должно было быть


>взять булку
Торговец несет булку и не даст тебе взять её.


Я сталкивался с этим, когда делал свои модули -- сначала использовал новую версию glok, но потом пришлось откатиться на старую из-за непредсказуемого поведения новой (например "идти", "мочь" тоже не работают).

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

Неактивен

0    0    #17
23.03.2008 05:48

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Вуаля!

Генератор склонений подключен к РТАДС, а также ещё некоторые новые фишки.
Прошу жесточайшим образом протестировать!
Теперь можно самому на ходу настраивать правила, так что делитесь наработками.

скачать.

Неактивен

0    0    #18
23.03.2008 14:12

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

Колоссально!
Большое спасибо.

Неактивен

0    0    #19
23.03.2008 18:57

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Генератор склонений подключен к РТАДС, а также ещё некоторые новые фишки.

Человечище!
Спасибо!

Будем писать игры...

Неактивен

0    0    #20
29.03.2008 05:24

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Видимо, сейчас актуальнее иные вещи. Так и быть, поддамся конъюнктуре:

Код:

brosok: function()
{
  local i, maxdie=6, sides=6, total=0;
  "\nБросок, результат: \n";
  for (i:=1; i<=maxdie; i++)
  {
    local res = _rand(sides);
    " <<res>>";
    total+=res;
  }
  "\nИтог: <<total>>\n";
}

startroom: room  
sdesc = "<b>Бросалка кубиков</b>" 
ldesc = 
{
brosok();
"\nНажмите пробел для нового броска, либо любую иную клавишу для выхода. ";
while (inputkey()=' ') brosok();
quit();
}
;

Неактивен

0    0    #21
29.03.2008 06:55

ASBer
Модератор (+161, -20)
Откуда: Москва
Зарегистрирован: 19.07.2007
Сообщений: 816
Вебсайт

Эники-Бэники
ели вареники,
а Джоники-Мнемоники
ели психотроники.

Re: Новая версия библиотеки?

GrAndrey написал:

Видимо, сейчас актуальнее иные вещи.

smilesmilesmile

Неактивен

0    0    #22
29.03.2008 09:52

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Видимо, сейчас актуальнее иные вещи.

Ты меня опередил! smile
Надо что ли на QSP или урке наваять...

Но вообще - ура! - у нас появился собственный Гном. smile

Неактивен

0    0    #23
29.03.2008 09:53

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Кстати, Гранд, серьезный вопрос. Имеет ли смысл ждать релиза библиотеки или у нас будет бета, плавно переходящая в релиз? wink

Неактивен

0    0    #24
02.04.2008 17:19

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Новая версия библиотеки?

Flint написал:

Колоссально!
Большое спасибо.

fireton написал:

Человечище!
Спасибо!

Кто-нибудь уже работает или, может быть, хорошенько пощупал генератор склонений из последней библиотеки РТАДС? Какие впечатления?

Неактивен

0    0    #25
03.04.2008 09:29

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Обновил бету. Задавайте вопросы, если что не ясно.
скачать 25 релиз бета
Для использования скинуть все в папку с библиотеками (как минимум обновить advr.t, где есть новая функция для работы генератора, и скопировать библиотеку generator.t).

Внимание! Генератор запускается через функцию commonInit, причем он сразу включает ставший режимом по умолчанию HTML. Поэтому в файле игры следует убрать следующий фрагмент:

Код:

replace commonInit: function
{"\H+";}

На данный момент генерируются только лексемы. Подлежащие генерации лексемы должны быть отмечены слэшем "/". Ставится он после слова, за ним могут следовать флаги обозначающие род, число и одушевленность. При отсутствии флагов используются свойства объекта. Таким образом возможно решить проблему различия свойств синонима и основного названия объекта - запоминать каким словом обратились, и потом использовать его характеристики (Проблемы из ряда: здесь ящик=> взять коробку => ты не можешь взять его)

Результат генерации выдается на экран, если не отключена соответствующая опция.

Что ещё не сделано: генерация склонений короткого названия, обезЁживание лексем, оптимизация кода (так скажем, не шустрый).

Неактивен

0    0    #26
03.04.2008 13:48

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

скачать 26 релиз бета

Точно 26? По ссылке 25...

Неактивен

0    0    #27
04.04.2008 19:26

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Да, 25. Гляжу в будущее, знаете ли... roll

Неактивен

0    0    #28
09.04.2008 16:21

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Вывод генератора:

Код:

1му  - стол  сто$1а  сто$1у(#d)  сто$1  сто$1ом(#t)  сто$1е  стол (-)

Объект:

Код:

table: fixeditem, surface
    location = lightRoom
    isHim = true
    adjective = 'изящный/1м'
    noun = 'стол/1м'
    ldesc = "Описание стола. "
;

Лексемы какие-то странные. Так и надо, или я опять что-то неправильно делаю? smile

С прилагательным вроде порядок.

Неактивен

0    0    #29
09.04.2008 17:40

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Генератор на прилагательном adjective = 'восточное/с' зависает.

Некорректно воспроизводятся лексемы 'землЯ/1ж' (в В.П. даже пробел посреди слова!).

И ещё: sdesc, я так понял, автоматом не генерится? Было бы удобно, если бы для объекта, у которого не задан sdesc, он автоматом составлялся из первого существительного (возможно, первое прилагательное плюс первое существительное).

P.S. Слова типа "ставень" (ставня) надо руками прописывать?

Отредактировано Gremour (09.04.2008 18:07)

Неактивен

0    0    #30
09.04.2008 18:04

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Итак, список некорректно обрабатываемых слов (буду дополнять):

восточное
старинное
стол
земля
город
лес

Отредактировано Gremour (09.04.2008 18:08)

Неактивен

0    0    #31
09.04.2008 19:13

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

У меня еще подозрение, что, например, слово "яд" может обробатываться некорректно. Правда, не проверял, просто подозрение.

Отредактировано - VampirE - (09.04.2008 19:13)

Неактивен

0    0    #32
09.04.2008 19:21

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

GrAnd, может пока выпустить две версии библиотек: с генератором (RTADS 2.5G - генератор) и без (RTADS 2.5S - стандарт)

Я программер никудышный - у меня от твоего генератора голова ходит циркулем.

Неактивен

0    0    #33
09.04.2008 19:40

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Хм. Это точно была последняя версия? Уже в прошлый раз не должно было возникать.
Выкладываю ещё одно обновление. Изменился только файл генератора.

Подоптимизировал, но все равно 800 миллисекунд на 113 слов без вывода на экран...
Туду для себя - ввести ключ однократного прохода в функции замены.


у меня от твоего генератора голова ходит циркулем.

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

sdec, rdesc... pdesc - все будут.

Неактивен

0    0    #34
10.04.2008 16:22

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

По-прежнему 'восточное/1с' и 'старинное/1с' дают слом генератора (выход за границы массива).

Очень хочется автоматической генерации *desc и флагов isHim, isHer, isThem. Делаю пока самостоятельно. Но работает как-то странно. Некоторые прилагательные для И.П. почему-то теряются sad

Код:

modify thing
    autoAdj = true // Признак автогенерации прилагательного 
    descnoun = [ '', '', '', '', '', '' ]
    descadj =  [ '', '', '', '', '', '' ]
    assembleDescription(n) =
    {
        if (autoAdj && descadj[n] != '')
        {
            say (descadj[n]); " ";
        }
        say (descnoun[n]);
    }
    sdesc = { self.assembleDescription(1); }
    rdesc = { self.assembleDescription(2); }
    ddesc = { self.assembleDescription(3); }
    vdesc = { self.assembleDescription(4); }
    tdesc = { self.assembleDescription(5); }
    pdesc = { self.assembleDescription(6); }
    printDescs =
    {
        "\n"; "sdesc={"; sdesc; "}";
        "\n"; "rdesc={"; rdesc; "}";
        "\n"; "ddesc={"; ddesc; "}";
        "\n"; "vdesc={"; vdesc; "}";
        "\n"; "tdesc={"; tdesc; "}";
        "\n"; "pdesc={"; pdesc; "}";
    }
;

В generator.t (метод start(...):

Код:

          // перебираем склонения
           
          res:=generate(obj, nouns[i], 0, 1, true);
          
          for (sklon:=1; res<>nil && sklon<=length(res); ++sklon)
          {
           local same:=nil;
           local new_nouns:= getwords(obj, &noun);          
           
           if (sklon >= 1 and sklon <= 6)            // +++++++++++++++++++
              obj.descnoun[sklon] := res[sklon][1];  // +++++++++++++++++++

           // пополняем список лексем
           if (find(new_nouns,res[sklon][1])=nil) addword(obj, &noun, res[sklon][1]);
           else same:=true;

           <...>

      // СКЛОНЯЕМ ПРИЛАГАТЕЛЬНЫЕ
      for (i:=1; i<=al; ++i)
      {
        local res, sklon;
        
        if (find(adjs[i],'/')) 
        {

          res:=generate(obj, adjs[i], 0, 2, true);
          
          for (sklon:=1; res<>nil && sklon<=length(res); ++sklon)
          {
           local same:=nil;
           local new_adjs:= getwords(obj, &adjective);          
           
           if (sklon >= 1 and sklon <= 6)            // +++++++++++++++++++++++
              obj.descadj[sklon] := res[sklon][1];   // +++++++++++++++++++++++

           if (find(new_adjs, res[sklon][1])=nil) addword(obj, &adjective, res[sklon][1]);
           else same:=true;

Неактивен

0    0    #35
14.04.2008 15:11

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

1жп     - выгоревшая    выгоревшой    выгоревшой(-)(#d)    выгоревшую    выгоревшой(-)(#t)    выгоревшой(-)    выгоревшою(#t)    выгоревшаяю   

2жу    - ромашки    ромашек    ромашок(#d)    ромашк    ромашкам(#t)    ромашки(-)    ромашками(#t)    ромашках   


И ещё, описания 'ложка/ж' и 'ложка/1ж' дают разные лексемы. Хотя не должны, по идее. Если число не указано, должно предполагаться единственное.

Update: (с васильками всё в порядке, не поставил род)

Отредактировано Gremour (14.04.2008 15:21)

Неактивен

0    0    #36
14.04.2008 15:16

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

sad

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

Неактивен

0    0    #37
14.04.2008 15:29

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Генератор -- это один из альтернативных вариантов. Если для некоторых слов он не срабатывает, можно прописать лексемы вручную. Я пользуюсь. Ибо облегчает. Заодно найдём места, где он работает неправильно, и ГрАнд их исправит (надеюсь smile.

Неактивен

0    0    #38
14.04.2008 15:31

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Логично.

Неактивен

0    0    #39
14.04.2008 18:38

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Чтобы увидеть какое из правил было задействовано, нужно раскомментировать  строку
//  generator.detailed:=true;

1 - индивидуальное правило, 2 - общий блок правил. Второе число - порядковый номер правила. После каждого фрагмента в комментарии написана его длина для упрощения ориентирования. Не забывайте изменять эти значения после внесения правокю

Неактивен

0    0    #40
14.04.2008 19:29

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Чтобы было яснее - склонения формируются при запуске игры, но внутренне они принимают тот вид, который мы всегда ранее задавали. Библиотеку обновил, исправил "восточное" и "старинное", качать  там же.

Неактивен

0    0    #41
14.04.2008 19:39

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

GrAndrey написал:

Можно начинать пользоваться. ... меньше слов

УРА! СПАСИБО!!!

Отредактировано Korwin (14.04.2008 19:39)

Неактивен

0    0    #42
17.04.2008 20:17

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

ГрАнд, ОГРОМНАЯ просьба сделать автогенерацию sdesc, rdesc ... pdesc. Без автогенерации desc'ов от генератора проку не много. Всё равно приходится использовать внешний (чтобы не прописывать desc'и руками).

Моё решение (приведено выше) не всегда однозначно выбирает слово, если есть синонимы. Иногда берётся первое слово. Иногда последнее. А иногда прилипает к одному из синонимов и берёт только его, независимо от положения слова в списке синонимов.

Я не вникал глубоко в алгоритм. Видимо ты разбираешь слова не подряд. Можно внести дополнительный флаг, который помечает синоним, который будет использоваться в desc'ах. Например 'рог/1м=' 'рожок/1м' 'загогулина/1ж'. Если флага нет, брать первый (или последний). То же самое с прилагательными. Флаги isHim/isHer/isThem генерить согласно выбранному синониму.

Неактивен

0    0    #43
18.04.2008 19:05

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Прилагательное 'голубое/1с' вызывает слом (выход за границы массива).

Неактивен

0    0    #44
18.04.2008 19:53

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Gremour написал:

Прилагательное 'голубое/1с' вызывает слом (выход за границы массива).

Качай свежую версию, ранее исправил.

Неактивен

0    0    #45
07.05.2008 08:59

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Gremour написал:

ГрАнд, ОГРОМНАЯ просьба сделать автогенерацию sdesc, rdesc ... pdesc. Без автогенерации desc'ов от генератора проку не много. Всё равно приходится использовать внешний (чтобы не прописывать desc'и руками).

Моё решение (приведено выше) не всегда однозначно выбирает слово, если есть синонимы. Иногда берётся первое слово. Иногда последнее. А иногда прилипает к одному из синонимов и берёт только его, независимо от положения слова в списке синонимов.

Я не вникал глубоко в алгоритм. Видимо ты разбираешь слова не подряд. Можно внести дополнительный флаг, который помечает синоним, который будет использоваться в desc'ах. Например 'рог/1м=' 'рожок/1м' 'загогулина/1ж'. Если флага нет, брать первый (или последний). То же самое с прилагательными.

поддерживаю. У меня та же беда - из списка синонимов Марина, Жена. Супруга. Стерва выбирает жена, хотя требовалось выбрать в описании имя. Порядок не влияет. Андрей, алгоритм выбирает слово в алфавитном порядке?

Неактивен

0    0    #46
07.05.2008 14:27

Gremour
Участник (+1)
Откуда: Беларусь
Зарегистрирован: 09.11.2004
Сообщений: 234

Re: Новая версия библиотеки?

Korwin,

В текущей версии генератора Гранда *desc-и не создаются. Автоматическое создание *desc-ов -- моих рук дело (правку generator.t я постил выше; у тебя подправленная мной версия генератора). Но это всего лишь быстрое решение. Алгоритм у Гранда сложнее, чем мне казалось, и выдаёт лексемы в странном порядке (не в той очерёдности, в какой они прописаны в свойстве noun объекта). Будет лучше, если Гранд сделает создание *desc-ов сам, как автор генератора.

Неактивен

0    0    #47
07.05.2008 14:49

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Извиняюсь за задержку - потихоньку пишу.
В TADS значения noun хранятся не упорядоченно, оригинальный порядок сохранить не удастся (если я правильно понял о чем идет речь). Сам же генератор выдает список склонений в обычном порядке.

Неактивен

0    0    #48
25.05.2008 17:33

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Нашел маленькую ошибку в advr.t - если перегрузить героя вещами, интерпретатор сообщает "Ты не можИшь нести столько предметов". Там вместо glok(actor,1,1) стоит glok(actor,2,1)

Неактивен

0    0    #49
09.07.2008 09:33

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Андрей, ну как? Будет релиз или пока перебиваться бетой? Особенно интересует рабочий генератор с инструкцией о том, как задавать собственные правила...

Неактивен

0    0    #50
10.07.2008 12:46

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

fireton написал:

Андрей, ну как? Будет релиз или пока перебиваться бетой? Особенно интересует рабочий генератор с инструкцией о том, как задавать собственные правила...

Столь внезапный и коварный вопрос лишил меня дара речи.

Инструкции в комментариях библиотеки. Готов ответить, если что не ясно.

Неактивен

0    0    #51
10.07.2008 13:11

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

GrAndrey написал:

Инструкции в комментариях библиотеки. Готов ответить, если что не ясно.

Код:

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

Больше всего непонятны как раз эти символьные множества. Что означает запись (4)ки? Или (у6)и? Или (.)ы?

Неактивен

0    0    #52
10.07.2008 14:58

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Что означает запись (4)ки? Или (у6)и? Или (.)ы?

"(4)ки" обозначает, что сначала эта цифра будет заменена на строку из следующей таблички:

Код:

// задаем символьные множества
symbols=
    [['0' '[бвдзлмнпрстфц]'] 
    ['1' '[еуюа]'] 
    ['2' '[бвдзлмпрсфц]']
    ['3' '[бвгджзнрц]']                       //звонкие
    ['4' '[чшщц]']                                //шипящие
    ['6' '[бвгджзйклмнпрстфхцчшщ]']     //согласные
    ['8' '[аеёиоуыэюя]']                        //гласные
  ]

В данном случае мы получим "([чшщц])ки". Далее к этой строке автоматически будет добавлен значок '$', обозначающий конец строки.  Программа будет сверять лексему на соответствие этому шаблону (о поиске с регулярными выражениями).  В замене можно использовать обратные ссылки: $1 - подставить то, что было в первой скобке, $2 - что во второй, и т.д.. По умолчанию, будет изменяться весь найденный шаблон, поэтому неизменяемые части нужно захватывать скобками и вставлять в замену.

"(у6)и" - "(у[бвгджзйклмнпрстфхцчшщ])и"
"(.)ы" - в соответствии с синтаксисом регулярных выражений, точка - это любой одиночный символ.


Рассмотрим правила:

Код:

rrules =
    [
    ['2F'    'йки'  'ек']
...

При множественном числе и женском роде, всё оканчивающееся на 'йки' в род. падеже будет оканчиваться на 'ек'.
Пример: рейки -> реек

Код:

commonrules1 =
...
['2'    '(6)на'    '$1ен'    '$1нам'    '$1на'    '$1нами' '$1нах'],  // брёвна, 6 -согл.
...

Ранее были другие условия, если не сработали, работает это.
Множественное число, окончание '(6)на' -> '([бвгджзйклмнпрстфхцчшщ])на' :
Р.П.    '$1ен'
Д.П.  '$1нам'
В.П.    '$1на'
Т.П.    '$1нами'
П.П.  '$1нах'

Пример:
окна -> окен, окнам, окна, окнами, окнах

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

Код:

rrules =
    [
    ...
    ['2'    'кна'  'кон']
    ...

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

Неактивен

0    0    #53
10.07.2008 15:50

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Спасибо за подробное объяснение. Буду пробовать добавлять свои правила (если что не срастется).

Неактивен

0    0    #54
10.07.2008 17:45

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Новая версия библиотеки?

О великий и могучий, русский язык!  О великие и могучие, регулярные выражения! smile

GrAndrey, при всем уважении, не думаю, что такой подход может  упростить разработку.

UPD
Возможно ли реализовать надежную генерации *desc-ов в рамках этого подхода?

Отредактировано Gesperid (10.07.2008 17:46)

Неактивен

0    0    #55
10.07.2008 19:21

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

GrAndrey, при всем уважении, не думаю, что такой подход может  упростить разработку.

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

А desc'и можно генерить, если сделать какие-нибудь флажки для нужных существительного и прилагательного...

Неактивен

0    0    #56
11.07.2008 02:22

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

КТО ЗДЕСЬ ОБИЖАЕТ RTADS?!

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

Неактивен

0    0    #57
11.07.2008 06:02

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Flint написал:

КТО ЗДЕСЬ ОБИЖАЕТ RTADS?!

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

Вот примерно то же мне сказал Byte, когда я высказался в том духе, что рядовому пользователю сие не осилить. Куда деваться? Будем осваивать. Пока кто-нибудь знающий, на основе этих жутких регулярных выражений, может быть, не выпустит аналог 7 Информа на русском языке.

Неактивен

0    0    #58
11.07.2008 08:36

Nex
Участник (+120, -130)
Зарегистрирован: 11.06.2007
Сообщений: 2053

---

Re: Новая версия библиотеки?

А регэкспы были в TADS изначально? Или это какая-то доработка?
Просто любопытно.

Отредактировано Nex (11.07.2008 08:37)

Неактивен

0    0    #59
11.07.2008 09:53

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Nex написал:

А регэкспы были в TADS изначально? Или это какая-то доработка?
Просто любопытно.

Всегда были, конечно.

Неактивен

0    0    #60
14.07.2008 20:02

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

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

Неактивен

0    0    #61
14.07.2008 20:13

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Брать по старой ссылке? Ты бы хоть на сайте дал ссылку на бету, а то приходится по форуму лазить...

И как помечать значимые существительные и прилагательные (из которых будет строиться искомые описания)?

(upd) Новой версии не нашел. sad Все, что есть по ссылкам, - от февраля...

Отредактировано fireton (14.07.2008 20:16)

Неактивен

0    0    #62
14.07.2008 21:02

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Да, извиняюсь, не обновлял. Ещё есть что дорабатывать.

Неактивен

0    0    #63
15.07.2008 02:42

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

Андрей, не поверишь, но сегодня с утра я собрался и сел делать генерацию sdesc...pdesc. И даже сделал. :-)

Интересно посмотреть, как это будет выполнено у тебя. Я пошел по пути развития идеи Gremour’а. Изложу здесь некоторые полезные, на мой взгляд, мысли, которые пришли мне в голову во время разработки. Слова, служащие для генерации desc’ов, обозначаются восклицательным знаком перед ними, например:

Код:

auto : item
    location = startroom
    noun = '!машина/1ж' 'тачка/1ж' 'авто'
    adjective = 'зеленая/1ж' 'красивая/1ж' '!спортивная/1ж'
    ldesc = "Это нечто!";

Можно было добавить этот флаг и в конец, ко всем остальным флагам (например 'машина/1ж!'), но я не стал так делать по двум соображениям. Во-первых, знак в начале слова банально виднее знаков в конце. Задав род и число, автор, скорее всего, не будет их больше трогать, а вот главное слово может выбрать другое. Во-вторых, автор может не захотеть пользоваться генератором, чтобы он не склонял слова («авто» в приведенном выше примере), desc’и же должны заполняться в любом случае.

Далее, обнаружилось, что очень хорошо бы выводить предупреждения, если для объекта не задано ни одного существительного с флагом «!» или наоборот, задано сразу несколько, так как ошибки весьма часты (так же для прилагательных, только для них «!» не обязателен – тогда они просто не выводятся и используется одно существительное).

Пример моего вывода с предупреждениями:

Код:

1жу    - машина    машины    машине(#d)    машину    машиной(#t)    машине(-)    машиною(#t)    
1жу    - тачка    тачки    тачке(#d)    тачку    тачкой(#t)    тачке(-)    тачкою(#t)    
ВНИМАНИЕ! Среди указанных выше существительных не установлено главное (забыли флаг "!"). 

1жп     - красивая    красивой    красивой(-)(#d)    красивую    красивой(-)(#t)    красивой(-)    красивою(#t)    
1жп     - зеленая    зеленой    зеленой(-)(#d)    зеленую    зеленой(-)(#t)    зеленой(-)    зеленою(#t)    
ВНИМАНИЕ! Для одного объекта указано несколько прилагательных с флагом "!": !зеленая/1ж и !спортивная/1ж. 
1жп     - спортивная    спортивной    спортивной(-)(#d)    спортивную    спортивной(-)(#t)    спортивной(-)    спортивною(#t)

Еще хотелось бы прояснить следующий вопрос. Почему бы инициализацию генератора поместить не в commonInit, а в preinit? Вроде бы preinit как раз и предназначен для вещей, которые можно сделать один раз перед компиляцией игры. Тогда все словоформы генерировались бы на этапе компиляции, и для игрока не возникало бы никакой задержки. Я пробовал переместить код инициализации туда – все вроде бы работало. Размер файла, конечно, чуть-чуть увеличился, но по мне это лучше, чем ждать при запуске игры, тем более что текстовые игры и так маленькие.

Выложил свою версию генератора для ознакомления и маленькое демо к ней. В демо есть полезных глагольчик «просклонять» для проверки всех падежей.

Код:

>просклонять авто
sdesc зеленая машина
rdesc зеленой машины
ddesc зеленой машине
vdesc зеленую машину
tdesc зеленой машиной
pdesc зеленой машине

Надеюсь, мои измышления чем-то помогут.

Неактивен

0    0    #64
15.07.2008 06:43

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Flint, спасибо, что подсказал "preinit"!
Эта функция выполняется после компиляции, но результат сохраняется в игровом файле.  Если не выводить отчет об генерации, то игровой файл загружается сразу. Важен порядок загрузки библиотек. Если заменять функцию в stdr.t, то генератор нужно подключать после, если вставлять код в preinit определенный в stdr.t - перед.
Текстовый вывод в preinit работать не должен, а потому все выводится в отчет компилятора, что приводит к зависанию при большом количестве слов. 
В общем, с этой функцией не все однозначно, ну буду пытаться.

О твоем коде:
здорово, но описания генерировать из лексем - это... как шубу в трусы заправлять
Должно быть наоборот - пишешь sdesc="останки/2 многоцелевого/п- робота/п- U1001/пу-", а результат:

Код:

sdesc="останки многоцелевого робота U1001"
rdesc="останков многоцелевого робота U1001"
ddesc="останкам многоцелевого робота U1001"
vdesc="останки многоцелевого робота U1001"
tdesc"останками многоцелевого робота U1001"
pdesc="останках многоцелевого робота U1001"
adjective='многоцелевого' 'многоцелевого#r' 'робота'  'робота#r'  'U1001'  'U1001#r' 
noun='останки' 'останков' 'останкам' 'останками' 'останках' 'останкам#d' 'останками#t'
'U1001'

/пу- будет обозначать, что нужно добавить и лексему прилагательного и существительного, но не склонять (-)

Ещё пример: "зеленое/пс вещество/с из носовой/п- полости/п-"

Код:

sdesc="зеленое вещество из носовой полости"
rdesc="зеленого вещества из носовой полости"
...
adjective='зеленое' 'зеленого' 'зеленому' 'зеленому#d' 'зеленым' 'зеленым#t' 'зеленом'
'носовой' 'носовой#r' 'полости'  'полости#r' 
noun='вещество' 'вещества' 'веществу' 'веществом' 'веществе' 'веществу#d' 'веществом#t'

/c - средний род

Неактивен

0    0    #65
15.07.2008 09:51

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

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

Неактивен

0    0    #66
15.07.2008 09:59

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Выложил свою версию генератора для ознакомления и маленькое демо к ней. В демо есть полезных глагольчик «просклонять» для проверки всех падежей.

А stdrm.t что такое? Не компилируется твой пример.

Неактивен

0    0    #67
15.07.2008 13:45

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

Ну переименуй в stdr.t и будет щастье.

Неактивен

0    0    #68
15.07.2008 13:51

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

GrAndrey написал:

О твоем коде:
здорово, но описания генерировать из лексем - это... как шубу в трусы заправлять
Должно быть наоборот - пишешь sdesc="останки/2 многоцелевого/п- робота/п- U1001/пу-"

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

Неактивен

0    0    #69
15.07.2008 14:07

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Крик души.

Гранд! Пожалуйста! Делай релиз поскорее!

Мне игру на КРИЛ кодировать надо начинать. Твой генератор выглядит просто супер-вкусно, очень хочется его использовать (заодно и отладим). Я вплотную уже подошел к кодированию...

Неактивен

0    0    #70
15.07.2008 14:44

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

GrAndrey написал:

Flint, спасибо, что подсказал "preinit"!
Эта функция выполняется после компиляции, но результат сохраняется в игровом файле.  Если не выводить отчет об генерации, то игровой файл загружается сразу. Важен порядок загрузки библиотек. Если заменять функцию в stdr.t, то генератор нужно подключать после, если вставлять код в preinit определенный в stdr.t - перед.
Текстовый вывод в preinit работать не должен, а потому все выводится в отчет компилятора, что приводит к зависанию при большом количестве слов. 
В общем, с этой функцией не все однозначно, ну буду пытаться.

Все прекрасно с этой функцией, и я сейчас покажу почему.

Инклюды располагаются в обычном порядке:
#include "advr.t"
#include "stdrm.t"
#include "errorru.t"
#include "extendr.t"
#include "generator.t"


Из файла generator.t удаляем полностью функцию commonInit.

Открываем stdr.t. Следим за рукой! :-)
В commonInit дописываем

#ifdef __DEBUG
    generator.printout := true;
    generator.start;
#endif


В preinit дописываем

#ifndef __DEBUG
    generator.printout := nil;
    generator.start;
#endif


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

Если же мы собираем игру в Release режиме, то словоформы генерируются и вставляются в файл на этапе компиляции, текстовый лог отключается, чтобы не перегружать вывод компилятора, а игрок не увидит вообще ничего (ни текста "Слов: 666, генерация заняла ...", ни задержки).

В Imaginate, где по умолчанию компилируется debug версия, а release - только по спецкоманде из меню, эта схема просто сказочно удобна.

Enjoy!

Отредактировано Flint (15.07.2008 14:45)

Неактивен

0    0    #71
15.07.2008 17:50

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

Маленький оффтопик.

Кто-нибудь подскажет, чем отличается debug-версия от релизной кроме размера? Мануал читать не охота что-то. smile

Отредактировано - VampirE - (15.07.2008 18:05)

Неактивен

0    0    #72
15.07.2008 18:36

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

- VampirE - написал:

Маленький оффтопик.

Кто-нибудь подскажет, чем отличается debug-версия от релизной кроме размера? Мануал читать не охота что-то. smile

В debug-версию включена отладочная информация, необходимая дебаггеру.

Неактивен

0    0    #73
16.07.2008 01:15

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

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

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

Код:

addwordru(vobla, &noun, 'рыба/1ж');
delwordru(vobla, &adjective, 'сушеная/1ж');

Чтобы функции заработали, мне пришлось немного подчекрыжить код генератора, но ничего смертельного - я просто оформил несколько кусочков кода в отдельные функции, дабы избежать дублирования кода.

Качайте и пробуйте: http://drop.io/imva07o

P.S. Андрей, ты говори, если чего надо помочь сделать - мы всегда поддержим!

Отредактировано Flint (16.07.2008 01:16)

Неактивен

0    0    #74
16.07.2008 10:30

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Flint, спасибо. Проверку _debug собирался ввести как дополнение, не думал, что окажется остро необходимым.
addwordru(obj, prop, str); - тоже отлично, не задумывался, что может понадобиться

Неактивен

0    0    #75
16.07.2008 16:37

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Выложил доработанный генератор. В библиотеке только generator.t и stdr.t.

Работает так:

Код:

trava: item
    location = startroom
    gdesc = '"чертова/1пж" трава/1ж из Нового/п- Света/п-'
    noun= 'табак/1м' 
ldesc="Бурые скрученные листья кучкой лежат на столе."
;

#r пока не ставит, и части речи, исходя из положения в строке, не определяет.

P.S. обновил после сообщения Фаертона. Поменял строку gdesc  с двойных кавычек на одиночные.

Отредактировано GrAndrey (16.07.2008 17:59)

Неактивен

0    0    #76
16.07.2008 16:47

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Клево! Спасибо! Будем пробовать...

Неактивен

0    0    #77
16.07.2008 18:12

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Ещё "домашнее задание":
-хотя бы формально описать правила склонения сокращенных прилагательных типа "чертова"

Неактивен

0    0    #78
17.07.2008 11:50

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Новая версия библиотеки?

Стоит подумать о некоторой схеме тестирования генератора. Чтобы запустив тесты (например, батником) удостовериться, что новые правила не конфликтуют со старыми. То есть для каждого правила создавать два файлика: первый – со списком слов на это правило, второй – с ожидаемым результатом склонения генератором слов из этого списка.

Неактивен

0    0    #79
17.07.2008 11:55

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

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

Неактивен

0    0    #80
17.07.2008 12:05

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Новая версия библиотеки?

Не понял, ты говоришь о тестировании игры в целом (альфа-тесте) или о том же о чем и я (то бишь тестирование генератора)?

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

Код:

осм
BegParallel
1.
ю
взять бумеранг
с
2.
з
взять револьвер
в
3.
в
взять катану
з
EndParallel
убить злодея

И получить в ответ "OK" или "failed on 'взять револьвер' command".

Неактивен

0    0    #81
17.07.2008 13:05

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

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

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

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

Неактивен

0    0    #82
17.07.2008 13:11

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

В ТАДС игры можно вводить список команд из файла через опции командной строки. При этом ничего на экран выводиться не будет, зато сразу кусок игры можно будет пропустить + можно увидеть, где застрял, если что-то сломалось. Естественно, строго линейно.

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

Неактивен

0    0    #83
17.07.2008 20:40

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

www.rtads.org/libr25beta2.rar - текущее состояние библиотек
Извини, Михаил, пока не добавил addwordru.

Неактивен

0    0    #84
23.07.2008 10:12

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

http://www.rtads.org/libr25beta3.rar - ещё обновление.

- Заработало распознавание ударного окончания по прописной букве, несколько исправлений правил генератора, введены правила для слов на -ец.
- Исправил вывод сформированных sdesc...pdesc
- Включил addwordru и delwordru.
- Местный падеж практически заменил все упоминания предложного падежа.

В выложенном advr.t недоработана функция parseNounPhrase. В принципе рабочая, но путает прямой и косвенный объект.

В комплекте - тест для генератора, а также немного доработанная библиотека меню.

Неактивен

0    0    #85
23.07.2008 10:38

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Спасибо, Андрей!

Неактивен

0    0    #86
23.07.2008 13:49

Flint
Участник
Зарегистрирован: 06.09.2007
Сообщений: 148

---

Re: Новая версия библиотеки?

То что нужно!
Большое спасибо.

Неактивен

0    0    #87
23.07.2008 17:56

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Жду комментариев и предложений по юзабилити.

Например, думал дефайнами уменьшить количество переключений раскладки, но кириллица не катит.

Как на счет того, чтобы вместо апострафов ставить двойные кавычки при gdesc, а во время компиляции превращать в обычную строку?

Ещё есть задумка вынести лексемы с метками падежей в отдельные свойства объекта. Список лексем очистится, а количество разных свойств прибавиться. Куда-то можно сослать и "затравку" для генератора после её использования (gnouns и gadjective например).


Я ранее упоминал о скрипте для отладки игры. Подробнее написано здесь:
http://teladesign.com/tads-manual/tads-b.html в параграфе "Testing Your Game".
Вкратце:
mygame.exe -o walkthru.in  - записывает в файл команды по мере прохождения
htmlt2.exe -i walkthru.in -l walkthru.log mygame -запускает игру и вводит список команд, а выходящий текст записывает в файл.
Майкл Робертс предлагает сверять старые и новые результаты любой программой типа diff.

Хотел сразу на Вики, но она ещё лежит.

Неактивен

0    0    #88
23.07.2008 21:16

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

Нашел неприятный баг в генераторе:

Код:

yad: item
gdesc = 'пузырёк/1му с ядом/п-'
noun = 'пузырёк/1му'
ldesc = "Пузырек с ядом."
location = Me
isHim = true
;

В слове 'пузырёк' в случае с gdesc почему-то берется одно правило, где просто 'к', а в случае с noun все берется правильно - правило 'ёк'.

---

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

Код:

while (ret:=reSearch('([/$&@№~%_+*#a-zA-Zа-яА-Я0-9-]+)|([][<>()!{}.,;"?\ ]+)', sdescstr), ret<>nil) 
         {
           sdesc_list+=ret[3]; 
           sdescstr:=substr(sdescstr,ret[1]+ret[2],length(sdescstr)); 
         }

Нужно просто добавить буковку 'ё' между первыми скобками. smile Будет что-то вроде:

Код:

while (ret:=reSearch('([/$&@№~%_ё+*#a-zA-Zа-яА-Я0-9-]+)|([][<>()!{}.,;"?\ ]+)', sdescstr), ret<>nil) 
         {
           sdesc_list+=ret[3]; 
           sdescstr:=substr(sdescstr,ret[1]+ret[2],length(sdescstr)); 
         }

Отредактировано - VampirE - (23.07.2008 22:10)

Неактивен

0    0    #89
24.07.2008 04:52

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Спасибо!
Потрясающе, но факт: буква 'ё' не входит в диапазон регэкспа '[а-я]'. Аналогично для 'Ё' и '[А-Я]'.

Неактивен

0    0    #90
01.08.2008 17:22

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

http://www.rtads.org/libr25beta4.rar - налетай, торопись!  Теперь генератор работает ещё лучше, ещё правильнее!

Рекомендую ставить авторам. Для публикации игр лучше подождать релиза, а для разработки можно (и нужно!) пользоваться этими библиотеками.

Неактивен

0    0    #91
07.08.2008 23:17

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Добавлены takedesc и dropdesc. Теперь любому предмету можно назначить свой текст вместо банальных "Взят" и "Брошен" при взятии и бросании, соответственно.

Положил в SVN.

Неактивен

0    0    #92
08.08.2008 06:04

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

fireton написал:

Добавлены takedesc и dropdesc. Теперь любому предмету можно назначить свой текст вместо банальных "Взят" и "Брошен" при взятии и бросании, соответственно.

Насчет этого не уверен. Часто прописывается схема такого вида:

Код:

doTake(actor)=
{
  if (self.isonoriginalplace) 
  {
    "Ты выдрал *что-то* с его векового места. ";
     incscore(5);
     self.isonoriginalplace:=nil;
     self.moveInto(Me);
  } 
  else pass doTake; 
}

хотя правильнее вообще так:

Код:

doTake(actor)=
{
  if (self.isonoriginalplace) 
  {
    "Ты выдрал *что-то* с его векового места. ";
     incscore(5);
     self.isonoriginalplace:=nil;
  } 
  pass doTake; 
}

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

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

В общем, я против. Кому нужно, тот сделает или спросит на форуме.

Неактивен

0    0    #93
08.08.2008 09:40

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Я не знаю про пароксизм довольства, но слово "взято" у меня вызывает ассоциации с "вес взят!". А "Брошено" - это ж просто жесть какая-то:

Код:

>положить хрустальную вазу на пол

Брошена.

Так и хочется добавить "осколки древней вазы весело зазвененели по полу..."

Кроме того, разные предметы "берутся" по-разному. Шелковый платок - одно дело, а мешок с песком - совсем другое...
Кстати, Эмили Шорт со мной согласна:

Удивительно просто, насколько может обогатить ощущение от игры написание особых реакций на обыкновенные действия. Как ощущается платиновый слиток, когда герой берет его в руку? Что персонаж чувствует, беря его? Разве нельзя написать ничего лучше, чем «Взято»?

И еще. Мои изменения никак не заденут тех авторов, которые будут писать "по-твоему". Но сильно помогут тем, кто хочет больше детализировать взаимодействия с объектами (мне, в том числе).

Отредактировано fireton (08.08.2008 09:44)

Неактивен

0    0    #94
08.08.2008 10:20

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Детализация, это здорово, но как ты видишь описание выкладывания вазы в случайном месте?
"Ты аккуратно поставил вазу." Куда? На пол? Посреди поля? Баллансируя на канате?

Кстати, следующему же автору понадобится передать аргументы этому методу. Чтобы стандартное сообщение менялось в зависимости от актера и локации.

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

Неактивен

0    0    #95
08.08.2008 11:28

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

GrAndrey написал:

Детализация, это здорово, но как ты видишь описание выкладывания вазы в случайном месте?
"Ты аккуратно поставил вазу." Куда? На пол? Посреди поля? Баллансируя на канате?

Если балансируя на канате, то нужно перекрыть у комнаты roomDrop - все предметы должны падать вниз. Для разных типов комнат можно определить разные классы и флажок в них, чтобы определить, куда ставишь. Все решаемо. Конечно, комбинаторный взрыв. Но если автор хочет идти на это, то пусть у него будут возможности. А если не хочет - у него всегда будут "Взято" и "Брошено".

Неактивен

0    0    #96
08.08.2008 12:53

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

GrAndrey написал:

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

+1


fireton написал:

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

+1

Вам хорошо, Вы монстры в программировании и ПОНИМАЕТЕ этот код. Не знаю, как другие авторы, но я тупо беру кусок кода, который работает, изменяю описание и вставляю в игру. К сожалению, частенько оказывается, что вставка в одном месте, требует серии изменений в других местах.  Я не знаю, что с этим делать. Почему-то мне кажется, что поиски ответа на вопрос КАК ЭТО ЗАПРОГРАМИРОВАТЬ достаточно далеки от интересных мне проблем КАК ВЫСТРОИТЬ СЮЖЕТ, КАК ИЗМЕНЯЕТСЯ ХАРАКТЕР ГЕРОЯ В ХОДЕ ИГРЫ И КАКИМИ СЛОВАМИ ДОЛЖНЫ ГОВОРИТЬ СИЛЬНО ЗЛЫЕ ХОББИТЫ...

Генератор порадовал, но это еще далеко от мечты о системе в которой приятно было бы творить. Но надежда греет. wink

Неактивен

0    0    #97
08.08.2008 13:57

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

fireton написал:

GrAndrey написал:

Детализация, это здорово, но как ты видишь описание выкладывания вазы в случайном месте?
"Ты аккуратно поставил вазу." Куда? На пол? Посреди поля? Баллансируя на канате?

Если балансируя на канате, то нужно перекрыть у комнаты roomDrop - все предметы должны падать вниз. Для разных типов комнат можно определить разные классы и флажок в них, чтобы определить, куда ставишь. Все решаемо. Конечно, комбинаторный взрыв. Но если автор хочет идти на это, то пусть у него будут возможности. А если не хочет - у него всегда будут "Взято" и "Брошено".

Все-таки уж слишком частное решение. Почему только "взять" и "бросить"? А кинуть? А одеть-снять?
Думаю, чем завтавлять авторов искать твой takedesc или учить его использовать, так лучше научить исправлять стандартное сообщение этим способом.  Выложить во все обучалки этот пример модификации.

Неактивен

0    0    #98
08.08.2008 14:12

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

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

Возможно, ты и прав. Правда, заставлять я не собирался...

Пусть останется, хорошо? В следующий раз расширения библиотеки буду выносить на форум сначала.

Неактивен

0    0    #99
09.08.2008 16:50

- VampirE -
Участник (+3)
Зарегистрирован: 22.06.2006
Сообщений: 101

Re: Новая версия библиотеки?

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

Для себя обязательно возьму на заметку, если что-то буду писать - благо мне такое добавить в игру не составит труда. Самое простое - добавлять класс, скажем, для хрупких вещей и переопределить там метод drop. Но тогда глаголы "положить" и "бросить" должны вызывать разные реакции. Это даже идея для пазла. smile

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

Отредактировано - VampirE - (09.08.2008 16:51)

Неактивен

0    0    #100
09.08.2008 18:18

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Неактивен

0    0    #101
10.08.2008 18:32

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

GrAndrey написал:

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

Если бы все модификации можно было бы сделать, используя modify и replace - я бы и не возражал. Но все не так просто. Бывает так, что код просто неудачно построен. Наверное, что касается takedesc и dropdesc, их еще можно внести как дополнение (хоть гимору и больше), но что-то - явно нельзя...

Неактивен

0    0    #102
10.08.2008 18:57

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

fireton написал:

Но все не так просто. Бывает так, что код просто неудачно построен.
...
[Что-то] еще можно внести как дополнение, но что-то - явно нельзя...

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

Неактивен

0    0    #103
10.08.2008 19:10

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Андрей, ты устанавливаешь сейчас правила, как редактировать библиотеку? Я только за. Только оформи это все более структурировано, хорошо?

Неактивен

0    0    #104
17.08.2008 13:25

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Закоммитил новую версию. Много доработок.
Тперь исправить предпарсинг и можно делать финальный релиз.

Неактивен

0    0    #105
01.10.2008 00:33

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Ура, ура! Вышел юбилейный, 25-ый релиз библиотек! Масса изменений и усовершенствований, среди которых генератор, встроенный в систему. Качаем! http://rtads.org/libr25.rar
В скором времени подготовлю обновленную версию обучалки про волка, козу и капусту.
Просьба жестоко протестировать!

Обратите внимание:

gdesc стал просто desc

в библиотеки включен следующий код:

Код:

modify room
dispBeginSdesc = "<b>"
dispEndSdesc = "</b>"
;

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

Неактивен

0    0    #106
01.10.2008 00:49

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Андрей, спасибо!
Пожалуйста, выложи библиотеку и в SVN, мне оттуда проще забирать.

Неактивен

0    0    #107
02.10.2008 14:07

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

fireton написал:

Андрей, спасибо!
Пожалуйста, выложи библиотеку и в SVN, мне оттуда проще забирать.

Таки сделал

Неактивен

0    0    #108
06.11.2008 05:05

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Не видел никаких комментариев к новой версии. Есть ли недостатки и рационализаторские предложения?

Неактивен

0    0    #109
06.11.2008 11:19

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Есть комментарии. С новым генератором у меня проблемы при перечислении объектов в комнате - выдает список запятых.

Неактивен

0    0    #110
21.11.2008 19:11

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Gesperid написал:

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

Gesperid, не ты ли автор?

башорг написал:

Некоторым программистам, когда они сталкиваются с какой-то проблемой, приходит в голову такая мысль
— О, я знаю! Это можно сделать с помощью регулярных выражений!
Это означает, что у этого програмиста теперь ДВЕ проблемы.

Неактивен

0    0    #111
22.11.2008 11:29

Gesperid
Участник
Зарегистрирован: 25.02.2005
Сообщений: 106

Re: Новая версия библиотеки?

Это стало программистским фольклором задолго до появления на баше.
Если интересно, вот что по поводу этой цитаты думает Jeffrey Friedl (автор знаменитой книги по регулярным выражениям) :
http://regex.info/blog/2006-09-15/247

Неактивен

0    0    #112
23.11.2008 13:28

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Неактивен

0    0    #113
08.12.2008 06:52

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Обновил версию в гугловском репе.

П.С. Не понял, как там выложить файл для всеобщей скачки.


Прикрепленные файлы:
libr26beta1.rar, Размер: 106,120 байт, Скачано: 663

Неактивен

0    0    #114
21.12.2008 17:48

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Не совсем подходящий момент, но вот текущая версия библиотек. Генератор существенно доработан благодаря самоотверженной обкатке его участником конкурса.

Доработки с момента 25 релиза:

- в advr.t добавлена функция opro, которая подставляет "об"
или "про" в зависимости от слова, с которым предлог должен
быть согласован

- исправлен механизм отдачи приказов актерам фразами
"попросить таню взять мячик", "приказать Рексу укусить Боба"
Обновременно исправлен глагол "спросить об"

- генератор доработан для определения существительных, прилагательных
и предлогов в коротких описаниях (desc). Данные флагов записывются в
список info_list. Например, для фразы "ржавый/м ключ/м от
сундука/-" он будет выглядеть как  ['мп' 'мс' '+' 'п-'].

- генератор формирует местный падеж. В базе - 49 слов (+несколько
упомняуты в комментариях)

- Доработки правил. Главная - окончания -ок. Осталось небольшое
количество исключений.

- Генератор оптиимзирован. Флаги переводятся в двоичный формат,
что существенно ускоряет обработку. Для этого введены функции binarize и
debinarize.


Прикрепленные файлы:
libr26pre.rar, Размер: 103,651 байт, Скачано: 696

Неактивен

0    0    #115
21.12.2008 19:56

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Спасибо. А чего в репозитарий не выложил?

Неактивен

0    0    #116
28.12.2008 20:22

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Игра "Башня-между-мирами" после того как напишешь "заново", иногда теряет объекты и не отрабатывает элементарные команды, которые понимала минуту назад. Автор в недоумении...

Неактивен

0    0    #117
01.01.2009 21:12

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Итак: после перезагрузки (reset) текущей игры не сохраняются все сгенерированные лексемы. При этом есть сгенерированные короткие описания.
Проблема есть только в игре откомпилированной для релиза.

решение: пока нет и не ясно как исправлять. Видимо, нужно обращаться к Майклу Робертсу.
Как временная мера - запретить перезагрузку или по этой команде загружать начальное состояние (это требует создания файла сохранения в папке с игрой в момент запуска и очистит экран при запуске).

Неактивен

0    0    #118
02.01.2009 13:01

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

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

Неактивен

0    0    #119
02.01.2009 19:22

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

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

Неактивен

0    0    #120
02.01.2009 20:29

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Андрей, баг только в моей игре или то же в любой с этими библиотеками?

Неактивен

0    0    #121
02.01.2009 21:11

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

любой

Неактивен

0    0    #122
03.01.2009 09:08

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Андрей, ты уже Майклу написал в багтрекер?

Неактивен

0    0    #123
03.01.2009 09:35

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

нет, не писал. Сам толком ещё не разбрался

Неактивен

0    0    #124
26.01.2009 02:13

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Толком так и не разобрался в проблеме, но сделал быстрый хак:

Код:

replace initRestart: function(parm)
{
  global.restarting := true;
#ifndef __DEBUG
  "\n\tПожалуйста, подождите, идет генерация падежей.\n";
  generator.start;
#endif
}

Прикрепленные файлы:
generator.t, Размер: 38,677 байт, Скачано: 686

Неактивен

0    0    #125
26.01.2009 07:18

Korwin
Гоблин, зеленый от недосыпа (+188, -16)
Откуда: Екатеринбург
Зарегистрирован: 27.11.2007
Сообщений: 796
Вебсайт

У трав, растущих на мягкой земле - слабые корни. (с)Korwin

Re: Новая версия библиотеки?

Хак-то быстрый, да работает медленно sad

Все равно - спасибо.

Неактивен

0    0    #126
26.01.2009 08:16

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Что-то мне подсказывает, что при перезагрузке стираются все динамически назначенные noun и adjective. Это правильно для объектов переименнованных в процессе игры, но не должно касаться тех свойств, что были назначены в стадию предкомпиляции. Вот об этом и нужно писать Майклу, нашему, Робертсу

2 fireton: Пожалуйста, размести отчет, - не могу зарегистрироваться на трекере. Кстати, это тоже баг smile

Неактивен

0    0    #127
07.05.2009 07:18

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

The following issue has been RESOLVED.
======================================================================
http://bugdb.tads.org/view.php?id=55
======================================================================
Reported By:                GrAnd
Assigned To:               
======================================================================
Project:                    TADS 2
Issue ID:                   55
Category:                   Interpreter
Reproducibility:            always
Severity:                   tweak
Priority:                   normal
Status:                     resolved
Fixed In Version:           2.5.14
Resolution:                 fixed
Fixed in Version:           
======================================================================
Date Submitted:             2009-05-01 00:42 EDT
Last Modified:              2009-05-06 16:54 EDT
======================================================================
Summary:                    Reset of dynamically created nouns and adjectives on
game restart
Description:
Interpreter always delete all dynamically created nouns and adjectives
created in preinit phase at time of game restart.  It is an obstacle for
Russian TADS libriries which generates flexions for words during
compilation. All generated "sdesc" type properties remains intact, but all
new nouns and adjectives just disappear and require repeat generation (it
could take up to 10 seconds).

Suggested solution: delete on restart only those lexemes which created on
runtime, not at preinit phase.
======================================================================

----------------------------------------------------------------------
(0000098) Michael Roberts (administrator) - 2009-05-06 16:54
http://bugdb.tads.org/view.php?id=55#c98
----------------------------------------------------------------------
I've made this change for 2.5.14. During compilation, after preinit
finishes, the compiler now marks as static all objects created with 'new'
and words added with 'addword'. This makes anything created during preinit
effectively permanent, so it won't be deleted on restart.

It's been a long time since I've looked at the design of this part of the
system, so I'm a little concerned that there might be side effects of this
change that I haven't thought of. For the time being, then, I'm considering
this a beta test feature, so I'm not uploading this update (2.5.14) to the
IF Archive yet. For now, you can get the update from the tads 2 patch page
at http://www.tads.org/t2_patch.htm. The change only affects the compiler.

Issue History
Date Modified    Username       Field                    Change               
======================================================================
2009-05-01 00:42 GrAnd          New Issue                                   
2009-05-06 16:54 Michael RobertsFixed In Version          => 2.5.14         
2009-05-06 16:54 Michael RobertsNote Added: 0000098                         
2009-05-06 16:54 Michael RobertsStatus                   new => resolved     
2009-05-06 16:54 Michael RobertsResolution               open => fixed       
======================================================================

Неактивен

0    0    #128
07.05.2009 07:58

fireton
некто с бородой (+354, -92)
Откуда: Москва
Зарегистрирован: 22.08.2005
Сообщений: 1103
Вебсайт

Тон

Re: Новая версия библиотеки?

Круто. То есть, теперь игры с генератором можно будет перезапускать?

Неактивен

0    0    #129
07.05.2009 13:01

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

http://www.rtads.org/libr26pre.rar - обновленная версия библиотеки с патчем для старых версий (генератор запускается заново при рестарте).
http://www.rtads.org/vkkpuzl.zip - исправленный туториал

Просьба ко всем авторам скачать и установить бета-версию нового компилятора:
http://www.tads.org/patch/aksetupd.exe
Как я понял, компилируемый код будет читаться старыми интерпретаторами, причем проблема с исчезновением лексем будет устранена.

Только что проверил - работает.

П.С. Только-что подправил патч, срабатывает на версию интерпретатора 2.5.14, потому как компилятор не выдает такой подробной инфы о своей версии. Компилировал из командной строки, сообщаемая версия интерпретатора соответствует компилятору, так что все должно работать правильно.

Отредактировано GrAndrey (07.05.2009 14:04)

Неактивен

0    0    #130
07.12.2009 19:53

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Новая версия библиотеки?

Библиотеки обновились: Релиз 26.

Код:

//////////////////////////////////////////////////////////////////////
//..........................Версия №26 .............................//
//...........................08.11.09...............................//
//////////////////////////////////////////////////////////////////////

- в extender.t в экспериментальном порядке введена команда "помочь"

- во многих командах заменил упоминания ГГ на actor

- Парсер пытается выяснить что обозначают предлоги "в", "на", "из" - 
часть определения или относяйщийся к глаголу предлог

- доработана обработка "попросить об", расширением соотвествующих команд
Теперь допустимо обращение к персонажу из нескольких слов

- убрана функция oyay -  замена ok(...)

- Флаги отчета работы генратора теперь выводятся отдельно от слов, 
облегчая автоматическую проверку орфографии. 

- Firton выявил и устранил две ошибки. Одна критическая в parseNounPhrase, 
другая - незначительная в parseError2.

- Майкл Робертс внес изменения в систему, чтобы сформированные в фазу 
предкомпиляции лексемы не удалялись после перезапуска игры.
Изменения в версии 2.5.14. В более ранних системах при рестарте игры генерация
nouns и adjective будет автоматически происходить в режиме реального времени. 

- в advr.t добавлена функция opro, которая подставляет "об" 
или "про" в зависимости от слова, с которым предлог должен 
быть согласован

- исправлен механизм отдачи приказов актерам фразами
"попросить таню взять мячик", "приказать Рексу укусить Боба"
Обновременно исправлен глагол "спросить об"

- генератор доработан для определения существительных, прилагательных
и предлогов в коротких описаниях (desc). Данные флагов записывются в 
список info_list. Например, для фразы "ржавый/м ключ/м от 
сундука/-" он будет выглядеть как  ['мп' 'мс' '+' 'п-']. 

- генератор формирует местный падеж. В базе - 49 слов (+несколько 
упомняуты в комментариях)

- Генератор пытается опознать части речи в коротких описаниях

- Доработки правил. Главная - окончания -ок. Осталось небольшое 
количество исключений.

- Генератор оптиимзирован. Флаги переводятся в двоичный формат, 
что существенно ускоряет обработку. Для этого введены функции binarize и 
debinarize.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru