Jump to content

DLTCEP Error message "action.ids is wrong"? (resolved to: wrong action no. in Virtue mod)


Ieldra

Recommended Posts

I get the error message "Action.ids is wrong. Actions won't be resolved" when starting DLTCEP. I intend to use DLTCEP for the making of spells and items, and I don't know if this error will prevent me. Anyway, I'd like to know the reason for this - I've looked into Action.IDS and apart from having some entries repeated about 30 times (probably added by about 30 mod components without checking if they already exist), I've seen nothing immediately recognizable as wrong.

 

Does anyone know what this means? And how to fix it?

Link to comment

Well, besides a nuisance at every startup, it won't cause you any problems when you are only editing spells and items.

But, DLTCEP was intended as a complex modding/bugfinding tool, and when it complains usually it is right :)

Some of those mods likely broke action.ids which can result in some dialogs not working or if you compile a script, it can break that script.

 

There are many things that could result in this message, from a completely missing action.ids to some bad entries. You might get a hint on what's wrong if you load the file into dltcep's own ids editor.

If that didn't help, save the file (back up your old action.ids) and compare the two.

dltcep is supposed to 'fix' the problems, but if it cannot cope with them, it might truncate the file, or fumble some entries near the problem.

Link to comment

I've got it. Virtue adds this entry to Action.IDS:

 

163 IG(S:GLOBAL*,S:Area*D0VTYPE,I:Value*)

If I remove this, DLTCEP won't complain any more, and as it is never used in any of SimDing0's scripts, I guess I can remove it without any negative consequences. EDIT: it *is* used for replacement in the tp2, so it shouldn't be removed.

 

Anyway, this brings me to my attempt to gather some understanding of how scripting works in the IE in the lower level:

 

The comments in Virtue's tp2 file tell me that the new entry is supposed to be a custom version of IncrementGlobal, with an identifier list D0VTYPE.IDS (which exists - I checked) added for the second parameter. In that case, the action number is wrong, and it should rather be

109 IG(S:GLOBAL*,S:Area*D0VTYPE,I:Value*)

If I interpret all this correctly, the new entry instead attempts to overload ReputationInc(I:Reputation*). Which brings me to my question:

 

How does DLTCEP know that this is an error?

 

(1) I assume that the action name in the IDS file is just a name, and that I could use any other name instead, and any other names for the parameters, with the same results as long as the action parameters are of the same type and use the same identifier lists, if any. I assume that names are resolved at compile time.

(2) I gather from IESDP that the parameter structure of the action calls in the BCS files is the same for every action, they only differ in the parameter slots filled and, of course, their meaning. So it should be possible to call any action with any set of parameters as long as it is compatible with the BCS format. SimDing0 should have been able to overload action 163 with the above line, although he would have to know its implementation within the game engine to know what he was doing with the revised action. Without that knowledge, there would be no guarantee that the result would be anything meaningful. It could even result in a crash of the game.

(3) For comparison: action 31 accepts two different parameter structures (Spell(O:target*,I:Spell*Spell) and SpellRES(S:resource*,O:target*)), and they are not transformed into one at compile time, because if I call the format SpellRES(S:resource*, O:target*), the resource name appears in the compiled script, while, if I call Spell(O:target*, Spell*Spell), the resource name does not appear. So the game engine must be able to recognize different parameter structures in action calls at runtime.

 

The bottom line: all this means that DLTCEP shouldn't be able to find that the new line contains an error without having access to low-level documentation of the game engine, or having decompiled bgmain.exe. If there is such low-level documentation, where can I find it? Yes, I don't really need it for modding, but in my experience debugging any piece of code is very much easier if you have that knowledge in the background.

 

EDIT: I notice that the_bigg already reported the wrong action number back in 2005 (here). Although no attempt was made to change anything, my guess is that this is responsible for some strange reputation changes that occur sometimes if you have Virtue installed.

Link to comment

Short answer: DLTCEP does magic :)

 

Long answer: DLTCEP has some low level information about the actions, I typed in some tables that specifically contain information about string parameters.

I don't recall i wrote stuff to match this info on the actual contents of action.ids, but i will check it soon.

Link to comment

Ok, I checked it, it doesn't use the low level info, but if you got 2 values referenced by the same symbol (IG), dltcep won't like it.

Probably it should have written a more precise report to point out the problem, but nevertheless, it is a problem caused by one of the mods.

Link to comment
Ok, I checked it, it doesn't use the low level info, but if you got 2 values referenced by the same symbol (IG), dltcep won't like it.

Probably it should have written a more precise report to point out the problem, but nevertheless, it is a problem caused by one of the mods.

Strange, I have IG in my action.ids, but only once, i.e. it references only one action number, albeit the wrong one. So that can't be the reason. Anyway, I'll forget about this for now and do some dialogue writing instead. My new NPC needs a few more lines more urgently than I need this exotic information...

Link to comment

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...