CRE file format
Applies to:
PST
General Description
This file format describes a "creature". Creatures can move, have an animation, hold items, run scripts, cast spells and initiate dialog. Creatures have several stats (some visible through the game UI) which are generally mapped to IDS or 2DA files.
Engine specific notes:
Engine specific notes:
• PST creature disguises are not stored as a field in the creature file, they are held as a GLOBAL variable, named 'appearance'. A value of 1 equates to zombie disguise, a value of 2 equates to dustman disguise.
• Several fields for TNO are generated dynamically, and as a result changing fields in the relevant CRE file will have no effect.
• Several fields for TNO are generated dynamically, and as a result changing fields in the relevant CRE file will have no effect.
Detailed Description
Overall Structure
Offset | Size (datatype) | Description |
---|---|---|
0x00000 | 4 (char array) | Signature ('CRE ') |
0x0004 | 4 (char array) | Version ('V1.2') |
0x0008 | 4 (strref) | Long name |
0x000c | 4 (strref) | Short name (tooltip) |
0x0010 | 4 (dword) | Creature flags
|
0x0014 | 4 (dword) | XP (gained for killing this creature) |
0x0018 | 4 (dword) | Creature Power Level (for summoning spells) / XP of the creature (for party members) |
0x001c | 4 (dword) | Gold carried |
0x0020 | 4 (dword) | Permanent status flags (STATE.IDS) |
0x0024 | 2 (word) | Current Hit Points |
0x0026 | 2 (word) | Maximum Hit Points |
0x0028 | 4 (dword) | Animation ID (ANIMATE.IDS) There is some structure to the ordering of these entries. BAM files are mapped by the RESDATA.ini files. |
0x002c | 1 (byte) | Metal Colour Index (BG1 animations) |
0x002d | 1 (byte) | Minor Colour Index (BG1 animations) |
0x002e | 1 (byte) | Major Colour Index (BG1 animations) |
0x002f | 1 (byte) | Skin Colour Index (BG1 animations) |
0x0030 | 1 (byte) | Leather Colour Index (BG1 animations) |
0x0031 | 1 (byte) | Armor Colour Index (BG1 animations) |
0x0032 | 1 (byte) | Hair Colour Index (BG1 animations) |
0x0033 | 1 (byte) | EFF structure version
|
0x0034 | 8 (resref) | Small Portrait (BMP) |
0x003c | 8 (resref) | Large Portrait (BMP) |
0x0044 | 2 (signed word) | Reputation (minimum value: 0) |
0x0046 | 2 (signed word) | Armor Class (Natural) |
0x0048 | 2 (signed word) | Armor Class (Effective) |
0x004a | 2 (signed word) | Armor Class (Crushing Attacks Modifier) |
0x004c | 2 (signed word) | Armor Class (Missile Attacks Modifier) |
0x004e | 2 (signed word) | Armor Class (Piercing Attacks Modifier) |
0x0050 | 2 (signed word) | Armor Class (Slashing Attacks Modifier) |
0x0052 | 1 (byte) | THAC0 (1-25) |
0x0053 | 1 (byte) | Number of attacks (0-10) |
0x0054 | 1 (byte) | Save versus death (0-20) |
0x0055 | 1 (byte) | Save versus wands (0-20) |
0x0056 | 1 (byte) | Save versus polymorph (0-20) |
0x0057 | 1 (byte) | Save versus breath attacks (0-20) |
0x0058 | 1 (byte) | Save versus spells (0-20) |
0x0059 | 1 (byte) | Resist fire (0-100) |
0x005a | 1 (byte) | Resist cold (0-100) |
0x005b | 1 (byte) | Resist electricity (0-100) |
0x005c | 1 (byte) | Resist acid (0-100) |
0x005d | 1 (byte) | Resist magic (0-100) |
0x005e | 1 (byte) | Resist magic fire (0-100) |
0x005f | 1 (byte) | Resist magic cold (0-100) |
0x0060 | 1 (byte) | Resist slashing (0-100) |
0x0061 | 1 (byte) | Resist crushing (0-100) |
0x0062 | 1 (byte) | Resist piercing (0-100) |
0x0063 | 1 (byte) | Resist missile (0-100) |
0x0064 | 1 (byte) | Detect illusion (minimum value : 0) |
0x0065 | 1 (byte) | Set traps |
0x0066 | 1 (byte) | Lore (0-100)* |
0x0067 | 1 (byte) | Lockpicking (minimum value: 0) |
0x0068 | 1 (byte) | Stealth (minimum value: 0) |
0x0069 | 1 (byte) | Find/disarm traps (minimum value: 0) |
0x006a | 1 (byte) | Pick pockets (minimum value: 0) |
0x006b | 1 (byte) | Fatigue (0-100) |
0x006c | 1 (byte) | Intoxication (0-100) |
0x006d | 1 (byte) | Luck |
0x006e | 1 (byte) | Fist proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x006f | 1 (byte) | Edged proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x0070 | 1 (byte) | Hammer proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x0071 | 1 (byte) | Axe proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x0072 | 1 (byte) | Club proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x0073 | 1 (byte) | Bow proficiency (Proficiencies maybe be packed into 3-bit chunks for the primary and secondary classes) |
0x0074 | 1 (byte) | Unused Proficiency Slots |
0x0075 | 1 (byte) | Unused Proficiency Slot |
0x0076 | 1 (bytes) | Unused Proficiency Slot |
0x0077 | 1 (bytes) | Unused Proficiency Slot |
0x0078 | 1 (bytes) | Unused Proficiency Slot |
0x0079 | 1 (bytes) | Unused Proficiency Slot |
0x007a | 1 (bytes) | Unused Proficiency Slot |
0x007b | 1 (bytes) | Unused Proficiency Slot |
0x007c | 1 (bytes) | Unused Proficiency Slot |
0x007d | 1 (bytes) | Unused Proficiency Slot |
0x007e | 1 (bytes) | Unused Proficiency Slot |
0x007f | 1 (bytes) | Unused Proficiency Slot |
0x0080 | 1 (bytes) | Unused Proficiency Slot |
0x0081 | 1 (bytes) | Unused Proficiency Slot |
0x0082 | 1 (bytes) | Turn undead level |
0x0083 | 1 (byte) | Tracking skill (0-100) |
0x0084 | 32 (char array) | Tracking target |
0x00a4 | 4*100 (strref*100) | Strrefs pertaining to the character. Most are connected with the sound-set (see SOUNDOFF.IDS (BG1) and SNDSLOT.IDS for (BG2)). |
0x0234 | 1 (byte) | Highest attained level in class (0-100). For dual/multi class characters, the levels for each class are split between 0x0234, 0x0235 and 0x0236 according to the internal class name, i.e. for a FIGHTER_THIEF 0x0234 will hold the fighter level, 0x0235 will hold the thief level and 0x0236 will be 0. |
0x0235 | 1 (byte) | Highest attained level in class (0-100) |
0x0236 | 1 (byte) | Highest attained level in class (0-100) |
0x0237 | 1 (byte) | Sex (from gender.ids) - not changed by effects |
0x0238 | 1 (byte) | Strength (1-25) |
0x0239 | 1 (byte) | Strength % Bonus (0-100) |
0x023a | 1 (byte) | Intelligence (1-25) |
0x023b | 1 (byte) | Wisdom (1-25) |
0x023c | 1 (byte) | Dexterity (1-25) |
0x023d | 1 (byte) | Constitution (1-25) |
0x023e | 1 (byte) | Charisma (1-25) |
0x023f | 1 (byte) | Morale |
0x0240 | 1 (byte) | Morale break |
0x0241 | 1 (byte) | Racial enemy (RACE.IDS) |
0x0242 | 2 (word) | Morale Recovery Time |
0x0244 | 4 (dword) | Kit information NONE 0x00000000 ABJURER 0x00400000 CONJURER 0x00800000 DIVINER 0x01000000 ENCHANTER 0x02000000 ILLUSIONIST 0x04000000 INVOKER 0x08000000 NECROMANCER 0x10000000 TRANSMUTER 0x20000000 NB.: The values of this offset are written in big endian style. |
0x0248 | 8 (resref) | Creature script - Override |
0x0250 | 8 (resref) | Creature script - Class |
0x0258 | 8 (resref) | Creature script - Race |
0x0260 | 8 (resref) | Creature script - General |
0x0268 | 8 (resref) | Creature script - Default |
0x0270 | 36 (bytes) | Unknown |
0x0294 | 4 (dword) | Offset to overlay section |
0x0298 | 4 (dword) | Size of overlay section |
0x029c | 4 (dword) | XP (Secondary class) |
0x02a0 | 4 (dword) | XP (Tertiary class) |
0x02a4 | 2 (word) | Internal 0 |
0x02a6 | 2 (word) | Internal 1 |
0x02a8 | 2 (word) | Internal 2 |
0x02aa | 2 (word) | Internal 3 |
0x02ac | 2 (word) | Internal 4 |
0x02ae | 2 (word) | Internal 5 |
0x02b0 | 2 (word) | Internal 6 |
0x02b2 | 2 (word) | Internal 7 |
0x02b4 | 2 (word) | Internal 8 |
0x02b6 | 2 (word) | Internal 9 |
0x02b8 | 1 (byte) | GOOD variable increment value |
0x02b9 | 1 (byte) | LAW variable increment value |
0x02ba | 1 (byte) | LADY variable increment value |
0x02bb | 1 (byte) | MURDER variable increment value |
0x02bc | 32 (char array) | Monstrous Compendium Entry |
0x02dc | 1 (char) | Dialog Activation Range |
0x02dd | 1 (byte) | Selection circle size |
0x02de | 1 (byte) | Unknown |
0x02df | 1 (byte) | Number of Colours |
0x02e0 | 4 (dword) | Attribute flags
NB. Kill() respects the increment global bits, DestroySelf() does not. |
0x02e4 | 2 (word) | Colour 1 (Clownclr.ids) |
0x02e6 | 2 (word) | Colour 2 (Clownclr.ids) |
0x02e8 | 2 (word) | Colour 3 (Clownclr.ids) |
0x02ea | 2 (word) | Colour 4 (Clownclr.ids) |
0x02ec | 2 (word) | Colour 5 (Clownclr.ids) |
0x02ee | 2 (word) | Colour 6 (Clownclr.ids) |
0x02f0 | 2 (word) | Colour 7 (Clownclr.ids) |
0x02f2 | 3 (bytes) | Related to colours |
0x02f5 | 1 (char) | Colour Placement 1 |
0x02f6 | 1 (char) | Colour Placement 2 |
0x02f7 | 1 (char) | Colour Placement 3 |
0x02f8 | 1 (char) | Colour Placement 4 |
0x02f9 | 1 (char) | Colour Placement 5 |
0x02fa | 1 (char) | Colour Placement 6 |
0x02fb | 1 (char) | Colour Placement 7 |
0x02fc | 21 (bytes) | Unknown |
0x0311 | 1 (byte) | Species (RACE.IDS) |
0x0312 | 1 (byte) | Team (TEAM.IDS) |
0x0313 | 1 (byte) | Faction (FACTION.IDS) |
0x0314 | 1 (byte) | Enemy-Ally (EA.IDS) |
0x0315 | 1 (byte) | General (GENERAL.IDS) |
0x0316 | 1 (byte) | Race (RACE.IDS) |
0x0317 | 1 (byte) | Class (CLASS.IDS) |
0x0318 | 1 (byte) | Specific (SPECIFIC.IDS) |
0x0319 | 1 (byte) | Gender (GENDER.IDS) |
0x031a | 5 (bytes) | OBJECT.IDS references |
0x031f | 1 (byte) | Alignment (ALIGNMEN.IDS) |
0x0320 | 2 (word) | Global actor enumeration value |
0x0322 | 2 (word) | Local (area) actor enumeration value |
0x0324 | 32 (char array) | Death Variable (set SPRITE_IS_DEADvariable on death) |
0x0344 | 4 (dword) | Known spells offset |
0x0348 | 4 (dword) | Known spells count |
0x034c | 4 (dword) | Spell memorization info offset |
0x0350 | 4 (dword) | Spell memorization info entries count |
0x0354 | 4 (dword) | Memorized spells offset |
0x0358 | 4 (dword) | Memorized spells count |
0x035c | 4 (dword) | Item slots offset |
0x0360 | 4 (dword) | Items offset |
0x0364 | 4 (dword) | Items count |
0x0368 | 4 (dword) | Offset to effects |
0x036c | 4 (dword) | Count to effects |
0x0370 | 8 (resref) | Dialog file |
NB. Lore is calculated as ((level * rate) + int_bonus + wis_bonus). Intelligence and wisdom bonuses are from lorebon.2da and the rate is the lookup value in lore.2da, based on class. For multiclass characters, (level * rate) is calculated for both classes separately and the higher of the two values is used - they are not cumulative.
This section details visual effects applied to the creature by opcode 201 (the specific effect applied is controled by paramter 2). Each entry is 40 bytes.
0 - SPWI304 - Cloak of Warding - absorbs 3d4+level damage then removed, or level*5 seconds expired
1 - SPWI111 - Shield - AC = 3, +1 to saving throws, removed after level*25 seconds
2 - SPWI203 - Black Barbed Shield - +2 AC, attackers suffer 1d6 damage, removed after 10d3 seconds
3 - SPWI209 - Pain Mirror - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds or after triggered once
4 - SPWI704 - Guardian Mantle - deflects all attacks if attacker doesn't make saving throw -4 vs. spells, removed after 50+level*5 seconds
5 - Shroud of Darkness (projectile)
6 - SPWI504 - Enoll Eva's Duplication - double projectiles?
7 - SPWI101 - Armor - AC = 6, removed after 8+level damage
8 - SPWI601 - Antimagic Shell - disables all projectiles? disables casting?
9 - ?
10- ?
11- SPPR201 - Flamewalk - 50% fire resistance, +2 saving throws vs. fire
12- SPPR106 - Protection from Evil - +2 AC vs. evil, +2 saving throws vs. evil
13- SPWI902 - Conflagration - 2d6 damage on target per 5 seconds, anyone comes close also suffers it, but entitled to save vs. spells
14- SPWI312 - Infernal Shield - 150% fire resistance (fire heals half damage).
15- SPWI119 - Submerge the Will - AC = 2, +1 to saving throws, removed after level*12 seconds
16- SPWI314 - Balance in All Things - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds, can be triggered level/4 times
1 - SPWI111 - Shield - AC = 3, +1 to saving throws, removed after level*25 seconds
2 - SPWI203 - Black Barbed Shield - +2 AC, attackers suffer 1d6 damage, removed after 10d3 seconds
3 - SPWI209 - Pain Mirror - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds or after triggered once
4 - SPWI704 - Guardian Mantle - deflects all attacks if attacker doesn't make saving throw -4 vs. spells, removed after 50+level*5 seconds
5 - Shroud of Darkness (projectile)
6 - SPWI504 - Enoll Eva's Duplication - double projectiles?
7 - SPWI101 - Armor - AC = 6, removed after 8+level damage
8 - SPWI601 - Antimagic Shell - disables all projectiles? disables casting?
9 - ?
10- ?
11- SPPR201 - Flamewalk - 50% fire resistance, +2 saving throws vs. fire
12- SPPR106 - Protection from Evil - +2 AC vs. evil, +2 saving throws vs. evil
13- SPWI902 - Conflagration - 2d6 damage on target per 5 seconds, anyone comes close also suffers it, but entitled to save vs. spells
14- SPWI312 - Infernal Shield - 150% fire resistance (fire heals half damage).
15- SPWI119 - Submerge the Will - AC = 2, +1 to saving throws, removed after level*12 seconds
16- SPWI314 - Balance in All Things - hostile creatures nearby suffer the same damage as the caster, removed after level*5 seconds, can be triggered level/4 times
Offset | Size (data type) | Description |
---|---|---|
0x0000 | 8 (resref) | Overlay BAM file |
0x0008 | 4 (dword) | Unknown |
0x000c | 2 (word) | Timing |
0x000e | 2 (word) | Type |
0x0010 | 4 (dword) | Duration |
0x014 | 4 (dword) | Unknown |
0x0018 | 8 (bytes) | Unknown |
0x0020 | 4 (dword) | Unknown |
0x0024 | 2 (word) | Unknown |
This section details which spells the creature knows, and it consists of an array of entries formatted as follows.
Offset | Size (data type) | Description |
---|---|---|
0x0000 | 8 (resref) | Resource name of the SPL file |
0x0008 | 2 (word) | Spell Level -1 |
0x000a | 2 (word) | Spell type
|
This section details how many spells the creature can memorize, and how many it has memorized. It consists of an array of entries formatted as follows.
Offset | Size (data type) | Description |
---|---|---|
0x0000 | 2 (word) | Spell level - 1 |
0x0002 | 2 (word) | Count of spells memorizable |
0x0004 | 2 (word) | Count of spells memorizable (after effects) |
0x0006 | 2 (word) | Spell type
|
0x0008 | 4 (dword) | Index into memorized spells array of first memorized spell of this type in this level |
0x000c | 4 (dword) | Count of memorized spell entries in memorized spells array of memorized spells of this type in this level |
This section details which spells the character has memorized. It consists of an array of entries formatted as follows.
Offset | Size (data type) | Description |
---|---|---|
0x0000 | 8 (resref) | Resource name of the SPL file |
0x0008 | 4 (dword) | Memorised
|
This section details which items the character has. It consists of an array of entries formatted as follows:
Offset | Size (data type) | Description |
---|---|---|
0x0000 | 8 (resref) | Resource name of the ITM file |
0x0008 | 1 (byte) | Item expiration time - item creation hour (replace with drained item) |
0x0009 | 1 (byte) | Item expiration time - (elapsed hour count divided by 256, rounded down) + 1 (replace with drained item) When the game hour and elapsed hour count for the current game time exceed these values, the item is removed. |
0x000a | 2 (word) | Quantity/Charges 1 |
0x000c | 2 (word) | Quantity/Charges 2 |
0x000e | 2 (word) | Quantity/Charges 3 |
0x0010 | 4 (dword) | Flags
|
This is an array keeping track of which items are located in each particular location in the CRE's inventory. There are 48 slots, and they are not the same as the order specified in specified in SLOTS.IDS. The actual order is:
- Right Earring/Lens/Helmet
- Armor
- Left Tattoo
- Hand
- L.Ring
- R.Ring
- Left Earring/Eyeball
- Right Tattoo (lower)
- Boots
- Weapon 1
- Weapon 2
- Weapon 3
- Weapon 4
- Quiver 1
- Quiver 2
- Quiver 3
- Quiver 4
- Quiver 5
- Quiver 6 (cannot be accesed from GUI)
- Right Tattoo (upper)
- Quick item 1
- Quick item 2
- Quick item 3
- Quick item 4
- Quick item 5
- Inventory item (1 to 20)
- Magic weapon
- Selected weapon
- Selected weapon ability