"Жила-была таверна" и другие игры

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад #79023 от EvilCat
Для Патреона выполнен маленький перевод статьи " 11 нестандартных советов для развития навыков программирования ". На мой взгляд, эти советы полезны почти для любого разработчика.
Спасибо сказали: AnnTenna, DeadElf79, Ren310, poca, Yros

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад #79294 от EvilCat
Скрипт, двигающий персонажа по траектории , наконец-то готов полностью - исключая разве что настройку блокировки управления к персонажу игрока, но в задуманной игре двигать персонажа не понадобится. Теперь я буду подключать его к скрипту ношения предметов на голове, чтобы предметы запрыгивали на голову и спрыгивали с неё, а не просто исчезали на полу и появлялись на голове (или наоборот).
Спасибо сказали: Ren310

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79297 от EvilCat
P.S. Написание подробных инструкций к скриптам требует существенного времени, в котором я очень ограничена... Пока у меня не открыт Патреон со скриптами, написание инструкций к ним вторично по отношению к созданию самой игры. Надеюсь, я доделаю игру на майских праздниках.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад #79325 от EvilCat
Сегодня нашлось время применить наконец скрипт траекторий к практической ситуации взятия предмета - и он заработал с первого раза, посредством добавления всего нескольких строчек ! Нечасто приходится ощущать это невероятное чувство.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 мес. назад - 11 года 1 мес. назад #79572 от EvilCat
Скрипты переупорядочены и разбиты на большее число листов согласно содержащимся классам и общему смыслу. В общем, так же, как я привыкла разбивать их при работе с другими проектами, например, в php.

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 2 нед. назад - 11 года 2 нед. назад #80292 от EvilCat
Теперь в игре появился холодильник (на самом деле стол), который генерирует бутылки с вином, которые можно будет взять. Как это сделано:

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

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

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

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

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 2 нед. назад - 11 года 1 нед. назад #80368 от EvilCat
Решаю теперь презабавную вещь: почему несмотря на правильную работу клонирования, бутылки вина генерируются в холодельниках строго одна, а то и вовсе никаких? При этом Game_Events с уникальными айди создаются, их спрайты тоже создаются, добавляются в очередь и так далее...

В процессе у меня возник самостоятельно полезный, как мне кажется, скрипт. Далее содержимое скрипта, собранное с нескольких страниц:
Code:
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

Подключив этот скрипт, можно писать в классах конструкции вроде:
Code:
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().
Последнее редактирование: 11 года 1 нед. назад пользователем EvilCat.
Спасибо сказали: strelokhalfer

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Коммерсант Проект года 1 место Учитель Проект месяца 1 место
Больше
11 года 1 нед. назад #80386 от Iren_Rin
Годный код, но
1) Не стоит пологаться на тройное равно, оно много где переопределено, и для некоторых случаев далеко от равенства.
Code:
String === 's' #=> true /a/ === 'abra' #=> true

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
11 года 1 нед. назад - 11 года 1 нед. назад #80392 от EvilCat
Спасибо за комментарий!

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

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

P.S. Внесла исправления.
Последнее редактирование: 11 года 1 нед. назад пользователем EvilCat.
Спасибо сказали: Iren_Rin

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
10 года 11 мес. назад #80957 от EvilCat
Работа приостановлена на время отпуска (отпуск тратится на другой, более приоритетный веб-проект %) . Пока можете почитать мои переводы футуристических мини-рассказов с сайта "365 Tomorrows" .
Спасибо сказали: DeadElf79, Ren310

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
10 года 3 мес. назад #89165 от EvilCat
На прошлом ГотВе я жаловалась на то, что анонимный конкурс не позволяет обсуждать проекты, так что на этом уж обязана обсуждать свой проект %) А заодно обновить состояние дневника.

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

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

3 место Готв Учитель 2 место
Больше
9 года 9 мес. назад #93221 от EvilCat
Недавно закончила перевод статьи с советами на тему сюжетов - правда, сюжетов веб-комиксов на deviantART, но эти советы кажутся мне полезными и в сюжетостроении вообще.
Спасибо сказали: AnnTenna, Демий, Ginyang

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.115 секунд
Работает на Kunena форум