[Savage Worlds] RPTroll's Campaign File Framework

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

User avatar
syntruth
Giant
Posts: 241
Joined: Mon Aug 18, 2008 7:15 pm
Location: Michigan, USA

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by syntruth »

Played again last night, was still using several versions ago, so had a few bugs, but nothing show stopping. Just updated to the latest tokens and things are looking good. :D Despite not wanting to run a game on Mondays, I actually can't wait, due to SW:Fantasy is being a lot of fun.

A small note: abort(0) has to be in a [h: ] option, otherwise it still spits out a blank line.

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

Thanks for the feedback. I've been adding the aborts as I code. I'll make sure to include the h:
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

User avatar
syntruth
Giant
Posts: 241
Joined: Mon Aug 18, 2008 7:15 pm
Location: Michigan, USA

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by syntruth »

I'm not sure if this is how you want it done (I think there was something about sending you updates was listed somewhere in the thread earlier, but...I'm being lazy-ish. >.>) ...anyways, I'm updating some of the macros after feedback from my players. The biggest one, is that the Next Init, at a glance, got confusing, so I hacked an edit in to display it differently, plus added in the single-quote html entity to to make it "grammar" correct. (I'll get hounded if I didn't, y'know? ;) )

Code: Select all

[h:step=getLibProperty("StepCount")]
[h:step=if(step=="",-1,step)]
[if(step==-1), code:{
  [macro("SortInits@this"):""]
};{}]

[h:inits=getLibProperty("Inits")]
[h:inits=if(json.type(Inits)!="ARRAY","[]",inits)]
[h:numInits=json.length(Inits)]
[h:assert(numInits,"No one has drawn any cards " + getMacroName())]

[h:holders=Holding()]

[h:step=step+1]
[h:round=getLibProperty("Round")]
[h:round=if(round=="",0,round)]
[if(step>=numInits), code:{
  [macro("RoundReset@this"):round]
};{
  [h:current=json.get(inits,step)]
  [h:tName=json.get(current,"Name")]
  <b>It's [r:tName][r,if(endsWith(tName, "s")): "'"; "'s"] Turn!</b>
  [h:tokenId=findToken(tName)]
  [if(tokenId!=""), code:{
    [macro("CheckExpiredPowers@Lib:Powers"): "tokenId="+tokenId]
  };{}]
  [h:setLibProperty("StepCount",step)]
  [if(json.length(holders) > 0 || step+1 < numInits): "<br> Remaining Inits: "]
  [foreach(holder,holders): holder + "(holding) "]
  [for(i,step+1,numInits), code:{
    [json.get(json.get(inits,i),"Name")]
    [h:card=json.get(json.get(inits,i),"Card")]
    [CardSymbol(card)]
  }]
}]  

If you would rather have this e-mailed or something, let me know. Otherwise, I'm hacking some of the html a bit. I don't want to step on your toes or anything, though. ^.^

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

Here is fine. You can also send the token via email or attach it here.


At some point soon I'll have RPTroll.com up and running. The site will contain older versions of the framework, rptokens you can drop onto your campaign and a complete wiki-fied documentation set.
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

syntruth wrote:I'm not sure if this is how you want it done (I think there was something about sending you updates was listed somewhere in the thread earlier, but...I'm being lazy-ish. >.>) ...anyways, I'm updating some of the macros after feedback from my players. The biggest one, is that the Next Init, at a glance, got confusing, so I hacked an edit in to display it differently, plus added in the single-quote html entity to to make it "grammar" correct. (I'll get hounded if I didn't, y'know? ;) )

Code: Select all

[h:step=getLibProperty("StepCount")]
[h:step=if(step=="",-1,step)]
[if(step==-1), code:{
  [macro("SortInits@this"):""]
};{}]

[h:inits=getLibProperty("Inits")]
[h:inits=if(json.type(Inits)!="ARRAY","[]",inits)]
[h:numInits=json.length(Inits)]
[h:assert(numInits,"No one has drawn any cards " + getMacroName())]

[h:holders=Holding()]

[h:step=step+1]
[h:round=getLibProperty("Round")]
[h:round=if(round=="",0,round)]
[if(step>=numInits), code:{
  [macro("RoundReset@this"):round]
};{
  [h:current=json.get(inits,step)]
  [h:tName=json.get(current,"Name")]
  <b>It's [r:tName][r,if(endsWith(tName, "s")): "'"; "'s"] Turn!</b>
  [h:tokenId=findToken(tName)]
  [if(tokenId!=""), code:{
    [macro("CheckExpiredPowers@Lib:Powers"): "tokenId="+tokenId]
  };{}]
  [h:setLibProperty("StepCount",step)]
  [if(json.length(holders) > 0 || step+1 < numInits): "<br> Remaining Inits: "]
  [foreach(holder,holders): holder + "(holding) "]
  [for(i,step+1,numInits), code:{
    [json.get(json.get(inits,i),"Name")]
    [h:card=json.get(json.get(inits,i),"Card")]
    [CardSymbol(card)]
  }]
}]  

If you would rather have this e-mailed or something, let me know. Otherwise, I'm hacking some of the html a bit. I don't want to step on your toes or anything, though. ^.^
Ok. I incorporated this. It will be in the next release. There's a request for a modifier dropdown. Do you want somewhere to put a target number as well? There's also a request to make tabs out of the edit gear window. I'll probably make the select gear tabbed as well.

Any hot requests for this weekend?
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

RPTroll wrote:
syntruth wrote:I'm not sure if this is how you want it done (I think there was something about sending you updates was listed somewhere in the thread earlier, but...I'm being lazy-ish. >.>) ...anyways, I'm updating some of the macros after feedback from my players. The biggest one, is that the Next Init, at a glance, got confusing, so I hacked an edit in to display it differently, plus added in the single-quote html entity to to make it "grammar" correct. (I'll get hounded if I didn't, y'know? ;) )

Code: Select all

[h:step=getLibProperty("StepCount")]
[h:step=if(step=="",-1,step)]
[if(step==-1), code:{
  [macro("SortInits@this"):""]
};{}]

[h:inits=getLibProperty("Inits")]
[h:inits=if(json.type(Inits)!="ARRAY","[]",inits)]
[h:numInits=json.length(Inits)]
[h:assert(numInits,"No one has drawn any cards " + getMacroName())]

[h:holders=Holding()]

[h:step=step+1]
[h:round=getLibProperty("Round")]
[h:round=if(round=="",0,round)]
[if(step>=numInits), code:{
  [macro("RoundReset@this"):round]
};{
  [h:current=json.get(inits,step)]
  [h:tName=json.get(current,"Name")]
  <b>It's [r:tName][r,if(endsWith(tName, "s")): "'"; "'s"] Turn!</b>
  [h:tokenId=findToken(tName)]
  [if(tokenId!=""), code:{
    [macro("CheckExpiredPowers@Lib:Powers"): "tokenId="+tokenId]
  };{}]
  [h:setLibProperty("StepCount",step)]
  [if(json.length(holders) > 0 || step+1 < numInits): "<br> Remaining Inits: "]
  [foreach(holder,holders): holder + "(holding) "]
  [for(i,step+1,numInits), code:{
    [json.get(json.get(inits,i),"Name")]
    [h:card=json.get(json.get(inits,i),"Card")]
    [CardSymbol(card)]
  }]
}]  

If you would rather have this e-mailed or something, let me know. Otherwise, I'm hacking some of the html a bit. I don't want to step on your toes or anything, though. ^.^
Ok. I incorporated this. It will be in the next release. There's a request for a modifier drop down on the weapon use window. Do you want somewhere to put a target number as well? There's also a request to make tabs out of the edit gear window. I'll probably make the select gear tabbed as well.

Any hot requests for this weekend?

And regarding HTML changes. If you can modify the tokens and put a few blank lines around the edits so I'll know where they are. You can then either email me the token or post it here.

Edit: Tabbed Edit Gear Done
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

pelwer
Cave Troll
Posts: 36
Joined: Sat Jan 24, 2009 2:31 pm
Location: Portland, OR
Contact:

Notes from a Minimalist....

Post by pelwer »

Troll,

I added a couple of small Macros to my copy of the framework that you and others might find useful. They aren't pretty, but they are fast.

Toggle Power Active:
I don't use the Powers in the character sheet. I couldn't see the benefit of having them in the character sheet, so I stripped them out of my setting. However, I did like the the Power Active state to remind us to pay the Power Point cost every round. This works just like Toggle Shaken and I put it in the GM macro group.

Config Extra:
This is just a big input function with minimal error checking to allow me to set up an Extra's Attributes, Skills, and Gear very quickly. When I am configuring a large number of different types of tokens I find this to be very helpful. I usually poke the "Set Default Values" and "Non Wildcard" macro buttons prior to calling this one. The form is ugly ( just using the standard input function ) but since everything is radio buttons, you can configure and extra in about 10 clicks! Much faster than typing in the token properties or firing up the character sheet and clicking through the forms. This macro provides just enough configuration to enable the Init Control to use weapons and traits for the extra.
ConfigExtra.png
ConfigExtra.png (20.37 KiB) Viewed 1512 times
Don't get me wrong, my Players and I love the character sheet. It's just overkill for extras.

The code is attached for any that may want it.

Keep up the great work!
ConfigExtra.mtmacro
(2 KiB) Downloaded 66 times
TogglePowerActive.mtmacro
(757 Bytes) Downloaded 62 times
Pat.
A little nonsense, now and then, is relished by the wisest men. - Willy Wonka

Currently playing Savage Worlds in the home-brew world of Shadora.
We are looking for players! PM me if interested.

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

The configure extra window looks pretty sweet for a gm. I agree it takes too long to set up an extra. My way around it was to have a number of different power levels of extras, plop them down, adjust what's needed then copy all over the place. I'll incorporate that into the framework.

On the powers active window, does it active powers on the token so that they burn power points each round? Also, does the Powers Active go on the Lib:GM or the Lib:Powers token?


Good Stuff!

Edit: I like the concept of the radio buttons for Extra setup. Do you mind if I modify it a bit to work off some of the other properties in the framework so that lists are automatically updated when other parts of the framework change?

Edit2: Ok, the Extra stat setter now reads the die types from DieList() function which also populates the drop downs. It also now reads the gear and seperates the Melee, Shooting and Throwing weapons into their own list. I'm not sure what to do about the ammo. I guess I could read the ammo types and create the list from that.
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

pelwer
Cave Troll
Posts: 36
Joined: Sat Jan 24, 2009 2:31 pm
Location: Portland, OR
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by pelwer »

Edit: I like the concept of the radio buttons for Extra setup. Do you mind if I modify it a bit to work off some of the other properties in the framework so that lists are automatically updated when other parts of the framework change?

Edit2: Ok, the Extra stat setter now reads the die types from DieList() function which also populates the drop downs. It also now reads the gear and seperates the Melee, Shooting and Throwing weapons into their own list. I'm not sure what to do about the ammo. I guess I could read the ammo types and create the list from that.
I was hoping you would want to make it "official" and "correct". :)

My approach for ammo was just to bomb in enough for 1 fight. Kind of along the lines of how the SWEX suggests you track ammo for an extra. I'm sure you can hook things up to make it more integrated and correct.

On the Activate Powers, I wasn't aware that the framework was managing the maintenance of powers. In my testing a few revs back, I didn't see that happening, so I assumed the state was just a "reminder" for the player/gm. I just need a reminder as I could see the players saying, "I didn't want to keep that running." In that respect, it would be nice to have a way to quickly edit power points from the main interface. However if this is already being managed by the framework, then this is only a problem for me. :)

Which reminds me...

It is not always obvious to the user what the framework is managing and what it is leaving up to the user to manage. For example, I think I saw that the framework understands the "Quick" edge. I also noticed that the FW manages wound penalties, but does it understand the Nerves of Steel edge? I also think the FW ignores most of the derived attributes ( which I like ). I think that the FW needs to make it visually obvious what it reacts to and what it doesn't. Perhaps you could use some clever grouping or color coding in the sheet to make the behavior of the tool "visually obvious" to the user.

I mention this because this becomes important for configuring extras when the extra's are monsters with edges. I wanted to add a short list of Edges to the extra config form but realized I didn't know which ones were "active" in the FW, and which ones I would have to manage manually (passive). ( BTW Your new change to add the tooltips to the edges will really make it worth it for players to track their edges within the framework. Great idea! )

One last observation in the same vein. The way the FW manages Armor and Toughness seems to differ from the SWEX stat blocks. In SWEX they list total Toughness with Armor in parenthesis e.g 11(3). When I enter this in the framework I have to enter it as 8 and 3 because you are adding the numbers in the FW when evaluating attack. This can trip you up if you are entering stats from the book into the FW. ( all of my extras were pretty beefy for a session or two! :twisted: ) May not be worth changing, since it would affect all the tokens the users have already created. However, I think it is worth making it obvious. Maybe something like this called out somewhere in the interface:
Toughness + Armor = Total Toughness,
or spell it out in the attack rolls:
The attack does 4 damage if successful against a Toughness of 6 (4+2).

Great stuff happening here!
Pat.
A little nonsense, now and then, is relished by the wisest men. - Willy Wonka

Currently playing Savage Worlds in the home-brew world of Shadora.
We are looking for players! PM me if interested.

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

Regarding Edges: The only Edges it looks at are those that manage initiative. I've honestly contemplated trashing the current card draw method and simply letting the GM and players use the Show Hands macro. That way you let the player tell you who many cards he/she gets and you deal them appropriately.

I've comtemplated adding other Edge and Hindrance stuff in but that's a large chore. The system wasn't written with a computer game in mind so some of the edges are based on the situation. I've also had users of the Framework tell me they don't want it to do all that for them. Still, the Nerves of Steel would be a good one to add. Perhaps I could bold those edges that are used in the framework.

Which brings up the point as to why I track some things like Wounds and Fatigue and not others like range, concealment, and other. Basically I coded stuff I kept forgetting. I kept forgetting some tokens needed extra cards and so I coded it. I kept forgetting to add the wound penalties so I added it. :-)

You are correct that I haven't documented it well. I am well intentioned but if I have a choice between coding and documenting... well, you can figure out which wins.

Regarding Armor and Toughness: I really should use the standard SW way of doing things but it was easier to keep them separate. I use the annotation Toughness+Armor because its easier for my feeble brain to remember that when it comes to Armor Piercing.

The State of Things:

The character sheet is a great place to add your character details, roll traits, set states, and submit attacks but it is pretty large right now. I like the way it looks and the functionality but, as a GM it can be pretty slow to bring up character sheets for each combatant. I now also have the Init Control panel that allows you to attack, set states, and roll traits from a list. Another new addition are the macro buttons Roll Trait and Use Weapon which are also great time saves.

Now on to New Stuff:

Maptool will go into Release Candidate (RC) state fairly soon. I'll continue to hack around the edges a bit before then. I also want to change the way Gear and Powers are store getting rid of the JSON objects and going to Token Properties like Gear.Sword.Weight and Gear.Sword.Varation1.Skill or some such.

I would also like to find a way to add user supplied target numbers and modifiers to the trait rolls. The current suggestion is to do this via drop down. I'm considering a mini-sheet which lists weapons and traits along with drop downs for target number and modifier.

Once Maptool moves to 1.4, it will have Java script as its macro language of choice. At that point I'll port the entire framework to Javascript.

All that said, if anyone has a favorite feature they'd like me to include before the final release of 1.3 let me know.

Regards and Thanks,
Troll
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

nortonweb
Cave Troll
Posts: 70
Joined: Tue Apr 07, 2009 8:19 pm

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by nortonweb »

For the roll modifier I dropped in a query window a la the Vegi 4E framework (which I also use).
I set the target number I set an editable field in that window. If its a fighting roll then its the targets parry, if its anything else its 4. I also add in a drop down if its a shooting roll which is for the range and I pre select the range the framework reports but they can change it.

I'm at work but I'll try to dig out the macros and send them through.

pelwer
Cave Troll
Posts: 36
Joined: Sat Jan 24, 2009 2:31 pm
Location: Portland, OR
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by pelwer »

Troll,

Hope you didn't interpret that last post as any sort of complaint. :oops:

I'm a huge fan of what you are doing and the choices you are making. Your framework is what convinced me to switch to SW from Runequest in the first place. I ran my RQ campaign for 25 years so you must be doing something right!
I've comtemplated adding other Edge and Hindrance stuff in but that's a large chore. The system wasn't written with a computer game in mind so some of the edges are based on the situation. I've also had users of the Framework tell me they don't want it to do all that for them. Still, the Nerves of Steel would be a good one to add. Perhaps I could bold those edges that are used in the framework.
I agree. Most of this stuff should not be in the framework. I'd be happy if none of the Edges or Hindrances were in there! Seems like Attributes, Skills and Gear is all we need. Otherwise it turns into a computer game instead of a tool to facilitate the SW system and help the GM and Players tell the story. ( IMHO )
Which brings up the point as to why I track some things like Wounds and Fatigue and not others like range, concealment, and other. Basically I coded stuff I kept forgetting. I kept forgetting some tokens needed extra cards and so I coded it. I kept forgetting to add the wound penalties so I added it. :-)
Makes sense to me as well. Your work should help you first and foremost.
You are correct that I haven't documented it well. I am well intentioned but if I have a choice between coding and documenting... well, you can figure out which wins.
Good choice! Actually you've done a very good job of documenting the framework. The first 4-5 posts are excellent and I could start using the framework right away. I was just getting curious about the crunchy bits. I'll keep my mouth shut and let you type. :)

No complaints, only gratitude.
Pat.
A little nonsense, now and then, is relished by the wisest men. - Willy Wonka

Currently playing Savage Worlds in the home-brew world of Shadora.
We are looking for players! PM me if interested.

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

Unless the words are typed "THIS SUCKS" I assume any critique is meant to be constructive criticism so no apologies needed from anyone making a feature request or asking why things are done a certain way. Its the polar opposite of that, in fact. I'm really glad others find my work useful.

For those that haven't read the link in my signature, Maptool and Savage Worlds gave me back something I'd been missing for a very long time: a regular and very fun gaming experience. My hope is to give back to both communities a little of what's been given to me.

So, now down to business. Here's my first b59 build which includes
  • Updates to the working in the Initiative call out
    Updates to the Edit Gear screen so that the entries are tabbed
    The addition of pelwer's extra editor (still need to do something with ammo
    An update to the Evernight setting token (thanks Marcazm)
I meant to do more but life had other plans for me. I'll flesh out pelwer's extra editor a bit more and add a Action Sheet which allows you to pick a trait or weapon to use. Hopefully I'll get both done this week. I've made some updates to the playing cards in Lib:Deck in another campaign file which I'll fold in as well. Anyone wishing to add to that function list please visit A Concept: Playing Cards

The latest and greatest Savage Worlds framework can be found in this file: TROLLWARE.zip. It was compiled using b59.

Code: Select all

Archive:  TROLLWARE.zip
  Length     Date   Time    Name
 --------    ----   ----    ----
     4003  09-27-09 20:09   CampaignMacros.mtmacset
   181174  09-26-09 06:52   LibDeck.rptok
   188181  08-15-09 20:56   LibDiceBox.rptok
    90448  09-06-09 09:17   LibFantasyCompanion.rptok
   186078  09-27-09 20:11   LibGear.rptok
   613322  09-27-09 20:10   LibGM.rptok
    78187  09-06-09 09:17   LibHellFrost.rptok
    86775  09-27-09 20:11   LibInit.rptok
   324797  08-19-09 19:31   LibPowers.rptok
    79525  08-19-09 10:31   LibRace.rptok
     1800  09-06-09 09:15   LibSettingMacros.mtmacset
   103369  09-07-09 14:18   LibSlipstream.rptok
   163649  09-06-09 09:16   LibSWEX.rptok
   590153  09-08-09 20:48   SavageWorlds.mtprops
  6222104  09-27-09 20:11   SWEX.cmpgn
    52566  08-23-09 21:23   LibAdventureDeck.rptok
   319737  09-07-09 16:39   LibVehicles.rptok
   123263  09-27-09 17:15   LibEvernight.rptok
 --------                   -------
  9409131                   18 files
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

User avatar
MarCazm
Cave Troll
Posts: 99
Joined: Sun Jun 07, 2009 7:16 pm
Location: Germany

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by MarCazm »

If I'm trying to make a campaign with just using the files it states me a: "Undefined function: HindrancesToolTip" if I want to open the Character Sheet for a Token.

I imported the Campaign Properties, the Campaign Makros and of course the Lib: Tokens.

Is there any special order to put these things in or is it not ready to be used that way or is just me?? :?:
killing equals honor

User avatar
RPTroll
TheBard
Posts: 3159
Joined: Tue Mar 21, 2006 7:26 pm
Location: Austin, Tx
Contact:

Re: [Savage Worlds] RPTroll's Campaign File Framework

Post by RPTroll »

MarCazm wrote:If I'm trying to make a campaign with just using the files it states me a: "Undefined function: HindrancesToolTip" if I want to open the Character Sheet for a Token.

I imported the Campaign Properties, the Campaign Makros and of course the Lib: Tokens.

Is there any special order to put these things in or is it not ready to be used that way or is just me?? :?:
That should be in the OnCampaignLoad macro on Lib:GM. If you've just imported the tokens you can either run that macro or you can save the campaign and reopen it.
ImageImage ImageImageImageImage
Support RPTools by shopping
Image
Image

Post Reply

Return to “Savage Worlds Frameworks”