RPG Maker - Обновление плагина Phileas's Pointer Picture Trigger1
Плагин позволит вам легко сделать игровой интерфейс, паззлы, мини-игры и другое!




Команды плагина
Описание плагина
Срабатывание переключателя, переменной или общего события при действиях указателя с картинкой: наведение, уведение, клик, нажатие.
Плагин предоставляет команды:
Назначить - назначает обработчик на один тип действия с картинкой.
Удалить действие - удаляет обработчик одного действия с картинкой.
Удалить все действия - удаляет все обработчики картинки.
Все те же команды для глобальных триггеров (они назначаются сразу всем картинкам).
Включение и выключение плагина (триггеры ставятся на паузу, но не удаляются).
На каждый тип действия можно назначить свой обработчик, они будут работать независимо.
Например, можно на одну картинку назначить два переключателя: на Enter и на Click.
После удаления картинки все привязанные к её номеру триггеры тоже удаляются.
Обновление
Недавно обновил до версии 1.8.0. Теперь опционально можно задавать ID картинки через переменную.
Демо-проект
Скачать
Лицензия
Этот плагин распространяется по лицензии MIT.
Это означает, что вы можете свободно использовать плагин в некоммерческих и коммерческих играх и даже редактировать его.
Но обязательно укажите меня в титрах!
Совместимость
Несовместим с плагином ButtonPicture. Однако он вам точно не понадобится, так как мой плагин предоставляет весь его функционал и даже больше.
Если будут проблемы - пишите мне.
BobaVim — браузерная игра для изучения и тренировки движений в Vim (режимы соло и 1 на 1)
Всем привет,
Я только что запустил BobaVim — браузерную игру, которая помогает освоить и практиковать движения в Vim через увлекательные задания и соревнования.
Можно играть в одиночку для тренировки или соревноваться с другими игроками в режиме 1 на 1 в реальном времени. В игре есть:
Учебник и справочник
Таблица лидеров для отслеживания прогресса
Уровни, сфокусированные на реальных Vim-командах
Этот проект — моя небольшая дань уважения Браму Муленаару, создателю Vim. Его труд и философия вдохновили меня на создание этого инструмента для сообщества.
Я разработал игру на HTML, CSS, JavaScript и Go, и заодно многому научился — от клиентского предсказания до обработки конкуренции и многопользовательской синхронизации в реальном времени.
Ссылки:
Сайт игры: https://www.bobavim.com/
Демонстрация геймплея: https://www.youtube.com/watch?v=vrwJ3-c9ptE
Буду рад отзывам, вопросам или предложениям по улучшению!
Florent
RPG Maker - темы статей
Думаю, что вам рассказать о разработке игр на RPG Maker. В этом движке я наиболее компетентен. Что вам самим интересно? Я открыт к предложениям!
RPG Maker MV/MZ - Как можно в переменную взять игровое время (время, проведённое в игре) с последнего сохранения?
Это можно сделать с помощью команды Выполнить скрипт в событии. Ниже скрипт для MZ с комментариями.
// Для красоты вынес перевод строки времени в кол-во секунд в отдельную функцию.
function convertStringToSeconds(time) {
const array = time.split(":");
return (parseInt(array[0], 10) * 60 * 60) + (parseInt(array[1], 10) * 60) + parseInt(array[2], 10)
}
// Устанавливаем номер переменной, в которую хотим записать значение.
const varId = 1;
// Фиксируем текущее игровое время.
const currentSeconds = $gameSystem.playtime();
// Проверяем, есть ли сохранения.
if (!DataManager.isAnySavefileExists()) {
$gameVariables.setValue(varId, currentSeconds);
} else {
// Определяем индекс последнего сохранения.
const lastSaveFileId = DataManager.latestSavefileId();
// Получаем данные об этом сохранении (нам даже не нужно грузить всё сохранение).
const saveInfo = DataManager._globalInfo[lastSaveFileId];
// Вычисляем, сколько секунд игры было в последнем сохранении.
const lastSeconds = convertStringToSeconds(saveInfo.playtime);
// Вычисляем разницу.
const deltaSeconds = currentSeconds - lastSeconds;
// Записываем в переменную.
$gameVariables.setValue(varId, deltaSeconds);
}
Учтите, что так мы можем получить отрицательное число. К примеру, если поиграем час, запишем сохранение, а потом начнём новую игру, текущее игровое время будет меньше времени в последнем сохранении.
Версия для MV:
function convertStringToSeconds(time) { const array = time.split(":"); return (parseInt(array[0], 10) * 60 * 60) + (parseInt(array[1], 10) * 60) + parseInt(array[2], 10) }
const varId = 1; const currentSeconds = $gameSystem.playtime();
if (!DataManager.isAnySavefileExists()) { $gameVariables.setValue(varId, currentSeconds); }
else {
const lastSaveFileId = DataManager.latestSavefileId();
const saveInfo = DataManager.loadGlobalInfo()[lastSaveFileId];
const lastSeconds = convertStringToSeconds(saveInfo.playtime);
const deltaSeconds = currentSeconds - lastSeconds;
$gameVariables.setValue(varId, deltaSeconds);
}
Если нужны какие-то данные, которых нет в информации о сохранении, придётся грузить файл сохранения. Это можно сделать так:
// Устанавливаем номер переменной, в которую хотим записать значение.
const varId = 1;
// Проверяем, есть ли сохранения.
if (!DataManager.isAnySavefileExists()) {
$gameVariables.setValue(varId, 0);
} else {
// Определяем индекс последнего сохранения.
const lastSaveFileId = DataManager.latestSavefileId();
// Получаем имя файла этого сохранения.
const saveName = DataManager.makeSavename(lastSaveFileId);
// Загружаем данные из файла.
StorageManager.loadObject(saveName).then(contents => {
// Данные в contents. Обрабатываем их, как нужно.
return 0;
});
}
На смежные и схожие вопросы могу ответить в этом треде.
RPG Maker MV/MZ - Добавление языковых локализаций в завершённый проект
Вступление
Я разработал плагин для языковых локализаций, здесь описание поподробнее. Постепенно буду добавлять в него функционал. Если вам нужна какая-то конкретная функция, напишите идею в теме плагина. Также обращу внимание, что в плагине есть функционал по экспорту языковых данных в Excel-таблицу и импорту из неё.
Важный совет. Если вы допускаете, что в вашей игре будет более одного языка (возможно, не сразу, но в будущем), лучше сразу разрабатывать с учётом локализаций. То есть нигде в редакторе не используйте захардкоженный текст, только теги из файлов локализации. Сначала можно прописать только один язык, потом по надобности добавлять другие. Тогда вам не придётся мучаться с экспортом текста из игры.
Тем не менее, иногда может потребоваться внедрить локализации в уже готовую игру.
Как-то раз я выполнил такой заказ для игры на RPG Maker MV. Вероятно, решение прокатит и на MZ. Если не сработает, напишите в этой теме.
Задача
Экспортировать текст из игры в JSON.
Сконвертировать JSON в XLSX и отправить получившуюся таблицу переводчику.
Дождаться готового перевода в XLSX формате.
Конвертировать новую таблицу в JSON и внедрить новый язык в проект.
Формат JSON поддерживает произвольную структуру данных. Объекты, массивы, любой уровень вложенности. При этом переводчик с JSON работать не хотел, нужно было ему обеспечить таблицу. Поэтому я решил для хранения данных локализации использовать один JSON-файл с плоским объектом. То есть был только один объект в корне файла, и каждое его свойство было текстовым. Никаких вложенных объектов.
Инструкция
Сначала нужно экспортировать текст из проекта. Я написал скрипт, который находит все диалоги (команда "Показать сообщение"), извлекает из них текст и сразу генерирует JSON-файл с нужной структурой. Вот он.
Этот скрипт написан на JS. Чтобы его исполнить, можно установить Node.js и запустить скрипт командой node export-localization.js
Можно также переписать скрипт на python, bash или другой язык и исполнить удобными вам инструментами. В принципе, скрипт несложный (даже примитивный).
В результате мы получим файл с таким содержимым:
{
"<тег>": "<реплика>"
}
Теперь забиваем в поисковик: "json to xlsx". Берём любой понравившийся сервис. Например, этот.
Скорее всего, мы получим таблицу с 2 строками и большим количеством столбцов. Переводчику будет неудобно работать с такой. Он ожидает 2 столбца: в одном теги, в другой - текст, который нужно перевести (переводчик либо будет редактировать этот столбец, либо добавит новый).
Если у вас получилось так, то просто транспонируйте получившуюся таблицу. Это можно сделать и в Esxcel, и в LibreOffice, и в Google Sheets. Не знаете, как? Поищите в интернете, это несложно (конкретная кнопка зависит от инструмента, поэтому тут не пишу, но она точно есть).
Отправляем таблицу переводчику, ждём перевода.
Теперь новый XLSX нужно конвертировать в JSON. Сначала транспонируем таблицу, чтобы у нас было 2 строки и множество столбцов.
Вбиваем в поисковик: "xlsx to json". Опять берём любой подходящий сервис, вроде этого. Конвертируем, получаем новый json-файл.
Переименовываем новый JSON-файл, как нам нужно ("en.json", "ru.json" и т.д.).
Вставляем в проект, добавляем язык в параметры плагина локализации (здесь конкретные действия зависят от используемого плагина).
Заключение
Возможно, это не лучший способ: придумывал его в спешке на коленке. Если у вас есть альтернативные идеи, прошу написать в этом треде.
Самое ценное в этой статье - скрипт на экспорт текста, обратите на него внимание. У DK есть инструмент, который извлекает весь текст из игры, но он не генерирует JSON-файл с нужной структурой и уникальными тегами (очень важно, чтобы теги были уникальными).
Надеюсь, мне удалось достаточно раскрыть тему, остались ли вопросы?