Войти на сайт

Авторизация, ждите ...
×
  • Страница:
  • 1
  • 2

ТЕМА: "Жила-была таверна" и другие игры

"Жила-была таверна" и другие игры 9 года 8 мес. назад #79023

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Для Патреона выполнен маленький перевод статьи "11 нестандартных советов для развития навыков программирования". На мой взгляд, эти советы полезны почти для любого разработчика.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, DeadElf79, Ren310, poca, Yros

"Жила-была таверна" и другие игры 9 года 7 мес. назад #79294

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Скрипт, двигающий персонажа по траектории, наконец-то готов полностью - исключая разве что настройку блокировки управления к персонажу игрока, но в задуманной игре двигать персонажа не понадобится. Теперь я буду подключать его к скрипту ношения предметов на голове, чтобы предметы запрыгивали на голову и спрыгивали с неё, а не просто исчезали на полу и появлялись на голове (или наоборот).
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Ren310

"Жила-была таверна" и другие игры 9 года 7 мес. назад #79297

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
P.S. Написание подробных инструкций к скриптам требует существенного времени, в котором я очень ограничена... Пока у меня не открыт Патреон со скриптами, написание инструкций к ним вторично по отношению к созданию самой игры. Надеюсь, я доделаю игру на майских праздниках.

А чтобы посмотреть действие скрипта про траектории, нужно в игре, расположенной в репозитории, нажать F5.
Последнее редактирование: 9 года 7 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.

"Жила-была таверна" и другие игры 9 года 7 мес. назад #79325

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Сегодня нашлось время применить наконец скрипт траекторий к практической ситуации взятия предмета - и он заработал с первого раза, посредством добавления всего нескольких строчек! Нечасто приходится ощущать это невероятное чувство.
Администратор запретил публиковать записи гостям.

"Жила-была таверна" и другие игры 9 года 7 мес. назад #79572

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Скрипты переупорядочены и разбиты на большее число листов согласно содержащимся классам и общему смыслу. В общем, так же, как я привыкла разбивать их при работе с другими проектами, например, в php.

К большинству листов добавлено описание на русском. Пока у меня нет Патреона, наверное, ничего, что описание на одном языке.

P.S. За автоматический экспорт спасибо автору "Export&Import Scripts".
Последнее редактирование: 9 года 7 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

"Жила-была таверна" и другие игры 9 года 7 мес. назад #80028

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
После неудачного участия в "Игре недели" возвращаюсь к работе над проектом. Внесла небольшие доработки в скрипт экспорта, чтобы у каждому скрипту присваивался порядковый номер, и вместе с тем чтобы при добавлении новых в список следующие не сдвигались на номер ниже (или по крайней мере не все). Жаль, git считает переименованные файлы уничтожением старого и созданием нового.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Ren310

"Жила-была таверна" и другие игры 9 года 7 мес. назад #80141

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Не знаю, будет ли это кому-нибудь интересно, но скажу: я вылила в открытый репозиторий часть фреймворка, над которым я работала с осени 2013 года; и который с зимы 2014 года служит основой для живой, работающей браузерки про покемонов. Это только частичный снимок фреймворка, без игровой логики, поскольку не было времени разобраться, которую логику можно спокойно открывать. Подробнее о фреймворке. На майских праздниках на фреймворк будет переведён весь соответствующий фансайт, а там доживём и до самостоятельной сборки.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Ren310

"Жила-была таверна" и другие игры 9 года 7 мес. назад #80292

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Теперь в игре появился холодильник (на самом деле стол), который генерирует бутылки с вином, которые можно будет взять. Как это сделано:

1) Скрипт "Comment Params" позволяет событию понимать специально сформированные комментарии типа:
#shift_z 10
...а также вызывает установщик, позволяющий дальнейшим модулям вносить изменения на основе комментариев данной страницы.

2) Скрипт "Pixel Shift" (основанный на коде, кажется, Эльфа, который я теперь не могу найти...) применяет к событию параметры shift_x, shift_y и shift_z (последнее - не высота, а приоритет, порядок отображения). Это используется для того, чтобы бутылка вина показывалась над холодильником, а не за ним.

3) Скрипт "Templates" позволяет с помощью комментариев применить к событию шаблоны - наборы параметров и поведения.

4) Скрипт "Dispenser" определяет шаблон "Раздатчик", откуда можно будет брать различные предметы.

5) На карте размещено вино-образец (событие № 8), а в событии-холодильнике комментарий сформирован таким образом, чтобы оттуда можно было брать вино и чтобы это вино было видно сразу, а не только когда возьмёшь его:
<template>
template_code=MonoDispenser
source_event_id=8
</template>

Чего я не могу понять, так это почему скрипт Free Movement считает непроходимыми тени. В упор не могу найти, какая строчка их вообще учитывает!
P.S. Потому что надо ставить последнюю версию скрипта из последнего сообщения темы, а не из верхнего. Теперь всё работает.
Последнее редактирование: 9 года 7 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: I_LORD

"Жила-была таверна" и другие игры 9 года 7 мес. назад #80368

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Решаю теперь презабавную вещь: почему несмотря на правильную работу клонирования, бутылки вина генерируются в холодельниках строго одна, а то и вовсе никаких? При этом Game_Events с уникальными айди создаются, их спрайты тоже создаются, добавляются в очередь и так далее...

В процессе у меня возник самостоятельно полезный, как мне кажется, скрипт. Далее содержимое скрипта, собранное с нескольких страниц:
class Object
 
  def to_b
    return true if self
    return false
  end
  alias :to_boolean :to_b
  alias :to_bool    :to_b
 
  def to_lazy_bool
    return false if [false, nil, 0, 0.0, '0', 'false', 'no', 'off', 'n'].include?(self)
    return true
  end
 
  def callable?
    respond_to? :call
  end
 
end
 
module Attr_processor
 
  def attr_processor(attr_name, ops={}, &body)
 
    on_change=ops[:on_change]
    attr_reader(attr_name)
    define_method attr_name.to_s+'=' do |val|
 
      var_name='@'+attr_name.to_s
      var_content=instance_variable_get(var_name)
      return var_content if var_content.eql?(val)
 
      processed=body.call(val)
      return var_content if processed.eql?(val)
 
      instance_variable_set(var_name, processed)
 
      unless on_change.nil?
        if on_change.is_a?(Symbol)
          send(on_change)
        elsif on_change.callable?
          on_change.call
        end
      end
 
    end
 
  end
 
  def attr_bool(attr_name, opts={})
    attr_processor(attr_name, opts) { |val| val.to_b }
  end
 
  def attr_lazy_bool(attr_name, opts={})
    attr_processor(attr_name, opts) { |val| val.to_lazy_bool }
  end
 
  def attr_int(attr_name, opts={})
    attr_processor(attr_name, opts) { |val| val.to_i }
  end
 
  def attr_str(attr_name, opts={})
    attr_processor(attr_name, opts) { |val| val.to_s }
  end
 
  def attr_sym(attr_name, opts={})
    attr_processor(attr_name, opts) { |val| val.to_sym }
  end
 
end
 

Подключив этот скрипт, можно писать в классах конструкции вроде:
class EventTemplate_Dispenser < EventTemplate
  extend Attr_processor
 
  attr_lazy_bool :preview_offer
  attr_int :source_map_id, on_change: :reset_prototype
  attr_int :source_event_id, on_change: :reset_prototype
 
  def reset_prototype
    @prototype=nil
  end
 
end

В данном примере когда локальная переменная @preview_offer будет задаваться через obj.preview_offer=val, то этот val будет проходить через "ленивую" конвертацию в буль (число 0, строки 'false', 'off' и так далее будет считаться ложью). А локальные переменные @source_map_id и @source_event_id не только будут приводиться к целому в такой ситуации, но и после их изменения (и только в случае, если значение поменялось!) будет вызываться метод данного объекта reset_prototype().
Последнее редактирование: 9 года 6 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer

"Жила-была таверна" и другие игры 9 года 6 мес. назад #80386

  • Iren_Rin
  • Iren_Rin аватар
  • Вне сайта
  • Мастер
  • Сообщений: 247
  • Спасибо получено: 537
  • Проект года 1 местоПрограммист RubyУчительКоммерсантПроект месяца 1 место
Годный код, но
1) Не стоит пологаться на тройное равно, оно много где переопределено, и для некоторых случаев далеко от равенства.
String === 's' #=> true
/a/ === 'abra' #=> true

2) Я бы вынес все что включено в класс Class в отдельный модуль. И когда нужно подключить такую логику для какого либо класса - подключал бы через extend. Лучше не лезть просто так в стандартные классы.
Администратор запретил публиковать записи гостям.

"Жила-была таверна" и другие игры 9 года 6 мес. назад #80392

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Спасибо за комментарий!

Интересно, не ожидала такого от тройного равенства. Я абориген php, и в нём тройное равенство - это "строгое равенство"; например, в php по обычному равенству == строка '2' равна строке '02' и числу 2, а по строгому они, конечно, не равны. php часто вменяют в вину, что 'meow'==0 и 0==false, но при этом false!='meow'. Это решается уместным применением строгого оператора ===. Но мне бы и в голову не пришло, что регулярные выражения в Руби могут тем же оператором проверять соответствие себе строки... P.S. И принадлежность объекта к классу/модулю, о Мью!

Почитаю также про extend.

P.S. Внесла исправления.
Последнее редактирование: 9 года 6 мес. назад от EvilCat.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Iren_Rin

"Жила-была таверна" и другие игры 9 года 6 мес. назад #80957

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Работа приостановлена на время отпуска (отпуск тратится на другой, более приоритетный веб-проект %) . Пока можете почитать мои переводы футуристических мини-рассказов с сайта "365 Tomorrows".
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79, Ren310

"Жила-была таверна" и другие игры 8 года 10 мес. назад #89165

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
На прошлом ГотВе я жаловалась на то, что анонимный конкурс не позволяет обсуждать проекты, так что на этом уж обязана обсуждать свой проект %) А заодно обновить состояние дневника.

"Жила-была таверна" откладывается на неопределённый срок (возможно, отменяется) в связи с тем, что она делалась на VX Ace и Руби, а теперь вышел MV с Яваскриптом, и эта комбинация понравилась мне гораздо больше. Руби - интересный язык, но либо ввиду большего знакомства с Яваскриптом, либо ввиду каких-то его особенностей преодолевать там приходилось больше, чем сейчас на МВ. Выяснять, почему растиражированная из холодильника бутылка неправильно ведёт себя в 2 из 3 случаях на Руби было совсем долго и неудобно, а на хромовом Яваскрипте отладчик гораздо лучше. Так что настолько требовательные к коду игры я если будет делать на Мейкере, то на МВ, а значит, "Таверну" нужно начинать с нуля, если захочется к ней вернуться. К тому же с тех пор на Стиме вышла фэнтезийная таверна на Мейкере, и выпускать игру в похожем сеттинге не хочется.

Поэтому - ближайшую неделю я буду заниматься игрой-заявкой на ГотВ. Из-за занятости :( моа задача не выпустить самую шикарную игру конкурса, а просто выпустить её, довести до конца. Этот конкурс для меня - на производительность, а не инновации.

Но я не устояла и начала с написания нескольких строчек кода: чтобы не копипастить событие о выходе в океан на все клетки, связывающие с океаном, я по-быстрому написала скрипт, позволяющий Common Event'а стартовать по входу игрока в регион с заданным номером (я знаю, что подобные скрипты есть для Ace, но для МВ не нашла). Скоро выложу.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79, Ren310, Демий, RastaManGames, yuryol

"Жила-была таверна" и другие игры 8 года 4 мес. назад #93221

  • EvilCat
  • EvilCat аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 850
  • 2 место 3 место ГотвУчитель
Недавно закончила перевод статьи с советами на тему сюжетов - правда, сюжетов веб-комиксов на deviantART, но эти советы кажутся мне полезными и в сюжетостроении вообще.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Демий, Ginyang
  • Страница:
  • 1
  • 2
Время создания страницы: 0.336 секунд