Analysis of Motion Input Gaming General Settings MFC

In the previous year, a team was tasked with integrating MotionInput with certain games (for example, Spider-man and Doom). At the end of the project, they produced a functional, compiled build of their MFC application, which we tested and analysed.

Our research focused on identifying areas that were well-done as well as areas of improvement. We could then implement appropriate features in our user interface.

Our main source of information was the development source code repository (MI_Gaming_General).


Problem in this MFC: As shown above, the UI for general gaming is very cluttered and naming of control options are not clear enough to be intuitive to any non-technical user (for example, HotKey Mapping). This might hinder users to correctly configure their games, hence resulting in them not running in the desired control settings.

Our solution: Ensure the layout and options of our MFC application are clear[1]. That is, there is sufficient space between each control options and that they are appropriately named.

A feature we will implement: there is an information button ¡ next to each option that details what it entails. We will include such information buttons in our user interfaces to support non-technical users.



Problem in this MFC: In order to add keybinds, a secondary dialog box is provided upon clicking the button "Configure Mapping" of Speech Hotkeys. This demands too much technical know how from users who have to figure the keybind of the game they want to play and then select their desired speech command. This is not at all feasible for users who would have to do this process for each game they want to play. Also, games provide a lot of controls which is why inputting each control is troublesome.

Our solution: All the speech keybinds for each game should be determined and stored by default in separate JSON files. The user should be able to choose bodypoints from a list through our user interface and not input each one of them manually.



Problem in this MFC: Similarly, "Configure Mapping" for Gesture/Pose Hotkeys can be confusing for users. Also, certain gestures may not work well with certain games. This means the user would have to spend a lot of time doing trial and error with different gestures before they figure out which gesture is compatible with the game.

Our solution: We will test out different gestures for different in-game actions to determine which ones to implement. This will be stored in a JSON file.[2]

A feature we will implement: We will implement both speech and gestures for in-game controls in addition to virtual buttons.



Problem in this MFC: To play the same game in different mode, the user has to choose the game from a dropdown. For example, if the user wants to play FIFA, there are two modes listed in load game dropdown: "fifa" and "fifa_standing". However, this makes the drop down repititve and quite long. "fifa_standing" is also a confusing name.

Our solution: We will have an option for users to choose between steering and joystick mode for driving games, but instead of having them in a drop-down menu, we would have them as "STEERING" and "JOYSTICK" radio buttons.[3]



Problem in this MFC: To load a new game that is not present in the dropdown, there is a button provided with which the user can provide the directory where the new game json is located. This is weak structuring of the game json files.

Our solution: For our General Driving Games and General 2D Side Scroller Games MFC applications, game JSON files will be in a pre-defined directory (data/modes/driving_games or data/modes/2d_side_scroller_games). Adding a new game would only require adding its corresponding JSON files into these folders. Then, the new game should automatically appear in the drop down.

Technologies

Visual C++ MFC Framework

We selected Visual C++ MFC Framework as the platform for constructing our user interfaces for the project. The main reason for this decision is its ability to function smoothly on older Windows laptops, which ensures inclusivity and accessibility across diverse users. By prioritizing lightweight design principles, MFC-based interface panels maintain optimal performance without overburdening system resources, thus facilitating seamless operation even on hardware with limited processing power or memory. This compatibility with older hardware not only extends the reach of the software to a broader audience but also minimizes the need for costly hardware upgrades, making it a cost-effective solution for both developers and end-users alike. Moreover, the versatility of Visual C++ MFC empowers developers to create customizable and visually appealing interface panels tailored to the specific requirements of the project, further enhancing user experience and engagement. In essence, the decision to employ MFC C++ Framework for interface panel development represents a strategic choice aimed at achieving a balance between performance, compatibility, and user satisfaction, thereby elevating the overall quality and effectiveness of the project.

Solution Decisions

From our analysis of theprevious Motion Input Gaming MFC codebase, it’s clear that MotionInput needs to consist of a new system architecture which allows for a high level of configurability and extendability. To promote extendibility, we need to ensure that the codebase is consistent.

The code written also needs to be clean and make use of good programming practices such as short, cohesive functions, avoid repetition, and be consistent and highly readable with the addition of docstrings and comments. This ensures that developers reduce the time it takes to understand existing code, so that they can develop on top of the codebase quickly and with ease, as well as keeping the existing code maintainable.

We need to also make sure that we have extensive documentation that compliments the codebase, thoroughly explaining the use of every class and method and its technical aspects (parameters, return values, types etc), as well as other parts of the development cycle like compilation. This also includes well produced architecture diagrams to back up any written documentation. The documentation should all be in one place, preferably a website allowing for easy and structured access to any piece of information required.

In terms of technical decisions, we will retain the usage of Visual C++ MFC Framework in MotionInput V3, as they were determined to be the best suited solutions for their respective functionalities in a number of literature reviews performed by the students.[4]

References

[1]Microsoft. "Introduction to the MFC Library.". https://docs.microsoft.com/en-us/cpp/mfc/mfc-desktop-applications

[2]Bray, Tim, ed. "The JavaScript Object Notation (JSON) Data Interchange Format." RFC 7159, March 2014. https://tools.ietf.org/html/rfc7159

[3]Gregory, Jason. Game Engine Architecture. Third edition. CRC Press, 2018.

[4]"My Developer Day. 'MFC 25th Birthday Makeover (Part 1).' March 6, 2017. https://mydeveloperday.wordpress.com/2017/03/06/mfc-25th-birthday-makeover-part-1/.