std.prog: INSTEAD программирование


1 . . . 3 4
Reply to: ZRmKTAmr7GXnsdV94NvB
From: techniX (syscall,26) 04.09.18 08:47 UTC
To: lnp3
Subject: Re: instead-js или instead-em
Да, keyboard работает. Ну или по крайней мере должен работать :)
По скорости загрузки - instead-em загружает около 10 мегабайт при первом запуске, потом чуть быстрее из кэша. А instead-js "весит" меньше 1 мегабайта.
Кроме того, в instead-js есть два режима загрузки. Можно загружать игру из zip-файла - но тогда нужно ждать пока вся игра целиком загрузится в клиентский браузер. А можно из каталога - тогда она практически мгновенно запускается, а картинки потом в фоне подгрузятся.

Reply to: 29X2fDW285e2SlOzGUT9
From: lnp3 (syscall,35) 04.09.18 09:08 UTC
To: techniX
Subject: Re: instead-js или instead-em
> По скорости загрузки - instead-em загружает около 10 мегабайт при первом запуске, потом чуть быстрее из кэша. А instead-js "весит" меньше 1 мегабайта.
> Кроме того, в instead-js есть два режима загрузки. Можно загружать игру из zip-файла - но тогда нужно ждать пока вся игра целиком загрузится в клиентский браузер. А можно из каталога - тогда она практически мгновенно запускается, а картинки потом в фоне подгрузятся.

Вот это ценнейшая информация, спасибо большое! Положу в копилку.

From: Пэ (syscall,48) 13.06.19 07:31 UTC
To: All
Subject: А как сделать, чтобы...
Здравствуйте!
Простите, если я не в ту тему пишу :)

Вот заинтересовался я МЕТАПАРСЕРОМ3 (за что огромное спасибо Петру) и пробую что-то в нём написать. Кое-что даже получается. Программист с меня никакой и мне нужна помощь. Не откажите в любезности.

Есть задача использовать счётчик ходов в игре. Чтоб определённое событие случилось в определённый ход. Как этого добиться?
К примеру, на 50-м ходу игры Нео получает срочной бандеролью телефон, а через 10 ходов ему должен позвонить на этот телефон Морфеус. То же должно сработать и если Ное получит телефон на 39-м ходу и тот зазвонит через 10 ходов.

Спасибо.

Reply to: wVrBtMq8ZGWWBHKk68ze
From: Peter (syscall,1) 13.06.19 19:48 UTC
To: Пэ
Subject: Re: А как сделать, чтобы...
Привет, не могу развернуто сейчас ответить (с телефона не удобно) но можно прочитать про daemon метод. Грубо говоря, метод дергается каждый ход у объекта. А там уже можно делать что угодно. Для запуска StartDaemon кажется используется. В примерах должно быть и в существующих играх.

Reply to: yTpSr6YK3d0CosF1R9F3
From: Пэ (syscall,48) 14.06.19 21:13 UTC
To: Peter
Subject: Re: А как сделать, чтобы...
Спасибо. Попробую.

Reply to: yTpSr6YK3d0CosF1R9F3
From: Пэ (syscall,48) 16.06.19 02:00 UTC
To: Peter
Subject: Re: А как сделать, чтобы...
Скажите, пожалуйста, Пётр, как сделать, чтоб перемещения в игре были не по сторонам света, а по названиям комнат? Когда персонаж находится в помещении, перемещение по сторонам света выглядят странно. Хотелось бы иметь возможность идти не на север и юг, а к примеру, в гостиную или в детскую.

Похоже, что это - не тот вариант (перемещаться через объекты):
====
obj {
    -"детская";
    nam = "nursery";
    before_Walk = function(s)
        move(pl, 'room3')
end; 
}
====

Reply to: ALC5Wot3UXAzaN4NzO0G
From: Peter (syscall,1) 16.06.19 09:34 UTC
To: Пэ
Subject: Re: А как сделать, чтобы...
В моей игре есть реализация класса path. https://github.com/gl00my/instead-game-summerday

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

From: vmg (syscall,52) 27.08.19 18:19 UTC
To: All
Subject: Использование аудиозаписей
> Если вам не достаточно описанных здесь функций по работе со звуком,используйте полное описание модуля “snd”.

Допустим, надо, чтобы на определённом шаге пользователь услышал запись речи. Есть ли в дополнительном описании модуля "snd" что-нибудь о такой возможности? И подскажите, пожалуйста (извините за тупёж), где читать описание модулей.
А ещё спрошу, в какой программе лучше преобразовывать разные форматы записи в ogg. Большинство профессиональных диктофонов сохраняет записи в wav.

Reply to: JZIxfgjFJM994VdPq4yu
From: Peter (syscall,1) 27.08.19 19:22 UTC
To: vmg
Subject: Re: Использование аудиозаписей
> Допустим, надо, чтобы на определённом шаге пользователь услышал запись речи.

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

> И подскажите, пожалуйста (извините за тупёж), где читать описание модулей.

snd описан в той-же документации.

Здесь: https://github.com/instead-hub/instead/blob/master /doc/stead3-ru.md#%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D 0%B0

И здесь (расширенные возможности): https://github.com/instead-hub/instead/blob/master /doc/stead3-ru.md#%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D 1%8C-snd

Кратко, можно играть звук в определенном канале с определенной громкостью и проверять - играет ли он ещё или уже перестал.

> А ещё спрошу, в какой программе лучше преобразовывать разные форматы записи в ogg.

Если хочется с gui, то audacity. Если консоль - то oggenc (vorbis-tools) или ffmpeg.

Reply to: KyeeArkU9iQpGzhwAqoZ
From: vmg (syscall,52) 27.08.19 19:56 UTC
To: Peter
Subject: Re: Использование аудиозаписей
Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.

Reply to: nz4aLGK8xLDAjnvm2wzA
From: Andrew Lobanov (tavern,1) 28.08.19 03:38 UTC
To: vmg
Subject: Re: Использование аудиозаписей
vmg> Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.

У нас тут уютно и лампово. Так что отвечаем на любые вопросы. Правда не всегда оперативно, но Пётр вон быстро сработал =)

Reply to: nz4aLGK8xLDAjnvm2wzA
From: Peter (syscall,1) 28.08.19 06:00 UTC
To: vmg
Subject: Re: Использование аудиозаписей
> Пётр, большое спасибо — теперь всё нашёл. Я въезжаю постепенно и иногда могу просить о помощи (в том числе) для моральной поддержки. Надеюсь, у нас это не возбраняется. До встречи в песочнице.

Да пиши свободно, конечно!

Reply to: HV4xARlJu129JCfArKtt
From: vmg (syscall,52) 28.08.19 07:20 UTC
To: Andrew Lobanov
Subject: Re: Использование аудиозаписей
> У нас тут уютно и лампово
На самом деле, радость, что у нас есть такой добрый гостеприимный дом и люди, которые дали ему появиться.

From: kolobod (syscall,30) 25.09.19 10:14 UTC
To: All
Subject: Рандом в СТИД 2
Всем огромный привет! Сразу приношу извинения, если вдруг пишу не в тот раздел. Давно не заходил, подзабыл что-как.
Вдруг кто еще помнит свои наработки по стид2?
Запнулся на таком моменте. Надо, что бы при срабатывании условия - в ответ РАНДОМНО включалось ОДНО из нескольких возможных событий.
Если конкретно: у меня игрок в какой-то момент делает персонажем действие, открывает найденным ключом дверь в бункер.
====
act = function(s)
      if got_bunker_key then 
                        bunker_door_open;        --дверь открывается, если есть нужный ключ
		        random_action_on = true; --включается "разрешение" для запуска 1 из 3 рандомных событий
                        p [[Из темного коридора раздается рычание. В воздухе витает какой-то мерзкий запах.]]; 						
end;
====
И есть три условия для запуска трех разных событий, одно из которых должно включится СЛУЧАЙНЫМ ОБРАЗОМ, после того как сработает random_action_on.
Это:
dead_attack --атака монстрами игрока
dead_blind --монстры не замечают, как игрок проник в бункер
poison_on --игрок получает отравление
Как сделать рандомный запуск одного из трех событий?

Reply to: glUygv2esJqxFsskpNAs
From: Peter (syscall,1) 25.09.19 13:28 UTC
To: kolobod
Subject: Re: Рандом в СТИД 2
Привет!
Не совсем понял, что тут имеется в виду:

====
act = function(s)
      if got_bunker_key then 
		        random_action_on = true; -- кто анализирует эту переменную?
      end;
====

То-есть, не понятно, какой именно код запускает событие? life метод? Или непосредственно в act?
Так-то, сам random делается просто:

====
local n = rnd(3)

if n == 1 then
-- 1
elseif n == 2 then
-- 2
else
-- 3
end
====

Ну или в твоем примере можно сразу:

====
random_action_on = rnd(3) -- от 1 до 3
====

Reply to: YkM1rxXNp2tMhTuFY6Xu
From: kolobod (syscall,30) 25.09.19 18:23 UTC
To: Peter
Subject: Re: Рандом в СТИД 2
Всё запускается из act.
То есть мне надо сделать так, верно понял?
====
local n = rnd(3) --Этот блок прописывается просто в любом месте кода, или его надо вставлять куда-то конкретно? 
if n == 1 then dead_attack = true --срабатывает условие для запуска монстров
elseif n == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
elseif n == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
else
end
====
act = function(s)
if got_bunker_key then
bunker_door_open = true; --дверь открывается, если есть нужный ключ
random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий
end;
====

Reply to: z6KSn1gtYP6jHSj2c38d
From: Peter (syscall,1) 25.09.19 19:32 UTC
To: kolobod
Subject: Re: Рандом в СТИД 2
Если я верно понял вопрос, то что то вроде этого?
Я просто не понял что такое "событие" и зачем столько переменных.
local -- это для временной переменной
Но у тебя random_action_on видимо глобальная переменная.
А так можно было сделать локальную, она бы существовала только во время работы act
====

act = function(s)
    if got_bunker_key then
        bunker_door_open = true; --дверь открывается, если есть нужный ключ
        random_action_on = rnd(3); --включается "разрешение" для запуска 1 из 3 рандомных событий

        if random_action_on == 1 then dead_attack = true --срабатывает условие для запуска монстров
        elseif random_action_on == 2 then dead_blind = true --срабатывает условие при котором монстры игрока не видят
        elseif random_action_on == 3 then poison_on = true --срабатывает условие при котором персонаж получает отравление
        end
    end;
end
====

Reply to: 3AxoGxiDPSipNjkrM5tb
From: kolobod (syscall,30) 26.09.19 08:12 UTC
To: Peter
Subject: Re: Рандом в СТИД 2
Супер! Похоже это вот именно то, что надо было!! Сегодня после работы сяду пробовать в деле)
Большущее спасибо.

From: kolobod (syscall,30) 11.10.19 13:19 UTC
To: All
Subject: Перемещение через... dsc - в СТИД 2
Ох, еще такой вопрос. Может знает кто? Заранее прошу прощения)
В общем, загнал я себя в ловушку. Забыл слова Петра о том, что dsc (в отличие от act) не предназначен для внесения каких-то глобальных изменений в игровой процесс, это только описательная часть. В итоге столкнулся с тем, что завязал часть игрового процесса на dsc все-таки. До какого-то момента все исправно работало. До тех пор, пока не понадобилось организовать "переход" в другую комнату нетрадиционным образом. Сделал так:
====
bunker = room {
...
dsc = function(s)
...
      if global_nnn == 10 and global_yyy == 20 then		   
         walk 'action_room_2'; 
         return true;
      end;	
...	
end;
}
====
Суть, если отбросить лишние детали: в комнате bunker можно переключать два параметра (условно nnn и yyy) и когда они доходят до значений "10" и "20" соответственно, игрок автоматически перемещается в другую комнату (происходят еще разные изменения в сюжете, в интерфейсе, но тут это не важно). В нынешнем виде, такая попытка перемещения не работает. Игрок, судя по всему остается в текущей комнате.

Вопрос: возможен ли в принципе walk из dsc (другие способы перехода именно в этом, конкретном случае не желательны) или про это можно сразу забыть?

Reply to: CxumjDxzkW4rYlCrc0cs
From: kolobod (syscall,30) 11.10.19 14:34 UTC
To: kolobod
Subject: Re: Перемещение через... dsc - в СТИД 2
Вроде решил проблему перехода в другую комнату убрав это из dsc в
====
lifeon (check); 
check = obj {
    life = function(s)
           if global_nnn == 10 and global_yyy == 20 then		   
           walk 'action_room_2'; 
           return true;
    end;
end;
====
};
Но радовался недолго)) Ибо игрок перемещаться-то перемещается из bunker в action_room_2 - но тема при этом не меняется, как сделано у меня при переходах в другие комнаты. И все оформление рушится. Реально не могу понять в чем засада, поскольку смена тем для всех комнат сделана через тот же check, и для всех один и тот же код, заставляющий тему меняться. При входе в комнату она идентифицируется по номеру, а под каждый номер прописано как меняется тема, типа такого:
===
if location == 4 then
theme.gfx.bg('theme/5.jpg');
theme.win.geom(700, 300, 600, 500);
end;
====
Везде это работает, а вот при переходе конкретно в action_room_2 почему-то нет.

Reply to: CTQ9C9eYAqrRS4ouizRR
From: kolobod (syscall,30) 11.10.19 15:14 UTC
To: kolobod
Subject: Re: Перемещение через... dsc - в СТИД 2
Все даже еще загадочнее. Сделал для эксперимента - что игрок переходит не напрямую из bunker в action_room_2, а сначала идет в другую комнату (и все при этом отлично работает, тема комнаты bunker меняется на тему выбранной комнаты, переход проходит нормально). Потом уже только переходим в action_room_2 - и снова все отлично: и переходим, и тема меняется правильно. Но вот стоит только вернуть переход обратно напрямую, из bunker в action_room_2 - как оформление крашится.
И тут моя логика начала сходить с ума.
Ибо если проблема в комнате bunker - то почему из нее отлично работают переходы в другие комнаты?
Если проблема в комнате action_room_2 - то почему в нее нормально переходим из любой другой комнаты, кроме bunker?
Буду дальше копать))) Прям самому интересно)

Reply to: erMRfbYAnK5kJoHqoNMz
From: kolobod (syscall,30) 11.10.19 16:11 UTC
To: kolobod
Subject: Re: Перемещение через... dsc - в СТИД 2
В общем, я представляю как ржут программисты читая мой бред))
Потыкав свой "код" я уже понял, что корректно и красиво те переходы что я прописал - работают только если переход вызван:
-кликом по картинке в комнате (не подходит в моем случае),
-кликом по объекту в комнате, через act (опять же, не подходит в силу геймплея),
-кликом по предмету инвентаря (тоже не подходит, надо из комнаты),
-из диалога (аналогично)

Через life = function и dsc комнаты мой переход со сменой тем не пашет. Либо нельзя, либо неправильно прописываю.

Reply to: Y3JrZ6hzCh1ZaDL4FUh0
From: Peter (syscall,1) 11.10.19 16:24 UTC
To: kolobod
Subject: Re: Перемещение через... dsc - в СТИД 2
Тут такое дело, я совсем уже не помню STEAD2 и не хочется в нем снова разбираться, так как STEAD2 больше не развивается.
Но дам такой совет:
- в dsc игровую логику не делать;
- игровкую логику сделать в enter;
- если есть вопрос по life - нужен рабочий пример, который я смогу запустить и отладить. Тогда смогу помочь.

Reply to: QcVeaB5qQJ2FSa22aR38
From: kolobod (syscall,30) 11.10.19 17:15 UTC
To: Peter
Subject: Re: Перемещение через... dsc - в СТИД 2
Да, насчет dsc я уже осознал свой изначальный просчет)))
По enter пробовал - не получилось, насколько я понимаю он проверяет все при заходе в комнату, а там в ней дальше идут события. В общем перенос в enter
====
      if global_nnn == 10 and global_yyy == 20 then		   
         walk 'action_room_2'; 
         return true;
      end;
====
не срабатывает, потому что нужные условия достигаются игроком уже в ходе манипуляций в комнате, а не при заходе в нее.

Переход я все же сделал) Очень криворуким способом, но он работает)) Впрочем у меня все криворукое, и как благородный INSTEAD еще терпит мои дилетантские издевательства - я искренне не понимаю))))))

Reply to: EVny54TAVdyRAzKg663Q
From: Peter (syscall,1) 11.10.19 20:00 UTC
To: kolobod
Subject: Re: Перемещение через... dsc - в СТИД 2
А, я понял! То-есть мы хотим после какого-то действия сделать walk. Чтобы была функция, которая следит за событиями.
Ну да, тогда life в теории -- рабочий вариант. Но там нюансы были, в документации по STEAD2 было что то о том, как надо делать переходы из life метода.
Я могу посмотреть, но нужен демо-пример небольшой.

Reply to: SOmVzBJZ0btCAcyXp4Bi
From: kolobod (syscall,30) 11.10.19 20:49 UTC
To: Peter
Subject: Re: Перемещение через... dsc - в СТИД 2
Я просто добавил маленькую прослойку: когда создается нужное условие, в становится true событие - которое само по себе переход не дает, но делает его возможным из другого места)))
Вообще, конечно, я изначально пошел по очень неверному пути. Надо было проще эти переходы организовать, как это предусмотрено в инстиде. Но нет, захотелось пооригинальничать, повыпендриваться) И это при отсутствии-то навыков программирования))) Вот и расхлебываю...

1 . . . 3 4