diff --git a/forge-gui-mobile/src/forge/adventure/data/RewardData.java b/forge-gui-mobile/src/forge/adventure/data/RewardData.java index 495a78948ce..d5d0c0f268b 100644 --- a/forge-gui-mobile/src/forge/adventure/data/RewardData.java +++ b/forge-gui-mobile/src/forge/adventure/data/RewardData.java @@ -144,7 +144,13 @@ public class RewardData implements Serializable { case "Union": HashSet pool = new HashSet<>(); for (RewardData r : cardUnion) { - pool.addAll(CardUtil.getPredicateResult(allCards, r)); + if( r.cardName != null && !r.cardName.isEmpty() ) { + PaperCard pc = StaticData.instance().getCommonCards().getCard(r.cardName); + if (pc != null) + pool.add(pc); + } else { + pool.addAll(CardUtil.getPredicateResult(allCards, r)); + } } ArrayList finalPool = new ArrayList(pool); diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index 0564e79cea5..94858e29f8b 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -8,6 +8,8 @@ import com.google.common.collect.Lists; import forge.Forge; import forge.adventure.data.*; import forge.adventure.pointofintrest.PointOfInterestChanges; +import forge.adventure.scene.AdventureDeckEditor; +import forge.adventure.scene.DeckEditScene; import forge.adventure.util.*; import forge.adventure.world.WorldSave; import forge.card.ColorSet; @@ -588,6 +590,9 @@ public class AdventurePlayer implements Serializable, SaveFileContent { newCards.add(reward.getCard()); if (reward.isNoSell()) { noSellCards.add(reward.getCard()); + AdventureDeckEditor editor = ((AdventureDeckEditor) DeckEditScene.getInstance().getScreen()); + if (editor != null) + editor.refresh(); } break; case Gold: diff --git a/forge-gui-mobile/src/forge/adventure/scene/UIScene.java b/forge-gui-mobile/src/forge/adventure/scene/UIScene.java index cf6fd2f7799..94174cf7bb4 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/UIScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/UIScene.java @@ -332,6 +332,14 @@ public class UIScene extends Scene { public boolean keyPressed(int keycode) { Selectable selection = getSelected(); + + if (KeyBinding.Use.isPressed(keycode)) { + if (selection != null) { + selection.onPressDown(this); + return true; + } + } + ui.pressDown(keycode); if (stage.getKeyboardFocus() instanceof SelectBox) { SelectBox box = (SelectBox) stage.getKeyboardFocus(); @@ -343,10 +351,11 @@ public class UIScene extends Scene { return false; } } - if (KeyBinding.Use.isPressed(keycode)) { - if (selection != null) - selection.onPressDown(this); + + if (KeyBinding.Back.isPressed(keycode) && selection != null) { + selection.onDeSelect(); + stage.setKeyboardFocus(null); } if (KeyBinding.ScrollUp.isPressed(keycode)) { Actor focus = stage.getScrollFocus(); diff --git a/forge-gui-mobile/src/forge/adventure/stage/GameStage.java b/forge-gui-mobile/src/forge/adventure/stage/GameStage.java index 9348d410283..477132f6785 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameStage.java @@ -402,8 +402,6 @@ public abstract class GameStage extends Stage { Vector2 adjDirY = direction.cpy(); boolean foundX = false; boolean foundY = false; - if(isColliding(boundingRect))//if player is already colliding (after flying or teleport) allow to move off collision - return direction; while (true) { if (!isColliding(new Rectangle(boundingRect.x + adjDirX.x, boundingRect.y + adjDirX.y, boundingRect.width, boundingRect.height))) { diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java index d52c9b9e7c7..86e8018d38d 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapStage.java @@ -123,7 +123,7 @@ public class MapStage extends GameStage { public PointOfInterestChanges getChanges() { return changes; } - private boolean matchJustEnded = false; + private boolean freezeAllEnemyBehaviors = false; protected MapStage() { dialog = Controls.newDialog(""); @@ -866,7 +866,7 @@ public class MapStage extends GameStage { @Override public void setWinner(boolean playerWins) { isLoadingMatch = false; - matchJustEnded = true; + freezeAllEnemyBehaviors = true; if (playerWins) { currentMob.clearCollisionHeight(); Current.player().win(); @@ -1034,12 +1034,14 @@ public class MapStage extends GameStage { return; Iterator it = enemies.iterator(); - if (matchJustEnded){ - if (!positions.contains(player.pos())) - matchJustEnded = false; + if (freezeAllEnemyBehaviors) { + if (!positions.contains(player.pos())) { + freezeAllEnemyBehaviors = false; + } + else return; } - if (!matchJustEnded) { + if (!freezeAllEnemyBehaviors) { while (it.hasNext()) { EnemySprite mob = it.next(); if (mob.inactive){ @@ -1101,6 +1103,7 @@ public class MapStage extends GameStage { } break; } else if (actor instanceof RewardSprite) { + freezeAllEnemyBehaviors = true; Gdx.input.vibrate(50); if (Controllers.getCurrent() != null && Controllers.getCurrent().canVibrate()) Controllers.getCurrent().startVibration(100, 1); @@ -1171,6 +1174,7 @@ public class MapStage extends GameStage { for (int i = 0; i < dialog.getButtonTable().getCells().size; i++) { dialogButtonMap.add((TextraButton) dialog.getButtonTable().getCells().get(i).getActor()); } + freezeAllEnemyBehaviors = true; dialog.show(dialogStage, Actions.show()); dialog.setPosition((dialogStage.getWidth() - dialog.getWidth()) / 2, (dialogStage.getHeight() - dialog.getHeight()) / 2); dialogOnlyInput = true; diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index 61bfcf6935a..82f0fa8629d 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -230,6 +230,13 @@ public class WorldStage extends GameStage implements SaveFileContent { return WorldSave.getCurrentSave().getWorld().collidingTile(boundingRect); } + @Override + public Vector2 adjustMovement(Vector2 direction, Rectangle boundingRect) { + if (isColliding(boundingRect)) //if player is already colliding (after flying or teleport) allow to move off collision + return direction; + return super.adjustMovement(direction, boundingRect); + } + public boolean spawn(String enemy) { return spawn(WorldData.getEnemy(enemy)); } diff --git a/forge-gui-mobile/src/forge/toolbox/FContainer.java b/forge-gui-mobile/src/forge/toolbox/FContainer.java index b29d38b3916..2a747c9dd1d 100644 --- a/forge-gui-mobile/src/forge/toolbox/FContainer.java +++ b/forge-gui-mobile/src/forge/toolbox/FContainer.java @@ -94,8 +94,8 @@ public abstract class FContainer extends FDisplayObject { @Override public void setSize(float width, float height) { - if (getWidth() == width && getHeight() == height) { return; } - + //called with (0,0) when app minimized, if set then causes errors with layouts loaded before restoring focus + if ((getWidth() == width && getHeight() == height) || width == 0f || height == 0f) { return; } super.setSize(width, height); doLayout(width, height); } diff --git a/forge-gui/res/adventure/common/maps/extensions/rename-waypoints-by-ID.js b/forge-gui/res/adventure/common/maps/extensions/rename-waypoints-by-ID.js new file mode 100644 index 00000000000..2d1235102d6 --- /dev/null +++ b/forge-gui/res/adventure/common/maps/extensions/rename-waypoints-by-ID.js @@ -0,0 +1,61 @@ +/// + +/* + * rename-waypoints-by-ID.js + * Created by TabletopGeneral for Forge Adventure Mode + * + * This extension adds a 'Rename waypoints by ID' (Ctrl+Shift+R) action to the Map + * menu, useful to visually identify points for mob navigation + * Based on https://github.com/justdaft/tiled-scripts/blob/main/rename-object-by-type.js + * + */ + +/* global tiled */ + +function doRenameWaypoints(thing) { + let count = 0; + for (let i = thing.layerCount - 1; i >= 0; i--) { + const layer = thing.layerAt(i); + + if (layer.isGroupLayer) { + const obj = doRenameWaypoints(layer, "waypoint"); + if (obj) { + count = count + obj; + } + } else if (layer.isObjectLayer) { + for (const obj of layer.objects) { + + if (obj.name == "waypoint") { + obj.name = obj.id; + count++; + } + } + } + } + + return count; +} + + +let renameWaypoints = tiled.registerAction("renameWaypoints", function(/* action */) { + const map = tiled.activeAsset; + if (!map.isTileMap) { + tiled.alert("Not a tile map!"); + return; + } + + + const count = doRenameWaypoints(map); + + tiled.alert("Renamed " + count + " waypoints"); + +}); + + +renameWaypoints.text = "Rename waypoints by ID"; +renameWaypoints.shortcut = "Ctrl+Shift+R"; + +tiled.extendMenu("Map", [ + { separator: true }, + { action: "renameWaypoints" }, +]); \ No newline at end of file diff --git a/forge-gui/res/adventure/common/maps/map/barbariancamp/barbariancamp_bandit.tmx b/forge-gui/res/adventure/common/maps/map/barbariancamp/barbariancamp_bandit.tmx index acf89141b66..4067953e666 100644 --- a/forge-gui/res/adventure/common/maps/map/barbariancamp/barbariancamp_bandit.tmx +++ b/forge-gui/res/adventure/common/maps/map/barbariancamp/barbariancamp_bandit.tmx @@ -57,7 +57,7 @@ - + diff --git a/forge-gui/res/adventure/common/maps/map/cave/cave_bandit.tmx b/forge-gui/res/adventure/common/maps/map/cave/cave_bandit.tmx index d82e36019a8..282c68f10b4 100644 --- a/forge-gui/res/adventure/common/maps/map/cave/cave_bandit.tmx +++ b/forge-gui/res/adventure/common/maps/map/cave/cave_bandit.tmx @@ -51,7 +51,7 @@ - + diff --git a/forge-gui/res/adventure/common/maps/obj/enemy.tx b/forge-gui/res/adventure/common/maps/obj/enemy.tx index 38b20dfa6bb..070f8901781 100644 --- a/forge-gui/res/adventure/common/maps/obj/enemy.tx +++ b/forge-gui/res/adventure/common/maps/obj/enemy.tx @@ -10,7 +10,9 @@ + + diff --git a/forge-gui/res/adventure/common/maps/obj/entry_down.tx b/forge-gui/res/adventure/common/maps/obj/entry_down.tx index d408f3feae9..7772836b65c 100644 --- a/forge-gui/res/adventure/common/maps/obj/entry_down.tx +++ b/forge-gui/res/adventure/common/maps/obj/entry_down.tx @@ -5,6 +5,7 @@ + diff --git a/forge-gui/res/adventure/common/maps/obj/entry_left.tx b/forge-gui/res/adventure/common/maps/obj/entry_left.tx index 2a671a6dc88..8dc59f7584d 100644 --- a/forge-gui/res/adventure/common/maps/obj/entry_left.tx +++ b/forge-gui/res/adventure/common/maps/obj/entry_left.tx @@ -5,6 +5,7 @@ + diff --git a/forge-gui/res/adventure/common/maps/obj/entry_right.tx b/forge-gui/res/adventure/common/maps/obj/entry_right.tx index 83dc17f4c5d..cfbcd3f402b 100644 --- a/forge-gui/res/adventure/common/maps/obj/entry_right.tx +++ b/forge-gui/res/adventure/common/maps/obj/entry_right.tx @@ -5,6 +5,7 @@ + diff --git a/forge-gui/res/adventure/common/maps/obj/entry_up.tx b/forge-gui/res/adventure/common/maps/obj/entry_up.tx index a6cac56e68a..61c155891eb 100644 --- a/forge-gui/res/adventure/common/maps/obj/entry_up.tx +++ b/forge-gui/res/adventure/common/maps/obj/entry_up.tx @@ -5,6 +5,7 @@ + diff --git a/forge-gui/res/adventure/common/maps/tileset/dungeon-nocollide.tsx b/forge-gui/res/adventure/common/maps/tileset/dungeon-nocollide.tsx new file mode 100644 index 00000000000..58b30914711 --- /dev/null +++ b/forge-gui/res/adventure/common/maps/tileset/dungeon-nocollide.tsx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/common/maps/tileset/dungeon.png b/forge-gui/res/adventure/common/maps/tileset/dungeon.png index 2ad25447304..0fc781ea8e2 100644 Binary files a/forge-gui/res/adventure/common/maps/tileset/dungeon.png and b/forge-gui/res/adventure/common/maps/tileset/dungeon.png differ diff --git a/forge-gui/res/adventure/common/maps/tileset/dungeon.tsx b/forge-gui/res/adventure/common/maps/tileset/dungeon.tsx index 594cbd3219a..7aeaa02830c 100644 --- a/forge-gui/res/adventure/common/maps/tileset/dungeon.tsx +++ b/forge-gui/res/adventure/common/maps/tileset/dungeon.tsx @@ -1,4 +1,1018 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/common/maps/tileset/main.tsx b/forge-gui/res/adventure/common/maps/tileset/main.tsx index 67c8c6de43f..dfa6eeb7899 100644 --- a/forge-gui/res/adventure/common/maps/tileset/main.tsx +++ b/forge-gui/res/adventure/common/maps/tileset/main.tsx @@ -104,12 +104,12 @@ - + - + @@ -5488,6 +5488,16 @@ + + + + + + + + + + @@ -5763,6 +5773,16 @@ + + + + + + + + + + @@ -9036,6 +9056,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -9262,6 +9302,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -9507,6 +9567,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -9774,6 +9854,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -10024,6 +10124,16 @@ + + + + + + + + + + @@ -10146,6 +10256,16 @@ + + + + + + + + + + @@ -10275,6 +10395,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10381,6 +10568,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -10456,6 +10663,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -10486,6 +10713,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10496,6 +10773,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10523,6 +10865,26 @@ + + + + + + + + + + + + + + + + + + + + @@ -10553,6 +10915,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10573,6 +10975,16 @@ + + + + + + + + + + @@ -10590,6 +11002,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -10645,6 +11097,16 @@ + + + + + + + + + + @@ -10691,6 +11153,16 @@ + + + + + + + + + + @@ -10741,6 +11213,16 @@ + + + + + + + + + + @@ -11001,6 +11483,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11011,6 +11528,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11021,6 +11573,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -11924,20 +12622,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/common/maps/tileset/rivers.tsx b/forge-gui/res/adventure/common/maps/tileset/rivers.tsx index b72902e34b3..345dca600ff 100644 --- a/forge-gui/res/adventure/common/maps/tileset/rivers.tsx +++ b/forge-gui/res/adventure/common/maps/tileset/rivers.tsx @@ -2521,6 +2521,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2977,6 +3007,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3129,6 +3199,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate2.png b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate2.png new file mode 100644 index 00000000000..83f4c3a5754 Binary files /dev/null and b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate2.png differ diff --git a/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.atlas b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.atlas new file mode 100644 index 00000000000..98f112d2fac --- /dev/null +++ b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.atlas @@ -0,0 +1,68 @@ +pirate3.png +size: 64,96 +format: RGBA8888 +filter: Nearest,Nearest +repeat: none +Avatar + xy: 0, 0 + size: 16, 16 +Idle + xy: 0, 16 + size: 16, 16 +Idle + xy: 16, 16 + size: 16, 16 +Idle + xy: 32, 16 + size: 16, 16 +Idle + xy: 48, 16 + size: 16, 16 +Walk + xy: 0, 32 + size: 16, 16 +Walk + xy: 16, 32 + size: 16, 16 +Walk + xy: 32, 32 + size: 16, 16 +Walk + xy: 48, 32 + size: 16, 16 +Attack + xy: 0, 48 + size: 16, 16 +Attack + xy: 16, 48 + size: 16, 16 +Attack + xy: 32, 48 + size: 16, 16 +Attack + xy: 48, 48 + size: 16, 16 +Hit + xy: 0, 64 + size: 16, 16 +Hit + xy: 16, 64 + size: 16, 16 +Hit + xy: 32, 64 + size: 16, 16 +Hit + xy: 48, 64 + size: 16, 16 +Death + xy: 0, 80 + size: 16, 16 +Death + xy: 16, 80 + size: 16, 16 +Death + xy: 32, 80 + size: 16, 16 +Death + xy: 48, 80 + size: 16, 16 diff --git a/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.png b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.png new file mode 100644 index 00000000000..292bcb28174 Binary files /dev/null and b/forge-gui/res/adventure/common/sprites/enemy/humanoid/human/rogue/pirate3.png differ diff --git a/forge-gui/res/blockdata/blocks.txt b/forge-gui/res/blockdata/blocks.txt index 281b08ef336..ebfdef93c61 100644 --- a/forge-gui/res/blockdata/blocks.txt +++ b/forge-gui/res/blockdata/blocks.txt @@ -124,3 +124,4 @@ Shadows over Innistrad Remastered, 3/6/SIR, SIR March of the Machine, 3/6/MOM, MOM March of the Machine Jumpstart, -/2/MOM, Meta-Choose(S(MOM Brood 1)Brood 1;S(MOM Brood 2)Brood 2 ;S(MOM Overachiever 1)Overachiever 1;S(MOM Overachiever 2)Overachiever 2;S(MOM Expendable 1)Expendable 1;S(MOM Expendable 2)Expendable 2;S(MOM Reinforcement 1)Reinforcement 1;S(MOM Reinforcement 2)Reinforcement 2;S(MOM Buff 1)Buff 1;S(MOM Buff 2)Buff 2)Themes The Lord of the Rings: Tales of Middle-earth, 3/6/LTR, LTR +The Lord of the Rings: Tales of Middle-earth Jumpstart, -/2/LTR, Meta-Choose(S(LTR Courageous 1)Courageous 1;S(LTR Courageous 2)Courageous 2;S(LTR Tricksy 1)Tricksy 1;S(LTR Tricksy 2)Tricksy 2;S(LTR Mordor 1)Mordor 1;S(LTR Mordor 2)Mordor 1;S(LTR Marauders 1)Marauders 1;S(LTR Marauders 2)Marauders 1;S(LTR Journey 1)Journey 1;S(LTR Journey 2)Journey 2)Themes \ No newline at end of file