Menu

Tree [r75] /
 History

HTTPS access


File Date Author Commit
 icons 2009-05-10 rayalansaul [r1] First checkin
 logs 2010-03-24 rayalansaul [r45] Fixed ignore properties on logs and source dire...
 resources 2010-04-02 rayalansaul [r56] Added secondary and size retrieval methods to c...
 scripts 2010-01-27 rayalansaul [r36] Added svn-ignore properties for logs, text, htm...
 source 2010-04-01 rayalansaul [r54] Fixed creature leveling
 web2py 2010-06-08 rayalansaul [r66] Renamed the web2py application to not include n...
 4eCombatUi.py 2010-07-10 rayalansaul [r69] GUI: Added power window with large font; abilit...
 CompendiumHTMLTranslator.py 2011-03-20 rayalansaul [r75] Massive update to support parsing of both MM3 a...
 Conditions.py 2010-02-09 rayalansaul [r38] Added 'Ac' to 'AC' condition map to fix AC cond...
 ConfigVariables.py 2011-03-19 rayalansaul [r74] Minion XP is now configurable
 Creature.py 2011-03-20 rayalansaul [r75] Massive update to support parsing of both MM3 a...
 CreatureExpressionMatching.py 2011-03-20 rayalansaul [r75] Massive update to support parsing of both MM3 a...
 CreaturePower.py 2011-03-20 rayalansaul [r75] Massive update to support parsing of both MM3 a...
 CtrlStyling.py 2010-07-10 rayalansaul [r69] GUI: Added power window with large font; abilit...
 Helpers.py 2010-03-27 rayalansaul [r52] Moved ConfigVariables into a separate file
 Readme.txt 2009-08-15 rayalansaul [r18] Added demo (1st encounter of KotS)
 SpreadsheetTokenCreator.py 2010-04-02 rayalansaul [r56] Added secondary and size retrieval methods to c...
 StateTracker.py 2011-03-20 rayalansaul [r75] Massive update to support parsing of both MM3 a...
 SupportDialogWindows.py 2010-03-24 rayalansaul [r46] Fixed Lore window to work with new creature/sou...
 UpdateModel.py 2010-01-25 rayalansaul [r35] Fix for error regarding reordering creatures wh...
 als4etracker.ini 2011-03-19 rayalansaul [r74] Minion XP is now configurable

Read Me

What is Al's 4e Tracker (A4T)?
------------------------------

A4T is my encounter helper for 4th edition D&D. It's intended as a helper running combat encounters based on my experiences and feedback from others. Specifically, it's intended to:
  - Track turn order (including rolling enemy initiative)
  - Track hitpoints and conditions - I always forget whether the 'slowed until end of next turn" is still happening for my Kobold or not.
  - Provide me with a visible summary of defenses and reactive powers - my players are often switching between targets and I needed a way to quickly look up the Kobold Shaman's defenses instead of the Dragonshield's.
  - Avoid the need to shuffle creature cards to look up a creature's abilities and powers. I found that I was constantly shuffling cards -- first finding the one for the current creature, then finding the one for the defending creature. 
  - Track attack and defense modifiers - My Kobold tends to forget that he's suffering a -2 attack penalty
  - Remind me about saving throws for myself and my players.   
  - Remind me about regeneration 
  - Track power expenditure and recharging. It reminds me to see if my Dragon got his breath weapon back, and tells me that yes, I really did use the encounter power.
  - Facilitate custom monster creation. In running my own campaign, I wanted an easy way to add NPCs and custom enemies that weren't already printed, with their own abilities. 
  - Level adjustments for creatures (and reskinning). From DMing LFR encounters, I didn't want to enter both the level 2 and level 4 version of monsters. Since LFR modules follow the DMG advice for leveling creatures, I added support for specifying a creature level, and defenses, hitpoints, attacks, and damage values are recalculated.
  - Pregenerating and saving encounters. I can save an encounter, and then load the enemies when my players actually reach it.
 
As I've run different encounters, various abilities have gotten added. It supports custom conditions, adding macros for frequently used powers (e.g. the swordmage who always uses Booming Blade), stealth and perception checks. It can auto-generate monster knowledge checks, effectively allowing me to skim and give the players the best knowledge result rather than spending time with having them roll for every creature. I added replays to be able to find bugs, and with the hope of giving encounter summaries (how much damage did the ranger do?). 

Why might I not like A4T?
-------------------------

  - It won't replace pen and paper. I use it as an aid for dealing with routine mechanics. Rarely used mechanics are likely not supported (unless my players happen to use them a lot, or I get a lot of feature requests).
  - Creatures have to be manually entered. It won't yet take them from the compendium or other data source, although I'm excited to see that WotC has started releasing the API for getting compendium data. 
  - It won't support every monster feature that WotC creates. They are faster than me at coming up with clever ideas like multiple initiative counts.
  - It doesn't provide network support. I would love to add the ability for players to also track/verify conditions and hitpoints with a limited view of the creature's hitpoints and powers, but that functionality isn't available yet.
  - The GUI is driven by text commands. The GUI is minimalist, and more time and effort has gone into behind the scenes support than making an easy-to-use GUI. 
  - The command syntax is a bit of a headache. I designed it to be powerful and quick to type, but that doesn't really lend itself (yet) to the most user-friendly experience.

How do I setup A4T?
-------------------

1. Download the A4T module and unzip it.
2. Download wxWidgets (http://www.wxwidgets.org/). This provides the necessary GUI support.
3. Go to the place where you unzipped it and double-click on 4eCombatUI.py. 
   Or, from a command line
   > python 4eCombatUI.py 
   If you get really advanced, you can do this from the command line:
   > python 4eCombatUI.py cmd1;cmd2;cmd3 
   See below for command descriptions, but the commands entered on the command line will be the default command when the program loads. This is mostly useful debugging.

How do I use A4T?
-----------------

1. First, set A4T up and launch it (see the previous section). A GUI should appear; resize it if necessary for your screen. 

2. Click on the small (1-line) text box in the lower left of the screen. This is where all the commands are entered. Text entered like this
 > command
 is a command to be entered in the text box.

3. Let's pull up the help screen. It has a list of commands for reference.
 > help

4. The program needs to know about all the monsters and players we're about to use, and source tells it to scan the source directory for text files and load them into memory. Any creature in the source directory can now be loaded. The setup files come with encounter files from Keep of the Shadowfell (since it is now available for free download from WotC!). 
 > source

3. Let's jump in. The setup comes with the pregenerated characters for Keep of the Shadowfell and the first encounter, On the Road: Kobold Brigands. Let's load those. 
 > load kots.party
 > load kots.enc1.koboldbrigands
 If you look in the 'scripts' directory, you see the script files - they end with '.sav'. You can create your own scripts and save them here to run. Additionally, any encounters or parties that you save will be added here.
 
4. Roll initiative! What else does combat start with? 
 > rollinit group
 The program will prompt you for initiative rolls for the party, so don't worry if the players don't trust you to roll initiative. After you enter initiative rolls for all the players, the A4T will reorder all the creatures and select the first creature. His power card will appear in the lower right window. 
 
 The 'group' option means that initiative is rolled for each creature type, not each creature. So the Kobold Minions will all get one initiative count, and the Kobold Dragonshield will get another. 
 
 If you don't like the results, you can reroll:
 > rollinit reroll noprompt
 The 'reroll' option tells the program to reroll initiative for creatures that have already rolled initiative. If you add a forgotten creature, you can just enter
 > rollinit
 and it will rollinitiative just for the new creatures. 
 
 The 'noprompt' option means that instead of prompting you for the player rolls, it will just randomly determine them. 

5. Let's let the rogue go first, so we'll delay the current creature and move the Rogue to be next in initiative order. (Skip this step if the rogue is actually the first creature)
 > delay
 > force R1
 > n
 The rogue is now the next creature. The force command means that you want the rogue to go next, even though it's not his turn and he hasn't delayed. The 'n' command means 'go to the next creature'. The above commands can also be entered like this:
 > delay;force R1;n
 
6. And the rogue deals some damage. Let's say he deals 10 points to the slinger. 
 > s1 10
 Voila! The slinger now has 10 less hitpoints. 
 
7. Let's take a closer look at the slinger. Click on the 'Kobold Slinger' row in the upper window. A second box appears with details about the Kobold Slinger. The lower right window always tracks the current creature, but when you need to look at a creature for quick reference - for an immediate interrupt, details about an aura, or just to plan your move, you can just click the creature. You can also just do this at the command line:
 > q d1
 
8. Let's make the slinger go next. 
 > force S1
 Notice that since the rogue wasn't delayed (or readied), force immediately selected the slinger and no next ('n') command is required.
 
9. And the slinger hits the rogue. But the slinger doesn't just hit the rogue for damage, he also used a gluepot.
 > R1 6 immob se
 Now the rogue has taken 6 damage, and is immobolized. At the end of each of the rogue's turn, A4T will prompt about whether the saving throw succeeded.

10. Let's let the fighter go next. 
 > force F1
 And perhaps the fighter tries to shift away from the kobold dragonshield...and the Kobold Dragonshield shifts to keep the fighter threatened. The Dragonshield has used his immediate reaction, so we indicate this:
 > !D2 0
 The !D2 means that D2 interrupts; the 0 says that the reaction did no damage. And now the GUI updates with '---' in the interrupt column to indicate that D2 has used his immediate interrupt/reaction until the start of his next turn. Without the 0, the current creature will change to D2 (just in case D2 has a really complicated turn), and then one can use the next command to return to the fighter's turn:
 > !D2
 ...
 > n

11. And perhaps we're done with this encounter, and want the monsters to go away. 
 > clear
 Oops, we also wanted the players to go away.
 > clear all
 And we're back to a blank screen. 
 
There's a lot more to A4T, but hopefully that gives you a bit of an introduction. The help file contains a list of commands (feel free to make suggestions or bug reports). I do discuss a bit more about how to create encounters.

Ok, so how do I create an encounter?
------------------------------------

This is really two questions: How do I create the creatures/players to load, and how do I load them? Let's start with the existing creatures and look at how to load kobolds. Launch A4T.

> add Kobold
A4T finds a random kobold and adds it with the tag 'K1'. 
> add Kobold
It finds the same type of kobold and adds it with the tag 'K2'.
> rem K2
And we're back to 1 kobold.
> find Kobold
This shows a list of all the kobolds that the system knows about. Let's add a minion
> add Kobold Minion M1
Here we specified the tag ('M1'). We also could have used an abbreviated creature name like this:
> add Kobold M M1
And perhaps we want a very powerful Wyrmpriest. 
> add Kobold Wyrmpriest W1 (7)
A4T rescaled the Wyrmpriest to level 7, adjusting hitpoints, defenses, skills, attack values, and damage values. For powers that it adjusted, it adds the level and damage adjustment to the keywords to show the adjustments it made.

 
 
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.