|
Junior Member
Join Date: Jun 2010
Posts: 26
|
Hello,
I have some issue when implementing some house rules; I use the "replace thing ID" to override the normal thing, and since I want the thing to be use only in a selected game, I add a source as well to hide it in other games. My problem is the order for accomplishing "replace" and "source": the program replace the thing first, then check if the thing is available by sources. Which means, if I don't use the source, the thing simply doesn't exist. For instance, let's say in Alice's game, weapon finesse add the Dex to damage. I copy the feat, change it, use "replace thing ID" to override the standard feat, and add the source "Alice's game". But I also play in Bob's game, who don't use that rule. The problem is, when I create a character for Bob's game, the feat cease to exist: the normal feat is overridden by the new feat, and the new feat isn't available since the source "Alice's game" isn't selected. I see a way to do what I want to do, it's to keep the normal feat, and add conditions in all eval script, bootstrap, etc; something like this for eval scripts: Code:
if (hero.tagis[source.toto]<>0) then ~house rule here else ~official rule here endif |
#1 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 8,232
|
As you discovered, the "Replace Thing Id" is *always* applied. It's purpose is for when you want to completely replace a built-in thing with your own customized behaviors. You can't do it conditionally.
In order to have the behavior be conditional on a source, you'll need to define two things. First, you need to define the new feat that will be used in Alice's game, and then make it dependent on the source tag, just like you've already done. But do *not* have this new feat replace the standard one. The second step is to create a copy of the standard feat for Bob's game. This one should be designated to replace the standard feat using the "Replace Thing Id". The only change you need to make to this thing is to have it be conditional on the source *not* being selected. Every source defines a global tag that you can test against, and the standard "Sources" mechanism provides a simplified way of checking for the selection of a source, but you need to check that a source is *not* present, so you can't use the simplified mechanism. This is achieved by adding a ContainerReq to the new thing via the button on the right within the Editor. For the ContainerReq, select the phase "Testing Global Tags". For the tag expression, enter "!source.MySource", where "MySource" is the id of the new source you've defined for Alice's game. Then save the thing. At this point, you have two distinct things. One of them is only used when the source for Alice's game is enabled and the other is used whenever the source is *not* selected. Another simple way to handle things like this is to clone the complete set of data files for the game system. You can go to the Tools menu and select the "Duplicate Game System" option. This will create a copy of the data files that you can customize independently of the standard data files. If Alice's game has lots of customizations, you can copy the Pathfinder files as "Alice's Game". Then you can add the customized things specific to her game only to that set of data files. When you create a character for Alice's game, use that set of data files. Otherwise, use the standard set of data files. Hope this helps.... |
#2 |
Junior Member
Join Date: Jun 2010
Posts: 26
|
Doesn't the first solution have some problems with bootstraps ?
Let's keep the above example: Weapon Finesse is modified in Alice's game but not in Bob's game. I duplicate the feat, use the "replace thing id" and use the condition "!source.Alice" in the ContainerReq; and I create a new feat with the source "Alice". Now, in Alice's game, I create a wizard, with a familiar. The familiar automatically has the feat "Weapon Finesse", and in the file structure, it is translated by a bootstraps: the familiar race has a bootstraps with Weapon Finesse. With the "replace thing id", the bootstrap is now the feat with the CotainerReq's condition "!source.Alice" (and that's why "replace thing ID" is very convenient: you don't have to care about any other things, any script/bootstrap/anything will point to the replacing thing), and then, the bootstrap is simply ignored. Am I wrong ? For now I use the second solution; and if Bob use some of the Alice's house rules, I copy the things accordingly in the .user file. But it can be tedious if the house rule has many interdependencies, like a class variant, with new custom class abilities and variant of class ability: that's why I think it would be very convenient to add an option for "conditional id replace". |
#3 |
Senior Member
Volunteer Data File Contributor
Join Date: Jun 2010
Posts: 623
|
Quote:
It apparently doesn't work like I thought. The conditional id replacement is sort of what I expected (such as conditional replacement depending on whether or not that source is attached.) |
|
#4 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 8,232
|
I'll add this to the todo list. However, the replacement logic is done at a much lower level than the source handling. As such, some very fundamental code will need to be overhauled to add the capability, so adding conditional id replacement will entail a great deal of work.
|
#5 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 8,232
|
Hmmm. Good catch. I wasn't thinking of a scenario like that. It seems you'll actually need *three* things then.
First, create two things as duplicates of the standard Weapon Finesse feat. Neither of them should use the "Replace Thing Id" option. One should be the standard feat, with a dependency on the Alice source not being defined, while other is the modified version that is dependent on the Alice source. Now for the third thing. This new thing uses the "Replace Thing Id" mechanism and replaces the standard Weapon Finesse feat. However, this feat should do absolutely nothing. All the behaviors should be eliminated from the feat. The only thing it should do is bootstrap the two things defined above. This way, the replacement feat is always added, regardless of whether the source is enabled or not, and it will always add one of the two things, depending on the source. The only thing you need to do now is to make sure the first two things are hidden from display, else you'll have two entries listed all the time. I can't remember the proper tag for this in Pathfinder. If you don't know it either, Mathias ought to be able to point it out. |
#6 |
Junior Member
Join Date: Jun 2010
Posts: 26
|
It seems to be easy for special abilities, and maybe for feats (I didn't test for feats). I can't find the same for more complex things like competences.
|
#7 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 13,213
|
Quote:
Quote:
I've put adding that tag on my to-do list. |
||
#8 |
Senior Member
Join Date: Jun 2010
Location: Sunny WA State
Posts: 141
|
Thanks for the feedback. I see now that each version auto checks for an update at program start so that is what I was confused on how to make happen. Now I just need to cut and paste the user files I want to add to either game system... or in my case NOT add any user files to what I have labeled "Pathfinder_Core"
Awesome feature! |
#9 |
Senior Member
Lone Wolf Staff
Join Date: May 2005
Posts: 13,213
|
Competences? I'm afraid I don't recognize that term (as used in Pathfinder).
|
#10 |
|
|