update GameHUD, RewardActor, MapDialog

- prevent double Music
- add flip icon indicator to RewardCard
- fadein upon completion of voice dialog
This commit is contained in:
Anthony Calosa
2023-07-16 11:45:30 +08:00
parent 13252b8bd4
commit a3d4548654
8 changed files with 57 additions and 32 deletions

View File

@@ -153,12 +153,7 @@ public class GuiMobile implements IGuiBase {
@Override @Override
public void showImageDialog(final ISkinImage image, final String message, final String title) { public void showImageDialog(final ISkinImage image, final String message, final String title) {
if (Forge.isMobileAdventureMode) { if (Forge.isMobileAdventureMode) {
FThreads.invokeInEdtNowOrLater(new Runnable() { FThreads.invokeInEdtNowOrLater(() -> MapStage.getInstance().showImageDialog("Achievement Earned\n"+message, (FBufferedImage)image));
@Override
public void run() {
MapStage.getInstance().showImageDialog("Achievement Earned\n"+message, (FBufferedImage)image);
}
});
return; return;
} }
new WaitCallback<Integer>() { new WaitCallback<Integer>() {

View File

@@ -347,8 +347,8 @@ public class GameHUD extends Stage {
restorePlayerCollision(); restorePlayerCollision();
if (openMapActor != null) { if (openMapActor != null) {
String val = "[%80]" + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom"); String val = "[%80]" + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom");
for (AdventureQuestData adq: Current.player().getQuests()) { for (AdventureQuestData adq : Current.player().getQuests()) {
if (adq.getTargetPOI() !=null) { if (adq.getTargetPOI() != null) {
val = "[%80][+GPS] " + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom"); val = "[%80][+GPS] " + Forge.getLocalizer().getMessageorUseDefault("lblZoom", "Zoom");
break; break;
} }
@@ -357,12 +357,14 @@ public class GameHUD extends Stage {
openMapActor.layout(); openMapActor.layout();
} }
} }
void clearAbility() { void clearAbility() {
for (TextraButton button : abilityButtonMap) { for (TextraButton button : abilityButtonMap) {
button.remove(); button.remove();
} }
abilityButtonMap.clear(); abilityButtonMap.clear();
} }
void updateAbility() { void updateAbility() {
clearAbility(); clearAbility();
setAbilityButton(AdventurePlayer.current().getEquippedAbility1()); setAbilityButton(AdventurePlayer.current().getEquippedAbility1());
@@ -406,6 +408,7 @@ public class GameHUD extends Stage {
playAudio(); playAudio();
} }
} }
public void playAudio() { public void playAudio() {
switch (GameScene.instance().getAdventurePlayerLocation(false, false)) { switch (GameScene.instance().getAdventurePlayerLocation(false, false)) {
case "capital": case "capital":
@@ -435,6 +438,12 @@ public class GameHUD extends Stage {
} }
} }
public boolean audioIsPlaying() {
if (audio == null)
return false;
return audio.getRight().isPlaying();
}
@Override @Override
public void act(float delta) { public void act(float delta) {
super.act(delta); super.act(delta);
@@ -610,6 +619,7 @@ public class GameHUD extends Stage {
} }
opacity = visible ? 1f : 0.4f; opacity = visible ? 1f : 0.4f;
} }
void toggleConsole() { void toggleConsole() {
console.toggle(); console.toggle();
if (console.isVisible()) { if (console.isVisible()) {
@@ -679,6 +689,7 @@ public class GameHUD extends Stage {
public void setDebug(boolean b) { public void setDebug(boolean b) {
debugMap = b; debugMap = b;
} }
public void playerIdle() { public void playerIdle() {
if (MapStage.getInstance().isInMap()) { if (MapStage.getInstance().isInMap()) {
MapStage.getInstance().startPause(1f); MapStage.getInstance().startPause(1f);
@@ -688,6 +699,7 @@ public class GameHUD extends Stage {
WorldStage.getInstance().getPlayerSprite().stop(); WorldStage.getInstance().getPlayerSprite().stop();
} }
} }
private void showDialog() { private void showDialog() {
playerIdle(); playerIdle();
dialogButtonMap.clear(); dialogButtonMap.clear();
@@ -789,10 +801,11 @@ public class GameHUD extends Stage {
} }
void changeBGM(MusicPlaylist playlist) { void changeBGM(MusicPlaylist playlist) {
if (!playlist.equals(SoundSystem.instance.getCurrentPlaylist())) { if (!audioIsPlaying() && !playlist.equals(SoundSystem.instance.getCurrentPlaylist())) {
SoundSystem.instance.setBackgroundMusic(playlist); SoundSystem.instance.setBackgroundMusic(playlist);
} }
} }
void flicker(CharacterSprite sprite) { void flicker(CharacterSprite sprite) {
if (sprite.getCollisionHeight() == 0f) { if (sprite.getCollisionHeight() == 0f) {
SequenceAction flicker = new SequenceAction(Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), new Action() { SequenceAction flicker = new SequenceAction(Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), Actions.fadeOut(0.25f), Actions.fadeIn(0.25f), new Action() {
@@ -810,6 +823,7 @@ public class GameHUD extends Stage {
sprite.addAction(flicker); sprite.addAction(flicker);
} }
} }
void restorePlayerCollision() { void restorePlayerCollision() {
flicker(MapStage.getInstance().getPlayerSprite()); flicker(MapStage.getInstance().getPlayerSprite());
flicker(WorldStage.getInstance().getPlayerSprite()); flicker(WorldStage.getInstance().getPlayerSprite());

View File

@@ -166,6 +166,7 @@ public class MapDialog {
int vol = FModel.getPreferences().getPrefInt(ForgePreferences.FPref.UI_VOL_MUSIC); int vol = FModel.getPreferences().getPrefInt(ForgePreferences.FPref.UI_VOL_MUSIC);
if (vol > 0) { if (vol > 0) {
fadeOut(); fadeOut();
audio.getRight().setOnCompletionListener(music -> fadeIn());
audio.getRight().play(); audio.getRight().play();
} }
} else { } else {

View File

@@ -33,6 +33,7 @@ import forge.adventure.scene.RewardScene;
import forge.adventure.scene.Scene; import forge.adventure.scene.Scene;
import forge.adventure.scene.UIScene; import forge.adventure.scene.UIScene;
import forge.assets.FSkin; import forge.assets.FSkin;
import forge.assets.FSkinImage;
import forge.assets.ImageCache; import forge.assets.ImageCache;
import forge.card.CardImageRenderer; import forge.card.CardImageRenderer;
import forge.card.CardRenderer; import forge.card.CardRenderer;
@@ -73,7 +74,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
boolean clicked = false; boolean clicked = false;
boolean sold = false; boolean sold = false;
boolean flipOnClick; boolean flipOnClick;
private boolean hover; private boolean hover, hasbackface;
boolean loaded = true; boolean loaded = true;
boolean alternate = false, shown = false; boolean alternate = false, shown = false;
@@ -176,6 +177,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
switch (reward.type) { switch (reward.type) {
case Card: { case Card: {
hasbackface = reward.getCard().hasBackFace();
if (ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false)) && !Forge.enableUIMask.equals("Art")) { if (ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false)) && !Forge.enableUIMask.equals("Art")) {
int count = 0; int count = 0;
PaperCard card = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(false)); PaperCard card = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(false));
@@ -203,7 +205,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
ImageCache.updateSynqCount(frontFace, count); ImageCache.updateSynqCount(frontFace, count);
//preload card back for performance //preload card back for performance
if (reward.getCard().hasBackFace() && ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) { if (hasbackface && ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) {
PaperCard cardBack = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(true)); PaperCard cardBack = ImageUtil.getPaperCardFromImageKey(reward.getCard().getImageKey(true));
File backFace = ImageKeys.getImageFile(cardBack.getCardAltImageKey()); File backFace = ImageKeys.getImageFile(cardBack.getCardAltImageKey());
if (backFace != null) { if (backFace != null) {
@@ -276,14 +278,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
ImageCache.updateSynqCount(file, 1); ImageCache.updateSynqCount(file, 1);
} }
} catch (Exception e) {} } catch (Exception e) {
}
} }
T = renderPlaceholder(new Graphics(), reward.getCard(), false); //Now we can render the card. T = renderPlaceholder(new Graphics(), reward.getCard(), false); //Now we can render the card.
setCardImage(T); setCardImage(T);
loaded = false; loaded = false;
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false))) if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(false)))
fetcher.fetchImage(reward.getCard().getImageKey(false), this); fetcher.fetchImage(reward.getCard().getImageKey(false), this);
if (reward.getCard().hasBackFace()) { if (hasbackface) {
if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) { if (!ImageCache.imageKeyFileExists(reward.getCard().getImageKey(true))) {
fetcher.fetchImage(reward.getCard().getImageKey(true), null); fetcher.fetchImage(reward.getCard().getImageKey(true), null);
} }
@@ -317,7 +320,6 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
String imageKey = ""; String imageKey = "";
String editionCode = ""; String editionCode = "";
try { try {
@@ -330,8 +332,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
artIndex = Aggregates.randomInt(1, 2);//MyRandom.getRandom().nextInt(maxIdx) + 1; artIndex = Aggregates.randomInt(1, 2);//MyRandom.getRandom().nextInt(maxIdx) + 1;
imageKey = ImageKeys.BOOSTER_PREFIX + editionCode + ((1 >= maxIdx) ? "" : ("_" + artIndex)); imageKey = ImageKeys.BOOSTER_PREFIX + editionCode + ((1 >= maxIdx) ? "" : ("_" + artIndex));
} }
} } catch (Exception e) {
catch (Exception e){
//Comment did not contain the edition code, this is not a basic booster pack //Comment did not contain the edition code, this is not a basic booster pack
} }
boolean isBooster = false; boolean isBooster = false;
@@ -345,7 +346,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
setItemTooltips(item, backSprite, isBooster); setItemTooltips(item, backSprite, isBooster);
processSprite(backSprite, item, Controls.newTextraLabel("[%200]" + editionCode + " Booster"), 0, -10, isBooster); processSprite(backSprite, item, Controls.newTextraLabel("[%200]" + editionCode + " Booster"), 0, -10, isBooster);
needsToBeDisposed = true; needsToBeDisposed = true;
break; break;
} }
@@ -471,8 +472,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} else if (realY > y) { } else if (realY > y) {
y *= 1.1f; y *= 1.1f;
} }
float fW = x > y ? x : y; float fW = Math.max(x, y);
float fH = x > y ? y : x; float fH = Math.min(x, y);
float mul = fW / fH < AR ? AR / (fW / fH) : (fW / fH) / AR; float mul = fW / fH < AR ? AR / (fW / fH) : (fW / fH) / AR;
Float custom = Forge.isLandscapeMode() ? Config.instance().getSettingData().cardTooltipAdjLandscape : Config.instance().getSettingData().cardTooltipAdj; Float custom = Forge.isLandscapeMode() ? Config.instance().getSettingData().cardTooltipAdjLandscape : Config.instance().getSettingData().cardTooltipAdj;
if (custom != null && custom != 1f) { if (custom != null && custom != 1f) {
@@ -555,7 +556,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} }
private void processSprite(Sprite sprite, Sprite item, TextraLabel itemText, int modX, int modY, boolean isBooster) { private void processSprite(Sprite sprite, Sprite item, TextraLabel itemText, int modX, int modY, boolean isBooster) {
int pw = 192; int ph = 256; int pw = 192;
int ph = 256;
FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, pw, ph, false); FrameBuffer frameBuffer = new FrameBuffer(Pixmap.Format.RGB888, pw, ph, false);
SpriteBatch batch = new SpriteBatch(); SpriteBatch batch = new SpriteBatch();
@@ -574,9 +576,9 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (!isBooster) { if (!isBooster) {
float iw = item.getWidth() * 4; float iw = item.getWidth() * 4;
float ih = item.getHeight() * 4; float ih = item.getHeight() * 4;
batch.draw(item, pw / 2 - iw / 2, (ph / 2 - ih / 2), iw, ih); batch.draw(item, pw / 2f - iw / 2f, (ph / 2f - ih / 2f), iw, ih);
} else } else
batch.draw(item, pw / 4, ph / 4, pw / 2, ph / 2); batch.draw(item, pw / 4f, ph / 4f, pw / 2f, ph / 2f);
} }
if (itemText != null) { if (itemText != null) {
itemText.setWrap(true); itemText.setWrap(true);
@@ -612,10 +614,11 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
getGraphics().startClip(); getGraphics().startClip();
getGraphics().drawImage(backSprite, 0, 0, preview_w, preview_h); getGraphics().drawImage(backSprite, 0, 0, preview_w, preview_h);
if (!isBooster) if (!isBooster)
getGraphics().drawImage(icon, preview_w / 2 - 75, 160, 160, 160); getGraphics().drawImage(icon, preview_w / 2f - 75, 160, 160, 160);
else else
getGraphics().drawImage(icon, 0, 0, preview_w, preview_h); getGraphics().drawImage(icon, 0, 0, preview_w, preview_h);
BitmapFont font = Controls.getBitmapFont("default", 4 / (preview_h / preview_w)); float div = (float) preview_h / preview_w;
BitmapFont font = Controls.getBitmapFont("default", 4 / div);
layout.setText(font, itemExists ? item.name : getReward().type.name(), Color.WHITE, preview_w - 64, Align.center, true); layout.setText(font, itemExists ? item.name : getReward().type.name(), Color.WHITE, preview_w - 64, Align.center, true);
getGraphics().drawText(font, layout, 32, preview_h - 70); getGraphics().drawText(font, layout, 32, preview_h - 70);
align = itemExists ? Align.topLeft : Align.top; align = itemExists ? Align.topLeft : Align.top;
@@ -627,7 +630,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
} else { } else {
description = "Adds " + getReward().getCount() + " " + getReward().type; description = "Adds " + getReward().getCount() + " " + getReward().type;
} }
if (description.isEmpty() && item.questItem) if (itemExists && description.isEmpty() && item.questItem)
description = "Quest Item"; description = "Quest Item";
getGraphics().end(); getGraphics().end();
getGraphics().endClip(); getGraphics().endClip();
@@ -783,7 +786,7 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
batch.end(); batch.end();
shaderRoundRect.bind(); shaderRoundRect.bind();
shaderRoundRect.setUniformf("u_resolution", image.getWidth(), image.getHeight()); shaderRoundRect.setUniformf("u_resolution", image.getWidth(), image.getHeight());
shaderRoundRect.setUniformf("edge_radius", (image.getHeight() / image.getWidth()) * 20); shaderRoundRect.setUniformf("edge_radius", (float) (image.getHeight() / image.getWidth()) * 20);
shaderRoundRect.setUniformf("u_gray", sold ? 1f : 0f); shaderRoundRect.setUniformf("u_gray", sold ? 1f : 0f);
batch.setShader(shaderRoundRect); batch.setShader(shaderRoundRect);
batch.begin(); batch.begin();
@@ -811,6 +814,11 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
batch.begin(); batch.begin();
} }
} }
if (hasbackface) {
TextureRegion icon = FSkinImage.ADV_FLIPICON.getTextureRegion();
float scale = getHeight() / 4f;
batch.draw(icon, getOriginX() - scale / 2f, getOriginY() - scale / 2f, scale, scale);
}
} }
} }
@@ -979,8 +987,8 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
if (!frontSideUp()) if (!frontSideUp())
return; return;
tooltip_actor.setBounds(tooltip_actor.cImage.getX(), tooltip_actor.cImage.getY(), tooltip_actor.cImage.getPrefWidth(), tooltip_actor.cImage.getPrefHeight()); tooltip_actor.setBounds(tooltip_actor.cImage.getX(), tooltip_actor.cImage.getY(), tooltip_actor.cImage.getPrefWidth(), tooltip_actor.cImage.getPrefHeight());
tooltip_actor.cLabel.setX(Scene.getIntendedWidth() / 2 - tooltip_actor.width / 2); tooltip_actor.cLabel.setX(Scene.getIntendedWidth() / 2f - tooltip_actor.width / 2);
tooltip_actor.cLabel.setY(Scene.getIntendedHeight() / 2 - tooltip_actor.inset); tooltip_actor.cLabel.setY(Scene.getIntendedHeight() / 2f - tooltip_actor.inset);
getStage().addActor(tooltip_actor); getStage().addActor(tooltip_actor);
TextraButton done = getStage().getRoot().findActor("done"); TextraButton done = getStage().getRoot().findActor("done");
if (done != null && Reward.Type.Card.equals(reward.type)) { if (done != null && Reward.Type.Card.equals(reward.type)) {
@@ -1014,15 +1022,15 @@ public class RewardActor extends Actor implements Disposable, ImageFetcher.Callb
TextureRegion tr = ((TextureRegionDrawable) getDrawable()).getRegion(); TextureRegion tr = ((TextureRegionDrawable) getDrawable()).getRegion();
Texture t = tr.getTexture(); Texture t = tr.getTexture();
if (t != null) { if (t != null) {
float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2 - holdTooltip.tooltip_actor.getWidth() / 2 : tooltip.getActor().getStoredImage().getImageX(); float x = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedWidth() / 2f - holdTooltip.tooltip_actor.getWidth() / 2f : tooltip.getActor().getStoredImage().getImageX();
float y = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedHeight() / 2 - holdTooltip.tooltip_actor.getHeight() / 2 : tooltip.getActor().getStoredImage().getImageY(); float y = GuiBase.isAndroid() || Forge.hasGamepad() ? Scene.getIntendedHeight() / 2f - holdTooltip.tooltip_actor.getHeight() / 2f : tooltip.getActor().getStoredImage().getImageY();
float w = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefWidth() : tooltip.getActor().getStoredImage().getPrefWidth(); float w = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefWidth() : tooltip.getActor().getStoredImage().getPrefWidth();
float h = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefHeight() : tooltip.getActor().getStoredImage().getPrefHeight(); float h = GuiBase.isAndroid() || Forge.hasGamepad() ? holdTooltip.tooltip_actor.getStoredImage().getPrefHeight() : tooltip.getActor().getStoredImage().getPrefHeight();
if (t.toString().contains(".fullborder.") && Forge.enableUIMask.equals("Full")) { if (t.toString().contains(".fullborder.") && Forge.enableUIMask.equals("Full")) {
batch.end(); batch.end();
shaderRoundRect.bind(); shaderRoundRect.bind();
shaderRoundRect.setUniformf("u_resolution", t.getWidth(), t.getHeight()); shaderRoundRect.setUniformf("u_resolution", t.getWidth(), t.getHeight());
shaderRoundRect.setUniformf("edge_radius", (t.getHeight() / t.getWidth()) * ImageCache.getRadius(t)); shaderRoundRect.setUniformf("edge_radius", ((float) (t.getHeight() / t.getWidth())) * ImageCache.getRadius(t));
shaderRoundRect.setUniformf("u_gray", sold ? 0.8f : 0f); shaderRoundRect.setUniformf("u_gray", sold ? 0.8f : 0f);
batch.setShader(shaderRoundRect); batch.setShader(shaderRoundRect);
batch.begin(); batch.begin();

View File

@@ -232,7 +232,8 @@ public enum FSkinImage implements FImage {
//adventure //adventure
MANASHARD (FSkinProp.ICO_MANASHARD, SourceFile.ADVENTURE), MANASHARD (FSkinProp.ICO_MANASHARD, SourceFile.ADVENTURE),
MENU_ADVLOGO (FSkinProp.ICO_ADVLOGO, SourceFile.ADVENTURE), MENU_ADVLOGO (FSkinProp.ICO_ADVLOGO, SourceFile.ADVENTURE),
ADV_DECKBOX (FSkinProp.ICO_ADVDECKBOX, SourceFile.ADVENTURE), ADV_DECKBOX (FSkinProp.ICO_ADVDECKBOX, SourceFile.ADVENTURE),
ADV_FLIPICON (FSkinProp.ICO_ADVFLIP, SourceFile.ADVENTURE),
//menu icon //menu icon
MENU_GALAXY (FSkinProp.ICO_MENU_GALAXY, SourceFile.ICONS), MENU_GALAXY (FSkinProp.ICO_MENU_GALAXY, SourceFile.ICONS),

View File

@@ -5,6 +5,7 @@ import com.badlogic.gdx.audio.Music;
import com.badlogic.gdx.audio.Music.OnCompletionListener; import com.badlogic.gdx.audio.Music.OnCompletionListener;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import forge.Forge; import forge.Forge;
import forge.adventure.stage.GameHUD;
public class AudioMusic implements IAudioMusic { public class AudioMusic implements IAudioMusic {
private Music music; private Music music;
@@ -18,6 +19,10 @@ public class AudioMusic implements IAudioMusic {
public void play(final Runnable onComplete) { public void play(final Runnable onComplete) {
if (music == null) if (music == null)
return; return;
if (Forge.isMobileAdventureMode) {
if (GameHUD.getInstance().audioIsPlaying())
return;
}
music.setOnCompletionListener(new OnCompletionListener() { music.setOnCompletionListener(new OnCompletionListener() {
@Override @Override
public void onCompletion(Music music) { public void onCompletion(Music music) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

@@ -271,6 +271,7 @@ public enum FSkinProp {
ICO_MANASHARD (new int[] {2, 304, 100, 100}, PropType.ADVENTURE), ICO_MANASHARD (new int[] {2, 304, 100, 100}, PropType.ADVENTURE),
ICO_ADVLOGO (new int[] {2, 2, 300, 300}, PropType.ADVENTURE), ICO_ADVLOGO (new int[] {2, 2, 300, 300}, PropType.ADVENTURE),
ICO_ADVDECKBOX (new int[] {111, 365, 192, 240}, PropType.ADVENTURE), ICO_ADVDECKBOX (new int[] {111, 365, 192, 240}, PropType.ADVENTURE),
ICO_ADVFLIP (new int[] {10, 504, 80, 80}, PropType.ADVENTURE),
//menu icon //menu icon
ICO_MENU_GALAXY (new int[] {0, 1520, 80, 80}, PropType.ICON), ICO_MENU_GALAXY (new int[] {0, 1520, 80, 80}, PropType.ICON),