Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

COMBAT.INI

Combat system configuration defining attack moves, defense moves, and combat dialogue (taunts) for all combatants.

Shipped sample path: /Redguard/COMBAT.INI (e.g. .../GOG Galaxy/Redguard/Redguard/COMBAT.INI).

The file is 54 KB and 3,728 lines, the largest INI in the game. Every move, defense, and voice line for every combatant is defined here, making the combat system fully data-driven.

File Structure

The file contains 474 sections in four types:

Section typeCountIndex rangePurpose
[misc]1Global combat parameters
[attackNN]8900–88Attack move definitions
[defendNN]500–04Defense move definitions
[tauntNN]37900–599 (with gaps)Combat dialogue and voice lines

The file opens with a block of commented-out constants defining animation group IDs and attack type enums, followed by the sections in the order listed above.

Animation Groups

The header comments define the animation group ID table used by animation fields throughout the file:

IDName
1anim_defend_low
2anim_defend_right
3anim_defend_left
4anim_defend_high
5anim_attack_1
6anim_attack_2
7anim_attack_3
8anim_attack_thrust
9anim_attack_lunge
10anim_attack_1_end
11anim_attack_2_end
12anim_fight_disarm
13anim_fight_low
14anim_fight_jump_start
15anim_fight_jump
16anim_fight_fall
17anim_fight_land
18anim_fight_fall_attack
19anim_fight_land_attack
20anim_fight_hurt_1
21anim_fight_hurt_2
22anim_death_fight_stab
23anim_death_fight_hard
24anim_sheath_sword
25anim_explore_hurt_1
26anim_explore_hurt_2
27anim_death_explore

[misc] Section

Global parameters for the combat system.

KeyValue (shipped)Description
sword_clank_157Sound effect ID for sword clash, variant 1
sword_clank_258Sound effect ID for sword clash, variant 2
non_engaged_dist100Distance threshold for non-engaged state
in_face_dist100Distance threshold for in-face proximity
non_engaged_spacing500Spacing between non-engaged combatants, in engine angles
in_combat_threshold200Distance threshold to enter combat state, in units × 256
player_can_die1Whether the player can be killed (1 = yes)
cyrus_defend_interval2Minimum frames between Cyrus defends
node_timer120Timer value for combat node transitions
max_taunts600Maximum taunt index (exclusive upper bound for taunt pool)

[attackNN] Sections

Each [attackNN] section defines one attack move. There are 89 sections (attack00 through attack88).

Attack Types

The type field selects the attack category:

ValueName
0melee
1missile
2combo
3stab
4finishing

Elevation Values

The elevation field controls the vertical targeting zone:

ValueMeaning
0regular (default when omitted)
1above
2below

Field Schema

Standard attack (type 0, 1, 3, 4):

FieldTypeDescription
typeintegerAttack category (see enum above)
arcintegerHorizontal hit arc width, in engine angle units
arc_centerintegerHorizontal offset of arc center from forward direction; omitted when centered (0)
elevationintegerVertical targeting zone (see enum above); omitted when regular (0)
min_rangeintegerMinimum distance to target for hit to register
max_rangeintegerMaximum distance to target for hit to register
first_collide_frameintegerAnimation frame on which collision detection begins
collide_durationintegerNumber of frames collision detection remains active
damageintegerHit point damage dealt on successful hit
forceintegerKnockback force applied to target
defenseintegerDefense animation group ID triggered on the target
first_defend_frameintegerAnimation frame on which the attacker can be defended against; omitted on some attacks
defend_durationintegerNumber of frames the attacker is vulnerable to defense; omitted on some attacks
animationintegerAnimation group ID (see animation group table above)
col_vertexintegerModel vertex index used as the collision sphere origin; present only on large creature attacks
col_sphere_sizeintegerRadius of the collision sphere; present only on large creature attacks

Combo attack (type 2):

Combo sections reference other attack sections by index rather than defining collision geometry directly.

FieldTypeDescription
typeintegerAlways 2 for combos
num_attacksintegerNumber of sub-attacks in the combo (2 or 3)
attack00integerIndex of the first sub-attack section
attack01integerIndex of the second sub-attack section
attack02integerIndex of the third sub-attack section; present only when num_attacks = 3

Attack Allocation by Combatant

The file comments identify which attack indices belong to each combatant:

CombatantAttack indices
Cyrus (early)00–14
Skeleton15–17
Golem18–22
Zombie23–25
Serpent26
Troll27–29
Guard (low attack)30
Goblin31–34
Dragon35–37
Richton38–47
Dram48–52
Ogre53
Pirate (initial, weaker)54–64
Cyrus (later)65–74
Vermai75–77
Tavern thugs (no damage)78–88

Large creature attacks (Golem, Serpent, Dragon) use col_vertex and col_sphere_size to attach the collision sphere to a specific model vertex rather than the combatant’s origin point.

[defendNN] Sections

Each [defendNN] section defines one defense move. There are 5 sections (defend00 through defend04), shared by Cyrus and guards.

Field Schema

FieldTypeDescription
arcintegerHorizontal arc width covered by the defense; omitted on defend00
min_rangeintegerMinimum distance at which the defense is effective
max_rangeintegerMaximum distance at which the defense is effective
first_collide_frameintegerAnimation frame on which the defense window opens
collide_durationintegerNumber of frames the defense window remains active
animationintegerAnimation group ID (see animation group table above)

The five shipped defenses correspond to: default (defend00), low (defend01), right (defend02), left (defend03), and high (defend04).

[tauntNN] Sections

Each [tauntNN] section defines one combat voice line or audio cue. There are 379 sections with indices spanning 00–599, with large gaps between combatant blocks.

Taunt Types

The type field identifies when the taunt fires:

ValueTrigger
0begin combat
1attack
2hurt by opponent
3hit opponent
4defend
5misc, during move
6death
7after kill opponent
8want to switch out
9want to switch in
10opponent is unarmed (male)
11opponent is unarmed (female)

Field Schema

FieldTypeDescription
typeintegerTrigger condition (see enum above)
rtx_labelstringLabel key into ENGLISH.RTX for the voice line; may be a 4-character code or a &NNN numeric reference
animationintegerAnimation group ID to play alongside the voice line; 0 in all shipped entries

Taunt Allocation by Combatant

The file comments define the index ranges reserved for each combatant:

Index rangeCombatant
0–49Cyrus
50–149Guards
150–154Skeletons
155–159Zombies
160–179Tavern Thug 1
180–199Tavern Thug 2
200–219Tavern Thug 3 (Dagoo)
220–228Brennan
229–234Golem
235–239Serpent / Vermai
240–249Troll
250–259Goblin
260–279Richton
280–299Dram
300–319Pirate 1
320–339Pirate 2
340–349Ngasta
350–359Urik
360–369Zombie
370–389Vander
390–409Island Thug 1
410–429Island Thug 2
430–449Island Thug 3
450–469Island Thug 4
470–489Island Thug 5
490–509Island Thug 6
510–529Pirate Hideout 1
530–549Pirate Hideout 2
550–569Pirate Hideout 3
570–589Pirate Hideout 4
580–587Dragon
591–599Jail interior (reuses guard lines)

Not all reserved slots are populated. Many combatants use only a subset of their allocated range, and some ranges overlap in the comments (Dragon at 580–587 falls inside Pirate Hideout 4 at 570–589).

External References