Assemble FILE LOCATION:   My personal repo . One-click after a beta period (I'll update, here). DEPENDENCIES:  Also requires the Messenger script (v1.0.2) available in the 1-click or from  my repo . ABSTRACT:  Assemble is a script that helps with collecting groups of tokens into sets that can be stored on a character in various attributes. Roll20 targeting requires knowing how many targets you have before you send the command line. You must use a separate @{target} construction for each new target, so you might consider having multiple commands saved for the same operation -- one for when you target a single token, another for when you target 2, etc. Or, you might use a single command line, but include more @{target} constructions than you actually need for any given encounter,  leading to bootstrap solutions like using the same token for multiple targeting commands. Assemble lets you populate a list with a number of target constructions you need, then allows you to add to or remove from that list at any point in the future. When you're ready to use it, simply drop the attribute calling syntax into your command line. How It Works Assemble will store information from your set of target tokens in an attribute of your choosing on your character. The list will be populated by targeting statements and delimited by characters you define. You'll be prompted for the number of targeting statements you ask for, and when you're done you'll have a list of the data from the targeted tokens. To reference this list, you only need the standard Roll20 syntax for accessing an attribute. For instance, to access the "Fireball Targets" attribute on the character "Ghost," you would simply need: @{Ghost|Fireball Targets} Now you can build a single command line (perhaps for another script, or for a templated report output) that utilizes NO targeting statements at all but instead references that attribute. Here is an example using a TokenMod command line: !token-mod --ids @{Ghost|Fireball Targets} --set ... ...and here is an example using SelectManager from the Metascript Toolbox: !forselected ... {&select @{Ghost|Fireball Targets} } ...and one more example using a template to output information: &{template:traits}{{name=HERO ASPECT}} {{description=Ghost is currently focused on supporting @{Ghost|Hero Aspect} with Aspect of a Hero.}} You can have as many such list-storing attributes on a character, and use those attributes in any command line as you require. Limitation Because Assemble utilizes sheet attributes, it will not work with Beacon sheets such as the Roll20 DnD 2024 sheet. Those sheets do not provide access to user-created attributes (either to the API or to a player attempting to use them in chat). I will update the thread if that changes in the future. Menu Based Assemble can be run from command lines, but it comes already programmed with a menu that supplies buttons for the most often needed commands. Here is what the menu looks like for the character named Ghost who has 3 such list-attributes configured: To Produce the Menu To produce a menu like this for a given character, run this command (where you change the name "Ghost" to be your character's name): !assemble --menu|Ghost I suggest putting that on a character ability that you set up to appear in the row of buttons at the bottom of your VTT screen or as a token action to have it appear in the row of buttons at the top of your VTT screen. For a character with no Assemble list attributes, the menu will be empty except for the "Create New" button. Create New Assemble List Attribute Click the "Create New" button to start the collection of data for a new list attribute. Note that you are in the menu for a particular character, so when the data is stored to an attribute, that attribute will be created on this character. After clicking the button, you will be asked a series of questions. Here is what they refer to: NAME FOR ATTRIBUTE:  What the attribute will be named on the character sheet. This is both how you will refer to it elsewhere (using Roll20 attribute syntax), and how it will appear in your menu. LIST DELIMITER:  What will separate the list entries when they are stored in the attribute. The default is a comma, but you could change this to anything that is required by the command line where you intend to use the list, once generated. Leading and trailing spaces are accepted. SAVE INFO:  What piece of data do you want to store from the tokens. As of publication, Assemble can store any of the token ID, the name, or the character ID (if the token represents a character). HOW MANY TARGETS?:  How many targeting statements do you need to start your list. Don't worry, you can add or remove list entries, later. Once you answer all of those questions, you will get a new panel in chat alerting you that your  command line  has been created. This does not mean your list has been created (you haven't targeted anything, yet). But the command line that will handle the targeting has been created and assigned to a button. When you're ready to target the tokens you wish to add to this list attribute, click the button. Roll20 will provide you with as many targeting prompts as you asked for. After targeting your tokens, Assemble will provide a result panel to let you know what was added to the list: As you can see, from here you can relaunch the menu for this character, and your new Assemble list attribute will show up: So let's take a closer look at the other menu options. Getting Around the Menu First, hovering over each entry in a line will give you more information. Hovering over a button will tell you what that button is used for, while hovering over the name of the attribute will show you the contents of the list as well as the number of entries in the list: The green buttons allow you to add entries to the associated list, while the red buttons will let you remove items from the list. Both adding and removing will use targeting, just as before. The  +1  and  -1  buttons will automatically launch the targeting request, while the  +?  and  -?  buttons will ask how many targets you want to add or remove, then generate a new Assemble button for you to click to execute the add or remove process. The  =?  button is an overwrite button that will ask you for the number of targets. Using this button will completely overwrite the data in your list and anything that was previously stored there will be lost. Every button in a row belonging to an attribute will be set to use the parameters you used for that attribute. This character; this attribute; keeping this piece of data; delimited with these characters, etc. However, t he last button (the gear icon) is a special button that will let you change your delimiter for this list. So if you originally used a comma but now you want to use a space, instead, you could click this button and make that change. Suggestions & Feedback This was a little script idea that occurred to me and I thought could be useful to people. If you use it and have thoughts -- especially suggestions for more functionality -- let me know.