Доступность игр для незрячих

  1. 2 years ago

    alastochkin

    Jan 2016 User since 2016

    Здравствуйте, уважаемые участники! Хотел обратиться к вам с вопросом - насколько сложно сделать версию DLL-библиотеки INSTEAD для работы в составе плеера текстовых игр для незрячих? Объясню в чем смысл: для незрячих есть плеер парсерных игр, который заточен под работу с клавиатурой, программы экранного доступа (скринридеры), настройки для слабовидящих. Однако незрячим, как и зрячим тяжело играть в парсерные игры, хотелось бы добавить возможность играть в современные менюшные игры. Для этого требуется создать подключаемый модуль INSTEAD, примерно со следующими функциями, в псевдокоде:
    Bool InitEngine() //Инициализация движка
    Bool StartGame(String gameFile) //Начать новую игру, аналогично, сохранить и загрузить
    String GetLocationDescription() //Получить данные по текущей локации (только текст)
    StringList GetLocationLinks() //Получить список ссылок на локации в виде списка строк
    StringList GetInventory() //Получить список инвентаря в виде списка строк
    void ProcessLink(LinkId) //Обработать нажатие на ссылку по номеру или другому какому-нибудь признаку
    void ProcessAction(FirstId, SecondId)//Выполнить действие с участием двух сущностей - например инвентаря и ссылки
    Привожу скриншот, примерного интерфейса для игры "Лифтер":
    -image-

    Насколько сложно сделать такую библиотеку? Кто-нибудь сможет взяться из сообщества?

  2. peter

    Jan 2016 Administrator Земля(Москва) User since 2014

    Сделать описанное api можно, так как внутри это все делается в lua части. Но только совместимость с играми будет плохая. И необходим человек, который этим займется. Владеющий windows. Со своей стороны могу предложить помощь в виде консультаций.

  3. kerber

    Jan 2016 User since 2014

    Думается, что не стоит умножать сущности - проще и правильней портировать игры.

  4. alastochkin

    Jan 2016 User since 2016

    peter, я могу собрать библиотеку под винду, с луа движком, какой потребуется. Однако надо тогда чтобы было один интерфейсный луа файл. Тогда будет удобно использовать инстеад. Кебер, вопрос, а куда портировать?

  5. kerber

    Jan 2016 User since 2014
    Edited 2 years ago by kerber

    Прототип собран на qsp? Вот на него и портировать. Т.е. полностью переписать игру под менюшное управление по возможности сохраняя фабулу и сюжет.

  6. alastochkin

    Jan 2016 User since 2016

    Нет-нет :) На QSP просто показал расположение интерфейса, чтобы не в paint-рисовать макет. QSP плохо обрабатывается скринридерами, к тому же там 4 окна, а в каждой игре своя логика использования окон, используются кроссплатформенные библиотеки - тоже не очень удобно. У плеера AkURQ была наилучшая совместимость, однако потом все перешли на фурку, у которой она отвалилась впоследствии. Сейчас плеер работает с парсерным движком RTADS:
    -image-
    Поэтому портировать можно на RTADS, с использованием менюшной библиотеки, однако будет много ручной работы. Вот пример менюшного квеста:
    -image-

  7. alastochkin

    Jan 2016 User since 2016

    peter, а почему будет плохая совместимость с играми? Я не совсем понял...

  8. peter

    Jan 2016 Administrator Земля(Москва) User since 2014
    Edited 2 years ago by peter

    дело в том, что в инстеде много чего есть и это используется в новых играх.
    например: спрайты, таймер... метапарсер. но классические игры будут работать.
    я могу выделить ядро на си с lua частью, если это нужно, могу попробовать заняться (но не обещаю сразу и скоро, пока много работы).

    вообще, там можно вообще все на луа сделать. если поразбираешься с кодом, это возможно. epoxa опять же сделал веб версию, может ее проще озвучивать? еще есть js instead. браузер же озвучивается?

  9. peter

    Jan 2016 Administrator Земля(Москва) User since 2014

    в общем, как обстоит дело со скрин риадом в браузере?

  10. epoxa

    Jan 2016 User since 2014

    Многие игры из веба вполне играбельны в чистом тексте. Наверное, их легко озвучить ридером. Я только не понял принцип обратной связи. Каким образом игрок выбирает действие (каким предметом на какой ткнуть)?
    Возможно, кстати, то современные хтмл+цсс имеют какие-то встроенные средства упрощения озвучки. Тогда можно просто сделать специальный скин "для незрячих", и автоматически получим удобный звуковой интерфейс, как в Knoppix. Но я не изучал этот вопрос.

  11. epoxa

    Jan 2016 User since 2014

    Наверное, тут хорошо пошел бы метапарсер в режиме тотольных подсказок. Как сделано в "Кларе"

  12. alastochkin

    Jan 2016 User since 2016

    Спасибо за проявленный интерес! Отвечаю, с браузером скринридеры работают, однако нужно, чтобы страничка соответствовала стандартам для людей с ограниченными возможностями. Дело в том, что незрячие с мышью не работают, только с клавиатурой. Соответственно, навигация по страничке будет клавиатурная. Изначально, я тоже думал про web, даже отправил одного незрячего посмотреть "Драконов и принцесс" на AXMA, вот выдержка из переписки:

    Слишком много шататься надо по странице, что бы выслушать всё, что требуется. Но, играть можно без дополнительных извратов. Хотя, есть конечно моменты, которые бесят. Например: действие | описание | инвентарь
    в одну строку, а не отдельными ссылками или кнопками, что создаёт некоторые трудности. Ну и еще. Лучше бы сделать на странице метки перехода, для инструментария, самого текста и меню выбора. Эти метки на странице не отображаются, но зато позволяют незрячему легко прыгать из одного места в другое.

    . Навигация незрячими осуществляется с помощью озвучивания "классов" объектов. То есть под виндой, когда фокус ввода попадает на поле ввода, ему сначала зачитывается "поле ввода такое-то, содержимое такое-то". Все принципы очень хорошо описаны в статье: http://habrahabr.ru/post/149815/
    Насчет скина как у кноппикс, не знаю, также как и насчет метапарсера. То есть я не знаю точно насколько людям будет комфортно играть в веб-версию, большинство предпочитает десктопные приложения, для веб-версий пишутся клиенты. Мне кажется, незрячие будут играть с удовольствием, если у них будет удобный интерфейс. Вот пример аудио прохождения игры плащ тьмы на RTADS, с озвучкой скринридером: https://www.dropbox.com/s/zzd3ttnmf9v1tvs/%D0%9F%D1%80%D0%BE%D1%85%D0%BE%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%88%20%D1%82%D1%8C%D0%BC%D1%8B.wma?dl=1

  13. alastochkin

    Jan 2016 User since 2016

    epoxa, насчет выбора действия, как я понял - надо будет иметь первый список ссылок локации + кнопки инвентаря. При нажатии на кнопку локации, происходит мгновенное действие, перерисовывается окно с выводом, зачитывается. При нажатии на кнопку инвентаря, появляется всплывающее окно с копией первого списка "Выберите объект для применения". И соответсвенно, когда он выбирает из второго списка, происходит действие, перерисовывается окно. Насколько я понял, во всех играх такая механика? При нажатии на ссылку локации нельзя получить "мышку с шестеренкой"?

  14. alastochkin

    Jan 2016 User since 2016

    Вот еще выдержка из переписки с экспертом, в области технологий для незрячих:

    Когда речь идёт о "доступности" применительно к людям с ограниченными возможностями, то имеется ввиду такая вещь, как accessibility. Accessibility именно означает возможность использования какого-то продукта человеком с ограничениями, например, отсутствующим зрением, нарушенной моторикой и пр.
    То есть "приложение доступно" в контексте незрячих - это не просто приложение имеется под какую-то платформу, а приложение имеется и ещё читается программой экранного доступа.
    Чтобы сделать приложение доступным (accessible) для незрячих, следует разрабатывать его интерфейс с соблюдением определённых требований.
    Основные технологии разработки интерфейса имеют специальные средства для обеспечения их accessibility: нативные интерфейсы OS, Qt, Java, просто web - у всех них есть свои спецификации по реализации доступности.
    Если собирать интерфейс из стандартных элементов и без особенных выкрутасов, типа создания в web кнопки через div с onClick, то во многом интерфейс получается доступным без специальных усилий, так как нативные контролы уже, как правило, имеют встроенную реализацию accessibility API.
    Если же в интерфейсе используются какие-то нестандартные подходы, или при его создании в проекте не была включена поддержка accessibility, то он может получиться недоступным, так что accessibility надо будет обеспечивать дополнительными осознанными действиями, которые могут быть довольно трудозатратными.

  15. peter

    Jan 2016 Administrator Земля(Москва) User since 2014
    Edited 2 years ago by peter

    Это понятно. SDL instead вообще формально не текстовая игра, весь вывод там низкоуровневый. Ну в общем, если что - спрашивайте. Но мне сейчас кажется, что проще развивать веб версию, так как бОльшая часть работы проделана там.

  16. alastochkin

    Jan 2016 User since 2016

    peter, тогда можно к тебе feature request сделать про выделение кода с lua-частью. Когда появиться время мог бы сделать? Я код посмотрел, однако там мало комментариев, буду очень долго возиться. Лучше подожду пока ты выделишь api. У epoxa, как я понял код веб-инстеад закрытый и выполняется на сервере?

  17. peter

    Jan 2016 Administrator Земля(Москва) User since 2014
    Edited 2 years ago by peter

    Ну вообще то там все внешнее находится в gui.lua. В принципе, если ты собираешься делать остальную работу, то с lua частью тебе придется все равно разбираться.
    Изучай в .c части instead_xxx функции. А в lua части - то что находится в gui.lua. Все взаимодействие с lua частью -- это просто обмен строк в основном. Команды пользователя -- это iface:cmd(). Я со своей стороны не могу обещать сильной помощи, так как приоритет у меня на игры, на них у меня даже времени нет. Но буду иметь в виду, я все равно собирался это делать в перспективе.

    Исходники webinstead и js instead открыты.

  18. epoxa

    Jan 2016 User since 2014

    У epoxa код открытый и доступен здесь: https://github.com/epoxa/webstead
    Там как раз можно посмотреть реализацию функций GetLocationDescription, GetLocationLinks, GetInventory, ProcessLink, ProcessAction и других (называются по другому, но не суть важно). Но все это на PHP и просто взять и прикрутить к дестопному виндовс-приложению не получится.
    Я немного почитал про аксессибилити в вебе, примерно понял, как оно все работает. Но там общие принципы для взаимодействия с любой произвольной страницей. Считаю, что конкретно игры Web-INSTEAD можно сделать ещё более удобными (гораздо), чем этот обобщенный подход. Возможно, для этого будет нужно использовать не просто скринридер, а какой-нибудь плагин к файрфоксу. В крайнем случае, сделать десктопную обвязку, которая подгружает данные из веба.
    В то же время, я понял, что текущая версия Web-INSTEAD крайне недружелюбна к незрячим, и даже не из-за многословного меню, а из-за способа выбора конкретной игры (фотолента, которая сама ползет, и надо попасть мышкой в картинку).
    alastochkin Извиняюсь за вопрос, я просто далёк от темы, и хочется разобраться. Термин "слепые" нежелателен по отношению к незрячим? Неприятно целевой аудитории? Неполиткорректно?

  19. alastochkin

    Jan 2016 User since 2016

    epoxa, смотри, тебе виднее про доступность браузерной версии, тут ничего не могу сказать. Насчет десктопного клиента, я бы сделал таким образом - общался с сервером через REST-API. Тогда куча проблем отпадет сама собой, веб версия живет своей жизнью, а клиент для незрячих цветет и пахнет, без графики. Могу сделать ТЗ на такой интерфейс. Общие требования примерно следующие:
    Путь к сервисам: http://webinstead/services
    Авторизация – Basic (или без нее).
    Запросы только типа POST
    Результат запроса в формате XML
    Группы для методов:
    Методы авторизации – Auth
    Методы доступа к играм – Games
    Методы доступа к помощи – Help
    Текст выдается без разметки (plain)
    Пример реализации метода получения списка игр

    Spoiler!

    Методы работы играми Games
    Путь к методам: http://webinstead/services/Games

    String getGames()
    Цель: получить список игр.
    Параметры:
    нет
    Возвращаемое значение:
    Тег result - со значением количества игр или текст ошибки
    Тег game – описание текущей игры
    Тег game/id –идентификатор игры в базе (число, десятичное)
    Тег game/name – название игры (строка)
    Тег game/author – имя автора игры (строка)
    Тег game/descr – краткое описание игры (строка)

    Ошибки (могут быть другие):
    AccessDeniedException – авторизация неудачная.
    RepositoryException –Ошибка при доступе к БД.
    Пример:
    $ curl –u 1111:pass
    -X GET http://webinstead/services/Games/getGames
    Ответ – два игры:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <games>
    <result>2</result>
    <game>
    <id>12345</id>
    <name>Игра 1</name>
    <author>Александрова А.А.</author>
    <descr>Просто одна игра</descr>
    </game>
    <game>
    <id>65656</id>
    <name>Игра 2</name>
    <author>Метелкина Д.В.</author>
    <descr>Просто еще одна игра</descr>
    </game>
    </games>


    Так что скажи, считаешь ли ты актуальным сделать такой серверный интерфейс? Тогда я смогу его прикрутить к клиента для десктопа.
    Насчет обращения "слепой", коротко - да, считается грубым словом. Вот цитата из моей переписки:

    "слепой" в среде инвалидов по зрению считается грубым словом и должно заменяться на "незрячий". При этом, большинство специализированных библиотек официально называются "Санкт-Петербургская библиотека для слепых" и пр., а крупнейшая общественная организация - "Всероссийское общество слепых", но это никого особенно не коробит. То есть тут есть некоторая двойственность.
    Проблема слова "слепой" относится скорей к личному общению и в довольно замкнутых социальных группах, например, где много слепых с рождения, которые имеют не очень большой опыт общения в обычном обществе. Там могут прямо обижаться - "Я не слепой, я - незрячий!"

  20. peter

    Jan 2016 Administrator Земля(Москва) User since 2014
    Edited 2 years ago by peter

    alastochkin а можно поинтересоваться о личных мотивах инициативы? Это будет открытый проект? Есть какая-то личная идейная/личная заинтересованность? Дело благое, но на него нужно потратить много усилий и для этого нужно быть сильно вовлеченным в задачу (так как проект наш -- хобби). Лично мне, например, не очень хочется заниматься windows only решениями, для меня это почти синоним работы в никуда. Да и я не уверен пока, что вообще игры инстед по своей сути хороши для незрячих (ну как аркадные игры, например). Скорее всего для них идеальны cyoa игры, а не адвенчуры в INSTEAD, где нужно много и долго комбинировать предметы итд? Задача явного выделения API инстеда конечно хороша по любому (даже сама по себе), но до сих пор заинтересованные лица сами справлялись с этим (jsInstead, webinstead, андроид порт...), поэтому я пока не уверен будут ли результаты моего труда востребованными? Ведь для того, чтобы делать это дело нужен человек довольно неплохо понимающий тот же INSTEAD, а пока складывается впечатление, что всю основную работу придется делать самому, ибо кроме API возникнет много других вопросов :) И вот тут снова встает вопрос о личной заинтересованности, расскажи что-нибудь на эту тему? :) Я готов помогать, но при наличии четкого понимания статуса проекта и при понимании того, что будет кто-то, кто возьмет основную нагрузку. Сам я такую работу не потяну.

  21. Newer ›

or Sign Up to reply!