diff --git a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java index d40c3eb7d7d..0564e79cea5 100644 --- a/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java +++ b/forge-gui-mobile/src/forge/adventure/player/AdventurePlayer.java @@ -200,7 +200,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { return inventoryItems; } - public Array getBoostersOwned(){ + public Array getBoostersOwned() { return boostersOwned; } @@ -303,7 +303,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } } - if (configuredDifficulty != null && (this.difficultyData.shardSellRatio == data.readFloat("shardSellRatio") || data.readFloat("shardSellRatio") == 0)) + if (configuredDifficulty != null && (this.difficultyData.shardSellRatio == data.readFloat("shardSellRatio") || data.readFloat("shardSellRatio") == 0)) this.difficultyData.shardSellRatio = configuredDifficulty.shardSellRatio; else this.difficultyData.shardSellRatio = data.readFloat("shardSellRatio"); @@ -373,11 +373,10 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } if (data.containsKey("boosters")) { Deck[] decks = (Deck[]) data.readObject("boosters"); - for (Deck d : decks){ - if (d != null && !d.isEmpty()){ + for (Deck d : decks) { + if (d != null && !d.isEmpty()) { boostersOwned.add(d); - } - else{ + } else { System.err.printf("Null or empty booster %s\n", d); System.out.println("You have an empty booster pack in your inventory."); } @@ -418,9 +417,9 @@ public class AdventurePlayer implements Serializable, SaveFileContent { events.clear(); Object[] q = (Object[]) data.readObject("events"); if (q != null) { - for (Object itsReallyAnEvent : q){ + for (Object itsReallyAnEvent : q) { events.add((AdventureEventData) itsReallyAnEvent); - } + } } } @@ -587,7 +586,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { case Card: cards.add(reward.getCard()); newCards.add(reward.getCard()); - if (reward.isNoSell()){ + if (reward.isNoSell()) { noSellCards.add(reward.getCard()); } break; @@ -1054,9 +1053,9 @@ public class AdventurePlayer implements Serializable, SaveFileContent { * @return int - index of new copy slot, or -1 if no slot was available */ public int copyDeck() { - for (int i = 0; i < decks.length; i++ ){ + for (int i = 0; i < decks.length; i++) { if (isEmptyDeck(i)) { - decks[i] = (Deck)deck.copyTo(deck.getName() + " (" + Forge.getLocalizer().getMessage("lblCopy") + ")"); + decks[i] = (Deck) deck.copyTo(deck.getName() + " (" + Forge.getLocalizer().getMessage("lblCopy") + ")"); return i; } } @@ -1075,6 +1074,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { public ItemPool getAutoSellCards() { return autoSellCards; } + public ItemPool getNoSellCards() { return noSellCards; } @@ -1095,7 +1095,7 @@ public class AdventurePlayer implements Serializable, SaveFileContent { int count = cp.getValue() - noSellCards.count(cp.getKey()); - if (count <=0) continue; + if (count <= 0) continue; if (count > maxCardCounts.getOrDefault(cp.getKey(), 0)) { maxCardCounts.put(cp.getKey(), cp.getValue()); @@ -1112,7 +1112,6 @@ public class AdventurePlayer implements Serializable, SaveFileContent { } - public CardPool getCollectionCards(boolean allCards) { CardPool collectionCards = new CardPool(); collectionCards.addAll(cards); @@ -1124,13 +1123,13 @@ public class AdventurePlayer implements Serializable, SaveFileContent { return collectionCards; } - public void loadChanges(PointOfInterestChanges changes){ + public void loadChanges(PointOfInterestChanges changes) { this.currentLocationChanges = changes; } public void doAutosell() { int profit = 0; - for (PaperCard cardToSell: autoSellCards.toFlatList()) { + for (PaperCard cardToSell : autoSellCards.toFlatList()) { profit += AdventurePlayer.current().cardSellPrice(cardToSell); autoSellCards.remove(cardToSell); cards.remove(cardToSell, 1); diff --git a/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java b/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java index 4085e290814..116503a118d 100644 --- a/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java +++ b/forge-gui-mobile/src/forge/adventure/pointofintrest/PointOfInterestChanges.java @@ -18,6 +18,7 @@ public class PointOfInterestChanges implements SaveFileContent { private final java.util.Map shopSeeds = new HashMap<>(); private final java.util.Map shopModifiers = new HashMap<>(); private final java.util.Map reputation = new HashMap<>(); + private Boolean isBookmarked; public static class Map extends HashMap implements SaveFileContent { @Override @@ -62,6 +63,7 @@ public class PointOfInterestChanges implements SaveFileContent { mapFlags.putAll((java.util.Map) data.readObject("mapFlags")); shopModifiers.clear(); shopModifiers.putAll((java.util.Map) data.readObject("shopModifiers")); + isBookmarked = (Boolean) data.readObject("isBookmarked"); } @Override @@ -72,6 +74,7 @@ public class PointOfInterestChanges implements SaveFileContent { data.storeObject("mapFlags", mapFlags); data.storeObject("shopSeeds", shopSeeds); data.storeObject("shopModifiers", shopModifiers); + data.storeObject("isBookmarked", isBookmarked); return data; } @@ -159,6 +162,14 @@ public class PointOfInterestChanges implements SaveFileContent { public boolean hasDeletedObjects() { return deletedObjects != null && !deletedObjects.isEmpty(); } + public boolean isBookmarked() { + if (isBookmarked == null) + return false; + return isBookmarked; + } + public void setIsBookmarked(boolean val) { + isBookmarked = val; + } public void clearDeletedObjects() { // reset map when assigning as a quest target that needs enemies diff --git a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java index d9575a5c8f3..e8585361484 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/GameScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/GameScene.java @@ -5,6 +5,7 @@ import com.badlogic.gdx.graphics.GL20; import com.google.common.collect.Sets; import forge.Forge; import forge.adventure.data.BiomeData; +import forge.adventure.pointofintrest.PointOfInterest; import forge.adventure.stage.MapStage; import forge.adventure.stage.WorldStage; import forge.adventure.util.Current; @@ -80,6 +81,13 @@ public class GameScene extends HudScene { return location; } + public PointOfInterest getMapPOI() { + if (MapStage.getInstance().isInMap()) { + return TileMapScene.instance().rootPoint; + } + return null; + } + public boolean isNotInWorldMap() { String location = getAdventurePlayerLocation(false, true); Set locationTypes = Sets.newHashSet("capital", "castle", "cave", "dungeon", "town"); diff --git a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java index 303e9feb087..aa15dddc82a 100644 --- a/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java +++ b/forge-gui-mobile/src/forge/adventure/scene/MapViewScene.java @@ -1,6 +1,7 @@ package forge.adventure.scene; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.Group; import com.badlogic.gdx.scenes.scene2d.ui.Image; @@ -9,6 +10,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.github.tommyettinger.textra.TextraButton; import com.github.tommyettinger.textra.TypingLabel; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import forge.Forge; import forge.adventure.data.AdventureQuestData; import forge.adventure.pointofintrest.PointOfInterest; @@ -19,6 +21,7 @@ import forge.adventure.util.Current; import forge.adventure.world.WorldSave; import java.util.List; +import java.util.Set; /** * Displays the rewards of a fight or a treasure @@ -33,6 +36,8 @@ public class MapViewScene extends UIScene { private final List labels; private int index = -1; private float avatarX = 0, avatarY = 0; + private Set positions; + private Set bookmark; public static MapViewScene instance() { if (object == null) @@ -46,6 +51,8 @@ public class MapViewScene extends UIScene { ui.onButtonPress("quest", this::scroll); scroll = ui.findActor("map"); labels = Lists.newArrayList(); + positions = Sets.newHashSet(); + bookmark = Sets.newHashSet(); table = new Group(); scroll.setActor(table); img = new Image(); @@ -62,11 +69,24 @@ public class MapViewScene extends UIScene { a.remove(); } labels.clear(); + positions.clear(); index = -1; Forge.switchToLast(); return true; } + public void addBookmark(PointOfInterest point) { + if (point == null) + return; + bookmark.add(point); + } + + public void removeBookmark(PointOfInterest point) { + if (point == null) + return; + bookmark.remove(point); + } + public boolean scroll() { if (!labels.isEmpty()) { index++; @@ -99,13 +119,22 @@ public class MapViewScene extends UIScene { for (AdventureQuestData adq : Current.player().getQuests()) { PointOfInterest poi = adq.getTargetPOI(); if (poi != null) { + if (positions.contains(poi.getPosition())) + continue; //don't map duplicate position to prevent stacking TypingLabel label = Controls.newTypingLabel("[%?BLACKEN][+GPS]{GRADIENT=RED;WHITE;1;1}>" + adq.name + "{ENDGRADIENT}"); labels.add(label); table.addActor(label); label.setPosition(getMapX(poi.getPosition().x) - label.getWidth() / 2, getMapY(poi.getPosition().y) - label.getHeight() / 2); label.skipToTheEnd(); + positions.add(poi.getPosition()); } } + for (PointOfInterest poi : bookmark) { + TypingLabel label = Controls.newTypingLabel("[%70][+Star]"); + table.addActor(label); + label.setPosition(getMapX(poi.getPosition().x) - label.getWidth() / 2, getMapY(poi.getPosition().y) - label.getHeight() / 2); + label.skipToTheEnd(); + } TextraButton questButton = ui.findActor("quest"); if (questButton != null) { questButton.setDisabled(labels.isEmpty()); diff --git a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java index 6dabd1d3365..8682267f016 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java +++ b/forge-gui-mobile/src/forge/adventure/stage/GameHUD.java @@ -49,7 +49,7 @@ public class GameHUD extends Stage { private final TextraLabel lifePoints, money, shards, keys; private final Image miniMap, gamehud, mapborder, avatarborder, blank; private final InputEvent eventTouchDown, eventTouchUp; - private final TextraButton deckActor, openMapActor, menuActor, logbookActor, inventoryActor, exitToWorldMapActor; + private final TextraButton deckActor, openMapActor, menuActor, logbookActor, inventoryActor, exitToWorldMapActor, bookmarkActor; public final UIActor ui; private final Touchpad touchpad; private final Console console; @@ -89,6 +89,7 @@ public class GameHUD extends Stage { inventoryActor = ui.findActor("inventory"); gamehud = ui.findActor("gamehud"); exitToWorldMapActor = ui.findActor("exittoworldmap"); + bookmarkActor = ui.findActor("bookmark"); dialog = Controls.newDialog(""); miniMapPlayer = new Image(Forge.getAssets().getTexture(Config.instance().getFile("ui/minimap_player.png"))); @@ -120,6 +121,7 @@ public class GameHUD extends Stage { ui.onButtonPress("logbook", this::logbook); ui.onButtonPress("deck", this::openDeck); ui.onButtonPress("exittoworldmap", this::exitToWorldMap); + ui.onButtonPress("bookmark", this::bookmark); lifePoints = ui.findActor("lifePoints"); shards = ui.findActor("shards"); money = ui.findActor("money"); @@ -236,6 +238,7 @@ public class GameHUD extends Stage { && !(Controls.actorContainsVector(logbookActor, touch)) //not inside stats button && !(Controls.actorContainsVector(inventoryActor, touch)) //not inside inventory button && !(Controls.actorContainsVector(exitToWorldMapActor, touch)) //not inside exit button + && !(Controls.actorContainsVector(bookmarkActor, touch)) //not inside bookmark button && !(Controls.actorContainsVector(abilityButtonMap, touch)) //not inside abilityButtonMap && (Controls.actorContainsVector(ui, touch)) //inside display bounds && pointer < 1) { //not more than 1 pointer @@ -356,6 +359,8 @@ public class GameHUD extends Stage { openMapActor.setText(val); openMapActor.layout(); } + if (MapStage.getInstance().isInMap()) + updateBookmarkActor(MapStage.getInstance().getChanges().isBookmarked()); } void clearAbility() { @@ -370,7 +375,7 @@ public class GameHUD extends Stage { setAbilityButton(AdventurePlayer.current().getEquippedAbility1()); setAbilityButton(AdventurePlayer.current().getEquippedAbility2()); float x = Forge.isLandscapeMode() ? 426f : 216f; - float y = 10f; + float y = Forge.isLandscapeMode() ? 10f : 60f; float w = 45f; float h = 35f; for (TextraButton button : abilityButtonMap) { @@ -499,9 +504,9 @@ public class GameHUD extends Stage { private void setAudio(MusicPlaylist playlist) { if (playlist.equals(currentAudioPlaylist)) return; - System.out.println("Playlist: "+playlist); + //System.out.println("Playlist: "+playlist); unloadAudio(); - System.out.println("Playlist: "+playlist); + //System.out.println("Playlist: "+playlist); audio = getMusic(playlist); } @@ -561,6 +566,42 @@ public class GameHUD extends Stage { showDialog(); } + private void bookmark() { + if (console.isVisible()) + return; + if (!GameScene.instance().isNotInWorldMap()) + return; + if (!MapStage.getInstance().canEscape()) + return; + if (Forge.restrictAdvMenus) + return; + if (MapStage.getInstance().isInMap()) { + if (MapStage.getInstance().getChanges().isBookmarked()) { + MapStage.getInstance().getChanges().setIsBookmarked(false); + PointOfInterestMapSprite mapSprite = WorldStage.getInstance().getMapSprite(GameScene.instance().getMapPOI()); + if (mapSprite != null) { + MapStage.getInstance().getChanges().save(); + mapSprite.setBookmarked(false, mapSprite.getPointOfInterest()); + updateBookmarkActor(false); + } + } else { + MapStage.getInstance().getChanges().setIsBookmarked(true); + PointOfInterestMapSprite mapSprite = WorldStage.getInstance().getMapSprite(GameScene.instance().getMapPOI()); + if (mapSprite != null) { + MapStage.getInstance().getChanges().save(); + mapSprite.setBookmarked(true, mapSprite.getPointOfInterest()); + updateBookmarkActor(true); + } + } + } + } + + private void updateBookmarkActor(boolean value) { + if (bookmarkActor == null) + return; + bookmarkActor.setText("[%120][+" + (value ? "Bookmark" : "Unmark") + "]"); + } + private void exitDungeonCallback() { hideDialog(true); } @@ -582,9 +623,9 @@ public class GameHUD extends Stage { actor.setVisible(visible); } - private void setDisabled(Actor actor, boolean enable, String enabled, String disabled) { + private void setDisabled(Actor actor, boolean value, String enabled, String disabled) { if (actor instanceof TextraButton) { - ((TextraButton) actor).setDisabled(enable); + ((TextraButton) actor).setDisabled(value); ((TextraButton) actor).setText(((TextraButton) actor).isDisabled() ? disabled : enabled); } } @@ -609,6 +650,7 @@ public class GameHUD extends Stage { setVisibility(money, visible); setVisibility(blank, visible); setDisabled(exitToWorldMapActor, !GameScene.instance().isNotInWorldMap(), "[%120][+ExitToWorldMap]", "---"); + setDisabled(bookmarkActor, !GameScene.instance().isNotInWorldMap(), "[%120][+Bookmark]", "---"); setAlpha(avatarborder, visible); setAlpha(avatar, visible); setAlpha(deckActor, visible); @@ -616,6 +658,7 @@ public class GameHUD extends Stage { setAlpha(logbookActor, visible); setAlpha(inventoryActor, visible); setAlpha(exitToWorldMapActor, visible); + setAlpha(bookmarkActor, visible); for (TextraButton button : abilityButtonMap) { setAlpha(button, visible); } @@ -723,6 +766,7 @@ public class GameHUD extends Stage { if (exitDungeon) { MapStage.getInstance().exitDungeon(); setDisabled(exitToWorldMapActor, true, "[%120][+ExitToWorldMap]", "---"); + setDisabled(bookmarkActor, true, "[%120][+Bookmark]", "---"); } return true; } diff --git a/forge-gui-mobile/src/forge/adventure/stage/MapSprite.java b/forge-gui-mobile/src/forge/adventure/stage/MapSprite.java index 5fc4bfaa6cc..bf620db5f31 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/MapSprite.java +++ b/forge-gui-mobile/src/forge/adventure/stage/MapSprite.java @@ -9,6 +9,8 @@ import com.badlogic.gdx.utils.Array; import com.github.tommyettinger.textra.TextraLabel; import forge.adventure.data.BiomeSpriteData; import forge.adventure.pointofintrest.PointOfInterest; +import forge.adventure.pointofintrest.PointOfInterestChanges; +import forge.adventure.scene.MapViewScene; import forge.adventure.util.Controls; import forge.adventure.world.WorldSave; import org.apache.commons.lang3.tuple.Pair; @@ -24,14 +26,18 @@ public class MapSprite extends Actor { static public int SpriteLayer = 0; TextureRegion texture; TextraLabel searchPost = Controls.newTextraLabel("[%80][+SearchPost]"); - boolean isCaveDungeon, isOldorVisited; - + Sprite bookmark = Controls.getSprite("Star"); + boolean isCaveDungeon, isOldorVisited, isBookmarked; public MapSprite(Vector2 pos, TextureRegion sprite, PointOfInterest point) { if (point != null) { + PointOfInterestChanges changes = WorldSave.getCurrentSave().getPointOfInterestChanges(point.getID() + point.getData().map); + setBookmarked(changes.isBookmarked(), point); isCaveDungeon = "cave".equalsIgnoreCase(point.getData().type) || "dungeon".equalsIgnoreCase(point.getData().type); if (point.getData().map != null && point.getID() != null) { - isOldorVisited = WorldSave.getCurrentSave().getPointOfInterestChanges(point.getID() + point.getData().map).hasDeletedObjects(); + isOldorVisited = changes.hasDeletedObjects(); } + } else { + setBookmarked(false, null); } texture = sprite; setPosition(pos.x, pos.y); @@ -43,6 +49,15 @@ public class MapSprite extends Actor { isOldorVisited = true; } + public void setBookmarked(boolean val, PointOfInterest poi) { + isBookmarked = val; + if (isBookmarked) + MapViewScene.instance().addBookmark(poi); + else + MapViewScene.instance().removeBookmark(poi); + + } + public static Array getMapSprites(int chunkX, int chunkY, int layer) { Array actorGroup = new Array<>(); List> objects = WorldSave.getCurrentSave().getWorld().GetMapObjects(chunkX, chunkY); @@ -76,6 +91,11 @@ public class MapSprite extends Actor { searchPost.setPosition(getX() - 7, getY() + 7); searchPost.draw(batch, parentAlpha); } + if (isBookmarked && bookmark != null) { + bookmark.setScale(0.7f, 0.7f); + bookmark.setPosition(getRight() - 8, getY() + getHeight() / 1.5f); + bookmark.draw(batch, parentAlpha); + } //font.draw(batch,String.valueOf(getZIndex()),getX()-(getWidth()/2),getY()); } diff --git a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java index 6674655c467..61bfcf6935a 100644 --- a/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java +++ b/forge-gui-mobile/src/forge/adventure/stage/WorldStage.java @@ -12,6 +12,7 @@ import forge.Forge; import forge.adventure.character.CharacterSprite; import forge.adventure.character.EnemySprite; import forge.adventure.data.*; +import forge.adventure.pointofintrest.PointOfInterest; import forge.adventure.scene.DuelScene; import forge.adventure.scene.RewardScene; import forge.adventure.scene.Scene; @@ -338,6 +339,19 @@ public class WorldStage extends GameStage implements SaveFileContent { directlyEnterPOI = true; //On a new game, we want to automatically enter any POI the player overlaps with. } + public PointOfInterestMapSprite getMapSprite(PointOfInterest poi) { + if (poi == null) + return null; + for (Actor actor : foregroundSprites.getChildren()) { + if (actor.getClass() == PointOfInterestMapSprite.class) { + PointOfInterestMapSprite point = (PointOfInterestMapSprite) actor; + if (poi == point.getPointOfInterest() && poi.getPosition() == point.getPointOfInterest().getPosition()) + return point; + } + } + return null; + } + @Override public void enter() { getPlayerSprite().LoadPos(); diff --git a/forge-gui-mobile/src/forge/adventure/util/Controls.java b/forge-gui-mobile/src/forge/adventure/util/Controls.java index 6f75b0c299e..e65e721a12e 100644 --- a/forge-gui-mobile/src/forge/adventure/util/Controls.java +++ b/forge-gui-mobile/src/forge/adventure/util/Controls.java @@ -2,9 +2,7 @@ package forge.adventure.util; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.g2d.*; import com.badlogic.gdx.math.Interpolation; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; @@ -431,6 +429,9 @@ public class Controls { return Forge.getAssets().getTextraFont(name, getSkin().getFont(name), Config.instance().getAtlas(Paths.ITEMS_ATLAS)); } + static public Sprite getSprite(String itemSprite) { + return Config.instance().getAtlas(Paths.ITEMS_ATLAS).createSprite(itemSprite); + } static public class AccountingLabel extends TextraLabel { private TextraLabel label; diff --git a/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java b/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java index 55a267ceacd..21a00e33f66 100644 --- a/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java +++ b/forge-gui-mobile/src/forge/adventure/util/KeyBinding.java @@ -18,6 +18,7 @@ public enum KeyBinding { Map("Map", Input.Keys.M,Input.Keys.BUTTON_SELECT), Equip("Equip", Input.Keys.E,Input.Keys.BUTTON_X), ExitToWorldMap("ExitToWorldMap", Input.Keys.F4,Input.Keys.BUTTON_L2), + Bookmark("Bookmark", Input.Keys.B, Input.Keys.BUTTON_R2), Use("Use", Input.Keys.ENTER,Input.Keys.BUTTON_A), Back("Back", Input.Keys.ESCAPE,Input.Keys.BUTTON_B), ScrollUp("ScrollUp", Input.Keys.PAGE_UP,Input.Keys.BUTTON_L1), diff --git a/forge-gui/res/adventure/common/sprites/items.atlas b/forge-gui/res/adventure/common/sprites/items.atlas index 33167346377..9d783a5bf55 100644 --- a/forge-gui/res/adventure/common/sprites/items.atlas +++ b/forge-gui/res/adventure/common/sprites/items.atlas @@ -444,6 +444,12 @@ GreenLeaf GreenLeaf2 xy: 112, 608 size: 16, 16 +Bookmark + xy: 432, 63 + size: 16, 16 +Unmark + xy: 416, 63 + size: 16, 16 SearchPost xy: 384, 63 size: 16, 16 @@ -456,6 +462,9 @@ LogBook GPS xy: 464, 0 size: 16, 16 +Star + xy: 464, 16 + size: 16, 16 UnderworldCookbook xy: 304, 960 size: 16, 16 diff --git a/forge-gui/res/adventure/common/sprites/items.png b/forge-gui/res/adventure/common/sprites/items.png index 5ce676de519..b69152f2cbd 100644 Binary files a/forge-gui/res/adventure/common/sprites/items.png and b/forge-gui/res/adventure/common/sprites/items.png differ diff --git a/forge-gui/res/adventure/common/ui/hud.json b/forge-gui/res/adventure/common/ui/hud.json index a18af1a95ac..b1521c98667 100644 --- a/forge-gui/res/adventure/common/ui/hud.json +++ b/forge-gui/res/adventure/common/ui/hud.json @@ -89,7 +89,7 @@ "binding": "Deck", "width": 45, "height": 25, - "x": 175, + "x": 198, "y": 0 }, { @@ -99,7 +99,7 @@ "binding": "Inventory", "width": 45, "height": 25, - "x": 220, + "x": 243, "y": 0 }, { @@ -109,7 +109,7 @@ "binding": "Status", "width": 45, "height": 25, - "x": 265, + "x": 288, "y": 0 }, { @@ -119,7 +119,7 @@ "binding": "Menu", "width": 45, "height": 25, - "x": 130, + "x": 108, "y": 0 }, { @@ -139,7 +139,17 @@ "binding": "ExitToWorldMap", "width": 45, "height": 25, - "x": 310, + "x": 333, + "y": 0 + }, + { + "type": "TextButton", + "name": "bookmark", + "text": "[%120][+Bookmark]", + "binding": "Bookmark", + "width": 45, + "height": 25, + "x": 153, "y": 0 } ] diff --git a/forge-gui/res/adventure/common/ui/hud_landscape.json b/forge-gui/res/adventure/common/ui/hud_landscape.json index 8646a3f03ac..ece911e40b7 100644 --- a/forge-gui/res/adventure/common/ui/hud_landscape.json +++ b/forge-gui/res/adventure/common/ui/hud_landscape.json @@ -89,7 +89,7 @@ "binding": "Deck", "width": 45, "height": 25, - "x": 175, + "x": 198, "y": 240 }, { @@ -99,7 +99,7 @@ "binding": "Inventory", "width": 45, "height": 25, - "x": 220, + "x": 243, "y": 240 }, { @@ -109,7 +109,7 @@ "binding": "Status", "width": 45, "height": 25, - "x": 265, + "x": 288, "y": 240 }, { @@ -119,7 +119,7 @@ "binding": "Menu", "width": 45, "height": 25, - "x": 130, + "x": 108, "y": 240 }, { @@ -139,7 +139,17 @@ "binding": "ExitToWorldMap", "width": 45, "height": 25, - "x": 310, + "x": 333, + "y": 240 + }, + { + "type": "TextButton", + "name": "bookmark", + "text": "[%120][+Bookmark]", + "binding": "Bookmark", + "width": 45, + "height": 25, + "x": 153, "y": 240 } ] diff --git a/forge-gui/res/adventure/common/ui/hud_portrait.json b/forge-gui/res/adventure/common/ui/hud_portrait.json index 06b5f852570..d345e47c81a 100644 --- a/forge-gui/res/adventure/common/ui/hud_portrait.json +++ b/forge-gui/res/adventure/common/ui/hud_portrait.json @@ -87,7 +87,7 @@ "text": "[%120][+Deck]", "width": 25, "height": 25, - "x": 105, + "x": 118, "y": 450 }, { @@ -96,7 +96,7 @@ "text": "[%120][+Item]", "width": 25, "height": 25, - "x": 130, + "x": 143, "y": 450 }, @@ -106,7 +106,7 @@ "text": "[%120][+Logbook]", "width": 25, "height": 25, - "x": 155, + "x": 168, "y": 450 }, { @@ -115,7 +115,7 @@ "text": "[%120][+Menu]", "width": 25, "height": 25, - "x": 80, + "x": 68, "y": 450 }, { @@ -133,7 +133,16 @@ "text": "[%120][+ExitToWorldMap]", "width": 25, "height": 25, - "x": 180, + "x": 193, + "y": 450 + }, + { + "type": "TextButton", + "name": "bookmark", + "text": "[%120][+Bookmark]", + "width": 25, + "height": 25, + "x": 93, "y": 450 } ]