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
07.02.2008 15:19

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

---

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

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

Неактивен

0    0    #3
19.03.2008 17:52

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

---

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

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


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


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

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

Неактивен

0    0    #4
23.03.2008 14:12

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

---

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

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

Неактивен

0    0    #5
11.07.2008 02:22

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

---

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

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

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

Неактивен

0    0    #6
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    #7
15.07.2008 13:45

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

---

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

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

Неактивен

0    0    #8
15.07.2008 13:51

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

---

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

GrAndrey написал:

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

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

Неактивен

0    0    #9
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    #10
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    #11
23.07.2008 13:49

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

---

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

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

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru