I think you're running into a known bug where the R20 chat-api interpreter drops random commands in a multi-command macro. There are a few ways to get around that. First, you can combine multiple ids getting the same command into a single token-mod command line, giving them all to the --ids argument, separating them with a space. Alternately, you can combine all settings for a given token (both the layer move and the location) in a single token-mod command line. Either way, you'll cut down on the number of lines you are trying to process, and both are "good practice" for Token-Mod usage. After that, you can use a script like ScriptCards to combine commands into a single SC command line (so that nothing is dropped), or you can use metascripts. I'm better with metascripts, so I'll offer up some examples. These might take a little time to understand (and more to type out the explanation), so I'll just offer the solution and if you want one (or a few) explained, let me know. Plugger (in addition to Fetch & ZeroFrame) This is probably the simplest option of the metascript solutions. Using Plugger, you can embed one command in another line. !token-mod --set layer|gmlayer --ids @(Party|token_id){\&eval}token-mod --set layer|objects --ids @(Kokoro|token_id) @(Ikinabe|token_id) @(Gorilla|token_id) @(Igtharian|token_id) @(Torch|token_id){\&/eval}{\&eval}token-mod --set top|[\][\]@(Party.top)-35\]\].value left|[\][\]@(Party.left)-35\]\].value --ids @(Kokoro|token_id){\&/eval}{\&eval}token-mod --set top|[\][\]@(Party.top)-35\]\].value left|[\][\]@(Party.left)+35\]\].value --ids @(Ikinabe|token_id){\&/eval}{\&eval}token-mod --set top|[\][\]@(Party.top)+35\]\].value left|[\][\]@(Party.left)-35\]\].value --ids @(Gorilla|token_id){\&/eval}{\&eval}token-mod --set top|[\][\]@(Party.top)+35\]\].value left|[\][\]@(Party.left)+35\]\].value --ids @(Igtharian|token_id){\&/eval}{\&eval}token-mod --set top|[\][\]@(Party.top)+35\]\].value left|[\][\]@(Party.left)+35\]\].value --ids @(Torch|token_id){\&/eval} You can do something similar with your COMBINE macro. SelectManager (in addition to Fetch & ZeroFrame) This one requires a little setup, but it cleans up the code significantly. Create (or use) a macro mule character. I'll imagine using one named "MuleBoy". On the MuleBoy character, create an ability for each of the tokens you are working with. Name them after the pattern: PLAYER1_NAME_Expand. Put the Token-Mod syntax related to each token in the appropriate ability. Where the above Plugger option combined IDs for the layer-setting, this time I'll combine all setting commands related to each token into a single line. The attributes should look like this: !token-mod --set layer|objects top|[\][\]@(Party.top)-35\]\] left|[\][\]@(Party.left)-35\]\] --ids @{PLAYER1_NAME|character_id} ...where you include the math for the location setting that is unique to that token, and the appropriate character id. Remember, too, that the Party token doesn't have a top/left setting (as you've rendered it). Once that is all set up, the command to issue them is pretty simple: !forselected(^) %^(MuleBoy.@^(selected.token_name)_Expand){&select @{PLAYER1_NAME|token_id}, @{PLAYER2_NAME|token_id}, @{PLAYER3_NAME|token_id}, @{PLAYER4_NAME|token_id}, @{Torch|token_id}, @{Party|token_id} } Again, you would want "Combine" abilities for each character, too, with a separate command line to call those as appropriate. Note: I am assuming that when you use "PLAYER1_NAME" you are referencing a character name for that player... which is the same on the token... in that way, the @{PLAYER1_NAME|token_id} syntax will resolve. SelectManager & Muler (in addition to Fetch & ZeroFrame) That was a pretty simple command line, but a sprawling setup. If you want something more in the middle -- and something easier to maintain -- you can add Muler to the mix. In this case, in your setup, create (or use) a macro mule character (again, I'll name mine MuleBoy). Instead of multiple abilities, we're going to set up only one. Call it PartyMoves, and it should look like this: Party_Expand=!token-mod --set layer|gmlayer --ids @{Party|character_id} PLAYER1_NAME_Expand= !token-mod --set layer|objects top|[\][\]@(Party.top)-35\]\] left|[\][\]@(Party.left)-35\]\] --ids @{PLAYER1_NAME|character_id} PLAYER2_NAME_Expand= !token-mod --set layer|objects top|[\][\]@(Party.top)-35\]\] left|[\][\]@(Party.left)+35\]\] --ids @{PLAYER2_NAME|character_id} PLAYER3_NAME_Expand= !token-mod --set layer|objects top|[\][\]@(Party.top)+35\]\] left|[\][\]@(Party.left)-35\]\] --ids @{PLAYER3_NAME|character_id} PLAYER4_NAME_Expand= !token-mod --set layer|objects top|[\][\]@(Party.top)+35\]\] left|[\][\]@(Party.left)+35\]\] --ids @{PLAYER4_NAME|character_id} Torch_Expand= !token-mod --set layer|objects top|[\][\]@(Party.top)+35\]\] left|[\][\]@(Party.left)+35\]\] --ids @{Torch|character_id}
Party_Combine=...
PLAYER1_NAME_Combine=...
PLAYER1_NAME_Combine=...
PLAYER1_NAME_Combine=...
PLAYER1_NAME_Combine=...
Torch_Combine=...
Then, to apply each change, you'd use this command line: !forselected(^) !get^.MuleBoy.PartyMoves.@^(selected.token_name)_Expand/get {^&mule MuleBoy.PartyMoves}{&select @{PLAYER1_NAME|token_id}, @{PLAYER2_NAME|token_id}, @{PLAYER3_NAME|token_id}, @{PLAYER4_NAME|token_id}, @{Torch|token_id}, @{Party|token_id} } ...OR... if you wanted a single macro to run whether or not the party needs to combine or expand, you can put a query in the above, and have it return the "combine" macros instead of the "expand", only: !forselected(^) !get^.MuleBoy.PartyMoves.@^(selected.token_name)_?{Manage party|Combine|Expand}/^get {^&mule MuleBoy.PartyMoves}{&select @{PLAYER1_NAME|token_id}, @{PLAYER2_NAME|token_id}, @{PLAYER3_NAME|token_id}, @{PLAYER4_NAME|token_id}, @{Torch|token_id}, @{Party|token_id} } All of that gives you one point to manage all of the code for the different tokens involved in this operation, so the upkeep might be easier. You can also add other tokens by giving them an entry in the mule for _Expand and _Combine , and adding them to the {&select...} syntax. APILogic, SelectManager, & Muler (in addition to Fetch & ZeroFrame) This one skips the query and does all the work for you... so this is a one-stop macro whether you want to combine or expand the party. If the Party token is on the gmlayer, it will run the "Combine" set (moving it to the objects layer, and adjusting the other tokens appropriately). Otherwise, it will run the "Expand" set. The setup for this is the exact same as the previous solution. !forselected(^) !get^.MuleBoy.PartyMoves.@^(selected.token_name)_{&if @(Party.layer) ~ gm}Combine{&else}Expand{&end}/^get {^&mule MuleBoy.PartyMoves}{&select @{PLAYER1_NAME|token_id}, @{PLAYER2_NAME|token_id}, @{PLAYER3_NAME|token_id}, @{PLAYER4_NAME|token_id}, @{Torch|token_id}, @{Party|token_id} }