1,201

Re: Вопросы по программированию игр

Asysyay wrote:

Буду признателен)

забирай
http://vvb.nailedgames.com/tmp/mus_rebuild.rar

1,202 (edited by Barlove 2013-12-24 09:24:11)

Re: Вопросы по программированию игр

Хочу сделать игрушку на инстеде. Сам не программист и знаю только qsp. Есть несколько вопросов по инстеду. Соответственно и вопросы за километр отдают куспом.
1. Есть ли возможность делать какие то суб локации? Хочу реализовать время. Все переходы минут в часы, а часы в дни, будут просчитываться в отдельном месте. Не понимаю как это можно в инстеде сделать. Ставить код в каждой комнате не вариант. В куспе это решалось двумя способами. Была локация которая обрабатывалась всегда при нажатии на любую кнопку или вставлял код в комнату со ссылкой на суб локацию, например gs'время' и при просчете локации весь код из локации время просто добавлялся в основной расчет.
2. Второй вопрос вытекает из первого. А куда это время выводить? В играх видел что (здоровье) выводят прямо в инвентарь. Как это делать не понял. И как бы подпункт этого вопроса, а можно ли создать отдельное место для дополнительного описания?
3. Как в текст выводить переменные? Например: Вас зовут <<$name>> ваша сила <<power>> едениц.
4. Может проморгал когда читал хэлп, но есть ли вообще возможность использовать массивы? И двухмерные массивы в том числе.
5. Я так понимаю инстед не поддерживает хтмл, тогда как можно сделать кусок текста другого цвета?
6. Можно ли сделать выпадающее меню? Что бы при нажатии на что либо появились пункты, что можно сделать с этой штукой. Например в комнате стоит диван, нажимаешь на него и вылезает меню, спать, сидеть, смотреть телевизор, читать книгу.
7. Каким образом можно обратно вернутся в комнату, если не знаешь откуда пришел? Например есть отдельная комната с описанием персонажа. Туда можно войти с любого места, (опять же как войти? Мой вариант только через предмет в инвентаре) Но откуда мы зашли в описание и куда возвращаться из этой комнаты с описанием не понятно.
8. Поясню на примере кода.

garden = room {
  nam = "Дворик дома",
  pic = "pic/loca/garden.jpg",
  dsc = [[Не большой домик стоит в лесу, на берегу речки.]],
      way = {
        'house',
        'bana',
        'ogorod',
        'hlev',
        'river',
        'forest',
    },
}

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

1,203

Re: Вопросы по программированию игр

1. Вынести в функцию например, и в комнатах эту функцию запускать в enter или exit, как удобно.
2. status - в документации есть пример.
3. dsc = 'Вас зовут '..name..', ваша сила '..power..' едениц. ' Кажется можно обойтись и такой склейкой, есть еще один способ.
4. Можно, гуглить документацию lua.
5. Вроде только два цвета можно задать, на текст и ссылки. Петр придет, скажет точнее.
6. Кто-то пилил такой хитрый модуль. В стандартном инстеде такого нет.
7. Найди в документации from();
8. В теме оформления можно покопаться. Что-то типа такой темы я видел.

1,204

Re: Вопросы по программированию игр

1. читать документацию про life методы. суть - выполняющиеся каждый ход методы.
3 p( "вас зовут", name) и прочитать док- цию
4 в луа все таблицы они же как и массивы. a[1] или a.field по сути одно и тоже. можно почитать в докции по lua
5 никак smile или модуль font
6 нет, но есть proxymenu и мп. хотя такой способ управления игрой делал кто то. но выпадающего меню не
будет.
7 walkin/walkout
8 можно картинку вставить img. тогда она будет под way

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

1,205

Re: Вопросы по программированию игр

вот уже традиционная ссылка

http://instead.syscall.ru/wiki/ru/gamedev/quickstart

1,206

Re: Вопросы по программированию игр

Peter wrote:

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

Скажу честно. В инстеде и урке я способен написать стандартную игру, но мне это не интересно. В куспе я достиг уже границ возможностей движка, мне уже тесно там, но все еще остались вещи которые я бы хотел реализовать. И на данный момент я как раз ищу альтернативы. Так как я не программист и не владею высокоуровневыми языками, то приходится искать соответствующую платформу. Милена сложна и с 2012 на форуме мертво, кусп я изучил и выдавил из него все что только можно, урка тот же кусп, но слабее в том плане что мне нужно, адрифт и прочие парсерные платформы мне не подходят, инстед это последняя надежда, ну вот физически больше нет менюшных да еще и русских платформ. При этом мои запросы на первый взгляд не так и велики, хочу сделать смесь текстового рпг, с симулятором жизни и элементами экономической стратегии. На куспе я уже сделал нечто подобное, но там с инвентарем сплошной геморой, что для рпг сразу вносит сложности, нет дробных чисел, это уже боевка страдает, нет возможности ввести множество генерируемых нпс, их приходится обрабатывать циклами и в итоге игра сильно тормозит, я уже выяснил физический предел куспа, это 100 нпс с простыми действиями, чем больше действий возможны у нпс, тем меньше нпс. Потому я и изучаю инстед, а вдруг у него есть преимущества перед куспом в тех местах, что мне нужны. В конце концов, когда я начинал кусп ковырять, тоже многие думали, что ничего кроме интерактивной книжки из него сделать нельзя, но ведь сделали, и рпг и стратегии и симуляторы, даже гонки и те сляпали на нем. Сам в шоке big_smile  потому и думаю, к инстеду же целый язык луа приделан, а у куспа возможностей раз два и обчелся и если на куспе такие кренделя наорд вывертывает, то чем инстед хуже то. Если не может с цветными шрифтами работать, то это конечно мелочь, можно и без них обойтись, то же самое и с выпадающим меню, но вот то, что все остальное возможно, это вселяет оптимизм.

1,207

Re: Вопросы по программированию игр

Barlove wrote:

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

Есть модуль fonts.
А вообще при таких запросах, как у вас, логично было бы начинать знакомство с инстедом с изучения Луа. Без знаний Луа "выжимать" что-то из инстеда вряд ли получится. Хотя простую игру в инстед-стиле написать можно.

1,208

Re: Вопросы по программированию игр

Как в Метапарсере сделать, что бы при простом нажатии ввод не происходило не какой реакции ?

1,209

Re: Вопросы по программированию игр

"ввод" это в метапарсере синоним - осмотреться. исправить такое поведение можно только исправив сам МП.

1,210

Re: Вопросы по программированию игр

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

life = function(s)
        if not s._stop then
            move(pers,here());
        end
    end;

В диалоге с персонажем:

[1] = phr('Подожди здесь',[[Ладно. Я буду ждать тут, возвращайся скорее.]],[[pon(2);pers._stop = true;goout();]]),
[2] = _phr('Пойдем со смной',[[Хорошо, я буду рядом.]],[[pon(1);pers._stop = false;goout();]]),

Почему-то даже когда переменная stop в значении false, персонаж следует за игроком, пропадая только в некоторых комнатах (написал объект в инвентарь, который проверяет, false эта переменная или true)

1,211

Re: Вопросы по программированию игр

Еще вопрос: где можно почитать про модуль "Метапарсер"?
Он наверно не совсем мне подходит, но все равно интересно узнать, вдруг пригодится.
А нужна такая штука: пишешь в окно не слово, а предложение, а функция проверяет написанный текст на совпадение с заранее подготовленными предложениями (просто совпадение с предложением целиком). Это возможно вообще?

1,212

Re: Вопросы по программированию игр

Прости, некогда отвечать. 1.9.2 в пути, про МП есть в модули/метапарсер на вики. Но тебе нужно другое. Там же есть модуль клавиатуры.

1,213

Re: Вопросы по программированию игр

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

1,214

Re: Вопросы по программированию игр

Оформи в виде готового кода (небольшого примера) - я исправлю. так будет проще всего.

1,215 (edited by Asysyay 2014-01-26 14:58:11)

Re: Вопросы по программированию игр

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

Post's attachments

Attachment icon main.lua 1.86 kb, 145 downloads since 2014-01-26 

Re: Вопросы по программированию игр

Получил интересную ошибку при использовании следующей конструкции

if disabled( path' <the name> ' ) then 

в функции nam комнаты.

Высылаю тестовый приме, воспроизводящий ошибку.

Post's attachments

Attachment icon error.zip 715 b, 153 downloads since 2014-01-27 

1,217

Re: Вопросы по программированию игр

Да - интересно. Суть в том, что во второй комнате мы хотим показать ways. Для этого дергаем nam у первой комнаты. А nam делает path, который снова делает ways по сути.

Надо будет как то этого избежать. А пока - так делать нельзя. smile

Ну или в начале:

if here() ~= s then
    p 'Имя 2';
    return
end

1,218

Re: Вопросы по программированию игр

Есть какая-то функция, которая вызывает рестарт игры?  По типу кнопки в меню "Начать заново"

1,219

Re: Вопросы по программированию игр

Есть. stead.restart()

1,220 (edited by Asysyay 2014-01-29 13:11:08)

Re: Вопросы по программированию игр

Осмелюсь апнуть) Если некогда отвечать, не страшно. Просто боюсь что сообщение затерялось и забудется


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

-- $Name:test_pers$
-- $Version: 1.0$
instead_version "1.3.1" 
require "xact" 
require "hideinv"
require "para" 
require "dash" 
require "quotes"
game.codepage = "UTF-8";
game.act = 'Не получается.';
game.inv = 'Гм.. Странная штука..';
game.use = 'Не сработает...';
game.forcedsc = true;
main = room {
    nam = 'Тест персонажа',
    dsc = '',
    obj = { vobj('начать','{Начать}.') },
        act = function()
            put(pers,rm1);
            lifeon(pers);
            take(stopwalk,me());
        return goto('rm1');
    end,
};
rm1 = room {
    nam = 'Комната 1',
    dsc = 'Первая комната',
    way = {'rm2'},
};
rm2 = room {
    nam = 'Комната 2',
    dsc = 'Вторая комната',
    way = {'rm1','rm3'},
};
rm3 = room {
    nam = 'Комната 3',
    dsc = 'Третья комната',
    way = {'rm2','rm4'},
};
rm4 = room {
    nam = 'Комната 4',
    dsc = 'Четвертая комната',
    way = {'rm3'},
};
pers = obj {
    nam = 'Персонаж',
    _stop = false,
    dsc = '{Персонаж} стоит передо мной',
    act = code[[goto(persdlg)]]; --Тут включается диалог
    life = function(s)
        if not s._stop then
            move(pers,here());
        end
    end;
};    
persdlg = dlg {
    hideinv = true;
    nam = 'Диалог',
    dsc = '',
    obj = {
    
        [1] = phr('Подожди здесь',[[Ладно. Я буду ждать тут, возвращайся скорее.]],[[pon(2);pers._stop = true;goout();]]),---хреново как-то работает(
        [2] = _phr('Пойдем со смной',[[Хорошо, я буду рядом.]],[[pon(1);pers._stop = false;goout();]]),
        };
};
stopwalk = obj{
    nam =  function()
        if pers._stop then p 'Перс стоит';
        else p 'Перс идет';
        end
    end;
    tak = 'Я взял штуковину',
    inv = function()
        if pers._stop then p 'Стоит';
        else p 'Идет';
        end
    end;    
};    

Post's attachments

Attachment icon main.lua 1.86 kb, 143 downloads since 2014-01-29 

1,221

Re: Вопросы по программированию игр

1) персонаж заходил в диалоги (добавил проверку  not isDialog()
2) персонаж ходил всегда, а не только при переходе из комнаты в комнату (проверка player_moved())
3) персонаж не удалялся из прошлой комнаты (3й параметр в move)

В остальном - как то заработало. Хотя вместо _stop я бы убирал персонажа из life (lifeoff)

P.S. goto не надо использовать - теперь это walk. Ну и goout и прочие.

Post's attachments

Attachment icon main.lua 1.92 kb, 136 downloads since 2014-01-29 

1,222 (edited by Asysyay 2014-01-29 14:36:58)

Re: Вопросы по программированию игр

Спасибо! Теперь вроде все работает, про not isDialog() не знал, да и не подумал даже) И как удалять из предыдущей тоже.

1,223

Re: Вопросы по программированию игр

Добавил описание is* функций в док-цию.

Re: Вопросы по программированию игр

Не знаю, где еще написать,  но, может быть, в скором времени выложу одну игру, и вы меня снова запинаете :3 потому что в совершенствовании кода я не продвинулась ни на грамм)) но это не важно, потому что сюжетка работает, важно одно - я так особо и не поняла как сделать так, чтобы сохранения работали, какие именно переменные надо пихать в глобал?

1,225

Re: Вопросы по программированию игр

Правило простое: ВСЕ переменные должны быть или global (если они глобальные) или var -- если они принадлежат объектам и комнатам. Если игра простая - в крайнем случае - можно запретить сохранения.