Merge remote-tracking branch 'origin/main'

This commit is contained in:
GabrieleRadice
2026-06-19 21:51:29 +02:00
3 changed files with 2 additions and 339 deletions
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 KiB

-337
View File
@@ -1,337 +0,0 @@
<mxGraphModel dx="0" dy="0" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" background="none" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="node13" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Artist&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): Character&lt;br/&gt;+ toString(): String&lt;br/&gt;+ insert(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="22" y="3063" width="162" height="120" as="geometry" />
</mxCell>
<mxCell id="node22" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Board&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- upperListBuilding: List&amp;lt;BuildingCard&amp;gt;&lt;br/&gt;- upperListTribe: List&amp;lt;TribeCard&amp;gt;&lt;br/&gt;- era: int&lt;br/&gt;- lowerListTribe: List&amp;lt;TribeCard&amp;gt;&lt;br/&gt;- nTotem: int&lt;br/&gt;- slotList: List&amp;lt;Slot&amp;gt;&lt;br/&gt;- lowerListBuilding: List&amp;lt;BuildingCard&amp;gt;&lt;br/&gt;- tribeDeck: Queue&amp;lt;TribeCard&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ removeUpperTribeCard(TribeCard): boolean&lt;br/&gt;- getTribeDeck(int): Queue&amp;lt;TribeCard&amp;gt;&lt;br/&gt;+ containsLowerBuildingCard(BuildingCard): boolean&lt;br/&gt;+ removeLowerTribeCard(TribeCard): boolean&lt;br/&gt;+ getPendingEvents(): Queue&amp;lt;EventCard&amp;gt;&lt;br/&gt;+ containsLowerTribeCard(TribeCard): boolean&lt;br/&gt;+ removeUpperBuildingCard(BuildingCard): boolean&lt;br/&gt;+ containsUpperBuildingCard(BuildingCard): boolean&lt;br/&gt;+ removeLowerBuildingCard(BuildingCard): boolean&lt;br/&gt;+ getSlotList(): List&amp;lt;Slot&amp;gt;&lt;br/&gt;+ containsUpperTribeCard(TribeCard): boolean&lt;br/&gt;+ nextRound(): int&lt;br/&gt;+ nextEra(): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-477" y="41" width="360" height="544" as="geometry" />
</mxCell>
<mxCell id="node26" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Builder&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- reductionValue: int&lt;br/&gt;- prestigeValue: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getReductionValue(): int&lt;br/&gt;+ clone(): Character&lt;br/&gt;+ toString(): String&lt;br/&gt;+ insert(Player): void&lt;br/&gt;+ getPrestigeValue(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="425" y="3214" width="197" height="208" as="geometry" />
</mxCell>
<mxCell id="node6" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building0&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;~ purchased: boolean&lt;br/&gt;- numSet: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ buy(Player): boolean&lt;br/&gt;+ initialize(Player): void&lt;br/&gt;+ applyEffect(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="965" y="2766" width="197" height="184" as="geometry" />
</mxCell>
<mxCell id="node8" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building1&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- icon: CharacterType&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ applyEffect(Player): void&lt;br/&gt;+ clone(): BuildingCard&lt;br/&gt;+ getIcon(): CharacterType&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="603" y="2570" width="201" height="147" as="geometry" />
</mxCell>
<mxCell id="node23" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building10&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ applyEffect(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="1085" y="2595" width="197" height="94" as="geometry" />
</mxCell>
<mxCell id="node1" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building11&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- PrestigeMul: int&lt;br/&gt;- icon: CharacterType&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ getIcon(): CharacterType&lt;br/&gt;+ applyEffect(Player): void&lt;br/&gt;+ getPrestigeMul(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="483" y="2766" width="201" height="184" as="geometry" />
</mxCell>
<mxCell id="node27" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building13&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ toString(): String&lt;br/&gt;+ applyEffect(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="1205" y="2803" width="197" height="120" as="geometry" />
</mxCell>
<mxCell id="node36" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building4&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;~ numPair: int&lt;br/&gt;~ purchased: boolean&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ applyEffect(Player): void&lt;br/&gt;+ buy(Player): boolean&lt;br/&gt;+ initialize(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="845" y="2546" width="197" height="184" as="geometry" />
</mxCell>
<mxCell id="node29" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Building8&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ applyEffect(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="725" y="2815" width="197" height="94" as="geometry" />
</mxCell>
<mxCell id="node28" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;BuildingCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- price: int&lt;br/&gt;# effectType: EffectType&lt;br/&gt;- bought: boolean&lt;br/&gt;- prestigeValue: int&lt;br/&gt;# effectId: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): BuildingCard&lt;br/&gt;+ getEffectType(): EffectType&lt;br/&gt;+ applyEffect(Player): void&lt;br/&gt;+ getPrestigeValue(): int&lt;br/&gt;+ getPrice(): int&lt;br/&gt;+ buy(Player): boolean&lt;br/&gt;+ getEffectId(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="1085" y="1802" width="221" height="328" as="geometry" />
</mxCell>
<mxCell id="node4" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;interface&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;BuildingEffect&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ applyEffect(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="1045" y="1667" width="197" height="79" as="geometry" />
</mxCell>
<mxCell id="node25" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CavePaintings&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- NLower: int&lt;br/&gt;- NPrestigeRem: int&lt;br/&gt;- NPrestigeMul: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ activateEvent(ArrayList&amp;lt;Player&amp;gt;): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-1235" y="2848" width="284" height="147" as="geometry" />
</mxCell>
<mxCell id="node24" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Character&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- type: CharacterType&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getType(): CharacterType&lt;br/&gt;+ insert(Player): void&lt;br/&gt;+ clone(): Character&lt;br/&gt;+ toString(): String&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="52" y="2722" width="206" height="160" as="geometry" />
</mxCell>
<mxCell id="node20" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;CharacterType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ ARTIST: &lt;br/&gt;+ INVENTOR: &lt;br/&gt;+ HUNTER: &lt;br/&gt;+ BUILDER: &lt;br/&gt;+ GATHERER: &lt;br/&gt;+ SHAMAN: &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ values(): CharacterType[]&lt;br/&gt;+ valueOf(String): CharacterType&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="120" y="2450" width="239" height="232" as="geometry" />
</mxCell>
<mxCell id="node35" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;CurrentState&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- NUpper: int&lt;br/&gt;- NLower: int&lt;br/&gt;- round: int&lt;br/&gt;- Era: int&lt;br/&gt;- slot: Slot&lt;br/&gt;- GameStage: GameStages&lt;br/&gt;- player: Player&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getCurrentPlayer(): Player&lt;br/&gt;+ getEra(): int&lt;br/&gt;+ getNUpper(): int&lt;br/&gt;+ GameStageUpdate(GameStages): void&lt;br/&gt;+ getSlot(): Slot&lt;br/&gt;+ UpperDrawn(): void&lt;br/&gt;+ PlayerUpdate(Player, Slot): void&lt;br/&gt;+ getGameStage(): GameStages&lt;br/&gt;+ getNLower(): int&lt;br/&gt;+ getRound(): int&lt;br/&gt;+ EraUpdate(): void&lt;br/&gt;+ RoundUpdate(): void&lt;br/&gt;+ LowerDrawn(): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-54" y="10" width="285" height="520" as="geometry" />
</mxCell>
<mxCell id="node16" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;DecksCreator&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- createCard(BuildingCardDefinition): BuildingCard&lt;br/&gt;+ loadTribeDeckByEra(int): List&amp;lt;TribeCard&amp;gt;&lt;br/&gt;+ loadTribeDeck(String): List&amp;lt;TribeCard&amp;gt;&lt;br/&gt;+ loadSlotDeck(): List&amp;lt;Slot&amp;gt;&lt;br/&gt;- createCard(TribeCardDefinition): TribeCard&lt;br/&gt;+ loadBuildingDeck(String): List&amp;lt;BuildingCard&amp;gt;&lt;br/&gt;+ loadBuildingDeckByEra(int): List&amp;lt;BuildingCard&amp;gt;&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-532" y="1710" width="347" height="207" as="geometry" />
</mxCell>
<mxCell id="node15" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;EffectType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ INVENTOR_PAIR: &lt;br/&gt;+ ON_END_TURN: &lt;br/&gt;+ CARD_SET: &lt;br/&gt;+ ON_ROUND_END: &lt;br/&gt;+ FINAL: &lt;br/&gt;+ ON_EVENT: &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ valueOf(String): EffectType&lt;br/&gt;+ values(): EffectType[]&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="575" y="2182" width="216" height="232" as="geometry" />
</mxCell>
<mxCell id="node31" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;EventCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- type: EventType&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ activateEvent(ArrayList&amp;lt;Player&amp;gt;): void&lt;br/&gt;+ getType(): EventType&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-717" y="2476" width="284" height="121" as="geometry" />
</mxCell>
<mxCell id="node9" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;EventType&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ CAVE_PAINTINGS: &lt;br/&gt;+ HUNT: &lt;br/&gt;+ SUSTENANCE: &lt;br/&gt;+ SHAMANIC_RITUAL: &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ values(): EventType[]&lt;br/&gt;+ valueOf(String): EventType&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-1049" y="2404" width="214" height="184" as="geometry" />
</mxCell>
<mxCell id="node37" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Game&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- nPlayers: int&lt;br/&gt;- slotMap: HashMap&amp;lt;Slot, Player&amp;gt;&lt;br/&gt;- currentState: CurrentState&lt;br/&gt;- board: Board&lt;br/&gt;- playersList: ArrayList&amp;lt;Player&amp;gt;&lt;br/&gt;- orderLogicCard: OrderLogicCard&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- EraUpdate(): void&lt;br/&gt;- nextRound(): void&lt;br/&gt;- endGame(): void&lt;br/&gt;+ init(): void&lt;br/&gt;- nextPlayerSetup(): void&lt;br/&gt;- EventResolution(): void&lt;br/&gt;+ addPlayer(Player): boolean&lt;br/&gt;+ DrawLowerTribeCard(Player, TribeCard): boolean&lt;br/&gt;+ DrawLowerBuildingCard(Player, BuildingCard): boolean&lt;br/&gt;+ DrawUpperTribeCard(Player, TribeCard): boolean&lt;br/&gt;+ DrawUpperBuildingCard(Player, BuildingCard): boolean&lt;br/&gt;+ SlotChoice(Player, Slot): boolean&lt;br/&gt;- BuildingEffect12(List&amp;lt;Player&amp;gt;): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-69" y="590" width="385" height="496" as="geometry" />
</mxCell>
<mxCell id="node11" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;i&gt;&amp;lt;&amp;lt;enumeration&amp;gt;&amp;gt;&lt;/i&gt;&lt;br/&gt;&lt;b&gt;GameStages&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ RESOLVING_ACTIONS: &lt;br/&gt;+ ENDING: &lt;br/&gt;+ WAITING: &lt;br/&gt;+ RESOLVING_EVENT: &lt;br/&gt;+ BUILDING_EFFECT_12: &lt;br/&gt;+ ENDED: &lt;br/&gt;+ SLOT_CHOICE: &lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ values(): GameStages[]&lt;br/&gt;+ valueOf(String): GameStages&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-352" y="653" width="226" height="256" as="geometry" />
</mxCell>
<mxCell id="node18" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Gatherer&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ clone(): Character&lt;br/&gt;+ toString(): String&lt;br/&gt;+ insert(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="122" y="3263" width="162" height="120" as="geometry" />
</mxCell>
<mxCell id="node21" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Hunt&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;~ foodToAdd: int&lt;br/&gt;~ prestigeMultiplicator: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ activateEvent(ArrayList&amp;lt;Player&amp;gt;): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-632" y="3163" width="284" height="121" as="geometry" />
</mxCell>
<mxCell id="node32" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Hunter&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- icon: boolean&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getIcon(): boolean&lt;br/&gt;+ toString(): String&lt;br/&gt;+ clone(): Character&lt;br/&gt;+ insert(Player): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="572" y="3038" width="162" height="160" as="geometry" />
</mxCell>
<mxCell id="node19" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Inventor&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- icon: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ toString(): String&lt;br/&gt;+ insert(Player): void&lt;br/&gt;+ Icon(): int&lt;br/&gt;+ clone(): Character&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="222" y="3038" width="162" height="160" as="geometry" />
</mxCell>
<mxCell id="node12" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order2&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ effect(Player, int): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="189" y="1527" width="188" height="68" as="geometry" />
</mxCell>
<mxCell id="node10" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order3&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ effect(Player, int): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="69" y="1427" width="188" height="68" as="geometry" />
</mxCell>
<mxCell id="node33" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order4&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ effect(Player, int): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="309" y="1427" width="188" height="68" as="geometry" />
</mxCell>
<mxCell id="node2" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Order5&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ effect(Player, int): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-51" y="1527" width="188" height="68" as="geometry" />
</mxCell>
<mxCell id="node14" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;OrderLogicCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- players: Queue&amp;lt;Player&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;# effect(Player, int): void&lt;br/&gt;+ push(Player): void&lt;br/&gt;+ getFirst(): Player&lt;br/&gt;# buildingEffect(Player): void&lt;br/&gt;+ pull(): Player&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-63" y="1166" width="213" height="184" as="geometry" />
</mxCell>
<mxCell id="node17" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;PlayableCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- Era: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getEra(): int&lt;br/&gt;+ toString(): String&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-53" y="1775" width="153" height="121" as="geometry" />
</mxCell>
<mxCell id="node5" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Player&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ hunters: ArrayList&amp;lt;Hunter&amp;gt;&lt;br/&gt;+ builders: ArrayList&amp;lt;Builder&amp;gt;&lt;br/&gt;- PrestigeValue: int&lt;br/&gt;+ gatherers: ArrayList&amp;lt;Gatherer&amp;gt;&lt;br/&gt;+ artists: ArrayList&amp;lt;Artist&amp;gt;&lt;br/&gt;- FoodValue: int&lt;br/&gt;+ inventors: ArrayList&amp;lt;Inventor&amp;gt;&lt;br/&gt;- UserName: String&lt;br/&gt;+ buildingCards: ArrayList&amp;lt;BuildingCard&amp;gt;&lt;br/&gt;+ shamans: ArrayList&amp;lt;Shaman&amp;gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getFoodValue(): int&lt;br/&gt;+ getNType(CharacterType): int&lt;br/&gt;+ removeFood(int): Boolean&lt;br/&gt;+ Play(Slot): void&lt;br/&gt;+ getTotCharacters(): int&lt;br/&gt;+ getUserName(): String&lt;br/&gt;+ addFood(int): void&lt;br/&gt;+ addPrestige(int): void&lt;br/&gt;+ SlotChoice(): void&lt;br/&gt;+ removePrestige(int): void&lt;br/&gt;+ getPrestigeValue(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="503" y="616" width="288" height="544" as="geometry" />
</mxCell>
<mxCell id="node34" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Shaman&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- icon: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getIcon(): int&lt;br/&gt;+ clone(): Character&lt;br/&gt;+ insert(Player): void&lt;br/&gt;+ toString(): String&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-78" y="3238" width="162" height="160" as="geometry" />
</mxCell>
<mxCell id="node3" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;ShamanicRitual&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;~ prestigeToAdd: int&lt;br/&gt;~ prestigeToRemove: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ activateEvent(ArrayList&amp;lt;Player&amp;gt;): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-972" y="3146" width="284" height="121" as="geometry" />
</mxCell>
<mxCell id="node0" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Slot&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- NUpper: int&lt;br/&gt;- slotId: char&lt;br/&gt;- nMinPlayer: int&lt;br/&gt;- Food: int&lt;br/&gt;- NLower: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getNLower(): int&lt;br/&gt;+ getNMinPlayer(): int&lt;br/&gt;+ getFood(): int&lt;br/&gt;+ getSlotId(): char&lt;br/&gt;+ getNUpper(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-600" y="653" width="170" height="280" as="geometry" />
</mxCell>
<mxCell id="node30" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;Sustenance&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- PrestigeDebt: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ getPrestigeDebt(): int&lt;br/&gt;+ activateEvent(ArrayList&amp;lt;Player&amp;gt;): void&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-398" y="2860" width="284" height="121" as="geometry" />
</mxCell>
<mxCell id="node7" parent="1" vertex="1" value="&lt;p style=&quot;margin:0px;margin-top:4px;text-align:center;&quot;&gt;&lt;b&gt;TribeCard&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;- isEventCard: boolean&lt;br/&gt;- nMin: int&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0 0 0 4px;line-height:1.6;&quot;&gt;+ IsEventCard(): boolean&lt;br/&gt;+ getNMin(): int&lt;/p&gt;" style="verticalAlign=top;align=left;overflow=fill;fontSize=14;fontFamily=Helvetica;html=1;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;">
<mxGeometry x="-70" y="2230" width="187" height="147" as="geometry" />
</mxCell>
<mxCell id="edge5" edge="1" value="" parent="1" source="node13" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.443;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="103" y="3018" />
<mxPoint x="203" y="3018" />
<mxPoint x="203" y="2938" />
<mxPoint x="143" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge6" edge="1" value="" parent="1" source="node26" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.443;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="523" y="3018" />
<mxPoint x="203" y="3018" />
<mxPoint x="203" y="2938" />
<mxPoint x="143" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge13" edge="1" value="" parent="1" source="node6" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1063" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge1" edge="1" value="" parent="1" source="node8" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="703" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge0" edge="1" value="" parent="1" source="node23" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge20" edge="1" value="" parent="1" source="node1" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="583" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge3" edge="1" value="" parent="1" source="node27" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="1303" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge9" edge="1" value="" parent="1" source="node36" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="943" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge14" edge="1" value="" parent="1" source="node29" target="node28" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.627;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="823" y="2518" />
<mxPoint x="1183" y="2518" />
<mxPoint x="1183" y="2478" />
<mxPoint x="1223" y="2478" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge22" edge="1" value="" parent="1" source="node28" target="node4" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=1;startArrow=none;endArrow=block;endSize=12;strokeColor=#008200;exitX=0.265;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.001;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge7" edge="1" value="" parent="1" source="node28" target="node17" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.000;exitY=0.109;exitDx=0;exitDy=0;entryX=1.000;entryY=0.559;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge8" edge="1" value="" parent="1" source="node25" target="node31" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1093" y="2765" />
<mxPoint x="-575" y="2765" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge10" edge="1" value="" parent="1" source="node24" target="node7" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.000;exitY=0.100;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="23" y="2738" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge16" edge="1" value="" parent="1" source="node31" target="node7" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-575" y="2407" />
<mxPoint x="23" y="2407" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge21" edge="1" value="" parent="1" source="node18" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.443;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="203" y="2938" />
<mxPoint x="143" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge23" edge="1" value="" parent="1" source="node21" target="node31" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-490" y="2867" />
<mxPoint x="-575" y="2867" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge15" edge="1" value="" parent="1" source="node32" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.443;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="653" y="3018" />
<mxPoint x="203" y="3018" />
<mxPoint x="203" y="2938" />
<mxPoint x="143" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge17" edge="1" value="" parent="1" source="node19" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.443;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="303" y="3018" />
<mxPoint x="203" y="3018" />
<mxPoint x="203" y="2938" />
<mxPoint x="143" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge4" edge="1" value="" parent="1" source="node12" target="node14" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="283" y="1398" />
<mxPoint x="43" y="1398" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge18" edge="1" value="" parent="1" source="node10" target="node14" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="163" y="1398" />
<mxPoint x="43" y="1398" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge11" edge="1" value="" parent="1" source="node33" target="node14" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="403" y="1398" />
<mxPoint x="43" y="1398" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge2" edge="1" value="" parent="1" source="node2" target="node14" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.001;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="edge25" edge="1" value="" parent="1" source="node34" target="node24" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="3" y="3018" />
<mxPoint x="203" y="3018" />
<mxPoint x="203" y="2938" />
<mxPoint x="155" y="2938" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge24" edge="1" value="" parent="1" source="node3" target="node31" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-830" y="2875" />
<mxPoint x="-575" y="2875" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge12" edge="1" value="" parent="1" source="node30" target="node31" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points">
<mxPoint x="-256" y="2778" />
<mxPoint x="-575" y="2778" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="edge19" edge="1" value="" parent="1" source="node7" target="node17" style="html=1;rounded=1;edgeStyle=orthogonalEdgeStyle;dashed=0;startArrow=none;endArrow=block;endSize=12;strokeColor=#000082;exitX=0.500;exitY=0.000;exitDx=0;exitDy=0;entryX=0.500;entryY=1.000;entryDx=0;entryDy=0;">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<Array as="points" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
@@ -96,14 +96,14 @@ public class TUI implements IView {
printLine("Type 'rematch' to play again or 'quit' to exit");
} else {
display(buildBoardContent());
printLine("\033[2mCommands: slot <pos> | draw upper|lower tribe|building <pos> | totem <pos> | skip | clear | details buildings|events|characters | rematch | quit\033[0m");
printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");
}
}
/** Renders the board + menu (top) and all players' hands in a grid (bottom). */
public void renderBoard() {
display(buildBoardContent());
printLine("Commands: slot <pos> | draw upper|lower tribe|building <pos> | totem <pos> | skip | clear | details buildings|events|characters | rematch | quit");
printLine("\033[2mCommands: slot <pos> | draw upper/lower tribe/building <pos> | totem <pos> | skip | clear | details buildings/events/characters | quit\033[0m");
}
/**