# Динамическое описание сцены
Wol4ik(syscall,22) — All
2017-07-13 09:40:58


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

Как поменять их местами и возможно ли это? Можно ли при помощи кода игры, модулей или настройки темы (голубая сталь, стандартная и т.п.) сделать, чтобы динамическая часть сцены, точнее сообщения в ней, выводились всегда ниже, чем статичный блок описания сцены decor (и, разумеется, ниже блока описания об'ектов)?

# Re: Динамическое описание сцены
Wol4ik(syscall,22) — Wol4ik
2017-07-13 12:33:59


p.s. если быть точнее, то вопрос связан именно с выводом реакций игры (движка) в виде текста курсивом. Прочёсывая документацию, увидел, что динамическая часть сцены неоднозначное понятие. Я знаю что есть статическая часть (декорации, некоторые даже активные) и динамическая (объекты , которые пока лежат, стоят и т.д, но они могут быть взяты в инвентарь, убраны вообще или видоизменены). Но помимо этих двух частей есть область вывода реакций игры - "вы взяли карандаш", "карандаш, как карандаш" и т.п. Вот эти надписи я хочу попытаться переместить, чтобы они появлялись внизу экрана, а не вверху. Но пока не понял как.

# Re: Динамическое описание сцены
Wol4ik(syscall,22) — Wol4ik
2017-07-13 12:51:56


p.s. повлияет ли на то, что я описал ранее, изменение вот этой функции в плане последовательности расположения этих областей игрового экрана (глава 21 документации по Inst3 "ФОРМАТИРОВАНИЕ И ОФОРМЛЕНИЕ ВЫВОДА") ?

game.display = function(s, state)
local r, l, av, pv
local reaction = s:reaction() or nil -- реакция
r = std.here()
if state then -- такт игры?
reaction = iface:em(reaction) -- курсив
av, pv = s:events()
av = iface:em(av) -- вывод ”важных” life
pv = iface:em(pv) -- вывод фоновых life
l = s.player:look() -- objects [and scene] -- объекты и сцена
end
l = std.par(std.scene_delim,
reaction or false, av or false, l or false,
pv or false) or ’’
return l
end;

# Re: Динамическое описание сцены
Peter(syscall,1) — Wol4ik
2017-07-13 13:10:23


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

А так, смотри сам. При вставке кода используй 4 символа =, примерно так:

l = std.par(std.scene_delim, reaction or false, av or false, l or false, pv or false) or ’’
заменить на:
l = std.par(std.scene_delim,  l or false, av or false, reaction or false, pv or false) or ’’

# Re: Динамическое описание сцены
Wol4ik(syscall,22) — Peter
2017-07-13 13:30:22


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

# Re: Динамическое описание сцены
Peter(syscall,1) — Wol4ik
2017-07-13 14:25:13


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

# Re: Динамическое описание сцены
Peter(syscall,1) — Wol4ik
2017-07-13 16:16:08


Подумай вот о чем.
Мы берем яблоко.
Яблоко пропадает со сцены.
Описание сцены -- ситуация.
В твоем варианте, мы прочитаем сначала описание новой ситуации (без яблока), а только потом, узнаем что мы взяли яблоко.

Типа:

На столе больше нет яблока.
Вы взяли яблоко.

Разве это не настораживает? ;)

# Re: Динамическое описание сцены
Peter(syscall,1) — Peter
2017-07-13 16:21:35


Еще пример. Допустим, есть волк. С методом life. Он убивает гг. При этом идет переход на сцену конец игры.

И вот мы видим:

Конец игры.
Волк бросается на вас.

Вместо: Волк бросается на вас.
Конец игры.

Таких примеров можно еще привести. Вот попытался пояснить мысль. :)

# Re: Динамическое описание сцены
Peter(syscall,1) — Peter
2017-07-13 16:29:45


Ну и для полноты картины. При входе в комнату вызывается событие onenter. Пусть в нем будет что то вроде: мы вошли в зал.

В твоем варианте будет:

Вы оказались в большом зале!
Вы вошли в зал.

Ты все еще думаешь, что смена display хорошая идея? :)

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

# Re: Динамическое описание сцены
Peter(syscall,1) — Peter
2017-07-13 16:36:09


То есть, логика стандартного поведения:
Что ты сделал -> что получилось

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

# Re: Динамическое описание сцены
Peter(syscall,1) — Peter
2017-07-13 16:46:01


В качестве компромиссного решения можно назвать такое.
dsc
Реакция
decor/объекты

Такое поведение было в stead2. Оно имеет противоречия, но если условиться что dsc не меняется, можно его сделать. Если это нужно, могу помочь. Надо look вызов в display разбить на два.

# Re: Динамическое описание сцены
Wol4ik(syscall,22) — Peter
2017-07-13 21:51:29


Пётр, я сделал, как того хотел. Твои доводы убедительны, но, как часто бывает, убедить может только свой опыт))) Посмотрел, как это выглядит - хуже, чем я представлял. Тут еще играет роль устройство внимания человека. Когда шапка не меняется, а внизу под неизменным текстом что-то появляется/меняется, взгляд очень неохотно переходит вниз экрана. Мы, как правило, держим внимание вверху экрана, так как там самая важная информация. Да, хорошо, что текст decor отскакивает вниз/прыгает, есть есть некая живость "картинки", хотя добавляется всего 1-2 строчки реакции вверху. В общем, остаюсь на базовых настройках))) Большое спасибо за примеры и пояснения. Продолжаю медленно, но верно работать над игрой.