101 (edited by Simba 2010-07-31 19:30:40)

Re: Проблемы INSTEAD-SDL

Я не настаиваю smile просто высказал мнение.

У Питона большое будущее!
И его очень интересно учить и приятно писать на нем программы.

Кстати, искал похожие на INSTEAD проекты на Python, нашел RenPy.
Но его анимешники узурпировали sad все игры - манги с яркой графикой, многие хентайные.
Не стал качать...

Re: Проблемы INSTEAD-SDL

Ну RenPy вроде сам по себе под вижл новелл, по крайней мере в репозитории так написано.
А новеллки сейчас только в Японии делают smile Всяких полно. И они у них в мейнстриме. А на инглише мало, увы. Вот народ и ваяет, наверное  smile
Питон везде. Везде. Хотел было снести 2.6, но увидел сколько он за собой утянул бы пакетов, и передумал  big_smile

103

Re: Проблемы INSTEAD-SDL

Интересно, скажем, под маком весь этот зверинец заведётся?
Я опять ЯКОБЫ ненавзячиво лоббирую интересы си и си плюс плюса в качестве основных языков разработки...

104

Re: Проблемы INSTEAD-SDL

Под маком Python/Ruby изкаробки. wink Только что посмотрел - Python 2.6.1, Ruby 1.8.7.

105

Re: Проблемы INSTEAD-SDL

Python является кроссплатформенным языком. Обычно одна и та же программа может запускаться и в Windows, Linux, BSD и Mac OS. Достаточно просто скопировать файлы, составляющие программу, на нужный компьютер. При этом даже не потребуется выполнять  «сборку», или компилирование программы. Конечно, можно написать на языке Python программу, которая будет использовать некоторые  характерные особенности конкретной операционной системы, но такая необходимость возникает крайне редко, т.к. практически вся стандартная библиотека языка Python и большинство библиотек сторонних производителей обеспечивают полную кросслатформенность.

Моё мнение, что следует очень обдуманно подходить к выбору языка для каждой конкретной ситуации.
Если важны скорость или доступ к системным функциям, аппаратным прерываниям, то безусловно С/С++.
Если этого не требуется, то почему бы не использовать высшие языки?
Даже если это требуется, то самые ответственные за производительность функции можно написать на голом Си, и интегрировать в высший код в качестве модуля. Я занимался такими вещами ради эксперимента, это очень легко делается. Например, Питон часто используют в качестве скриптового языка в большом закрытом приложении. Я и такое часто встречаю, когда программа написана на С++, а плагины к ней на Python. Имея только лишь заголовочные файлы С++ довольно просто сделать привязки функций и классов к аналогичным интерфейсам в Питоне. Например, такие привязки есть к фреймворкам Qt и Gtk+. Это ускоряет кроссплатформенную разработку в разы! Благодаря PyQt сейчас пишется редактор, и любой желающий может открыть блокнот и вносить изменения. Для этого не нужно знать глубоко язык или иметь компилятор. Всё закомментировано и прозрачно работает.
Не в обиду, но в коде INSTEAD вообще комментариев не увидел. Что ассемблер, что Си. Не стал разбираться... sad

Re: Проблемы INSTEAD-SDL

Доброго времени суток всем!
Необходима подсказка знающих.
Суть: ОС Debian lenny, собираю из исходников INSTEAD 1.2.0 пакет deb, устанавливаю его все без проблем.
INSTEAD запускается режим обучения играет все ок, при загрузке игры (пробовал КУБА и Квантовый кот) игра грузится,
начинет играть, но потом Instead вылетает с ошибкой  сегментирования (на КУБЕ в конце зоопарка на ссылке "клетка"; В коте практически сразу при переходе в "хижину").
Подскажите в чем проблема и возможно ли лечить?

Re: Проблемы INSTEAD-SDL

Может, проблема с музыкой?

Александр Яковлев, к вашим услугам.

Re: Проблемы INSTEAD-SDL

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

109

Re: Проблемы INSTEAD-SDL

проблема в старом mikmod
у меня на eee pc стоит старая федора (10-ая), так там настолько древний микмод, что на нём инстед падает на куче треков
хотя отдельно треки проигрываются (не в инстеде)

Re: Проблемы INSTEAD-SDL

Благодарю vvb.
Все помогло обновил libmikmod2 & libmikmod2-dev все заработало.

111 (edited by SpeakingStone 2010-11-04 22:55:04)

Re: Проблемы INSTEAD-SDL

Возможно ошибка в stead.lua (версия INSTEAD 1.2.3)

Error calling:instead.get_inv
Error: ./stead//stead.lua:52: bad argument #3 to 'find' (number expected, got string)
Error calling:iface:cmd
Error: ./stead//stead.lua:52: bad argument #3 to 'find' (number expected, got string)
function stead.getcmd(str)
    local a = {}
    local n = 1
    local cmd;
    local i,k = stead.string.find(str,'[a-zA-Z0-9_]+', k); -- Действитльно, k используется раньше, чем определена. 
-- По неведомым законам иногда она оказывается строкой. 
-- Я исправил просто стерев k и оставив 2-х аргументный find()
-- local i,k = stead.string.find(str,'[a-zA-Z0-9_]+');
    if not i or not k then
        cmd = str;
    else
        cmd = stead.string.sub(str, i, k);
    end
    stead.cmd = cmd
    if cmd == 'load' or cmd == 'save' then
        a[1] = strip(stead.string.sub(str, k + 1));
        stead.args = a;
        return cmd, a
    end
    while i do
        k = k + 1;
        i,k = stead.string.find(str,'[^,]+', k);
        if not i then
            break
        end
        a[n] = strip(stead.string.sub(str, i, k));
        n = n + 1;
    end
    stead.args = a;
    return cmd, a
end

upd
В 1.3.0, похоже, та же проблема

112

Re: Проблемы INSTEAD-SDL

Как воспроизвести?

113

Re: Проблемы INSTEAD-SDL

Правка правильная, в любом случае там этот k ни к чему, спасибо!
Ушло в svn.

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

Как плучилось воспроизвести?

Еще можно узнать, что там за строка
<-->if type(k) == 'string' then
<--><-->print(k)
<-->end

114 (edited by SpeakingStone 2010-11-05 11:40:14)

Re: Проблемы INSTEAD-SDL

Это привнесённая игрой глобальная k, как выяснилось.

oPlita = obj {
    nam = 'газовая плита',
    dsc = 'В кухонной части есть {газовая плита},',
    _work = false,
    act = function(s)
        if s._work then
            if game._meetBtard then
                k = objs():srch('oKastrula'); -- Вот привнесённая k (забыли local)
                if k and ref(k)._state == 2 then
                    if ref(k)._result < 0 then
                        return 'Чего-то в супе не хвататет... Выключать рановато.'
                    end 
                    s._work = false;
                    game._supGotov = true;
                    return 'Потушила газ. Еда готова!'
                end
                k = inv():srch('oKastrula'); -- Вот ошибочный вызов. Ошибка происходит, когда кастрюля на плите и клик на плиту
-- в этот момент k определена и содержит строку ('oKastrula')
                if k then
                    return 'На плите горит газ.';
                end
            end
            s._work = false;
            return 'Потушила газ'
        end
        return 'Маленькая одноконфорочная газовая плитка. Газ идёт от газового баллона.';
    end,
};

115

Re: Проблемы INSTEAD-SDL

Ага, заначит все ок. А правку я закоммитил.

по коду:
inv():srch - заменяется на have (он возвращает сам объект)
objs():srch - заменяется на seen (он возвращает сам объект)
тогда уходит ref (он начиная с 1.2.0 почти всегда лишний)
ну и _переменные можно как var объявлять (и избавляться от _) -- но это дело вкуса.

game._переменная -- идеально сделать global -- тогда просто будет переменная
и код становится красивше и меньше smile

Re: Проблемы INSTEAD-SDL

Это всё писалось ещё во времена 0.9

117

Re: Проблемы INSTEAD-SDL

Например (не уверен что правильно end ы стоят -- но просто заменил некоторые строки)


global { meetBtard = false, supGotov = false };

oPlita = obj {
    nam = 'газовая плита',
    dsc = 'В кухонной части есть {газовая плита},',
    var { work = false },
    act = function(s)
        if s.work then
            if  meetBtard then
                k = seen 'oKastrula';               
                if k and k._state == 2 then
                    if k._result < 0 then
                        return 'Чего-то в супе не хвататет... Выключать рановато.'
                    end
                    s.work = false;
                    supGotov = true;
                    return 'Потушила газ. Еда готова!'
                end
                if have 'oKastrula' then
                    return 'На плите горит газ.';
                end
            end
            s.work = false;
            return 'Потушила газ'
        end
        return 'Маленькая одноконфорочная газовая плитка. Газ идёт от газового баллона.';
    end,
};

Пока писал ты ответил. smile

Re: Проблемы INSTEAD-SDL

Peter wrote:

Например (не уверен что правильно end ы стоят -- но просто заменил некоторые строки)

Ага, ясно. Спасибо!
Сейчас просто смотрим на совместимость недоделанного  старья с новым INSTEAD. за исключением предмета разговора (и менее чем 50% готовности) всё в общем работает.

119

Re: Проблемы INSTEAD-SDL

Когда в игре нет строки instead_version он работает в legacy режиме.
Между legacy и новыми версиями есть несовместимость в некторых вещах (например vobj) и то как приходят аргументы в use/used/enter/exit (в >1.2.0 там всегда сами объекты а не строки), но новый режим включается только после instead_version

120

Re: Проблемы INSTEAD-SDL

Обнаружил некритический баг в 1.3.0.

При вставке обтекаемых картинок imgl, пробел справа обязателен. То-есть:

не imgl'1.png'..[[Начало текста]],

а
imgl '1.png'..[[ Начало текста]] -- между [[ и Начало -- пробел.

В 1.3.1 будет исправлено

UPD: В svn

121

Re: Проблемы INSTEAD-SDL

Еще интересная багафича с imgl.
Если вы захотите использовать ее в инвентаре, то это не сработает. Почему.

imgl 'pic.png' это на самом деле синоним img 'pic.png|left'

А символ | в инвентаре это по-умолчанию (переопределяется stead.delim) разделение элементов инвентаря.

Воркэроунды:
img 'pic.png\\|left'

или переопределение stead.delim = 'другой символ, например &'

но тогда везде вместо | используем & (например, в xact)

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

Пока считаем, что обтекание не работает в инвентаре.

Re: Проблемы INSTEAD-SDL

Небольшой баг. Если теги имени и версии находятся не в самых первых строках (см., например, "Погружение в INSTEAD"), то и instead, и instead-launcher их игнорируют.

В instead-launcher есть ещё один, близкий к этому баг (отсутствующий в самом instead): если после тега (после завершающего "$") идёт дополнительный текст (см. то же "погружение", если удалить из него начальные строки), то он ошибочно включается в содержимое этого тега.

123

Re: Проблемы INSTEAD-SDL

Ага. INSTEAD сканит только до тех пор, пока не встретит НЕ комментарий. Пустая строка для него не комментарий,
вот он и останавливался на первой пустой строке.

Пока просто обновил dii до 0.2, вставив заодно еще абзац про сравнения.

Re: Проблемы INSTEAD-SDL

Если запустить main.lua из корня диска (C:\main.lua), то при удалении игры через инстед весь диск затрется. Актуально для виндовс. Прецеденты были wink
Пока что выход -- не запускать из корня ничего.

125

Re: Проблемы INSTEAD-SDL

В svn версии теперь при удалении пишется удаляемый путь. Проблема в общем случае выглядит так.

1) Для instead игра -- это каталог.
2) Человек кладет main.lua в любое место и открывает игру через диалог open
3) Потом человек удаляет игру нажав на [X], инстед удаляет каталог, в котором лежит main.lua smile