Custom Controller

This project is a tool for use with the Godot game engine in order to allow designers to easily make custom player controller scripts, which I developed by myself in accordance with designer feedback. This was designed with the intention of allowing for robust customization within a menu system that does not require editing code, while still being easily extensible when writing code is necessary.

Some of the in-menu features include the following:
• Variables to define parameters such as speed and jump height
• Editable curves to define acceleration
• Various systems to enable custom behavior for jumping, gravity, and rotation
• Handling actions that take multiple simultaneous or serial inputs
• Both 2D and 3D compatibility
• Documentation written with designers in mind

This project provided the opportunity for me to gain additional experience with programming, along with viewing a project through a design perspective and using design considerations to determine the feature set and scope.

The project source code and video preview are available at the links below. Detailed information about project features are also available below that on this page.
The system I created includes a wide range of customizable features, including the following which are available through the in-engine menu:
• Compatibility with 2D top-down, 2D sidescrolling, and 3D perspectives
• The ability to define input, and the direction in which the input moves the player, for compatibility with both normal and isometric perspectives, and with both a keyboard and joystick
• Variables to define speed, jump height, the the time it takes to accelerate or decelerate
• Custom curves to define the way in which the player accelerates, for both motion and rotation
• A gravity system which allows users to define a custom gravity direction and change it on the fly, for various applications including both gravity that acts in a constant direction and gravity that attracts towards a specified point
• Highly customizable jumping, including the following optional features: Jumps which apply a different fall speed compared to the initial jump speed for a weightier game feel, coyote time and jump buffering for more responsive controls, variable jump height depending on how long the jump button was pressed, double-jumping or other forms of multiple jumps in mid-air, jump boosts that apply after a certain number of consecutive jumps in short succession, boosts to horizontal speed during jumps, and wall jumping
• A flexible rotation system that can rotate a game object, including the player, about a specified axis based on inputs, or to turn towards a specified point