As of R7 Daedalus now allows user-configurable controls to be specified.
The desired controls can be chosen from the Rom Settings screen.
In order to define your own controller configuration you need to add a
new .ini file to the Daedalus/ControllerConfigs directory. There are a
few examples provided which should give an overview of what is possible.
I will look at providing a more thorough tutorial shortly.
The format really is quite simple, but it is very flexible and allows for a number of advanced configurations. Here is a simple configuration which is distributed with Daedalus (ControllerConfigs/dpad.ini):
Name=DPad
Description=By default the PSP DPad maps to the N64 DPad. Hold Circle to map to the CButtons.
[Buttons]
N64.Start = PSP.Start
N64.A = PSP.Cross
N64.B = PSP.Square
N64.Z = PSP.Triangle
N64.LTrigger = PSP.LTrigger
N64.RTrigger = PSP.RTrigger
N64.Up = !PSP.Circle & PSP.Up
N64.Down = !PSP.Circle & PSP.Down
N64.Left = !PSP.Circle & PSP.Left
N64.Right = !PSP.Circle & PSP.Right
N64.CUp = PSP.Circle & PSP.Up
N64.CDown = PSP.Circle & PSP.Down
N64.CLeft = PSP.Circle & PSP.Left
N64.CRight = PSP.Circle & PSP.Right
The file starts with two lines defining the name and description for the controller config. These strings are used in the UI when selecting configurations. The '[Buttons]' block defines the mapping from PSP controls to N64 controls. In this particular configuration the N64 d-pad is mapped to the PSP d-pad when the circle button is released. When circle is pressed, the PSP d-pad maps to the N64 c-buttons. This config is particularly useful for games which make heavy use of the d-pad.
In the [Buttons] section, the left hand side of each rule must consist of one of the following N64 control names:
Name | Description |
---|---|
N64.Start | The N64's start button |
N64.A | The N64's A button |
N64.B | The N64's B button |
N64.Z | The N64's Z trigger |
N64.LTrigger | The left trigger |
N64.RTrigger | The right trigger |
N64.Up | Up on the N64's d-pad |
N64.Down | Down on the N64's d-pad |
N64.Left | Left on the N64's d-pad |
N64.Right | Right on the N64's d-pad |
N64.CUp | The N64's C up button |
N64.CDown | The N64's C down button |
N64.CLeft | The N64's C left button |
N64.CRight | The N64's C right button |
N.B. There is currently no definition for the N64's analogue stick. By default this is always assumed to be bound to the PSP's analogue stick.
The right hand side of a rule consists of an expression defined from the following values:
Name | Description |
---|---|
PSP.Start | The PSP's start button |
PSP.Cross | The PSP's cross button |
PSP.Square | The PSP's square button |
PSP.Triangle | The PSP's triangle button |
PSP.Circle | The PSP's circle button |
PSP.LTrigger | The PSP's left shoulder button |
PSP.RTrigger | The PSP's right shoulder button |
PSP.Up | Up on the PSP's d-pad |
PSP.Down | Down on the PSP's d-pad |
PSP.Left | Left on the PSP's d-pad |
PSP.Right | Right on the PSP's d-pad |
N.B. You cannot use the PSP's select button when defining controller configurations, as this is reserved for the emulator's use.
Values can be combined using a few simple operations to allow rules to be constructed with more complex behaviour. For instance, the following line:
N64.CUp = PSP.Circle & PSP.Up
Tells Daedalus to report that the N64 C up button is pressed when both the circle AND d-pad up buttons are pressed on the PSP. The NOT operator (!) can be used to invert a value, for instance:
N64.Up = !PSP.Circle & PSP.Up
This rule tells Daedalus to report that the N64 d-pad up button is pressed when the PSP's circle button is not pressed while the d-pad up button is being pressed.
The available logical operators are:
Operator | Description | Example |
---|---|---|
expr & expr | Returns the logical AND of the two expressions | N64.CUp=PSP.LTrigger & PSP.Up |
expr | expr | Returns the logical OR of the two expressions | N64.A=PSP.Cross | PSP.Circle |
!expr | Returns the logical NOT of the expression | N64.Up = !PSP.LTrigger & PSP.Up |
You can also use parentheses to control the order of precedence, e.g.:
N64.CUp = PSP.Up | (PSP.LTrigger & PSP.Triangle)
Which defines a rule which defines that the N64 C up button is pressed when either up on the PSP d-pad is pressed, or when the left shoulder button and triangle are pressed.
No single controller mapping scheme can be provided which works well across all games, but using custom controller configs it should be possible to create a mapping which works well for any given game.
Post any questions you might have in the comment pages, and I'll do my best to answer them. If you come up with a good controller config for a game, email me (my name @gmail.com) and I'll look at adding it for distribution with future releases of Daedalus.
-StrmnNrmn
(Apologies - for some reason my template in Blogger really screws up when I place tables in he post and inserts a ton of whitespace before the table. I've never quite figured out how to fix it, so we'll just have to live with it :)
(Fixed post date :)