133 lines
4.0 KiB
Plaintext
133 lines
4.0 KiB
Plaintext
This document describes the sound support for Crossfire, and how the client should handle the commands it receives.
|
|
|
|
-----------------------------------------
|
|
Client-side support
|
|
-----------------------------------------
|
|
|
|
Sound support is activated by issuing a 'setup sound2 x' command, with x a combination of:
|
|
- 1 for sounds
|
|
- 2 for background music
|
|
|
|
When sound is activated, the server will send 'sound2' commands to client.
|
|
|
|
The format of the command is:
|
|
sound2 <x><y><dir><volume><type><len of action>action<len of name>name
|
|
|
|
with
|
|
- 'x' and 'y' are bytes, position of the sound relative to the player.
|
|
- 'dir' is a byte from 0 to 8, the direction the sound is moving to.
|
|
- 'volume' is a byte from 1 to 100, arbitrary intensity of the sound.
|
|
- 'type' is a byte, the major sound type.
|
|
- 'len of action' is a byte, length of action.
|
|
- 'action' is a string, specifying an arbitrary filename.
|
|
- 'len of name' is a byte, length of name.
|
|
- 'name' is the name of the sound emitter, that can be used to find a specific sound.
|
|
|
|
Using the type, action and name, the client can determine what sound to play:
|
|
- 'type' gives a base directory
|
|
- 'action' is the actual sound to play, without the extension
|
|
- 'name' specifies a subdirectory in type's directory, in which client should first search
|
|
|
|
If no sound can be found in 'name', client should search in the base directory.
|
|
|
|
This enables to override sounds for specific monsters or races.
|
|
|
|
'type' can be:
|
|
- 1: living sound (moving, dying, ...)
|
|
- 2: spell casting sound
|
|
- 3: item sound (potion, weapon ...)
|
|
- 4: ground sound (door, trap opening, ...)
|
|
- 5: hit something
|
|
- 6: hit by something
|
|
|
|
Each type will have an associated subdirectory, in which will be the sound files.
|
|
|
|
Examples:
|
|
(<x> indicates a byte of value x)
|
|
|
|
sound2 <3><2><5><40><1><8>fireball<4>wand
|
|
Something cast (<1>) a spell from a 'wand', at position (3,2) relative to the player,
|
|
in direction south (<5>).
|
|
The spell is a 'fireball'.
|
|
Client will first look for a 'cast/wand/fireball' file. If not found,
|
|
it will look for 'cast/fireball'.
|
|
|
|
sound2 <0><0><0><80><2><5>apply<17>potion
|
|
player applies a potion of something.
|
|
Client should first look for 'item/apply/potion', then 'item/apply'.
|
|
|
|
|
|
-----------------------------------------
|
|
Conventions for 'action' field
|
|
-----------------------------------------
|
|
For living sounds, the 'action' will be things like 'move', 'death', ...
|
|
|
|
For spell casting, 'action' will be the spell name. This enables to have spell-specific sounds.
|
|
|
|
For item sounds, 'action' will be things like 'apply', 'burn' and such.
|
|
|
|
Ground sounds will have actions like 'hole open', 'trap spring' and such.
|
|
|
|
For 'hit' and 'hit by' types, the 'action' will be the skill name used to attack.
|
|
|
|
|
|
-----------------------------------------
|
|
Name meaning
|
|
-----------------------------------------
|
|
Name will be the base name of the emitter, so 'wand', 'mouse', 'door'.
|
|
|
|
For players, it will be the player's race.
|
|
|
|
|
|
-----------------------------------------
|
|
Server-side support
|
|
-----------------------------------------
|
|
Objects have a 'sound_chance' field, 0 to 100, that is the probability of sending a sound.
|
|
|
|
The volume will be randomly determined at each sound for more variability.
|
|
|
|
Players receive a maximum of MAX_SOUNDS_TICK sounds per tick, to not send too many.
|
|
|
|
Server doesn't really care of the actions, that are arbitrary.
|
|
|
|
|
|
-----------------------------------------
|
|
Existing sounds
|
|
-----------------------------------------
|
|
Please update this section as you add sounds.
|
|
|
|
living:
|
|
- push: something is pushed
|
|
- death: something dies
|
|
|
|
spell:
|
|
- fumble: spell failure
|
|
- learn: learnt a spell
|
|
|
|
item:
|
|
- explode
|
|
- evaporate
|
|
- fire: arrow or equivalent is fired
|
|
- poof: wand has no more charges
|
|
- tick: clock sound
|
|
- turn handle: handle is activated
|
|
- apply
|
|
|
|
ground
|
|
- open: door opens
|
|
- fall hole: something falls in a hole
|
|
- poison: someone drank poison
|
|
|
|
hit something:
|
|
- one attack skill
|
|
- low: inflict low damage
|
|
- medium: inflict medium damage
|
|
- high: inflict high damage
|
|
- kill: killed something
|
|
|
|
hit by something:
|
|
- one per attack skill
|
|
- low: took low damage
|
|
- medium: took medium damage
|
|
- high: took high damage
|