Player Input
This page explains how player input works in Eldiron.
At a high level, player input is split into two concepts:
- Actions: direct movement or turning commands such as
forward,left,right, andbackward - Intents: interaction modes such as
use,attack,look,take,drop, orspell
Keyboard input is configured in character data via Input Mapping.
UI buttons on screens can also trigger the same actions and intents.
Actions
Actions are immediate movement-style commands.
Examples:
forwardleftrightbackward
They are sent as runtime EntityAction values and are interpreted based on the current player camera mode:
- 2D / Isometric: directional movement
- First-Person: forward/backward movement plus left/right turning
If no intent is active, pressing an action key simply moves or turns the player.
Intents
Intents describe what the player wants to do, not how they move.
Common intents:
useattacklooktakedropspell
An intent can be selected by:
- a keyboard mapping like
intent(use) - a spell shortcut like
spell(Fireball) - a screen button with an
intentattribute
Once selected, the intent is stored on the player and used for the next interaction.
2D, Isometric, And First-Person Behavior
Intents behave differently in 2D and 3D.
2D
In 2D-style play, an intent is usually one-shot:
- select an intent like
useorattack - press a directional action like
forward - the engine looks in that direction and sends the matching
intentevent
If no valid target is found, the engine may send a localized fallback message such as nothing_to_use or nothing_to_attack.
Isometric / First-Person
In isometric and first-person play, intents behave more like a persistent interaction mode:
- select an intent like
use,attack, orspell - move the cursor over an entity or item
- click the target to apply that intent
The active intent can also change the cursor if the corresponding button widget defines intent cursor tiles.
Intent Events
When an intent is triggered successfully, the engine sends an intent event.
That event is sent to:
- the player character
- the clicked target entity, if the target is a character
- the clicked target item, if the target is an item
The event payload includes:
intententity_iditem_iddistance
This lets either side handle the interaction.
Examples:
- the player handles
attackand callsdeal_damage(...) - an item handles
useand toggles itself - a character handles
talkand opens dialogue
Built-In Shortcuts
Some common intents have built-in convenience behavior before or alongside script handling.
Examples include:
lookusetake/pickupdropspell:<template>
Character and item attributes such as on_look, on_use, and on_drop can provide shortcuts for common cases.
Spells
Spell shortcuts are encoded as intent payloads of the form:
spell:Fireball
Keyboard mapping:
[input]
f = "spell(Fireball)"
Screen button mapping:
intent = "spell"
spell = "Fireball"
In both cases the runtime treats this as a spell intent and routes it through the normal intent system.
Where To Configure What
- Keyboard mappings: Input Mapping
- Intent event handling: Events
- Action/intention buttons on screens: Screen Widgets
- Character and item shortcut attributes: Attributes