Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integrating Accessibility into Open Gothic #479

Open
Nuno69 opened this issue Jul 4, 2023 · 5 comments
Open

Integrating Accessibility into Open Gothic #479

Nuno69 opened this issue Jul 4, 2023 · 5 comments
Labels
enhancement New feature or request

Comments

@Nuno69
Copy link

Nuno69 commented Jul 4, 2023

Introduction

Hello everyone. My name is Nuno and I have been working on the YAGA project which aims to make Gothic I, Gothic II/Gothic II NotR accessible and playable for blind players.
The current project is based on the Union SDK which allows me to interact with ZenGin rather easily and conveniently, however this implementation has some limitations.

  1. ZenGin is a very old engine and some things are not working properly: for Yaga to function properly, I need access to the route calculation system, maps system, camera ETC. While Union gives me all the necessary APIs to work with all of that, for example it is very hard to create a reliable pathfinding system to giev a navigational aid for the player.
  2. Reverse engineering: as complete as it may be, Union is still a hack on top of ZenGin, some things are still not documented, explained ETC. Of course, one can use the debugger to reverse the game's addresses but A. those tools are not accesible for me as they are very graphical and so my screenreader cannot operate them and B. I am still too inexperienced to work on such a low-level. Integrating YAGA into Open GOthic would make things much more pleasant to work with, as well as make the engine beneficial for more players, as hopefully blind accessibility would be followed by other accessibility options, such as big contrast, shade filtering ETC ETC.

Project structure

Yaga is comprised of the following distinct parts:

  • ZSpeech: this is a screenreader abstraction library: blind people use different screenreading programs on their computers, whether that's JAWS, NVDA they have completely different APIs to work with. ZSpeech abstracts those APIs into a singular interface which allows me to interface with most available screenreaders.
  • Readers: readers are a small pieces of code which connect to the main game loop allowing me to read things like player's health, current heading, menu, dialogs ETC.

What needs doing?

Oh boy, a lot

  1. Add an ability for a blind player to select a place to go and be guided with navigational audio: a turn by turn system, where the player is guided every turn would suffice.
  2. Reliable wall detection: In the current implementation, impassable obstacles (walls in short) are detected however the reliability of the feature is bad due to the engine limitations.
  3. Make every interface element read: that should be easy. Even in the current state of the project many menus are read, so are the dialog options, ETC. The issue lies with the inventory system as G1 and G2 have completely different inventory systems. See the InventoryReader file in the original YAGA project to understand what I mean.

My questions

  1. Would you be willing to accept any pullrequests regarding accessibility?
  2. Would anyone here be willing to guide me through implementing the aforementioned features? Some things would require working sight or advanced understanding of the game development puzzle pieces which I lack for obvious reasons.
  3. Do you think that implementing the pathfinding feature on the current OpenGothic's stack is reliable?
    Any input on that would be deeply appreciated. For myself, I am a huge fan of Gothic and the release of ReGoth, Union and now OpenGothic make me still believe I'll be able to play that great game myself.
@Try
Copy link
Owner

Try commented Jul 4, 2023

Hi, @Nuno69 !
Interesting idea, never thought that it's possible to play action games like that.

Would you be willing to accept any pullrequests regarding accessibility?

Naturally my concerns here are:

  • make sure that this feature wont be something that requires regular maintenance/testing
  • third-party libraries are white-listed. Noted in your code there are some *.dll usage. If possible we would like to stick to system api.
    Also if, possible some draft-PR is welcome - that will help to evaluate viability of intended changes.

Would anyone here be willing to guide me through implementing the aforementioned features?

Can do.

Do you think that implementing the pathfinding feature on the current OpenGothic's stack is reliable?
While Union gives me all the necessary APIs to work with all of that, for example it is very hard to create a reliable pathfinding system to giev a navigational aid for the player.

Union should have access to waynet, that is used by AI. Or this is not enough?

Reliable wall detection

We have ray-casting, via BulletCollision, see Camera::calcCameraColision for reference.

I'll be able to play that great game myself.

Ah, so you can validate if accessibility feature is actually working as it should.

@Nuno69
Copy link
Author

Nuno69 commented Jul 5, 2023

Hi @Try.
Yes, YAGA uses various *.dll libraries because those DLLs are interfaces to popular screenreaders.
Regarding Speech we have two ways

Regarding Waynet; yes, Union has access to it, but as far as I understand the system, objects have to be linked to the waynet as its used for something like NPC routines, script events, monster spawns ETC. This gives us access only to the objects which are considered important for the game. My idea is that the player can view the list of object that is sorted from closest to nearest and navigate to it using a turn by turn navigation system. TBT system plus a wall detection would make it possible for the blind player to fully understand the game world.
See this World Of Warcraft Classic mod or this game for the blind if you want to understand my idea.
Tell me when I can start implementing speech and what steps should I take.

@mojsior
Copy link

mojsior commented Jul 5, 2023 via email

@Nuno69
Copy link
Author

Nuno69 commented Jul 5, 2023 via email

@Try Try added the enhancement New feature or request label Jul 13, 2023
@frainfreeze
Copy link

@Nuno69 not necessarily. OpenGothic could* house the code changes needed for accessibility part to work, but not concern itself with the release and testing of the accessibility part, as not to dilute the focus and dev time while more impactful tasks are still on the table. You could compile and make available "the accessible" version as standalone, independently. This would minimize the projects involvement yet keep you from having to maintain own fork.

*I'm not a contributor, so what the project "could" or "could not" do depends on its maintainers and owners.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants