MT1.3b87.02 Campaign Framework

Discussion concerning lmarkus' campaign framework for D&D3.x and Pathfinder.

Moderators: dorpond, trevor, Azhrei, giliath, Gamerdude, jay, Mr.Ice, lmarkus001

Forum rules
Discussion regarding lmarkus001's framework only. Other posts deleted without notice! :)
User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by lmarkus001 »

dontadow wrote:This is great. I do have a quick question. I do death a bit differently in my campaign. How do i edit the death rules (where do i go).

In my game PCS are disabled after they hit -0 and for every -10 they receive an injury. If a player has 4 injuries they are dead.

One day i want to try the whole rules, but for now I'd be satisfied with tokens not turning into obstacles once they reach -10. How do I change this to them just becoming prone and disabled indefinately?
There are two parts to this. Tokens being moved to the Object layer, and definition of "deathpoint".

Stopping tokens from dropping to the Object layer:

We found all the dead tokens remaining on the token layer to be cumbersome, which is why they drop to the object layer. Also, if the DM puts a list of items in the Notes field of the token, then when it drops to the object layer the players can click and easily "loot" the body.

If you want them to do something else, then the spot to make the change is in one of these routines (depending on whose HP Bars you are using):

subUpdateHPStatesBarsLGM
subUpdateHPStatesBarsAliasmask


In subUpdateHPStatesBarsLGM look for this bit of code and remove the two lines that sets the token to the object layer:

Code: Select all

...

[H, IF( isNPC() && !tDieHard ): eval(if(state.Dying, 'setLayer("object")', '0'))]
[H: state.StableHP = if(((HP + HPtemp) >= 0), 0, state.StableHP)]

[H: state.Dead = if((HP + HPtemp) <= deathpoint, 1, 0)]
[H, IF(state.Dead), CODE: {
  [H: if(isNPC(), setLayer("object"), '0')]
  [H: state.Dying = 0]
  [H: state.Unconscious = 0]
  [H: state.Prone = 0]
  [H: state.StableHP = 0]
}]
[H: eval(if(state.Dead, 'removeFromInitiative()', '0'))] 

...  
Deathpoint is specified by one of the following 3 options:
1) D&D ... HP <= -10
2) PF ... HP <= max( -10, Constitution)
3) Creature Type (Undead, Constructs, Swarms all die at 0 hp in both systems)

In the table SysVars, row 6 has a deathpoint override for specific creature types.

Code: Select all

[{"deathPoint":"0","typeArray":["Construct","Undead"],"subtypeArray":["Swarm"]}] 
If you wish to define a different deathpoint for humanoids, then you can just add to that json. Of course you must specify the creature type for this to be relevant.

Code: Select all

[
   {"deathPoint":"0",
    "typeArray":["Construct","Undead"],
    "subtypeArray":["Swarm"]},
   {"deathPoint":"-40",
    "typeArray":["Humanoid"],
    "subtypeArray":[""]}
] 

dontadow
Cave Troll
Posts: 45
Joined: Mon Oct 23, 2006 12:13 pm

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dontadow »

Great, this is exactly what I was looking for. I've been wanting to edit this for a while. Last night I spent a lot of time with it and with no luck, figured the new update today was a sign that I should just ask. Thanks. By the way

dontadow
Cave Troll
Posts: 45
Joined: Mon Oct 23, 2006 12:13 pm

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dontadow »

Another question. The target area is a great feature, and dealing damage automatically is very useful. Does the attack feature have such a function?

User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by lmarkus001 »

dontadow wrote:Another question. The target area is a great feature, and dealing damage automatically is very useful. Does the attack feature have such a function?
Not explicitly no. There are so many individual modifiers to attacks that a single dialog for a large group of creatures becomes too messy.

I guess an attack dialog that lets you set the SAME options for all selected tokens would be an easy enough option. It would not tell you what weapons were being employed (it could just let you select weapons to swing by #, aka Weapon0, Weapon1, etc.), and it would not preserve any settings from attack to attack. This might be an expedient tool for large packs of orcs or whatever, then the DM would know what weapons were in what slots (since all the tokens would be the same) and would mentally apply attack variables like Higher Ground and Flanking.

EDIT: Hummm... you may have been asking about applying damage from an attack automatically. No, that is not currently implemented.

Further followup: I just created a mass attack dialog that only prompts once for a set of selected tokens. It looks useful for large fights of unsophisticated critters. I will include it in the next release.

dantarith
Cave Troll
Posts: 62
Joined: Wed Jun 01, 2011 6:09 am

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dantarith »

Ok so I am obviously stupid! I thought this framework was loaded for AD&D 3.5 and ready to play just input your own maps, char and nasties. However, looking at this thing it is so loaded I cannot even figure out how or where to put even a characters class let alone fill the bazillion sheets that pop up when i use the "setup blank" macro. Can anyone help me with this framework? I used a 4E framework that was really simple to use and was self explanatory but not this beast. Am I doomed to use a blank framework and just move the tokens about my own maps without any functionality? Or, will I have to start learning to program and create my own macros from scratch just to play 3.5? Please help I am about ready to tell my players sorry I know you all think 4e sucks but I cannot find a framework I can use so back to 4e we go.
Sorry about the ramblings I am just really frustrated with this!!!

Elorebaen
Dragon
Posts: 365
Joined: Sat Dec 22, 2007 5:37 pm

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by Elorebaen »

dantarith wrote:Ok so I am obviously stupid! I thought this framework was loaded for AD&D 3.5 and ready to play just input your own maps, char and nasties. However, looking at this thing it is so loaded I cannot even figure out how or where to put even a characters class let alone fill the bazillion sheets that pop up when i use the "setup blank" macro. Can anyone help me with this framework? I used a 4E framework that was really simple to use and was self explanatory but not this beast. Am I doomed to use a blank framework and just move the tokens about my own maps without any functionality? Or, will I have to start learning to program and create my own macros from scratch just to play 3.5? Please help I am about ready to tell my players sorry I know you all think 4e sucks but I cannot find a framework I can use so back to 4e we go.
Sorry about the ramblings I am just really frustrated with this!!!
dan,

Take a deep breath =) Let me say this up front, you and your players have to be willing to put in some time to figure out how to best use this framework. If you are not able to do that, then I suggest not using it. With that said, this is the most feature-rich framework out there for 3.5/Pathfinder.

When I stated checking it out, I looked at the example characters and tried to emulate how they worked. You really just have to start messing around with it. Also, you do not have to use every option. Figure out what works for you, and do not worry about the rest.

Setup blank: Just plugin numbers, and see what happens. You will quickly figure it out. Look at the example characters. If you have specific questions, post them.

Best.

User avatar
aliasmask
RPTools Team
Posts: 9029
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by aliasmask »

I would start with dropping a token, click Edit Character | Core and put in your stats. Just follow the Edit Character list and complete in this order: Core, Speed, Skills, Weapons, Items. Be sure to read the notes on the various menus. Racial traits or abilities that give some kind of bonus to saves, move, attack or whatever can be created as an item.

dantarith
Cave Troll
Posts: 62
Joined: Wed Jun 01, 2011 6:09 am

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dantarith »

Thanks for the replies! First off I have been messing with this for over a week cause it appear by the posts the only working supported 3.5 framework LOL. I can find and fill in those basic ones but for example as I said I cannot find anywhere to enter the Class which of course changes MANY stats. Does this framework not do that? It should at least "I would think" fill in the skills table based on class/stats automatically. I see the casters have a huge lib of things available but what of the simple fighter or the sneaky rogue? Where are all the other feats? Does the framework calculate any of these? Does it change based on weapon? Or, do we just do it all by pencil and paper and plug in values? what happens when a char levels? Just a few questions I have. I rally am not putting down those who have created this framework. It just seems like there are severel requests for a simple working framework.
What is this "Lindsey's framework" I read about? Is this the same one but grown up?

User avatar
aliasmask
RPTools Team
Posts: 9029
Joined: Tue Nov 10, 2009 6:11 pm
Location: Bay Area

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by aliasmask »

Lindsay is the author of the 3.5/Pathfinder framework. It doesn't have any specific class related tools, per se. The spell manager only deals with magic and special abilities and is a drop-in from another author. Lindsay has integrated many of the community tools with his own work. His work mostly deals with doing attacks, applying damage and making saves and skill checks. Everything else is an extension of that including the mod and item system (which are basically the same, just applied differently). There's a global settings button somewhere that can change how some of the combat rules are applied. (switch from 3.5 to PF).

neofax
Great Wyrm
Posts: 1694
Joined: Tue May 26, 2009 8:51 pm
Location: Philadelphia, PA
Contact:

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by neofax »

I have a small tutorial on how to setup a token that another person started but I added onto for people playing in PFS(Pathfinder Society). The easiest way I have found to make tokens is use the statblock2token macro and iMarvins website for creatures that are OGL. If you want, I can send you the word tutorial.
Image
Time-Zone information UTC -5

User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by lmarkus001 »

I do nothing explicitly relating to class. Generally I put the classes in the token Label just for reference (or GM Label for NPCs so that data is kept secret).

The spell managers (Plothos & Wrathgon/Neofax) require you to specify classes (understandably) but they are their own tools that are just incorporated into the entire campaign file to add capability. Class is generally not relevant to most D&D/PF mechanics. When it is relevant, it is usually so obfuscated, that it is not worth coding (spells being the notable exception). Really all that is usually needed is Caster Level, but this also can vary wildly, especially when you start adding in Prestige classes.

I could easily add a JSON Property to store the set of classes for a token, and maybe another display property that made that JSON human readable. I have no need for the data, but I guess a place to store that data might make some folks happier, but will be a bit confusing as the spell managers would not draw on this token class data, so you would in effect be defining the class twice.

dantarith
Cave Troll
Posts: 62
Joined: Wed Jun 01, 2011 6:09 am

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dantarith »

Well that helps clear things up. I thought I was missing something. As far as those instructions that would be awesome. And thank you for all the help! If you wouldnt mind that would really help at least putting them in there ;)

dantarith
Cave Troll
Posts: 62
Joined: Wed Jun 01, 2011 6:09 am

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by dantarith »

lmarkus001 wrote:I do nothing explicitly relating to class. Generally I put the classes in the token Label just for reference (or GM Label for NPCs so that data is kept secret).

The spell managers (Plothos & Wrathgon/Neofax) require you to specify classes (understandably) but they are their own tools that are just incorporated into the entire campaign file to add capability. Class is generally not relevant to most D&D/PF mechanics. When it is relevant, it is usually so obfuscated, that it is not worth coding (spells being the notable exception). Really all that is usually needed is Caster Level, but this also can vary wildly, especially when you start adding in Prestige classes.

I could easily add a JSON Property to store the set of classes for a token, and maybe another display property that made that JSON human readable. I have no need for the data, but I guess a place to store that data might make some folks happier, but will be a bit confusing as the spell managers would not draw on this token class data, so you would in effect be defining the class twice.
That would be helpful thank you so much! Perhaps someone later can make the other umm functions/macros that could use this info to calcualate and populate other stats and info such as class skills, hit, AoO, etc. The more that can be done on the fly the handier it is during game play. Thanks for all your hard work it is quite impressive the amount of work that has been done on this framework!

Jazlizard
Kobold
Posts: 22
Joined: Sun Jun 15, 2008 11:28 pm

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by Jazlizard »

I get the following error when I try the move token macro:

   Invalid condition in IF(hasProperty( "SizeM", tToken )) roll option.       Statement options (if any): H, IF( hasProperty( "SizeM", tToken ) )       Statement Body : setSize( "CUSTOM", tToken, SizeM )

Any ideas on why that might be?

I'm trying to move a token from one map to another as a GM. I have the coordinates and maps set in the globals.

Appreciate any help!

User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: MT1.3b87.02 Campaign Framework (LATEST VERSION)

Post by lmarkus001 »

Jazlizard wrote:I get the following error when I try the move token macro:

   Invalid condition in IF(hasProperty( "SizeM", tToken )) roll option.       Statement options (if any): H, IF( hasProperty( "SizeM", tToken ) )       Statement Body : setSize( "CUSTOM", tToken, SizeM )

Any ideas on why that might be?

I'm trying to move a token from one map to another as a GM. I have the coordinates and maps set in the globals.

Appreciate any help!
I am able to reproduce this, so it is clearly a bug! I will work on fixing it...

EDIT: Ah ha! I found the issue and will incorporate in the next patch. If you want it resolved now, replace LibMoveTokensToMap macro with:
LibMoveTokensToMap

Code: Select all

<!-- "
dest = json object (coord) which contains an array of integer coordinates
mLS = map name string
" -->
[H: dest = json.get(macro.args, "dest")]
[H: mLS = json.get(macro.args, "mLS")]
[H: scatter = json.get(macro.args, "scatter")]
[H: forcePC = json.get(macro.args, "forcePC")]
[H: currentMap = getCurrentMapName()]

[H: TokenList = getSelected()]
[H: nTokList = "" ]
[H: numTList = listCount(TokenList)]
[H: abort(numTList)]

[H: xC = json.get(json.get(dest, "coord"), 0)]
[H: yC = json.get(json.get(dest, "coord"), 1)]

[H: cntX = 0]
[H: cntY = 0]
[H: npcInitJ = "[]" ]

[H: noInit = "The token is not in the initiative list." ]

[C(numTList,""), CODE:
  {
  [H: tToken = listGet(TokenList,roll.count)]
  [H: cInit = noInit ]
  [H, IF(currentMap != mLS), TOKEN(tToken): cInit = getInitiative() ]

  [IF( isPC(tToken) && !forcePC ), CODE: {
    [H: tparams = json.set( json.set( json.set( json.set( json.set( json.set( "{}", "TokenID", tToken ), "dX", xC+cntX ), "dY", yC+cntY ), "destMap", mLS ), "currentMap", currentMap ), "init", cInit ) ]
    [R, W( getOwners( "json", tToken ) ): "<b>Token Move</b>: Click " + macroLink( "this link", "pcMoveTokenToMap@this", "gm-self", tparams, tToken ) + " to move <i>" + getName(tToken) + "</i> to " + mLS + " (" + ( xC+cntX ) + "," + ( yC+cntY ) + ")<br>"  ]
    [R, G: "Sent <i>" + getOwners( ", ", tToken ) + "</i> a link to move <i>" + getName( tToken ) + "</i> to  " + mLS + " (" + ( xC+cntX ) + "," + ( yC+cntY ) + ")<br>"  ]
  };{
    [H: nTokList = listAppend( nTokList, tToken ) ]
    [H, IF( currentMap != mLS && cInit != noInit ): npcInitJ = json.append( npcInitJ, json.set( "{}", tToken, cInit  ) ) ]
    [H, IF(currentMap != mLS), TOKEN(tToken): removeFromInitiative()]
    [H, IF(currentMap == mLS): moveToken(xC+cntX, yC+cntY, 0, tToken); moveTokenToMap(tToken, mLS, xC+cntX, yC+cntY)]
    [H: output = "Moved token <i>" + getName(tToken) + "</i> to " + if(currentMap == mLS, "", " map: " + mLS + "; ") + "coordinates X= " + (xC+cntX) + ", Y= " + (yC+cntY) + "<br>"]
  }]

  [IF( isPC(tToken) ), CODE: {
    [R, IF( forcePC ): output ]
  };{
    [R, G: output ]
  }]
  
  [H, IF( scatter ): cntX = if( cntX == 1, -1, cntX+1 ) ]
  [H, IF( cntX == 0 && scatter ): cntY = if( cntY == 1, -1, cntY+1 ) ]
  }
]

[H: numNTList = listCount(nTokList)]
[H, IF( currentMap != mLS ), CODE: {
   [H: setCurrentMap( mLS ) ]
   [C(numNTList,""), CODE: {
      [H: tToken = listGet(nTokList,roll.count)]
      [H, IF( hasProperty( "SizeM", tToken ) ): setSize( "CUSTOM", tToken, getProperty( "SizeM", tToken) ) ]
   }]
   [H: setCurrentMap( currentMap ) ]
};{}]

[H, IF( json.isEmpty( npcInitJ ) ), CODE: {
};{
  [H: setCurrentMap( mLS ) ]
  [H, FOREACH( npc, npcInitJ ), CODE: { 
    [ fN = json.fields( npc ) ]
    [TOKEN( fN ): addToInitiative( 0, json.get( npc, fN ) ) ]
  }]  
  [H: setCurrentMap( currentMap ) ]
}]

[R, G: macroLink( "Click to go to " + mLS + " (" + xC + "," + yC + ")", "gotoMap@this", "none", json.set( json.set( json.set( "{}", "mapName", mLS), "x", xC ), "y", yC ) ) ]
Last edited by lmarkus001 on Fri Jul 13, 2012 1:54 pm, edited 1 time in total.

Post Reply

Return to “D&D 3.5/Pathfinder 1e Campaign Macros”