Objects.txt

Objects.txt

Description: by Nefarius, Restyled by HarvestWombs

Categories: File Guides (1.10 - 1.14)


NOTE: For the sake of readability the columns are here not represented the way they are in the file (their order isn't).

Name: This controls the string that is displayed when you highlight this object.

description: A reference field, it contains (or should contain) a brief description of what this object represents in-game, unforunately Blizzard didn't put much effort into these, thus the use of the info provided here is rather limited and often cryptic.

Id: Another reference field, it refers to the objects unique ID. This field is not used by the game, the IDs are based on the line number.

Token: A third reference field, this field refers to the graphics used by the object. To actually change what graphics the object uses you must edit ObjType.txt.

SpawnMax: Unused, at least altering this field didn't change a thing. Whenever, and how, an object is spawned is controlled only by PopulateFn. For reference, the Blizzard used the values 0, 1 and 2.

TrapProb: Unused, this was supposed to control the chance of the object being trapped, but this is since forever handled by object specific code.

SizeX and SizeY: This controls the amount of subtiles that this object occupies, setting this to very high values will prevent the object from spawning, so beware.

nTgtFX and nTgtFY: unknown (F probably stands for front)
nTgtBX and nTgtBY: unknown (B probably stands for back)


IsAttackable: Boolean, controls whenever the character will use mode NU or mode KK when clicking on this object.

CODE: Select all

0 = Use mode NU (neutral, idle)
1 = Use mode KK (kick)
EnvEffect: Boolean, unknown but apparently related to ambient sounds and other environment effects.

CODE: Select all

0 = Not related to environmental effects
1 = Related to environmental effects
IsDoor: Boolean, controls whenever the game treats this object as a door (this makes it display Open Door, Closed Door or Blocked Door instead of the objects actual string). This probably also controls whenever monsters capable of opening doors will detect that this object is a door.

CODE: Select all

0 = This object is not a door
1 = This object is a door
BlockVis: Boolean, controls whenever this object influences line of sight. This only works in conjunction with IsDoor.
When this is set to true you are unable to select objects, units or items that are not within the same room as you are unless the door is opened.
Otherwise you will be able to select things outside of your visions cone (this works similar to LoSDraw in Levels.txt). I'm unaware whenever this effects monsters too.

CODE: Select all

0 = Don't block the players vision
1 = Block the players vision
Orientation: Unknown, this seams to control what direction the object is facing. But changing it doesn't really have any influence that I could notice in-game (probably since most objects only have 1 direction to start with), it might be used by code to know what door to pick for what wall tile, so I'm not sure, for reference, the directions would be:

CODE: Select all

1 - Southwest
2 - Northwest
3 - Southeast
4 - Northeast
Trans: Controls what type of palette mapping is applied to the object. Though I couldn't notice any major differences in-game.

PreOperate: Boolean, unknown, they've set this to true for the same objects that have IsAttackable set to true, but I couldn't link this to any in-game behavior.

XOffset and YOffset: The graphical offset (from the animations pivot). This is in pixels rather then subtiles (at least as far as I noticed), so if you set these to -100 the objects graphics will appear shifted 100 pixels to the upper left corner from where the object actually is.

Draw: Boolean, controls whenever to draw the object's graphics or not. Note, it will still cast a shadow and the player will still be able to select it.

CODE: Select all

0 = Don't draw the objects graphics
1 = Draw the objects graphics
Red, Green and Blue: These three fields control the RGB values (the color) of the objects light radius (in case you assigned a light radius to it).

HD, TR, LG, RA, LA, RH, LH, SH and S1 to S8: Booleans, these columns control whenever the respective DCC components are selectable. Setting them to 0 will make the component in question unselectable. In my tests with TR they where still loaded however, unlike MonStats2.txt.

CODE: Select all

0 = Component is unselectable
1 = Component is selectable
TotalPieces: Total amount of selectable DCC components.

SubClass: This field determines what object special subclass this object belongs to:

CODE: Select all

1 = Shrine (displays ' Shrine')
2 = Obelisk (does nothing)
4 = Portal (do not use this for non-portal objects, it causes an assertion error)
8 = Container (just displays the objects string)
16 = Arcane Sanctuary Gateway (does nothing)
32 = Well (does nothing)
64 = Waypoint (displays ' ')
128 = Secret Jails Door (makes the object unselectable, while keeping it clickable)
XSpace and YSpace: Unknown, some value in subtiles, but I couldn't see any effects in-game.

NameOffset: How many pixels will the objects name be displaced from the pivot (on the z-axis). So setting this to -100 will make the name appear 100 pixels above the animations pixot.

MonsterOK: Boolean, unknown.

OperateRange: Apparently controls the distance in subtiles from which one can use this object, I played around with it, but didn't notice any different in-game.

ShrineFunction: Unused.

Restore: Boolean, controls whenever or not this object is stored in long-term memory and reappears when you return to a previously visited area. Setting this to 0 will make the object disappear once you leave the map.

CODE: Select all

0 = Allows object to disappear
1 = Object is stored in memory
Act: Reference field, a bit field referencing what Acts this object can appear in without glitching up. 15 refers to an object able to appear in all three acts without messing up.

Lockable: Boolean, controls whenever this object can be locked or note. Note: You need to use the proper InitFn function to make it use this column, another issue, the game will display 'Locked Chest' instead of the objects actual name.

CODE: Select all

0 = Unlockable
1 = Lockable
Gore: Boolean, unknown, set to true only for corpses.

Sync: Boolean, unknown, I suspect that this tells the game whenever it should keep the client and server copies of this object in-sync or whenever it doesn't matter. This is usually set to false for those objects that are only spawned via DS1 files and thus cannot get out of sync. This could also be related keeping some other aspects in sync (see Paul's reply to this thread).

CODE: Select all

0 = Don't keep this object synchronised.
1 = Keep this object synchronised.
Flicker: Boolean, whenever or not the light emitted by this object should flicker.

CODE: Select all

0 = Don't allow light to flicker.
1 = Allow light to flicker.
Damage: Controls the amount of damage done by this object (only used when the proper OperateFn function is used), but the ratio used is unknown. If this is set to 0 the game will display a warning if it expects there to be damage.

Beta: Reference field, this is set to true if the object appeared in the beta, and to false if it wasen't.

Overlay: Boolean, unknown, seams to control whenever the game will draw an overlay ontop of the objects graphics while it is not used, but this is just a wild guess.

CollisionSubst: Boolean, controls whenever special collision checking will take place, but I can't figure out how exactly this works.

Left, Top, Right and Bottom: Could be controlling the bounding box of the object (clickable area).

RestoreVirgins: Boolean, whenever or not to restore only unused objects (those objects the player hasen't opened or used yet).

CODE: Select all

0 = Restore all objects
1 = Restore only unused objects
BlockMissiles: Boolean, controls whenever this object will be treated as a wall by missiles.

CODE: Select all

0 = Missiles can fly thru this object.
1 = Missiles will collide with this object.
DrawUnder: Boolean, controls whenever this object is to be drawn the same way as a floor tile (so for example monsters and players will be drawn on top of this object when their graphics overlap it, even if they stand behind the object).

CODE: Select all

0 = Draw normally
1 = Draw as a floor tile
OpenWarp: Boolean, controls whenever the game will display 'To ' or 'trap door' when you highlight the object.

AutoMap: Determines how and if this object will appear on the automap, leaving it blank prevents it from spawning on the map.


Object Functions


Note: The following columns are the heart and soul of this file, they control what an object actually does when you click on it and other parts of it's behavior, they are links to an internal function table (which I will post when I get time to look for it, if it isn't posted already).

OperateFn: This controls the function called when the player clicks on the object.

CODE: Select all

1 - Container (can be trapped with raising undead and fireballs, always drops at least one item as it seams) [used by Caskets]
2 - Shrine (when you don't use the proper InitFn function the game will crash with an unhandled exception)
3 - Container (can be trapped with various things, like poison clouds and fire patches, rarely drops an item) [used by Urns]
4 - Container (can be trapped with various things, drops items more often then function 3 but less often then function 1) [used by Chests]
5 - Container (can only be trapped by raising undead, rarely drops items, when trapped it doesn't make the trap sound ) [used by barrels] 
6 - The Tower Tome (quest object, displays the Tower Quest introduction)
7 - Exploding Object (does damage when used, never drops items) [used by exploding barrels]
8 - Door (controls whenever you can open and close the object repeatedly)
9 - Crain Stone (quest object, apply the correct sequence and a portal opens)
10 - Cains Gibbet (quest object, click it and it spawns Cain)
11 - Controls whenever it can be turned on an off, like a light switch  (used for braziers which are by default unselectable , great work blizzard).
12 - Tree of Inifuss (quest object, drops the bark scroll)
13 - Doesn't work, but doesn't crash either.
14 - Container (can be trapped by various things, drops items rather infrequently) [used by crates]
15 - Portal (click to go somewhere else)
16 - Trap Door (click to reveal a level entrance)
17 - Obelisk (currently just makes the player say impossible, the actual code is gone)
18 - Secret Door (in jails, this is a door you can't close)
19 - Armor Rack (drop a random armor, based on area level)
20 - Weapon Rack (drop a random weapon, based on area level)
21 - Malus Stand (quest object, drops the horadric malus)
22 - Well (useless unless properly set up)
23 - Waypoint (click once to activate, click a second time to open the menu)
24 - Tainted Sun Altar (quest object, drops the Viper Amulet)
25 - Horadric Orifice (quest object, you insert the horadric staff into this --- I know how wrong that sounds)
26 - Book Case (drops books and scrolls of identify and town portal)
27 - Arcane Sactuary Teleport Gateway (no need to explain)
28 - Lam Esen's Tome (quest object, click it and it drops the tome)
29 - Slime Door (one way door, for the maggot lair)
30 - Exploding Object (blows up and makes a blazing-sound) [used by the exploding cow]
31 - Decoy Gidbinn Altar (quest object, click it to make the cannibal boss spawn)
32 - Stash (doesn't work outside of town)
33 - Wirt's Body (drops tons of gold and the leg)
34 - Arcane Portal (the portal that lets you enter the arcane sanctuary)
35 - Steeg Stone (not used and crashes)
36 - Guild Vault (not used and crashes)
37 - Trophy Case (not used and crashes)
38 - Message Board (not used and crashes)
39 - Quest Chest A (drops one horadric cube for each player)
40 - Quest Chest B (drops one horadric scholl for each player)
41 - Quest Chest C (drops one Staff of Kings for each player)
42 - Horazon's Journal (quest object, displays the 'seekers of the tomb of tal-rasha' intro)
43 - Duriel's Door (the entrance to duriels chamber)
44 - The stairs to the second level of the sewers (Act III)
45 - The lever needed to open said stairs
46 - The Gateway to Hell (the one in mephistos durance)
47 - Stairs (don't know which, Maybe I'll check later)
48 - Trapped Soul (don't blindly use this, it will crash when not properly set up)
49 - The Hell Forge (quest object)
50 - Stairs (again unknown, thanks to blizzards wonderful description)
51 - Container (often drops items, doesn't seam to be trapped) [used by various jungle objects]
52 - Diablo's Seal
53 - The Compelling Orb
54 - Diablo's Seal
55 - Diablo's Seal
56 - Diablo's Seal
57 - Quest Chest D (drops one one of khalims body parts for each player)
58 - Quest Chest E (drops one one of khalims body parts for each player)
59 - Quest Chest F (drops one one of khalims body parts for each player)
60 - Nothing (not used and crashes)
61 - Act V Town Gate (click to open, once)
62 - Statue that Spawns an Ancient A
63 - Statue that Spawns an Ancient B
64 - Statue that Spawns an Ancient C
65 - The altar that triggers the Ancients
66 - The door you can only open after killing the Ancients
67 - Frozen Anya
68 - Evil Urn (releases spiders, a random boss, or some items)
69 - Unknown
70 - Entrance to the Worldstone Chamber
71 - Unknown
72 - Portal to Act V (I think)
73 - Portal to Credits (I think)
PopulateFn: This field controls what population function the game will use to spawn this object, a value of 0 (aka blank), will make the object in question unable to spawn. The following values are used by the game (more might exist but I didn't feel like testing for such):

CODE: Select all

1 - Spawn random object from internal table (various caskets, various urns).
2 - Use shrine population logic.
3 - Spawn singular copies of the object, never adjacent to each other.
4 - Spawns a group of barrels (normal and exploding barrels), the object itself is removed.
5 - Spawns singular urns (randomly picked from an internal table).
6 - Spawn many copies of this object, closely adjacent to each other.
7 - Spawns a small group of staked rogues (picked from an internal table).
8 - Spawn singular copies of this object, extremely far apart.
9 - Spawn many copies of the object, slightly further apart then function 6.
InitFn: This controls what happens while the object is active on the map and what initially happens when the object is activated by an approaching player.

CODE: Select all

1 = Shrine (probably responsible for picking a random shrine function to assign to this)
2 = Container (used by urns)
3 = Container (used by chests, probably controlls the lockable part)
4 = Tower Quest Tome (likely checks quest status)
5 = Door (probably used to check whenever it is closed or open)
6 = Crain Stone (likely checks quest status)
7 = Cains Gibbet (likely checks quest status)
8 = Torch / Brazier (makes the object spawn in ON mode)
9 = Inifuss (likely checks quest status)
10 = Unused (spawns in ON mode, walking past it causes fire damage)
11 = Portal (obviously you shouldn't use this)
12 = Permanent Portal (ditto)
13 = Invisible Object (does nothing noticeable)
14 = Torch / Brazier (same as function number 8)
15 = Malus Stand (probably checks quest status)
16 = Well (probably defines how full the well is)
17 = Waypoint (probably checks whenever the waypoint has been activated before)
18 = Jerhyn Placeholder (near entrance)
19 = Jerhyn Placeholder (near palace)
20 = Tainted Sun Altar (probably checks quest status)
21 = Horadric Orifice (probably checks quest status)
22 = Fire (you take fire damage when walking past this)
23 = Lam Esen's Tome (probably checks quest status)
24 = Floor Spikes (stabs you when you stand near it)
25 = Decoy Gidbinn Altar (probably checks quest status)
26 = River of Flame Skeleton (I think it's this, dunno though)
27 = Container (used by Goo Piles)
28 = Spawns patches of gold near the object ()
29 = Arcane Sanctuary Entrance (didn't test, but it's the entrace to the whole place)
30 = Harem Blocker (checks quest status, make you unable to enter)
31 = Quest Chest A (for horadric cube)
32 = Quest Chest B (for horadric scroll)
33 = Quest Chest C (for Staff of Kings)
34 = Troch / Brazier (like function 8, however it will randomly spawn in NU or ON mode)
35 = Guild Vault (will probably crash)
36 = Trophy Case (will probably crash)
37 = Unused (does nothing)
38 = Tyrael's Portal (Act II)
39 = True Gidbinn Altar (probably checks quest status)
40 = Message Board (will probably crash)
41 = Sewer Stairs (the Act III sewers)
42 = Sewer Lever (to open said stairs)
43 = Darkwanderer Placeholder (probably checks quest status)
44 = Gateway to Hell
45 = Bridge to Gateway to Hell (raises when you come near)
46 = Trapped Soul (spawns a trapped soul, from MonStats.txt)
47 = Container (used by chests)
48 = Hell Forge (probably checks quest status)
49 = Hralti Placeholder (near entrance)
50 = Hralti Placeholder (normal spot)
51 = Container (trapped soul)
52 = Natalya Placeholder (normal spot, checks quest status)
53 = Stairs (but which I don't know)
54 = Cain Placeholder (normal spot, checks quest status)
55 = Diablo Placeholder (spawns big-D, if all seals are open)
56 = Diablo's Seal
57 = Container (used by Sparky Chests)
58 = Changes the mode to NU after some time
59 = Related to the Vile Childs the Dark Wanderer spawns.
60 = Compelling Orb (checks quest status)
61 = Cain's Portal
62 = Caged Barbarian's Portal (don't know really)
63 = Ancient Placeholder Alpha
64 = Ancient Placeholder Beta
65 = Ancient Placeholder Gamma
66 = Anya Placeholder (start)
67 = Anya Placeholder (end)
68 = Nihlathak Placeholder (start)
69 = Nihlathak Placeholder (end)
70 = Larzuk Placeholder (for greeting, unused?)
71 = Larzuk Placeholder (normal)
72 = Ancient Altar (probably checks quest status)
73 = Ancient Door (probably checks quest status)
74 = Frozen Anya (probably checks quest status)
75 = Worldstone Chamber Entrance (checks whenever baal is done with his spamming)
76 = Appears to be yet another initFn 8 clone.
77 = Tyrael's Portal (Act IV)
78 = Tyrael's Portal (Act V)
79 = Zoo (the functionality has been pulled from the game)
ClientFn: These are special client side functions.

CODE: Select all

1 = Ambient Sound Generator
2 = Rain Ripple
4 = Unused (crashes since it expects modes objects don't have)
5 = Unused (crashes since it expects modes objects don't have)
6 = Unused (crashes since it expects modes objects don't have)
7 = Burning Skeleton (for River of Flame I think)
8 = Unused (does nothing)
9 = Unused (does nothing)
10 = Bubbles
11 = Has to do with Baal's Lair
12 = Has to do with the Arreat Summit
13 = Dunno really
14 = Another burning skeleton thing (for what area?)
15 = Frozen Anya
16 = Worldstone Chamber Gateway
17 = Zoo (nothing)
18 = Zoo Keeper (nothing)

Per ObjMode Settings
Note: The following columns come in groups of eight, each of them controls certain aspects of the object individually for each mode the object uses.

CODE: Select all

0 - mode NU
1 - mode OP
2 - mode ON
3 - mode S1
4 - mode S2
5 - mode S3
6 - mode S4
7 - mode S5
selectable: Boolean, controls whenever you can select the object (highlight when you scroll over).

CODE: Select all

0 = Unselectable
1 = Selectable
FrameCnt: How many frames does the mode in question have, setting this to 0 will make the game skip this mode.

FrameDelta: At what rate is this animation mode played (in 256ths).

cycleAnim: Boolean, probably determines whenever to loop the animation.

Lit: Diameter of the light radius emitted by this object (in subtiles).

BlocksLight: Boolean, whenever or not this object casts a shadow.

CODE: Select all

0 = Don't cast a shadow
1 = Cast a shadow
HasCollision: Boolean, whenever or not the game uses collision checking for this mode.

CODE: Select all

0 = Can't walk thru the object
1 = Can walk thru the object
Start: At what frame should the animation start playing.

OrderFlag: Controls whenever the object is to be drawn as a physical object, a wall or a floor.

CODE: Select all

0 = Physical object
1 = Floor
2 = Wall
Mode: Boolean, controls whenever the object has this animation mode or not.

Parm: Unknown, some parameter used by the object.



Thanks to everyone who has contributed additional info
Paul Siramy
snowknight
Kingpin

Link to this article: Select all

[url=https://www.d2mods.info/forum/kb/viewarticle?a=393&sid=3a03df7bf1bc29e1a07ca86ec6a8c65e]Knowledge Base - Objects.txt[/url]