08 сентября 2011

Проекты новые... проекты старые...


 Давненько здесь не отписывался. По давней привычке, снова всё свалю на лень.
 Попробую оправдаться... Почему не отписывался летом? Ну... жарко было, не выносимо жарко было, при такой жаре невозможно(и совсем не охота) сидеть, голова работать отказывается... Можно же было это делать и ночью? Лето такое время, когда ночью дома бываешь достаточно редко. С летним временем закончил, теперь осень. Почему и осенью опять пусто? Учёба! опять же нехватка времени. Так... процесс оправдывания себя затянулся, перехожу собственно к теме.

 Начну со старых проектов. Их, значимых, у меня лишь в количестве один. Известный по предыдущим постам Дед-матч. С этим проектом дела обстоят весьма печально. Продвижений никаких. Задумывалось улучшить редактор карт. Сохранять карту собирался в виде скриптов. Пока не пробовал, поэтому отрицательных моментов данного подхода не вижу. Так же собирался добавить новых карт, сюжетец и перевести геймплей из зачаточного состояния хотя ьы в эмбриональный. НО! этот проект мне трогать лень. Хотя, определённая симпатия(симпатия к проекту? - что то новое) к нему осталась. Так что НЕ ФАКТ, что он загнётся.

 Вторая часть сообщения: проекты новые.
 Новых проектов у меня целых "два штука":
  • игрушка;
  • редактор диалогов;
Поступлю начатым в этом посту способом - начну с конца.

Редактор диалогов.

 Появилась задача - написать редактор диалогов. Диковинная для меня вещь! тут же полез в гугл посмотреть - что же они из себя вообще представляют. Сам я никогда подобным "инструментом" не пользовался. Выход подсказал подавший идею написания данного редактора - попробовать редактор из NW. В это чуда я доселе не играл, поэтому пришлось обойтись скриншотами. Это оказалось вполне достаточными. На второй день(или через пару дней... забыл!) на "формошлёпил"(бррр... всё таки не люблю это слово) черновой интерфейс. Потом короткий срок ничегонеделанья. Хотя... вру! думал в каком виде всё это генерировать в скрипт. Очень помогла статья Лампоглового. За это ему отдельное спасибо. Скрипт-файл теперь имеет подобный же вид:

function main(QuestIndex)
    if QuestIndex == 1 then
        Set_QuestionText('Итак, ты уже изучил Lua?');
        Add_Answer(2, 'Конечно!');
        Add_Answer(3, 'Не-а');
        Add_Answer(4, 'Вообще ничего не ясно.');
    elseif QuestIndex == 2 then
        Set_QuestionText('Молодец! Надеюсь, эти демо тебе помогли...');
        Add_Answer(5, 'Да, всё круто!');
        Add_Answer(4, 'Ерунда всё это');
    elseif QuestIndex == 3 then
        Set_QuestionText('Жаль, недеюсь, всё еще получится.');
        Add_Answer(4, 'Я тоже надеюсь');
        Add_Answer(5, 'Да я не переживаю, и без Lua справлюсь');
    elseif QuestIndex == 4 then
        Set_QuestionText('Перечитай всё заново - может станет яснее?');
        Add_Answer(1, 'Ок, попробую');
    elseif QuestIndex == 5 then
        Set_QuestionText('Я рад, удачи!');
        Add_Answer(1, 'Ага, и тебе...');
    end;
end; 

Но! с паскаль синтаксисом. Я же всё таки использую PascalScript(может статейку-урок написать?).
 Вопрос - чем смотреть созданный диалог? особо заморачиваться не стал и "вьювер" сдела точь-в-точь как в указанной выше статье.
 Сам редактор получился достаточно жалким(походу, перегибаю с самобичеванием), но скрин показать обязан:

Логика редактора достаточно проста - за вопросом следует ответ, за ответом - вопрос. После ответа может быть лишь один вопрос. То что после ответа нельзя добавлять ответ - учтено, после вопроса - вопрос - то же.
Чтобы не было пусто приведу участок кода генерирующий скрипт, сделан достаточно "ахово", но работает и я пока доволен:

{ процедура Add = memo.lines.add}
var
  i, j: integer;
  node: TTreeNode;
  nChild: TTreeNode;
begin
  memo.Clear;
  Add('begin');
  for i := 0 to editor.Items.Count - 1 do
  begin
    node := editor.Items[i];
    if node.ImageIndex = 1 then
    begin
      Add(' if QuestIndex = ' + ' ' + IntToStr(node.AbsoluteIndex) + ' ' +
        ' then');
      Add(' begin');
      Add('  SetQustionText(''' + node.Text + ''');');
      if node.Count > 0 then
        for j := 0 to node.Count - 1 do
        begin
          nChild := node.Item[j];
          if nChild.Count = 1 then
            Add('  Add_Answer(' + IntToStr(nChild.item[0].AbsoluteIndex) + ', ' +
              '''' + nChild.Text + ''');');
          if nChild.Count = 0 then
            Add('  Add_Answer(' + IntToStr(0) + ', ' + '''' + nChild.Text +
              ''');');
        end;
      if i = editor.Items.count then
        Add('end;')
      else
        Add(' end else');
    end;
  end;
  memo.Lines[memo.Lines.Count - 1] := ' end;';
  Add('end.');
end;


Поглумлюсь сам над собой - код написан давно(в конце лета сего года), так что я сам уже не совсем понимаю что там и к чему. Исходник редактора + EXE(+просмотрщик) тут.

  Игрушка
Здесь дальше идеи и пары зарисовок не пошло, даже название не придумал. Да и основной целью является не конечный продукт, а сам процесс. Идея банальна -  сверху экрана что падает, игрок снизу экрана как-то пытается на это повлиять. К подобному описанию можно отнести как тетрис так и арканоид, да ещё и кучу "простеньких" игр. Моя задумка - игрок управляет священнослужителем. Стоит внизу экрана, якобы на дорожке. На него сверху вниз прут по той же якобы дорожке два типа людей - грешники и праведнки(или как их назвать?). Праведников пропускаем мимо - пусть идут. Грешников, пока они не скрылись, благословляем - ставим на путь истинный. За каждого исповеданого - бал, за каждого пропущенного - бал отымаем. К этому проекту у меня идей достаточно много, главное их не забыть. Так как реализация представляется довольно таки простой, то постараюсь сделать на две платформы - PC, mobile. Под ПК - конечно же Delphi, а под мобильники - ну куда же я денусь? MidletPaslcal.

О результатах в ближайшем будущем постараюсь отписаться. На этом и окончу сообщение.

4 комментария:

  1. Молодец, что постишься и слушаешь радио Радонеж :)

    "То что после ответа нельзя добавлять ответ - учтено"
    Напрасно.
    Многоуровневые диалоги, видимо, тебе незнакомы?

    Например
    Непись: Чего изволите?
    Игрок: "Хочу узнать ..." и после выбора появляется еще n варианта окончания фразы:
    "... где найти торговцев в городе, где они", "где можно остановиться на ночь?" и так далее.

    if QuestIndex == 1 then
    ...
    Не самая лучшая структура. Задумался бы над иной.

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

    ОтветитьУдалить
  2. perfect daemon
    "Многоуровневые диалоги, видимо, тебе незнакомы?"
    А это не то что показано на скриншоте? если нет, то к сожалению не знаком.

    "Не самая лучшая структура. Задумался бы над иной."
    Раньше не имел дела как с диалогами так и со скриптами, так что совсем не представляю как можно было бы ещё сделать. Если есть ссылка на подобную тематику - был бы весьма благодарен=) Вообщем, мне ещё достаточно повезло, что есть статья Лампоголового.

    "Молодец, что постишься"
    Спасибо, что откомментировал)

    ОтветитьУдалить
  3. Ulop, молодец, что вернулся! а то давно не было известий от тебя!

    редактор выглядит классно - просто и понятно... хочется игровой демки с диалогами (чтоб со смыслом)!

    по игре готово уже что-нибудь? интересно глянуть!

    ОтветитьУдалить
  4. Lampogolovii
    "Ulop, молодец, что вернулся! а то давно не было известий от тебя!"
    да( давненько я всё таки здесь не отписывался, надо бы это делать почаще.

    "редактор выглядит классно - просто и понятно..."
    Спасибо) правда, как говорил perfect daemon - не помешали бы и многоуровневые диалоги. До меня всё таки дошло, что он имел ввиду) но, думаю на первых порах можно обойтись и подобным.

    "хочется игровой демки с диалогами (чтоб со смыслом)!"
    эм... да, это тоже бы не помешало) только как то маловато опыта у меня составлять добротные демки.

    "по игре готово уже что-нибудь? интересно глянуть!"
    А тут как то всё печально... нашёл немного арта. Хотелось бы конечно свой, но скил художника у меня всё же маловат. Для PC - пока сделал лишь пустой проект, выложил основные компоненты. Для Mobile - сделал передвижение ГГ. Больше почти ничего.

    Вот так вот получилось - наобещал, а в итоге почти с места и не сдвинулся.

    ОтветитьУдалить