Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save orivej/6640076 to your computer and use it in GitHub Desktop.

Select an option

Save orivej/6640076 to your computer and use it in GitHub Desktop.
Модель лаборатории Lonesome October

Модель лаборатории Lonesome October

Объектный мир

У игрока маленький набор первичных ингредиентов в ограниченном количестве; с некоторыми из них связаны действия для получения производных ингредиентов.

Есть неистощимый запас нескольких видов воды, и инструментов для обработки ингредиентов.

Все действия атомарны. Виды действий:

  • обработать ингредиент
  • поместить ингредиент в котёл
  • залить котёл водой
  • нагревать
  • перемешивать
  • слить всё из котла
  • перелить из котла в колбу
  • употребить (для каждого препарата особое действие)

Общение с сервером

Данное API предварительно, можно корректировать.

GET /api/lab/state

Возвращает JSON с полным описанием состояния лаборатории (всё, на что влияет игрок). (Я привожу здесь YaML; в JSON можно сконвертировать, например, на http://yamltojson.com/)

ingredients:
  задние ноги лягушки: 2
  крысиный хвост: 1
  измельчённый крысиный хвост: 1
  пуховые перья совы: 1
herbs:
  зверобой продырявленный: 4
  белокудренник черный: 1
  шишки хмеля: 10
cauldron:
  - [1379689085000, pour, чистая вода]
  - [1379689100000, heat, on]
  - [1379689100000, stir, on]
  - [1379689185000, add, измельчённый крысиный хвост, 1]
products:
  мазь советника: 1
  оборотное зелье: 1
  зелье покоя: 2

Herbs - те же ingredients, но, возможно, отображаются отдельно от них. Cauldron - история котла с момента последней очистки; первое число - JS Date.

GET /api/lab/rules

Возвращает JSON с описанием не меняющихся от действий игрока правил лаборатории.

descriptions:
  мазь советника: Натереть глаза, чтобы получить подсказку или совет по интересующему вас вопросу.
  оборотное зелье: После употребления на игре вы примите чужой облик, не важно человека или животного, на 1 час.
  зелье покоя: Если вы подольете кому-либо это зелье на игре, этот герой уснет на 10 минут.
actions:
  крысиный хвост:
    измельчить:
      крысиный хвост: -1
      измельчённый крысиный хвост: +1
  пуховые перья совы:
    порвать на клочки:
      пуховые перья совы: -1
      клочья пуховых перьев совы: +1
  мазь советника:
    натереть глаза:
      мазь советника: -1
recipes:
  - caption: Мазь советника
    text: Добавить в болотную воду [0] задние ноги лягушки (2 пары) [1], измельчить крысиный хвост [2], варить [3], помешивая [4], пока смесь не станет однородной (коричневая) [5], добавить пуховые перья совы, порванные на клочки (2 шт.) [6].  Полученным составом натереть глаза, чтобы получить подсказку или совет по интересующему вас вопросу.
    steps:
      - [pour, болотная вода]
      - [add, задние ноги лягушки, 2]
      - [add, измельчённый крысиный хвост, 1]
      - [heat, on]
      - [stir, on]
      - [after, 30, brown]
      - [add, клочья пуховых перьев совы, 2]
    product: [мазь советника, 1]

Формат recipes такой, чтобы он содержал всё необходимое и клиенту (меню, анимации), и серверу (переход между состояниями, определение готовности зелья). Номера шагов рецепта в тексте позволят вставлять на их месте картинки, или, например, сияние в зависимости от наличия или отсутствия данного предмета в инвентаре. Если это не понадобится, можно их убрать.

POST /api/lab/act

Принимает JSON вида ["порвать на клочки", "пуховые перья совы"] или ["add", "клочья пуховых перьев совы", 2]. Возвращает HTTP 422, если в совершении действия отказано, и HTTP 200 в случае удачи. (После этого можно вызвать GET /api/lab/state, чтобы гарантировать синхронность сервера и клиента.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment