Плохо! Плохо!:  0
Показано с 1 по 3 из 3

Тема: KINGPIN ( + Бонус)

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию KINGPIN ( + Бонус)



    Рабочее название: KINGPIN
    Жанр: упрощенная стратегия, текстовой квест, настольная игра.
    Автор: Darchan Kaen
    Движок: RPG Maker MV
    Графика: с бесплатных хостингов картинок Интернета.
    Музыка: с бесплатных хостингов музыки Интернета (а именно — общедоступные композиции Checkie Brown).
    Звуки: RTP.
    Время прохождения: 10-60 минут
    Время выхода: 24.04.2021 (завершена)
    Версия: 1.1.0

    Описание:
    Ваша маска: вы — Роберт Дуитмэн, бизнесмен средней руки, меценат, филантроп.
    Ваша тайна: на самом деле вы — глава преступного клана «Треф», по ту сторону закона более известный как «Кингпин».
    А еще вы скрываете от членов клана, почему именно сейчас вы начали бурную деятельность по переделу власти в Городе…

    Особенности:
    - Упрощенный клон игры «Reigns» в нуарно-криминальном сеттинге.
    - Суммарно, 100 Карточек событий (большая часть из них открываются поэтапно).
    - Атмосфера (но это не точно).
    Недостатки:
    - Дичайший, неконтролируемый рандом и возможность проиграть при неверном выборе.
    - Ограниченные сохранения и загрузка.
    - Однообразный игровой процесс и, возможно, опечатки.

    Спойлер Скриншоты:



    Спойлер Видео:



    Внимание!
    Мышка не поддерживается!

    Спойлер Управление:
    Клавиатура:
    Стрелка влево — выбор Левого варианта (или перемещение влево в меню).
    Стрелка вправо — выбор Правого варианта (или перемещение вправо в меню).
    Стрелка вверх — вызов меню Собственности и Кризисов.
    Стрелка вниз — вызов меню Помощи и Выбора музыки.
    Клавика ESCAPE — отмена выбора и вызов/закрытие меню.
    Клавиша ENTER — подтверждение в меню/диалоге выбора.

    Геймпад:
    Стик/крестовина геймпада влево — выбор Левого варианта (или перемещение влево в меню).
    Стик/крестовина геймпада вправо — выбор Правого варианта (или перемещение вправо в меню).
    Стик/крестовина геймпада вверх — вызов меню Собственности и Кризисов.
    Стик/крестовина геймпада вниз — вызов меню Помощи и Выбора музыки.
    Y геймпада — вызов/закрытие меню.
    B геймпада — отмена выбора.
    A геймпада — подтверждение в меню/диалоге выбора.


    Спойлер Ссылка на загрузку:
    ВЕРСИЯ 1.1.0 (~140 МБ архив, ~235 МБ папка):
    https://www.mediafire.com/file/ax87u...1.1.0.zip/file


    Спойлер Благодарности:
    Нейтральной полосе (rpgmaker.su) за моральную поддержку.
    Гаминатору (gamin.me) за конкурс.
    Арлекину за информацию о конкурсе (и баге).
    Веселому Роджеру — за вдохновение!
    Imaginatium - за убеждение (легкое, но решающее) сделать таки иконки Параметров, а не просто числа.
    Digre - за чудесный плагин, без которого данный проект был бы невозможен (да и другие мои проекты тоже)!
    Администрации rpgmakerunion.ru - за размещение игры и скриншоты, стянул у вас. =)


    P.S:
    Публикую здесь, так как Нейтральная полоса помогла созданию данного проекта - за что большое спасибо.
    А также как лишнюю демонстрацию, что на мейкере можно делать не только РПГ.
    И, так как проект разрабатывался специально для конкурса Гаминатор 2021, прошу не учитывать его в мероприятиях типа "Проект квартала / года".
    Контент для данного проекта добавляться не будет.
    Последний раз редактировалось Darchan Kaen; 20.05.2021 в 23:51. Причина: Доофрмление

  2. #2
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Небольшой бонус.
    Если кому-то интересно, как сделать нечто подобное.
    «Behind the scene», так сказать.

    Спойлер Behind the scene:

    Спойлер Кратко:
    1. Опция «Выход из игры» добавляется плагином «ExitGame» от Brian Howard.
    2. Пункты игрового меню меняются плагином «YEP_MainMenuManager» от Yanfly.
    3. В инвентаре типы предметов «Оружие» и «Броня» убираются плагином «Ruyk_AddTypeItem».
    4. Для визуального отображения всех текстов (кроме Вступления) используется плагин «ScreenVariables» от Digre.
    5. Иконки Параметров показываются стандартными командами мейкера для работы с изображениями.
    6. 99% игры построено на использовании Общих событий.
    7. Все Карточки событий подгружаются из внешних JSON-файлов.
    8. Рандом генерируется в мейкере и применяется к Списку Карточек события, загруженному из внешнего JSON-файла.
    9. Управление стрелками/геймпадом – тоже стандартное мейкеровское.


    Спойлер Подробно про «сердце» игры – обработка Карточек событий из внешних файлов:

    Для повышения гибкости разработки я решил не жестко прописывать все 100 Карточек событий в самом мейкере, а сделать систему загрузки «логики игры» из внешних источников…Ведь редактировать, по сути, текстовые файлы быстрее и проще, чем копаться в эвентах мейкера (для текстовой игры, во всяком случае). А так как MV (ну и MZ) основаны на JavaScript, то JSON для мейкера прямо таки родной формат.

    Короче говоря, у меня получилось сделать простенький «интерпретатор», позволяющий читать JSON-файл и на основании его данных что-то в мейкере крутить – менять текст, картинки, включать/выключать Переключатели, добавлять/отнимать Предметы, выбирать следующий файл для открытия и, что самое главное, вызывать Общие события.

    Логика работы такая:
    1. Рандомом выбираем, какой файл открыть первым.
    2. Открываем JSON-файл.
    3. Записываем его в переменную, целиком.
    4. Парсим поля JSON-файла из переменной п.2 , записывая их значения в отдельные переменные.
    5. Анализируем каждое поле (простыми условиями мейкера, например) и на его основе что-то делаем – отображаем текст, изменяем переменные, Общим событием открываем новые Списки карточек...
    6. Рандомом выбираем, какой файл открыть следующим.
    7. Повторяем, пока по внутренним критериям игра не закончилась.

    Сами JSON-файлы, в данном случае, делятся на два типа:
    1) Списки, в которых находятся массивы с номерами Карточек событий.
    2) Карточки событий, на основе которых меняется поведение игры.
    Списки позволяют динамически подгружать номера доступных Карточек событий (и удалять их).

    Спойлер Пример JSON-файла стартового Списка:

    {
    "eventsCardsIndexes": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 21, 22, 700]
    }


    Спойлер Пример JSON-файла Карточки события:

    {
    "eventIndex":"1",
    "eventIsUnique":"0",
    "eventName":"Нужны патроны",
    "eventText":"Шеф, у нас маловато боеприпасов.\nМожет купим пару ящиков патронов?",
    "eventPersonName":"Центурий",
    "eventImageIndex":"1",
    "eventLeftActionText":"Нет, \nстреляйте \nточнее.",
    "eventRightActionText":"Хорошо, \nящика так \nтри...",
    "eventLeftActionNextCardIndex":"0",
    "eventRightActionNextCardIndex":"0",
    "eventLeftActionMightValue":"-10",
    "eventLeftActionMoneyValue":"0",
    "eventLeftActionPoliceValue":"0",
    "eventLeftActionReputationValue":"0",
    "eventLeftActionPowerValue":"0",
    "eventLeftActionWeeksValue":"-1",
    "eventRightActionMightValue":"10",
    "eventRightActionMoneyValue":"-10",
    "eventRightActionPoliceValue":"0",
    "eventRightActionReputationValue":"0",
    "eventRightActionPowerValue":"0",
    "eventRightActionWeeksValue":"-1",
    "eventLeftActivateSwitch":"0",
    "eventRightActivateSwitch":"0",
    "eventLeftDeActivateSwitch":"0",
    "eventRightDeActivateSwitch":"0",
    "eventLeftCallCommonEvent":"0",
    "eventRightCallCommonEvent":"0",
    "eventLeftAddItem":"0",
    "eventRightAddItem":"0"
    }


    Спойлер Код скрипта для открытия JSON-файлов:

    var xhr = new XMLHttpRequest();
    src = 'eventsCardsIndexesList.json'; var url = 'gameCards/' + src;
    xhr.open('GET', url);xhr.overrideMimeType('application/json');
    xhr.onload = function() {
    if (xhr.status < 400) {
    let eventsCardsIndexesList = JSON.parse(xhr.responseText);
    $gameVariables.setValue(21, eventsCardsIndexesList['eventsCardsIndexes']);
    }};xhr.send();

    («gameCards» - название каталога с JSON-файлами, должен быть в корне каталога проекта)


    Спойлер Пример скрипта парсинга данных JSON-файла Карточки события:

    $gameVariables.setValue(41, parseInt(
    $gameVariables.value(33)['eventIndex']));
    $gameVariables.setValue(42, parseInt(
    $gameVariables.value(33)['eventIsUnique']));
    $gameVariables.setValue(43,
    $gameVariables.value(33)['eventText']);
    $gameVariables.setValue(44,
    $gameVariables.value(33)['eventPersonName']);
    $gameVariables.setValue(45, parseInt(
    $gameVariables.value(33)['eventImageIndex']));


    Спойлер Код скрипта для выбора случайного номера Карточи события из Списка:

    let eventsCardsIndexesList = $gameVariables.value(21);
    let radomCardIndex = Math.floor(Math.random() * (eventsCardsIndexesList.length));
    let chosenCardIndex = eventsCardsIndexesList[radomCardIndex];
    $gameVariables.setValue(31, chosenCardIndex);


    Спойлер Код скрипта для удаления номеров карточек из массива Списка:

    let eventsCardsIndexesList = $gameVariables.value(21);
    let currentEventCardIndex = $gameVariables.value(41);
    let currentEventCardIndexInList = eventsCardsIndexesList.indexOf(currentEventCardInd ex);
    eventsCardsIndexesList.splice(currentEventCardInde xInList, 1);
    $gameVariables.setValue(21,eventsCardsIndexesList) ;

    (для случаев если Карточка события уникальная и не должна повторяться)


    Это если тезисно.
    Проект не зашифрован – кому интересно, открывайте и смотрите.
    Код, написанный выше, объективно не оптимален и приведен как отправная точка.
    Номера переменных в примерах скриптов меняйте на ваше усмотрение.

    В целом, подход чтения внешних файлов для построения логики игры может быть удобен для игр текстового типа – текстовых квестов, визуальных новелл, настольных игр…
    Спойлер Процитирую себя же, что умеет маленький интерпретатор в данном проекте:
    Интерпретатор "умеет" динамически:
    - В целом, маппить данные файла в переменные мейкера;
    - В частности - текст Карточки, текст ответов, влияние ее на Параметры (+, -);
    - Отображать картинку Карточки;
    - Добавлять новые массивы Карточек и удалять из текущего массива "Уникальные";
    - Вызывать Связанные Карточки для создания последовательности событий (а-ля Текстовой квест);
    - Включать / выключать переключатель мейкера;
    - Вызывать общее событие мейкера;
    - Давать / забирать предмет.
    Ничего сверхъестественного, но это позволяет создавать события не открывая сам мейкер - а только редактируя внешние JSON-файлы.


    Надеюсь, что-то новое вы узнали.

    Спасибо что прочитали. =)

    Спойлер Вопросы к вам...:
    ...В процессе написания данного поста я понял, что работу с JSON-файлами и маппинг их на переменные мейкера можно чуть упростить, написав для этого плагин.
    Так вот, вопросы:
    1. Будите ли вы применять технику чтения JSON-файлов и нужен ли вам плагин для этого?
    2. Нужно ли более подробное объяснение, как и что работает в проекте?

    Также подчеркну, что технически можно не только читать из JSON-файлов, но и записывать в них информацию...Этакие "мета-данные", независимые от сохранения - и такой плагин, на запись, даже есть.




    Последний раз редактировалось Darchan Kaen; 21.05.2021 в 00:05. Причина: Добавил вопрос в Бонусе

  3. #3
    Бывалый Аватар для Zliuka
    Информация о пользователе
    Регистрация
    15.08.2016
    Адрес
    Расчленинбург
    Сообщений
    893
    Репутация: 53 Добавить или отнять репутацию

    По умолчанию

    Я играл и даже победил. Роджер похожее делал. Симулятор лорда тьмы.
    Музыка приятная. Картинка симпатичная. Играть за босса мафии мне понравилось.
    В целом, сделано не плохо, но к сожалению такие игры - не моё. Я имею ввиду рандом и карты.
    ================================================== =
    Вообще, ты красавчик, пять проектов за пять месяцев!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
KINGPIN ( + Бонус)