Each packet usually contains a small portion of an image, herein called a "diagram."
<code>BattleplanMessage</code> packets are accumulative towards a full diagram.
Moreover, rather than the <code>player_name</code>, each diagram is associated on a client by the <code>char_id</code> field.
Only squad leaders and platoon leaders can draw on the map and share with other players in their squad or platoon.<br>
<br>
To start drawing, a would-be artist must have all clients who will receive their diagrams acknowledge a <code>StartDrawing</code> action.
The <code>char_id</code> with this <code>StartDrawing</code> will associate all diagrams submitted with the same <code>char_id</code>'s portfolio.
Multiple portfolio definitions may exist on a client at a given time and each will manage their own diagrams.
When a given portfolio submits a <code>StopDrawing</code> action that is received, the previous diagrams associated with it will be cleared.
That <code>char_id</code> will no longer accept diagrams on that client.
Other portfolios will continue to accept diagrams as initialized.
When no portfolios are being accepted, the "Toggle -> Battleplan" button on that client's tactical map will be disabled.
When there is at least one portfolio accepted, the "Battleplan" button will be functional and can be toggled.<br>
<br>
To construct line segments, chain <code>StrokeTwo</code> diagrams in the given packet entry.
Each defined point will act like a successive vertex in a chain of segments.
Any non-vertex entry in between entries, e.g., a change of line color, will break the chain of line segments.
For example:<br>
RED-A-B-C will construct red lines segments A-B and B-C.<br>
RED-A-B-GREEN-C will only construct a red line segement A-B.<br>
RED-A-B-GREEN-C-D will construct a red line segement A-B and a green line segment C-D.<br>
(Default line color, if none is declared specifically, is gray.)<br>
<br>
To construct a message, define a point to act as the center baseline for the text.
The message will be written above and outwards from that point.
Messages do not carry properties over from line segments - they set their own color and do not have line thickness.
Any single portfolio may have only fifteen messages written to the tactical map at a time.</p></div><dlclass="paramcmts block"><dtclass="param">char_id</dt><ddclass="cmt"><p>na;
same as in <code>CharacterInfoMessage</code></p></dd><dtclass="param">player_name</dt><ddclass="cmt"><p>the player who contributed this battle plan</p></dd><dtclass="param">zone_id</dt><ddclass="cmt"><p>on which continent the battle plan will be overlaid;
can identify as "no zone" 0 when performing instructions not specific to drawing</p></dd><dtclass="param">diagrams</dt><ddclass="cmt"><p>a list of the itemized actions that will construct this plan or are used to modify the plan</p></dd></dl><dlclass="attributes block"><dt>Source</dt><dd><ahref="https://github.com/psforever/PSF-LoginServer/blob/master//home/runner/work/PSF-LoginServer/PSF-LoginServer/src/main/scala/net/psforever/packet/game/BattleplanMessage.scala"target="_blank">BattleplanMessage.scala</a></dd></dl><divclass="toggleContainer"><divclass="toggle block"><span>Linear Supertypes</span><divclass="superTypes hiddenContent"><spanname="scala.Product"class="extype">Product</span>, <spanname="scala.Equals"class="extype">Equals</span>, <ahref="../PlanetSideGamePacket.html"name="net.psforever.packet.PlanetSideGamePacket"id="net.psforever.packet.PlanetSideGamePacket"class="extype">PlanetSideGamePacket</a>, <ahref="../PlanetSidePacket.html"name="net.psforever.packet.PlanetSidePacket"id="net.psforever.packet.PlanetSidePacket"class="extype">PlanetSidePacket</a>, <ahref="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html#java.io.Serializable"name="java.io.Serializable"id="java.io.Serializable"class="extype">Serializable</a>, <spanname="scala.AnyRef"class="extype">AnyRef</span>, <spanname="scala.Any"class="extype">Any</span></div></div></div></div><divid="mbrsel"><divclass="toggle"></div><divid="memberfilter"><iclass="material-icons arrow"></i><spanclass="input"><inputplaceholder="Filter all members"id="mbrsel-input"type="text"accesskey="/"/></span><iclass="clear material-icons"></i></div><divid="filterby"><divid="order"><spanclass="filtertype">Ordering</span><ol><liclass="alpha in"><span>Alphabetic</span></li><liclass="inherit out"><span>By Inheritance</span></li></ol></div><divclass="ancestors"><spanclass="filtertype">Inherited<br/></span><olid="linearization"><liclass="in"name="net.psforever.packet.game.BattleplanMessage"><span>BattleplanMessage</span></li><liclass="in"name="scala.Product"><span>Product</span></li><liclass="in"name="scala.Equals"><span>Equals</span></li><liclass="in"name="net.psforever.packet.PlanetSideGamePacket"><span>PlanetSideGamePacket</span></li><liclass="in"name="net.psforever.packet.PlanetSidePacket"><span>PlanetSidePacket</span></li><liclass="in"name="java.io.Serializable"><span>Serializable</span></li><liclass="in"name="scala.AnyRef"><span>AnyRef</span></li><liclass="in"name="scala.Any"><span>Any</span></li></ol></div><divclass="ancestors"><spanclass="filtertype"></span><ol><liclass="hideall out"><span>Hide All</span></li><liclass="showall in"><span>Show All</span></li></ol></div><divid="visbl"><spanclass="filtertype">Visibility</span><ol><liclass="public in"><span>Public</span></li><liclass="protected out"><span>Protected</span></li></ol></div></div></div><divid="template"><divid="allMembers"><divid="constructors"class="members"><h3>Instance Constructors</h3><ol><liclass="indented0 "name="net.psforever.packet.game.BattleplanMessage#<init>"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="<init>(char_id:Long,player_name:String,zone_id:Int,diagrams:List[net.psforever.packet.game.BattleDiagramAction]):net.psforever.packet.game.BattleplanMessage"class="anchorToMember"></a><aid="<init>:BattleplanMessage"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html#<init>(char_id:Long,player_name:String,zone_id:Int,diagrams:List[net.psforever.packet.game.BattleDiagramAction]):net.psforever.packet.game.BattleplanMessage"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">new</span></span><spanclass="symbol"><spanclass="name">BattleplanMessage</span><spanclass="params">(<spanname="char_id">char_id: <spanname="scala.Long"class="extype">Long</span></span>, <spanname="player_name">pl
same as in <code>CharacterInfoMessage</code></p></dd><dtclass="param">player_name</dt><ddclass="cmt"><p>the player who contributed this battle plan</p></dd><dtclass="param">zone_id</dt><ddclass="cmt"><p>on which continent the battle plan will be overlaid;
can identify as "no zone" 0 when performing instructions not specific to drawing</p></dd><dtclass="param">diagrams</dt><ddclass="cmt"><p>a list of the itemized actions that will construct this plan or are used to modify the plan</p></dd></dl></div></li></ol></div><divid="types"class="types members"><h3>Type Members</h3><ol><liclass="indented0 "name="net.psforever.packet.game.BattleplanMessage.Packet"group="Ungrouped"fullComment="no"data-isabs="false"visbl="pub"><aid="Packet=net.psforever.packet.game.BattleplanMessage"class="anchorToMember"></a><aid="Packet:Packet"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html#Packet=net.psforever.packet.game.BattleplanMessage"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier"></span><spanclass="kind">type</span></span><spanclass="symbol"><spanclass="name">Packet</span><spanclass="result alias"> = <ahref=""name="net.psforever.packet.game.BattleplanMessage"id="net.psforever.packet.game.BattleplanMessage"class="extype">BattleplanMessage</a></span></span></li></ol></div><divclass="values members"><h3>Value Members</h3><ol><liclass="indented0 "name="scala.AnyRef#!="group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="!=(x$1:Any):Boolean"class="anchorToMember"></a><aid="!=(Any):Boolean"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html#!=(x$1:Any):Boolean"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $bang$eq">!=</span><spanclass="params">(<spanname="arg0">arg0: <spanname="scala.Any"class="extype">Any</span></span>)</span><spanclass="result">: <spanname="scala.Boolean"class="extype">Boolean</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.AnyRef###"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="##:Int"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html###:Int"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $hash$hash">##</span><spanclass="result">: <spanname="scala.Int"class="extype">Int</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.AnyRef#=="group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="==(x$1:Any):Boolean"class="anchorToMember"></a><aid="==(Any):Boolean"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html#==(x$1:Any):Boolean"title="Permalink"><iclass="material-icons"></i></a></span><spanclass="modifier_kind"><spanclass="modifier">final </span><spanclass="kind">def</span></span><spanclass="symbol"><spanclass="name"title="gt4s: $eq$eq">==</span><spanclass="params">(<spanname="arg0">arg0: <spanname="scala.Any"class="extype">Any</span></span>)</span><spanclass="result">: <spanname="scala.Boolean"class="extype">Boolean</span></span></span><divclass="fullcomment"><dlclass="attributes block"><dt>Definition Classes</dt><dd>AnyRef → Any</dd></dl></div></li><liclass="indented0 "name="scala.Any#asInstanceOf"group="Ungrouped"fullComment="yes"data-isabs="false"visbl="pub"><aid="asInstanceOf[T0]:T0"class="anchorToMember"></a><spanclass="permalink"><ahref="../../../../net/psforever/packet/game/BattleplanMessage.html#asInstanceOf[T0]:T0"title="Permalink"><iclass="material-icons"></i></a></span><span