mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
Merge remote-tracking branch 'remotes/core/master' into newBranch
This commit is contained in:
@@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package forge.assets;
|
package forge.assets;
|
||||||
|
|
||||||
|
|
||||||
import com.badlogic.gdx.files.FileHandle;
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.graphics.Pixmap;
|
import com.badlogic.gdx.graphics.Pixmap;
|
||||||
import com.badlogic.gdx.graphics.PixmapIO;
|
import com.badlogic.gdx.graphics.PixmapIO;
|
||||||
@@ -25,27 +24,28 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont.Glyph;
|
|||||||
import com.badlogic.gdx.graphics.g2d.PixmapPacker.Page;
|
import com.badlogic.gdx.graphics.g2d.PixmapPacker.Page;
|
||||||
import com.badlogic.gdx.utils.Array;
|
import com.badlogic.gdx.utils.Array;
|
||||||
|
|
||||||
/** A utility to output BitmapFontData to a FNT file. This can be useful for caching the result from TrueTypeFont, for faster load
|
|
||||||
* times.
|
|
||||||
*
|
|
||||||
* The font format is from the AngelCodeFont BMFont tool.
|
|
||||||
*
|
|
||||||
* @author mattdesl AKA davedes */
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This file is 'borrowed' from gdx-tools in the libgdx source
|
* This file is 'borrowed' from gdx-tools in the libgdx source
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class BitmapFontWriter {
|
/** A utility to output BitmapFontData to a FNT file. This can be useful for caching the result from TrueTypeFont, for faster load
|
||||||
|
* times.
|
||||||
|
* <p>
|
||||||
|
* The font file format is from the AngelCodeFont BMFont tool.
|
||||||
|
* <p>
|
||||||
|
* Output is nearly identical to the FreeType settting in the Hiero tool {@Link com.badlogic.gdx.tools.hiero.Hiero}. BitmapFontWriter gives more flexibility, eg
|
||||||
|
* borders and shadows can be used. Hiero is able to avoid outputting the same glyph image more than once if multiple character
|
||||||
|
* codes have the exact same glyph.
|
||||||
|
* @author mattdesl AKA davedes */
|
||||||
|
public class BitmapFontWriter {
|
||||||
|
|
||||||
/** The output format. */
|
/** The output format. */
|
||||||
public enum OutputFormat {
|
public static enum OutputFormat {
|
||||||
|
|
||||||
/** AngelCodeFont text format */
|
/** AngelCodeFont text format */
|
||||||
Text,
|
Text,
|
||||||
/** AngelCodeFont XML format */
|
/** AngelCodeFont XML format */
|
||||||
XML
|
XML;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The output format */
|
/** The output format */
|
||||||
@@ -55,15 +55,14 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
* Pixi.js).
|
* Pixi.js).
|
||||||
*
|
*
|
||||||
* @param fmt the output format to use */
|
* @param fmt the output format to use */
|
||||||
public static void setOutputFormat(OutputFormat fmt) {
|
public static void setOutputFormat (OutputFormat fmt) {
|
||||||
if (fmt==null)
|
if (fmt == null) throw new NullPointerException("format cannot be null");
|
||||||
throw new NullPointerException("format cannot be null");
|
|
||||||
format = fmt;
|
format = fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the currently used output format.
|
/** Returns the currently used output format.
|
||||||
* @return the output format */
|
* @return the output format */
|
||||||
public static OutputFormat getOutputFormat() {
|
public static OutputFormat getOutputFormat () {
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,10 +70,10 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
public static class Padding {
|
public static class Padding {
|
||||||
public int up, down, left, right;
|
public int up, down, left, right;
|
||||||
|
|
||||||
public Padding() {
|
public Padding () {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Padding(int up, int down, int left, int right) {
|
public Padding (int up, int down, int left, int right) {
|
||||||
this.up = up;
|
this.up = up;
|
||||||
this.down = down;
|
this.down = down;
|
||||||
this.left = left;
|
this.left = left;
|
||||||
@@ -87,8 +86,8 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
public int horizontal, vertical;
|
public int horizontal, vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The font "info" line; this will be ignored by LibGDX's BitmapFont reader,
|
/** The font "info" line; everything except padding and override metrics are ignored by LibGDX's BitmapFont reader, it is otherwise just useful for
|
||||||
* but useful for clean and organized output. */
|
* clean and organized output. */
|
||||||
public static class FontInfo {
|
public static class FontInfo {
|
||||||
/** Face name */
|
/** Face name */
|
||||||
public String face;
|
public String face;
|
||||||
@@ -114,31 +113,54 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
public Spacing spacing = new Spacing();
|
public Spacing spacing = new Spacing();
|
||||||
public int outline = 0;
|
public int outline = 0;
|
||||||
|
|
||||||
public FontInfo() {
|
/** Override metrics */
|
||||||
|
public boolean hasOverrideMetrics;
|
||||||
|
public float ascent;
|
||||||
|
public float descent;
|
||||||
|
public float down;
|
||||||
|
public float capHeight;
|
||||||
|
public float lineHeight;
|
||||||
|
public float spaceXAdvance;
|
||||||
|
public float xHeight;
|
||||||
|
|
||||||
|
public FontInfo () {
|
||||||
}
|
}
|
||||||
|
|
||||||
public FontInfo(String face, int size) {
|
public FontInfo (String face, int size) {
|
||||||
this.face = face;
|
this.face = face;
|
||||||
this.size = size;
|
this.size = size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void overrideMetrics (BitmapFontData data) {
|
||||||
|
hasOverrideMetrics = true;
|
||||||
|
ascent = data.ascent;
|
||||||
|
descent = data.descent;
|
||||||
|
down = data.down;
|
||||||
|
capHeight = data.capHeight;
|
||||||
|
lineHeight = data.lineHeight;
|
||||||
|
spaceXAdvance = data.spaceXadvance;
|
||||||
|
xHeight = data.xHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String quote(Object params) {
|
}
|
||||||
|
|
||||||
|
private static String quote (Object params) {
|
||||||
return quote(params, false);
|
return quote(params, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String quote(Object params, boolean spaceAfter) {
|
private static String quote (Object params, boolean spaceAfter) {
|
||||||
if (BitmapFontWriter.getOutputFormat() == OutputFormat.XML)
|
if (BitmapFontWriter.getOutputFormat() == OutputFormat.XML)
|
||||||
return "\"" + params.toString().trim() + "\"" + (spaceAfter ? " " : "");
|
return "\"" + params.toString().trim() + "\"" + (spaceAfter ? " " : "");
|
||||||
else
|
else
|
||||||
return params.toString();
|
return params.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Writes the given BitmapFontData to a file, using the specified <tt>pageRefs</tt> strings as the image paths for each texture
|
/** Writes the given BitmapFontData to a file, using the specified <tt>pageRefs</tt> strings as the image paths for each
|
||||||
* page. The glyphs in BitmapFontData have a "page" id, which references the index of the pageRef you specify here.
|
* texture page. The glyphs in BitmapFontData have a "page" id, which references the index of the pageRef you specify here.
|
||||||
*
|
*
|
||||||
* The FontInfo parameter is useful for cleaner output; such as including a size and font face name hint. However, it can be
|
* The FontInfo parameter is useful for cleaner output; such as including a size and font face name hint. However, it can be
|
||||||
* null to use default values. Ultimately, LibGDX ignores the "info" line when reading back fonts.
|
* null to use default values. LibGDX ignores most of the "info" line when reading back fonts, only padding is used. Padding
|
||||||
|
* also affects the size, location, and offset of the glyphs that are output.
|
||||||
*
|
*
|
||||||
* Likewise, the scaleW and scaleH are only for cleaner output. They are currently ignored by LibGDX's reader. For maximum
|
* Likewise, the scaleW and scaleH are only for cleaner output. They are currently ignored by LibGDX's reader. For maximum
|
||||||
* compatibility with other BMFont tools, you should use the width and height of your texture pages (each page should be the
|
* compatibility with other BMFont tools, you should use the width and height of your texture pages (each page should be the
|
||||||
@@ -150,8 +172,9 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
* @param info the optional info for the file header; can be null
|
* @param info the optional info for the file header; can be null
|
||||||
* @param scaleW the width of your texture pages
|
* @param scaleW the width of your texture pages
|
||||||
* @param scaleH the height of your texture pages */
|
* @param scaleH the height of your texture pages */
|
||||||
public static void writeFont (BitmapFontData fontData, String[] pageRefs, FileHandle outFntFile, FontInfo info, int scaleW, int scaleH) {
|
public static void writeFont (BitmapFontData fontData, String[] pageRefs, FileHandle outFntFile, FontInfo info, int scaleW,
|
||||||
if (info==null) {
|
int scaleH) {
|
||||||
|
if (info == null) {
|
||||||
info = new FontInfo();
|
info = new FontInfo();
|
||||||
info.face = outFntFile.nameWithoutExtension();
|
info.face = outFntFile.nameWithoutExtension();
|
||||||
}
|
}
|
||||||
@@ -174,110 +197,77 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
String xmlClose = xml ? ">" : "";
|
String xmlClose = xml ? ">" : "";
|
||||||
|
|
||||||
String xmlQuote = xml ? "\"" : "";
|
String xmlQuote = xml ? "\"" : "";
|
||||||
String alphaChnlParams =
|
String alphaChnlParams = xml ? " alphaChnl=\"0\" redChnl=\"0\" greenChnl=\"0\" blueChnl=\"0\""
|
||||||
xml ? " alphaChnl=\"0\" redChnl=\"0\" greenChnl=\"0\" blueChnl=\"0\""
|
|
||||||
: " alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0";
|
: " alphaChnl=0 redChnl=0 greenChnl=0 blueChnl=0";
|
||||||
//INFO LINE
|
|
||||||
|
|
||||||
buf.append(xmlOpen)
|
// INFO LINE
|
||||||
.append("info face=\"")
|
buf.append(xmlOpen).append("info face=\"").append(info.face == null ? "" : info.face.replaceAll("\"", "'"))
|
||||||
.append(info.face==null ? "" : info.face.replaceAll("\"", "'"))
|
.append("\" size=").append(quote(info.size)).append(" bold=").append(quote(info.bold ? 1 : 0)).append(" italic=")
|
||||||
.append("\" size=").append( quote(info.size) )
|
.append(quote(info.italic ? 1 : 0)).append(" charset=\"").append(info.charset == null ? "" : info.charset)
|
||||||
.append(" bold=").append( quote(info.bold ? 1 : 0) )
|
.append("\" unicode=").append(quote(info.unicode ? 1 : 0)).append(" stretchH=").append(quote(info.stretchH))
|
||||||
.append(" italic=").append( quote(info.italic ? 1 : 0) )
|
.append(" smooth=").append(quote(info.smooth ? 1 : 0)).append(" aa=").append(quote(info.aa)).append(" padding=")
|
||||||
.append(" charset=\"").append(info.charset==null ? "" : info.charset)
|
.append(xmlQuote).append(info.padding.up).append(",").append(info.padding.right).append(",").append(info.padding.down)
|
||||||
.append("\" unicode=").append( quote(info.unicode ? 1 : 0) )
|
.append(",").append(info.padding.left).append(xmlQuote).append(" spacing=").append(xmlQuote)
|
||||||
.append(" stretchH=").append( quote(info.stretchH) )
|
.append(info.spacing.horizontal).append(",").append(info.spacing.vertical).append(xmlQuote).append(xmlCloseSelf)
|
||||||
.append(" smooth=").append( quote(info.smooth ? 1 : 0) )
|
|
||||||
.append(" aa=").append( quote(info.aa) )
|
|
||||||
.append(" padding=")
|
|
||||||
.append(xmlQuote)
|
|
||||||
.append(info.padding.up).append(",")
|
|
||||||
.append(info.padding.down).append(",")
|
|
||||||
.append(info.padding.left).append(",")
|
|
||||||
.append(info.padding.right)
|
|
||||||
.append(xmlQuote)
|
|
||||||
.append(" spacing=")
|
|
||||||
.append(xmlQuote)
|
|
||||||
.append(info.spacing.horizontal).append(",")
|
|
||||||
.append(info.spacing.vertical)
|
|
||||||
.append(xmlQuote)
|
|
||||||
.append(xmlCloseSelf)
|
|
||||||
.append("\n");
|
.append("\n");
|
||||||
|
|
||||||
//COMMON line
|
// COMMON line
|
||||||
buf.append(xmlOpen)
|
buf.append(xmlOpen).append("common lineHeight=").append(quote(lineHeight)).append(" base=").append(quote(base))
|
||||||
.append("common lineHeight=").append( quote(lineHeight) )
|
.append(" scaleW=").append(quote(scaleW)).append(" scaleH=").append(quote(scaleH)).append(" pages=").append(quote(pages))
|
||||||
.append(" base=").append( quote(base) )
|
.append(" packed=").append(quote(packed)).append(alphaChnlParams).append(xmlCloseSelf).append("\n");
|
||||||
.append(" scaleW=").append( quote(scaleW) )
|
|
||||||
.append(" scaleH=").append( quote(scaleH) )
|
|
||||||
.append(" pages=").append( quote(pages) )
|
|
||||||
.append(" packed=").append( quote(packed) )
|
|
||||||
.append(alphaChnlParams)
|
|
||||||
.append(xmlCloseSelf)
|
|
||||||
.append("\n");
|
|
||||||
|
|
||||||
if (xml)
|
if (xml) buf.append("\t<pages>\n");
|
||||||
buf.append("\t<pages>\n");
|
|
||||||
|
|
||||||
//PAGES
|
// PAGES
|
||||||
for (int i=0; i<pageRefs.length; i++) {
|
for (int i = 0; i < pageRefs.length; i++) {
|
||||||
buf.append(xmlTab)
|
buf.append(xmlTab).append(xmlOpen).append("page id=").append(quote(i)).append(" file=\"").append(pageRefs[i])
|
||||||
.append(xmlOpen)
|
.append("\"").append(xmlCloseSelf).append("\n");
|
||||||
.append("page id=")
|
|
||||||
.append( quote(i) )
|
|
||||||
.append(" file=\"")
|
|
||||||
.append(pageRefs[i])
|
|
||||||
.append("\"")
|
|
||||||
.append(xmlCloseSelf)
|
|
||||||
.append("\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xml)
|
if (xml) buf.append("\t</pages>\n");
|
||||||
buf.append("\t</pages>\n");
|
|
||||||
|
|
||||||
//CHARS
|
// CHARS
|
||||||
Array<Glyph> glyphs = new Array<>(256);
|
Array<Glyph> glyphs = new Array<Glyph>(256);
|
||||||
for (int i=0; i<fontData.glyphs.length; i++) {
|
for (int i = 0; i < fontData.glyphs.length; i++) {
|
||||||
if (fontData.glyphs[i]==null)
|
if (fontData.glyphs[i] == null) continue;
|
||||||
continue;
|
|
||||||
|
|
||||||
for (int j=0; j<fontData.glyphs[i].length; j++) {
|
for (int j = 0; j < fontData.glyphs[i].length; j++) {
|
||||||
if (fontData.glyphs[i][j]!=null) {
|
if (fontData.glyphs[i][j] != null) {
|
||||||
glyphs.add(fontData.glyphs[i][j]);
|
glyphs.add(fontData.glyphs[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.append(xmlOpen)
|
buf.append(xmlOpen).append("chars count=").append(quote(glyphs.size)).append(xmlClose).append("\n");
|
||||||
.append("chars count=").append(quote(glyphs.size))
|
|
||||||
.append(xmlClose)
|
|
||||||
.append("\n");
|
|
||||||
|
|
||||||
//CHAR definitions
|
int padLeft = 0, padRight = 0, padTop = 0, padX = 0, padY = 0;
|
||||||
for (int i=0; i<glyphs.size; i++) {
|
if (info != null) {
|
||||||
|
padTop = info.padding.up;
|
||||||
|
padLeft = info.padding.left;
|
||||||
|
padRight = info.padding.right;
|
||||||
|
padX = padLeft + padRight;
|
||||||
|
padY = info.padding.up + info.padding.down;
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHAR definitions
|
||||||
|
for (int i = 0; i < glyphs.size; i++) {
|
||||||
Glyph g = glyphs.get(i);
|
Glyph g = glyphs.get(i);
|
||||||
buf.append(xmlTab)
|
boolean empty = g.width == 0 || g.height == 0;
|
||||||
.append(xmlOpen)
|
buf.append(xmlTab).append(xmlOpen).append("char id=").append(quote(String.format("%-6s", g.id), true)).append("x=")
|
||||||
.append("char id=")
|
.append(quote(String.format("%-5s", empty ? 0 : g.srcX), true)).append("y=")
|
||||||
.append(quote( String.format("%-5s", g.id), true ))
|
.append(quote(String.format("%-5s", empty ? 0 : g.srcY), true)).append("width=")
|
||||||
.append("x=").append(quote( String.format("%-5s", g.srcX), true ) )
|
.append(quote(String.format("%-5s", empty ? 0 : g.width), true)).append("height=")
|
||||||
.append("y=").append(quote( String.format("%-5s", g.srcY), true ) )
|
.append(quote(String.format("%-5s", empty ? 0 : g.height), true)).append("xoffset=")
|
||||||
.append("width=").append(quote( String.format("%-5s", g.width), true ) )
|
.append(quote(String.format("%-5s", g.xoffset - padLeft), true)).append("yoffset=")
|
||||||
.append("height=").append(quote( String.format("%-5s", g.height), true ) )
|
.append(quote(String.format("%-5s", fontData.flipped ? g.yoffset + padTop : -(g.height + (g.yoffset + padTop))), true))
|
||||||
.append("xoffset=").append(quote( String.format("%-5s", g.xoffset), true ) )
|
.append("xadvance=").append(quote(String.format("%-5s", g.xadvance), true)).append("page=")
|
||||||
.append("yoffset=").append(quote( String.format("%-5s", fontData.flipped ? g.yoffset : -(g.height + g.yoffset) ), true ) )
|
.append(quote(String.format("%-5s", g.page), true)).append("chnl=").append(quote(0, true)).append(xmlCloseSelf)
|
||||||
.append("xadvance=").append(quote( String.format("%-5s", g.xadvance), true ) )
|
|
||||||
.append("page=").append(quote( String.format("%-5s", g.page), true ) )
|
|
||||||
.append("chnl=").append(quote(0, true))
|
|
||||||
.append(xmlCloseSelf)
|
|
||||||
.append("\n");
|
.append("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xml)
|
if (xml) buf.append("\t</chars>\n");
|
||||||
buf.append("\t</chars>\n");
|
|
||||||
|
|
||||||
//KERNINGS
|
// KERNINGS
|
||||||
int kernCount = 0;
|
int kernCount = 0;
|
||||||
StringBuilder kernBuf = new StringBuilder();
|
StringBuilder kernBuf = new StringBuilder();
|
||||||
for (int i = 0; i < glyphs.size; i++) {
|
for (int i = 0; i < glyphs.size; i++) {
|
||||||
@@ -285,39 +275,49 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
Glyph first = glyphs.get(i);
|
Glyph first = glyphs.get(i);
|
||||||
Glyph second = glyphs.get(j);
|
Glyph second = glyphs.get(j);
|
||||||
int kern = first.getKerning((char)second.id);
|
int kern = first.getKerning((char)second.id);
|
||||||
if (kern!=0) {
|
if (kern != 0) {
|
||||||
kernCount++;
|
kernCount++;
|
||||||
kernBuf.append(xmlTab)
|
kernBuf.append(xmlTab).append(xmlOpen).append("kerning first=").append(quote(first.id)).append(" second=")
|
||||||
.append(xmlOpen)
|
.append(quote(second.id)).append(" amount=").append(quote(kern, true)).append(xmlCloseSelf).append("\n");
|
||||||
.append("kerning first=").append(quote(first.id))
|
|
||||||
.append(" second=").append(quote(second.id))
|
|
||||||
.append(" amount=").append(quote(kern, true))
|
|
||||||
.append(xmlCloseSelf)
|
|
||||||
.append("\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//KERN info
|
// KERN info
|
||||||
buf.append(xmlOpen)
|
buf.append(xmlOpen).append("kernings count=").append(quote(kernCount)).append(xmlClose).append("\n");
|
||||||
.append("kernings count=").append(quote(kernCount))
|
|
||||||
.append(xmlClose)
|
|
||||||
.append("\n");
|
|
||||||
buf.append(kernBuf);
|
buf.append(kernBuf);
|
||||||
|
|
||||||
if (xml) {
|
if (xml) {
|
||||||
buf.append("\t</kernings>\n");
|
buf.append("\t</kernings>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override metrics
|
||||||
|
if (info.hasOverrideMetrics) {
|
||||||
|
if (xml) buf.append("\t<metrics>\n");
|
||||||
|
|
||||||
|
buf.append(xmlTab).append(xmlOpen)
|
||||||
|
.append("metrics ascent=").append(quote(info.ascent, true))
|
||||||
|
.append(" descent=").append(quote(info.descent, true))
|
||||||
|
.append(" down=").append(quote(info.down, true))
|
||||||
|
.append(" capHeight=").append(quote(info.capHeight, true))
|
||||||
|
.append(" lineHeight=").append(quote(info.lineHeight, true))
|
||||||
|
.append(" spaceXAdvance=").append(quote(info.spaceXAdvance, true))
|
||||||
|
.append(" xHeight=").append(quote(info.xHeight, true))
|
||||||
|
.append(xmlCloseSelf).append("\n");
|
||||||
|
|
||||||
|
if (xml) buf.append("\t</metrics>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xml) {
|
||||||
buf.append("</font>");
|
buf.append("</font>");
|
||||||
}
|
}
|
||||||
|
|
||||||
String charset = info.charset;
|
String charset = info.charset;
|
||||||
if (charset!=null&&charset.length()==0)
|
if (charset != null && charset.length() == 0) charset = null;
|
||||||
charset = null;
|
|
||||||
|
|
||||||
outFntFile.writeString(buf.toString(), false, charset);
|
outFntFile.writeString(buf.toString(), false, charset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** A utility method which writes the given font data to a file.
|
/** A utility method which writes the given font data to a file.
|
||||||
*
|
*
|
||||||
* The specified pixmaps are written to the parent directory of <tt>outFntFile</tt>, using that file's name without an
|
* The specified pixmaps are written to the parent directory of <tt>outFntFile</tt>, using that file's name without an
|
||||||
@@ -338,7 +338,7 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
public static void writeFont (BitmapFontData fontData, Pixmap[] pages, FileHandle outFntFile, FontInfo info) {
|
public static void writeFont (BitmapFontData fontData, Pixmap[] pages, FileHandle outFntFile, FontInfo info) {
|
||||||
String[] pageRefs = writePixmaps(pages, outFntFile.parent(), outFntFile.nameWithoutExtension());
|
String[] pageRefs = writePixmaps(pages, outFntFile.parent(), outFntFile.nameWithoutExtension());
|
||||||
|
|
||||||
//write the font data
|
// write the font data
|
||||||
writeFont(fontData, pageRefs, outFntFile, info, pages[0].getWidth(), pages[0].getHeight());
|
writeFont(fontData, pageRefs, outFntFile, info, pages[0].getWidth(), pages[0].getHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,18 +357,17 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
* @param fileName the file names for the output images
|
* @param fileName the file names for the output images
|
||||||
* @return the array of string references to be used with <tt>writeFont</tt> */
|
* @return the array of string references to be used with <tt>writeFont</tt> */
|
||||||
public static String[] writePixmaps (Pixmap[] pages, FileHandle outputDir, String fileName) {
|
public static String[] writePixmaps (Pixmap[] pages, FileHandle outputDir, String fileName) {
|
||||||
if (pages==null || pages.length==0)
|
if (pages == null || pages.length == 0) throw new IllegalArgumentException("no pixmaps supplied to BitmapFontWriter.write");
|
||||||
throw new IllegalArgumentException("no pixmaps supplied to BitmapFontWriter.write");
|
|
||||||
|
|
||||||
String[] pageRefs = new String[pages.length];
|
String[] pageRefs = new String[pages.length];
|
||||||
|
|
||||||
for (int i=0; i<pages.length; i++) {
|
for (int i = 0; i < pages.length; i++) {
|
||||||
String ref = pages.length==1 ? (fileName+".png") : (fileName+"_"+i+".png");
|
String ref = pages.length == 1 ? (fileName + ".png") : (fileName + "_" + i + ".png");
|
||||||
|
|
||||||
//the ref for this image
|
// the ref for this image
|
||||||
pageRefs[i] = ref;
|
pageRefs[i] = ref;
|
||||||
|
|
||||||
//write the PNG in that directory
|
// write the PNG in that directory
|
||||||
PixmapIO.writePNG(outputDir.child(ref), pages[i]);
|
PixmapIO.writePNG(outputDir.child(ref), pages[i]);
|
||||||
}
|
}
|
||||||
return pageRefs;
|
return pageRefs;
|
||||||
@@ -383,7 +382,7 @@ import com.badlogic.gdx.utils.Array;
|
|||||||
* @return the file refs */
|
* @return the file refs */
|
||||||
public static String[] writePixmaps (Array<Page> pages, FileHandle outputDir, String fileName) {
|
public static String[] writePixmaps (Array<Page> pages, FileHandle outputDir, String fileName) {
|
||||||
Pixmap[] pix = new Pixmap[pages.size];
|
Pixmap[] pix = new Pixmap[pages.size];
|
||||||
for (int i=0; i<pages.size; i++) {
|
for (int i = 0; i < pages.size; i++) {
|
||||||
pix[i] = pages.get(i).getPixmap();
|
pix[i] = pages.get(i).getPixmap();
|
||||||
}
|
}
|
||||||
return writePixmaps(pix, outputDir, fileName);
|
return writePixmaps(pix, outputDir, fileName);
|
||||||
|
|||||||
@@ -463,7 +463,7 @@ public class FSkinFont {
|
|||||||
+ "驽驾驿骁骂骄骆骇验骏骐骑骗骚骤骨骰骷骸骼髅髓高鬃鬓鬣鬼魁魂魄"
|
+ "驽驾驿骁骂骄骆骇验骏骐骑骗骚骤骨骰骷骸骼髅髓高鬃鬓鬣鬼魁魂魄"
|
||||||
+ "魅魇魈魏魔鰴鱼鲁鲜鲤鲨鲮鲸鲽鳃鳄鳍鳐鳗鳝鳞鸟鸠鸡鸢鸣鸦鸽鹅鹉"
|
+ "魅魇魈魏魔鰴鱼鲁鲜鲤鲨鲮鲸鲽鳃鳄鳍鳐鳗鳝鳞鸟鸠鸡鸢鸣鸦鸽鹅鹉"
|
||||||
+ "鹊鹏鹗鹞鹤鹦鹫鹭鹰鹿麋麒麟麦麻黄黎黏黑默黛黜點黠黯鼎鼓鼠鼬鼹"
|
+ "鹊鹏鹗鹞鹤鹦鹫鹭鹰鹿麋麒麟麦麻黄黎黏黑默黛黜點黠黯鼎鼓鼠鼬鼹"
|
||||||
+ "鼻齐齑齿龇龙龟!(),/:;?~";
|
+ "鼻齐齑齿龇龙龟伸!(),/:;?~";
|
||||||
|
|
||||||
final PixmapPacker packer = new PixmapPacker(pageSize, pageSize, Pixmap.Format.RGBA8888, 2, false);
|
final PixmapPacker packer = new PixmapPacker(pageSize, pageSize, Pixmap.Format.RGBA8888, 2, false);
|
||||||
final FreeTypeFontParameter parameter = new FreeTypeFontParameter();
|
final FreeTypeFontParameter parameter = new FreeTypeFontParameter();
|
||||||
|
|||||||
@@ -23,15 +23,18 @@ import forge.toolbox.FTextArea;
|
|||||||
import forge.toolbox.GuiChoose;
|
import forge.toolbox.GuiChoose;
|
||||||
import forge.toolbox.ListChooser;
|
import forge.toolbox.ListChooser;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
public class NewGauntletScreen extends LaunchScreen {
|
public class NewGauntletScreen extends LaunchScreen {
|
||||||
private static final float PADDING = Utils.scale(10);
|
private static final float PADDING = Utils.scale(10);
|
||||||
|
|
||||||
|
private final Localizer localizer = Localizer.getInstance();
|
||||||
|
|
||||||
private final FTextArea lblDesc = add(new FTextArea(false,
|
private final FTextArea lblDesc = add(new FTextArea(false,
|
||||||
"In Gauntlet mode, you select a deck and play against multiple opponents.\n\n" +
|
localizer.getMessage("lblGauntletText1") + "\n\n" +
|
||||||
"Configure how many opponents you wish to face and what decks or types of decks they will play.\n\n" +
|
localizer.getMessage("lblGauntletText2") + "\n\n" +
|
||||||
"Then, try to beat all AI opponents without losing a match."));
|
localizer.getMessage("lblGauntletText3")));
|
||||||
|
|
||||||
public NewGauntletScreen() {
|
public NewGauntletScreen() {
|
||||||
super(null, NewGameMenu.getMenu());
|
super(null, NewGameMenu.getMenu());
|
||||||
@@ -51,38 +54,34 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void startMatch() {
|
protected void startMatch() {
|
||||||
GuiChoose.oneOrNone("Select a Gauntlet Type", new String[] {
|
GuiChoose.oneOrNone(localizer.getMessage("lblSelectGauntletType"), new String[] {
|
||||||
"Quick Gauntlet",
|
localizer.getMessage("lblQuickGauntlet"),
|
||||||
"Custom Gauntlet",
|
localizer.getMessage("lblCustomGauntlet"),
|
||||||
"Gauntlet Contest",
|
localizer.getMessage("lblGauntletContest"),
|
||||||
}, new Callback<String>() {
|
}, new Callback<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(String result) {
|
public void run(String result) {
|
||||||
if (result == null) { return; }
|
if (result == null) { return; }
|
||||||
|
|
||||||
switch (result) {
|
if (localizer.getMessage("lblQuickGauntlet").equals(result)) {
|
||||||
case "Quick Gauntlet":
|
|
||||||
createQuickGauntlet();
|
createQuickGauntlet();
|
||||||
break;
|
} else if(localizer.getMessage("lblCustomGauntlet").equals(result)) {
|
||||||
case "Custom Gauntlet":
|
|
||||||
createCustomGauntlet();
|
createCustomGauntlet();
|
||||||
break;
|
} else {
|
||||||
default:
|
|
||||||
createGauntletContest();
|
createGauntletContest();
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createQuickGauntlet() {
|
private void createQuickGauntlet() {
|
||||||
GuiChoose.getInteger("How many opponents are you willing to face?", 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(localizer.getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(final Integer numOpponents) {
|
public void run(final Integer numOpponents) {
|
||||||
if (numOpponents == null) { return; }
|
if (numOpponents == null) { return; }
|
||||||
|
|
||||||
ListChooser<DeckType> chooser = new ListChooser<>(
|
ListChooser<DeckType> chooser = new ListChooser<>(
|
||||||
"Choose allowed deck types for opponents", 0, 11, Arrays.asList(DeckType.CUSTOM_DECK,
|
localizer.getMessage("lblChooseAllowedDeckTypeOpponents"), 0, 11, Arrays.asList(DeckType.CUSTOM_DECK,
|
||||||
DeckType.PRECONSTRUCTED_DECK,
|
DeckType.PRECONSTRUCTED_DECK,
|
||||||
DeckType.QUEST_OPPONENT_DECK,
|
DeckType.QUEST_OPPONENT_DECK,
|
||||||
DeckType.COLOR_DECK,
|
DeckType.COLOR_DECK,
|
||||||
@@ -99,7 +98,7 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(localizer.getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback<Deck>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Deck userDeck) {
|
public void run(Deck userDeck) {
|
||||||
if (userDeck == null) {
|
if (userDeck == null) {
|
||||||
@@ -118,7 +117,7 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void createCustomGauntlet() {
|
private void createCustomGauntlet() {
|
||||||
GuiChoose.getInteger("How many opponents are you willing to face?", 3, 50, new Callback<Integer>() {
|
GuiChoose.getInteger(localizer.getMessage("lblHowManyOpponents"), 3, 50, new Callback<Integer>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(final Integer numOpponents) {
|
public void run(final Integer numOpponents) {
|
||||||
if (numOpponents == null) { return; }
|
if (numOpponents == null) { return; }
|
||||||
@@ -132,7 +131,7 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
|
|
||||||
private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) {
|
private void promptForAiDeck(final GauntletData gauntlet, final int numOpponents) {
|
||||||
final int opponentNum = gauntlet.getDecks().size() + 1;
|
final int opponentNum = gauntlet.getDecks().size() + 1;
|
||||||
FDeckChooser.promptForDeck("Select Deck for Opponent " + opponentNum + " / " + numOpponents, GameType.Gauntlet, true, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(localizer.getMessage("lblSelectDeckForOpponent") + " " + opponentNum + " / " + numOpponents, GameType.Gauntlet, true, new Callback<Deck>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Deck aiDeck) {
|
public void run(Deck aiDeck) {
|
||||||
if (aiDeck == null) { return; }
|
if (aiDeck == null) { return; }
|
||||||
@@ -145,7 +144,7 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//once all ai decks have been selected, prompt for user deck
|
//once all ai decks have been selected, prompt for user deck
|
||||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(localizer.getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback<Deck>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Deck userDeck) {
|
public void run(Deck userDeck) {
|
||||||
if (userDeck == null) { return; }
|
if (userDeck == null) { return; }
|
||||||
@@ -170,12 +169,12 @@ public class NewGauntletScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiChoose.oneOrNone("Select Gauntlet Contest", contests, new Callback<GauntletData>() {
|
GuiChoose.oneOrNone(localizer.getMessage("lblSelectGauntletContest"), contests, new Callback<GauntletData>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(final GauntletData contest) {
|
public void run(final GauntletData contest) {
|
||||||
if (contest == null) { return; }
|
if (contest == null) { return; }
|
||||||
|
|
||||||
FDeckChooser.promptForDeck("Select Your Deck", GameType.Gauntlet, false, new Callback<Deck>() {
|
FDeckChooser.promptForDeck(localizer.getMessage("lblSelectYourDeck"), GameType.Gauntlet, false, new Callback<Deck>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(final Deck userDeck) {
|
public void run(final Deck userDeck) {
|
||||||
if (userDeck == null) { return; }
|
if (userDeck == null) { return; }
|
||||||
|
|||||||
@@ -19,14 +19,12 @@ import forge.toolbox.FEvent.FEventHandler;
|
|||||||
import forge.util.Localizer;
|
import forge.util.Localizer;
|
||||||
|
|
||||||
public class LoadGameMenu extends FPopupMenu {
|
public class LoadGameMenu extends FPopupMenu {
|
||||||
final static Localizer localizer = Localizer.getInstance();
|
|
||||||
|
|
||||||
public enum LoadGameScreen {
|
public enum LoadGameScreen {
|
||||||
BoosterDraft(localizer.getMessage("lblBoosterDraft"), FSkinImage.HAND, LoadDraftScreen.class),
|
BoosterDraft("Booster Draft", FSkinImage.HAND, LoadDraftScreen.class),
|
||||||
SealedDeck(localizer.getMessage("lblSealedDeck"), FSkinImage.PACK, LoadSealedScreen.class),
|
SealedDeck("Sealed Deck", FSkinImage.PACK, LoadSealedScreen.class),
|
||||||
QuestMode(localizer.getMessage("lblQuestMode"), FSkinImage.QUEST_ZEP, LoadQuestScreen.class),
|
QuestMode("Quest Mode", FSkinImage.QUEST_ZEP, LoadQuestScreen.class),
|
||||||
PlanarConquest(localizer.getMessage("lblPlanarConquest"), FSkinImage.MULTIVERSE, LoadConquestScreen.class),
|
PlanarConquest("Planar Conquest", FSkinImage.MULTIVERSE, LoadConquestScreen.class),
|
||||||
Gauntlet(localizer.getMessage("lblGauntlet"), FSkinImage.ALPHASTRIKE, LoadGauntletScreen.class);
|
Gauntlet("Gauntlet", FSkinImage.ALPHASTRIKE, LoadGauntletScreen.class);
|
||||||
|
|
||||||
private final FMenuItem item;
|
private final FMenuItem item;
|
||||||
private final Class<? extends FScreen> screenClass;
|
private final Class<? extends FScreen> screenClass;
|
||||||
@@ -47,7 +45,7 @@ public class LoadGameMenu extends FPopupMenu {
|
|||||||
if (screen == null) { //don't initialize screen until it's opened the first time
|
if (screen == null) { //don't initialize screen until it's opened the first time
|
||||||
try {
|
try {
|
||||||
screen = screenClass.newInstance();
|
screen = screenClass.newInstance();
|
||||||
screen.setHeaderCaption(localizer.getMessage("lblLoadGame") + " - " + item.getText());
|
screen.setHeaderCaption(Localizer.getInstance().getMessage("lblLoadGame") + " - " + item.getText());
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import forge.toolbox.FOptionPane;
|
|||||||
import forge.toolbox.FTextArea;
|
import forge.toolbox.FTextArea;
|
||||||
import forge.toolbox.GuiChoose;
|
import forge.toolbox.GuiChoose;
|
||||||
import forge.util.Callback;
|
import forge.util.Callback;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -28,10 +29,9 @@ public class PuzzleScreen extends LaunchScreen {
|
|||||||
private static final float PADDING = Utils.scale(10);
|
private static final float PADDING = Utils.scale(10);
|
||||||
|
|
||||||
private final FTextArea lblDesc = add(new FTextArea(false,
|
private final FTextArea lblDesc = add(new FTextArea(false,
|
||||||
"Puzzle Mode loads in a puzzle that you have to win in a predetermined time/way.\n\n" +
|
Localizer.getInstance().getMessage("lblPuzzleText1") + "\n\n" +
|
||||||
"To begin, press the Start button below, then select a puzzle from a list.\n\n" +
|
Localizer.getInstance().getMessage("lblPuzzleText2") + "\n\n" +
|
||||||
"Your objective will be displayed in a pop-up window when the puzzle starts and also " +
|
Localizer.getInstance().getMessage("lblPuzzleText3")));
|
||||||
"specified on a special effect card which will be placed in your command zone."));
|
|
||||||
|
|
||||||
public PuzzleScreen() {
|
public PuzzleScreen() {
|
||||||
super(null, NewGameMenu.getMenu());
|
super(null, NewGameMenu.getMenu());
|
||||||
@@ -54,10 +54,10 @@ public class PuzzleScreen extends LaunchScreen {
|
|||||||
final ArrayList<Puzzle> puzzles = PuzzleIO.loadPuzzles();
|
final ArrayList<Puzzle> puzzles = PuzzleIO.loadPuzzles();
|
||||||
Collections.sort(puzzles);
|
Collections.sort(puzzles);
|
||||||
|
|
||||||
GuiChoose.one("Choose a puzzle", puzzles, new Callback<Puzzle>() {
|
GuiChoose.one(Localizer.getInstance().getMessage("lblChooseAPuzzle"), puzzles, new Callback<Puzzle>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(final Puzzle chosen) {
|
public void run(final Puzzle chosen) {
|
||||||
LoadingOverlay.show("Loading the puzzle...", new Runnable() {
|
LoadingOverlay.show(Localizer.getInstance().getMessage("lblLoadingThePuzzle"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Load selected puzzle
|
// Load selected puzzle
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.match.HostedMatch;
|
|||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
import forge.player.GamePlayerUtil;
|
import forge.player.GamePlayerUtil;
|
||||||
import forge.toolbox.FComboBox;
|
import forge.toolbox.FComboBox;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.gui.SGuiChoose;
|
import forge.util.gui.SGuiChoose;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -37,20 +38,20 @@ import java.util.List;
|
|||||||
public class LoadDraftScreen extends LaunchScreen {
|
public class LoadDraftScreen extends LaunchScreen {
|
||||||
private final DeckManager lstDecks = add(new DeckManager(GameType.Draft));
|
private final DeckManager lstDecks = add(new DeckManager(GameType.Draft));
|
||||||
private final FLabel lblTip = add(new FLabel.Builder()
|
private final FLabel lblTip = add(new FLabel.Builder()
|
||||||
.text("Double-tap to edit deck (Long-press to view)")
|
.text(Localizer.getInstance().getMessage("lblDoubleTapToEditDeck"))
|
||||||
.textColor(FLabel.INLINE_LABEL_COLOR)
|
.textColor(FLabel.INLINE_LABEL_COLOR)
|
||||||
.align(Align.center).font(FSkinFont.get(12)).build());
|
.align(Align.center).font(FSkinFont.get(12)).build());
|
||||||
|
|
||||||
private final FSkinFont GAME_MODE_FONT= FSkinFont.get(12);
|
private final FSkinFont GAME_MODE_FONT= FSkinFont.get(12);
|
||||||
private final FLabel lblMode = add(new FLabel.Builder().text("Mode:").font(GAME_MODE_FONT).build());
|
private final FLabel lblMode = add(new FLabel.Builder().text(Localizer.getInstance().getMessage("lblMode")).font(GAME_MODE_FONT).build());
|
||||||
private final FComboBox<String> cbMode = add(new FComboBox<>());
|
private final FComboBox<String> cbMode = add(new FComboBox<>());
|
||||||
|
|
||||||
public LoadDraftScreen() {
|
public LoadDraftScreen() {
|
||||||
super(null, LoadGameMenu.getMenu());
|
super(null, LoadGameMenu.getMenu());
|
||||||
|
|
||||||
cbMode.setFont(GAME_MODE_FONT);
|
cbMode.setFont(GAME_MODE_FONT);
|
||||||
cbMode.addItem("Gauntlet");
|
cbMode.addItem(Localizer.getInstance().getMessage("lblGauntlet"));
|
||||||
cbMode.addItem("Single Match");
|
cbMode.addItem(Localizer.getInstance().getMessage("lblSingleMatch"));
|
||||||
|
|
||||||
lstDecks.setup(ItemManagerConfig.DRAFT_DECKS);
|
lstDecks.setup(ItemManagerConfig.DRAFT_DECKS);
|
||||||
lstDecks.setItemActivateHandler(new FEventHandler() {
|
lstDecks.setItemActivateHandler(new FEventHandler() {
|
||||||
@@ -98,17 +99,18 @@ public class LoadDraftScreen extends LaunchScreen {
|
|||||||
FThreads.invokeInBackgroundThread(new Runnable() {
|
FThreads.invokeInBackgroundThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
Localizer localizer = Localizer.getInstance();
|
||||||
final DeckProxy humanDeck = lstDecks.getSelectedItem();
|
final DeckProxy humanDeck = lstDecks.getSelectedItem();
|
||||||
if (humanDeck == null) {
|
if (humanDeck == null) {
|
||||||
FOptionPane.showErrorDialog("You must select an existing deck or build a deck from a new booster draft game.", "No Deck");
|
FOptionPane.showErrorDialog(localizer.getMessage("lblYouMustSelectExistingDeck"), localizer.getMessage("lblNoDeck"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: if booster draft tournaments are supported in the future, add the possibility to choose them here
|
// TODO: if booster draft tournaments are supported in the future, add the possibility to choose them here
|
||||||
final boolean gauntlet = cbMode.getSelectedItem().equals("Gauntlet");
|
final boolean gauntlet = cbMode.getSelectedItem().equals(localizer.getMessage("lblGauntlet"));
|
||||||
|
|
||||||
if (gauntlet) {
|
if (gauntlet) {
|
||||||
final Integer rounds = SGuiChoose.getInteger("How many opponents are you willing to face?",
|
final Integer rounds = SGuiChoose.getInteger(localizer.getMessage("lblHowManyOpponents"),
|
||||||
1, FModel.getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size());
|
1, FModel.getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size());
|
||||||
if (rounds == null) {
|
if (rounds == null) {
|
||||||
return;
|
return;
|
||||||
@@ -121,7 +123,7 @@ public class LoadDraftScreen extends LaunchScreen {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FModel.getGauntletMini().resetGauntletDraft();
|
FModel.getGauntletMini().resetGauntletDraft();
|
||||||
@@ -131,7 +133,7 @@ public class LoadDraftScreen extends LaunchScreen {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final Integer aiIndex = SGuiChoose.getInteger("Which opponent would you like to face?",
|
final Integer aiIndex = SGuiChoose.getInteger(localizer.getMessage("lblWhichOpponentWouldYouLikeToFace"),
|
||||||
1, FModel.getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size());
|
1, FModel.getDecks().getDraft().get(humanDeck.getName()).getAiDecks().size());
|
||||||
if (aiIndex == null) {
|
if (aiIndex == null) {
|
||||||
return; // Cancel was pressed
|
return; // Cancel was pressed
|
||||||
@@ -146,7 +148,7 @@ public class LoadDraftScreen extends LaunchScreen {
|
|||||||
FThreads.invokeInEdtLater(new Runnable() {
|
FThreads.invokeInEdtLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LoadingOverlay.show("Loading new game...", new Runnable() {
|
LoadingOverlay.show(localizer.getMessage("lblLoadingNewGame"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!checkDeckLegality(humanDeck)) {
|
if (!checkDeckLegality(humanDeck)) {
|
||||||
@@ -177,7 +179,7 @@ public class LoadDraftScreen extends LaunchScreen {
|
|||||||
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
|
if (FModel.getPreferences().getPrefBoolean(FPref.ENFORCE_DECK_LEGALITY)) {
|
||||||
String errorMessage = GameType.Draft.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
|
String errorMessage = GameType.Draft.getDeckFormat().getDeckConformanceProblem(humanDeck.getDeck());
|
||||||
if (errorMessage != null) {
|
if (errorMessage != null) {
|
||||||
FOptionPane.showErrorDialog("Your deck " + errorMessage + "\nPlease edit or choose a different deck.", "Invalid Deck");
|
FOptionPane.showErrorDialog(Localizer.getInstance().getMessage("lblInvalidDeckDesc").replace("%n", errorMessage), Localizer.getInstance().getMessage("lblInvalidDeck"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import forge.screens.LoadingOverlay;
|
|||||||
import forge.screens.home.NewGameMenu;
|
import forge.screens.home.NewGameMenu;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FTextArea;
|
import forge.toolbox.FTextArea;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.ThreadUtil;
|
import forge.util.ThreadUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
import forge.util.gui.SGuiChoose;
|
import forge.util.gui.SGuiChoose;
|
||||||
@@ -19,9 +20,9 @@ public class NewDraftScreen extends LaunchScreen {
|
|||||||
private static final float PADDING = Utils.scale(10);
|
private static final float PADDING = Utils.scale(10);
|
||||||
|
|
||||||
private final FTextArea lblDesc = add(new FTextArea(false,
|
private final FTextArea lblDesc = add(new FTextArea(false,
|
||||||
"In Draft mode, three booster packs are rotated around eight players.\n\n" +
|
Localizer.getInstance().getMessage("lblDraftText1") + "\n\n" +
|
||||||
"Build a deck from the cards you choose. The AI will do the same.\n\n" +
|
Localizer.getInstance().getMessage("lblDraftText2") + "\n\n" +
|
||||||
"Then, play against any number of the AI opponents."));
|
Localizer.getInstance().getMessage("lblDraftText3")));
|
||||||
|
|
||||||
public NewDraftScreen() {
|
public NewDraftScreen() {
|
||||||
super(null, NewGameMenu.getMenu());
|
super(null, NewGameMenu.getMenu());
|
||||||
@@ -44,7 +45,7 @@ public class NewDraftScreen extends LaunchScreen {
|
|||||||
ThreadUtil.invokeInGameThread(new Runnable() { //must run in game thread to prevent blocking UI thread
|
ThreadUtil.invokeInGameThread(new Runnable() { //must run in game thread to prevent blocking UI thread
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
final LimitedPoolType poolType = SGuiChoose.oneOrNone("Choose Draft Format", LimitedPoolType.values());
|
final LimitedPoolType poolType = SGuiChoose.oneOrNone(Localizer.getInstance().getMessage("lblChooseDraftFormat"), LimitedPoolType.values());
|
||||||
if (poolType == null) { return; }
|
if (poolType == null) { return; }
|
||||||
|
|
||||||
final BoosterDraft draft = BoosterDraft.createDraft(poolType);
|
final BoosterDraft draft = BoosterDraft.createDraft(poolType);
|
||||||
@@ -53,7 +54,7 @@ public class NewDraftScreen extends LaunchScreen {
|
|||||||
FThreads.invokeInEdtLater(new Runnable() {
|
FThreads.invokeInEdtLater(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
LoadingOverlay.show("Loading new draft...", new Runnable() {
|
LoadingOverlay.show(Localizer.getInstance().getMessage("lblLoadingNewDraft"), new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Forge.openScreen(new DraftingProcessScreen(draft, EditorType.Draft, null));
|
Forge.openScreen(new DraftingProcessScreen(draft, EditorType.Draft, null));
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import forge.screens.LaunchScreen;
|
|||||||
import forge.screens.home.NewGameMenu;
|
import forge.screens.home.NewGameMenu;
|
||||||
import forge.toolbox.FLabel;
|
import forge.toolbox.FLabel;
|
||||||
import forge.toolbox.FTextArea;
|
import forge.toolbox.FTextArea;
|
||||||
|
import forge.util.Localizer;
|
||||||
import forge.util.ThreadUtil;
|
import forge.util.ThreadUtil;
|
||||||
import forge.util.Utils;
|
import forge.util.Utils;
|
||||||
|
|
||||||
@@ -19,9 +20,9 @@ public class NewSealedScreen extends LaunchScreen {
|
|||||||
private static final float PADDING = Utils.scale(10);
|
private static final float PADDING = Utils.scale(10);
|
||||||
|
|
||||||
private final FTextArea lblDesc = add(new FTextArea(false,
|
private final FTextArea lblDesc = add(new FTextArea(false,
|
||||||
"In Sealed mode, you build a deck from booster packs (maximum 10).\n\n" +
|
Localizer.getInstance().getMessage("lblSealedText2") + "\n\n" +
|
||||||
"Build a deck from the cards you receive. A number of AI opponents will do the same.\n\n" +
|
Localizer.getInstance().getMessage("lblSealedText3") + "\n\n" +
|
||||||
"Then, play against each of the AI opponents."));
|
Localizer.getInstance().getMessage("lblSealedText4")));
|
||||||
|
|
||||||
public NewSealedScreen() {
|
public NewSealedScreen() {
|
||||||
super(null, NewGameMenu.getMenu());
|
super(null, NewGameMenu.getMenu());
|
||||||
|
|||||||
@@ -302,8 +302,8 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
localizer.getMessage("nlDisableCardEffect")),
|
localizer.getMessage("nlDisableCardEffect")),
|
||||||
4);
|
4);
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_BORDER_MASKING,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_BORDER_MASKING,
|
||||||
"Enable Round Border Mask",
|
localizer.getMessage("lblEnableRoundBorder"),
|
||||||
"When enabled, the card corners are rounded (Preferably Card with Full Borders)."){
|
localizer.getMessage("nlEnableRoundBorder")){
|
||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
super.select();
|
super.select();
|
||||||
@@ -312,8 +312,8 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
},4);
|
},4);
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_ENABLE_PRELOAD_EXTENDED_ART,
|
||||||
"Preload Extended Art Cards",
|
localizer.getMessage("lblPreloadExtendedArtCards"),
|
||||||
"When enabled, Preloads Extended Art Cards to Cache on Startup."){
|
localizer.getMessage("nlPreloadExtendedArtCards")){
|
||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
super.select();
|
super.select();
|
||||||
@@ -322,8 +322,8 @@ public class SettingsPage extends TabPage<SettingsScreen> {
|
|||||||
}
|
}
|
||||||
},4);
|
},4);
|
||||||
lstSettings.addItem(new BooleanSetting(FPref.UI_SHOW_FPS,
|
lstSettings.addItem(new BooleanSetting(FPref.UI_SHOW_FPS,
|
||||||
"Show FPS Display",
|
localizer.getMessage("lblShowFPSDisplay"),
|
||||||
"When enabled, show the FPS Display (Experimental)."){
|
localizer.getMessage("nlShowFPSDisplay")){
|
||||||
@Override
|
@Override
|
||||||
public void select() {
|
public void select() {
|
||||||
super.select();
|
super.select();
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ Hanmac
|
|||||||
Indigo Dragon
|
Indigo Dragon
|
||||||
Jamin Collins
|
Jamin Collins
|
||||||
kevlahnota
|
kevlahnota
|
||||||
|
klaxnek
|
||||||
KrazyTheFox
|
KrazyTheFox
|
||||||
leriomaggio
|
leriomaggio
|
||||||
Luke
|
Luke
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ K:Deathtouch
|
|||||||
K:Haste
|
K:Haste
|
||||||
K:CantBeBlockedBy Creature.powerLE2
|
K:CantBeBlockedBy Creature.powerLE2
|
||||||
S:Mode$ CantPreventDamage | IsCombat$ True | ValidSource$ Creature.YouCtrl | Description$ Combat damage that would be dealt by creatures you control can’t be prevented.
|
S:Mode$ CantPreventDamage | IsCombat$ True | ValidSource$ Creature.YouCtrl | Description$ Combat damage that would be dealt by creatures you control can’t be prevented.
|
||||||
T:Mode$ DamageDone | ValidSource$ Creature.YouCtrl | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ MoreDamage | TriggerDescription$ Whenever CARDNAME deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.
|
T:Mode$ DamageDone | ValidSource$ Card.Self | ValidTarget$ Opponent | CombatDamage$ True | TriggerZones$ Battlefield | Execute$ MoreDamage | TriggerDescription$ Whenever CARDNAME deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.
|
||||||
SVar:MoreDamage:DB$ DealDamage | ValidTgts$ Planeswalker.ControlledBy TriggeredTarget | TgtPrompt$ Select target planeswalker that player controls | NumDmg$ X | References$ X
|
SVar:MoreDamage:DB$ DealDamage | ValidTgts$ Planeswalker.ControlledBy TriggeredTarget | TgtPrompt$ Select target planeswalker that player controls | NumDmg$ X | References$ X
|
||||||
SVar:X:TriggerCount$DamageAmount
|
SVar:X:TriggerCount$DamageAmount
|
||||||
Oracle:Vigilance, deathtouch, haste\nQuesting Beast can’t be blocked by creatures with power 2 or less.\nCombat damage that would be dealt by creatures you control can’t be prevented.\nWhenever Questing Beast deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.
|
Oracle:Vigilance, deathtouch, haste\nQuesting Beast can’t be blocked by creatures with power 2 or less.\nCombat damage that would be dealt by creatures you control can’t be prevented.\nWhenever Questing Beast deals combat damage to an opponent, it deals that much damage to target planeswalker that player controls.
|
||||||
@@ -4,4 +4,4 @@ Order:108
|
|||||||
Subtype:Custom
|
Subtype:Custom
|
||||||
Type:Casual
|
Type:Casual
|
||||||
Rarities:L, C
|
Rarities:L, C
|
||||||
Banned:Gush;Gitaxian Probe;Daze
|
Banned:Gush;Gitaxian Probe;Daze;Arcum's Astrolabe
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ Order:101
|
|||||||
Subtype:Standard
|
Subtype:Standard
|
||||||
Type:Sanctioned
|
Type:Sanctioned
|
||||||
Sets:GRN, RNA, WAR, M20, ELD
|
Sets:GRN, RNA, WAR, M20, ELD
|
||||||
Banned:
|
Banned:Field of the Dead
|
||||||
|
|||||||
@@ -950,6 +950,12 @@ nlShowMatchBackground=Zeige Bilder im Spielfeldhintergrund.
|
|||||||
nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen.
|
nlTheme=Wähle ein Thema um die Bildschirmanzeigen anzupassen.
|
||||||
nlVibrateAfterLongPress=Aktiviert Vibration bei langen Druck, z.B. beim Zoomen.
|
nlVibrateAfterLongPress=Aktiviert Vibration bei langen Druck, z.B. beim Zoomen.
|
||||||
nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust.
|
nlVibrateWhenLosingLife=Aktiviert Vibration bei Lebenspunktverlust.
|
||||||
|
lblEnableRoundBorder=Enable Round Border Mask
|
||||||
|
nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders).
|
||||||
|
lblPreloadExtendedArtCards=Preload Extended Art Cards
|
||||||
|
nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup.
|
||||||
|
lblShowFPSDisplay=Show FPS Display
|
||||||
|
nlShowFPSDisplay=When enabled, show the FPS Display (Experimental).
|
||||||
#MatchScreen.java
|
#MatchScreen.java
|
||||||
lblPlayers=Spieler
|
lblPlayers=Spieler
|
||||||
lblLog=Bericht
|
lblLog=Bericht
|
||||||
@@ -1172,3 +1178,27 @@ lblItsADraw=Es ist ein Unentschieden!
|
|||||||
lblTeamWon=Team %s hat gewonnen!
|
lblTeamWon=Team %s hat gewonnen!
|
||||||
lblWinnerWon=%s hat gewonnen!
|
lblWinnerWon=%s hat gewonnen!
|
||||||
lblGameLog=Spiel-Aufzeichnung
|
lblGameLog=Spiel-Aufzeichnung
|
||||||
|
#NewDraftScreen.java
|
||||||
|
lblLoadingNewDraft=Loading new draft...
|
||||||
|
#LoadDraftScreen.java
|
||||||
|
lblDoubleTapToEditDeck=Double-tap to edit deck (Long-press to view)
|
||||||
|
lblMode=Mode:
|
||||||
|
lblYouMustSelectExistingDeck=You must select an existing deck or build a deck from a new booster draft game.
|
||||||
|
lblWhichOpponentWouldYouLikeToFace=Which opponent would you like to face?
|
||||||
|
lblSingleMatch=Single Match
|
||||||
|
#NewGauntletScreen.java
|
||||||
|
lblGauntletText1=In Gauntlet mode, you select a deck and play against multiple opponents.
|
||||||
|
lblGauntletText2=Configure how many opponents you wish to face and what decks or types of decks they will play.
|
||||||
|
lblGauntletText3=Then, try to beat all AI opponents without losing a match.
|
||||||
|
lblSelectGauntletType=Select a Gauntlet Type
|
||||||
|
lblCustomGauntlet=Custom Gauntlet
|
||||||
|
lblGauntletContest=Gauntlet Contest
|
||||||
|
lblSelectYourDeck=Select Your Deck
|
||||||
|
lblSelectDeckForOpponent=Select Deck for Opponent
|
||||||
|
lblSelectGauntletContest=Select Gauntlet Contest
|
||||||
|
#PuzzleScreen.java
|
||||||
|
lblPuzzleText1=Puzzle Mode loads in a puzzle that you have to win in a predetermined time/way.
|
||||||
|
lblPuzzleText2=To begin, press the Start button below, then select a puzzle from a list.
|
||||||
|
lblPuzzleText3=Your objective will be displayed in a pop-up window when the puzzle starts and also specified on a special effect card which will be placed in your command zone.
|
||||||
|
lblChooseAPuzzle=Choose a puzzle
|
||||||
|
lblLoadingThePuzzle=Loading the puzzle...
|
||||||
@@ -628,7 +628,7 @@ titleUnlocked=%n unlocked!
|
|||||||
lblStartADuel=Start a duel.
|
lblStartADuel=Start a duel.
|
||||||
lblSelectAQuestDeck=Please select a Quest Deck.
|
lblSelectAQuestDeck=Please select a Quest Deck.
|
||||||
lblInvalidDeck=Invalid Deck
|
lblInvalidDeck=Invalid Deck
|
||||||
lblInvalidDeckDesc=Your deck %n Please edit or choose a different deck.
|
lblInvalidDeckDesc=Your deck %n\nPlease edit or choose a different deck.
|
||||||
#VSubmenuQuestPrefs.java
|
#VSubmenuQuestPrefs.java
|
||||||
lblQuestPreferences=Quest Preferences
|
lblQuestPreferences=Quest Preferences
|
||||||
lblRewardsError=Rewards Error
|
lblRewardsError=Rewards Error
|
||||||
@@ -950,6 +950,12 @@ nlShowMatchBackground=Show match background image on battlefield, otherwise back
|
|||||||
nlTheme=Sets the theme that determines how display components are skinned.
|
nlTheme=Sets the theme that determines how display components are skinned.
|
||||||
nlVibrateAfterLongPress=Enable quick vibration to signify a long press, such as for card zooming.
|
nlVibrateAfterLongPress=Enable quick vibration to signify a long press, such as for card zooming.
|
||||||
nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes damage during a game.
|
nlVibrateWhenLosingLife=Enable vibration when your player loses life or takes damage during a game.
|
||||||
|
lblEnableRoundBorder=Enable Round Border Mask
|
||||||
|
nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders).
|
||||||
|
lblPreloadExtendedArtCards=Preload Extended Art Cards
|
||||||
|
nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup.
|
||||||
|
lblShowFPSDisplay=Show FPS Display
|
||||||
|
nlShowFPSDisplay=When enabled, show the FPS Display (Experimental).
|
||||||
#MatchScreen.java
|
#MatchScreen.java
|
||||||
lblPlayers=Players
|
lblPlayers=Players
|
||||||
lblLog=Log
|
lblLog=Log
|
||||||
@@ -1172,3 +1178,27 @@ lblItsADraw=It's a draw!
|
|||||||
lblTeamWon=Team %s won!
|
lblTeamWon=Team %s won!
|
||||||
lblWinnerWon=%s won!
|
lblWinnerWon=%s won!
|
||||||
lblGameLog=Game Log
|
lblGameLog=Game Log
|
||||||
|
#NewDraftScreen.java
|
||||||
|
lblLoadingNewDraft=Loading new draft...
|
||||||
|
#LoadDraftScreen.java
|
||||||
|
lblDoubleTapToEditDeck=Double-tap to edit deck (Long-press to view)
|
||||||
|
lblMode=Mode:
|
||||||
|
lblYouMustSelectExistingDeck=You must select an existing deck or build a deck from a new booster draft game.
|
||||||
|
lblWhichOpponentWouldYouLikeToFace=Which opponent would you like to face?
|
||||||
|
lblSingleMatch=Single Match
|
||||||
|
#NewGauntletScreen.java
|
||||||
|
lblGauntletText1=In Gauntlet mode, you select a deck and play against multiple opponents.
|
||||||
|
lblGauntletText2=Configure how many opponents you wish to face and what decks or types of decks they will play.
|
||||||
|
lblGauntletText3=Then, try to beat all AI opponents without losing a match.
|
||||||
|
lblSelectGauntletType=Select a Gauntlet Type
|
||||||
|
lblCustomGauntlet=Custom Gauntlet
|
||||||
|
lblGauntletContest=Gauntlet Contest
|
||||||
|
lblSelectYourDeck=Select Your Deck
|
||||||
|
lblSelectDeckForOpponent=Select Deck for Opponent
|
||||||
|
lblSelectGauntletContest=Select Gauntlet Contest
|
||||||
|
#PuzzleScreen.java
|
||||||
|
lblPuzzleText1=Puzzle Mode loads in a puzzle that you have to win in a predetermined time/way.
|
||||||
|
lblPuzzleText2=To begin, press the Start button below, then select a puzzle from a list.
|
||||||
|
lblPuzzleText3=Your objective will be displayed in a pop-up window when the puzzle starts and also specified on a special effect card which will be placed in your command zone.
|
||||||
|
lblChooseAPuzzle=Choose a puzzle
|
||||||
|
lblLoadingThePuzzle=Loading the puzzle...
|
||||||
@@ -628,7 +628,7 @@ titleUnlocked=%n desbloqueado!
|
|||||||
lblStartADuel=Comienza un duelo.
|
lblStartADuel=Comienza un duelo.
|
||||||
lblSelectAQuestDeck=Por favor, seleccione un mazo de aventura.
|
lblSelectAQuestDeck=Por favor, seleccione un mazo de aventura.
|
||||||
lblInvalidDeck=Mazo no válido
|
lblInvalidDeck=Mazo no válido
|
||||||
lblInvalidDeckDesc=Su mazo %n Por favor, edite o elija un mazo diferente.
|
lblInvalidDeckDesc=Su mazo %n\nPor favor, edite o elija un mazo diferente.
|
||||||
#VSubmenuQuestPrefs.java
|
#VSubmenuQuestPrefs.java
|
||||||
lblQuestPreferences=Preferencias de la Aventura
|
lblQuestPreferences=Preferencias de la Aventura
|
||||||
lblRewardsError=Error de recompensas
|
lblRewardsError=Error de recompensas
|
||||||
@@ -950,6 +950,12 @@ nlShowMatchBackground=Muestra la imagen de fondo de la partida en el campo de ba
|
|||||||
nlTheme=Establece el tema que determina el aspecto global del juego.
|
nlTheme=Establece el tema que determina el aspecto global del juego.
|
||||||
nlVibrateAfterLongPress=Habilita la vibración rápida cuando se realice una pulsación prolongada, como p.ej. al realizar zoom de la carta.
|
nlVibrateAfterLongPress=Habilita la vibración rápida cuando se realice una pulsación prolongada, como p.ej. al realizar zoom de la carta.
|
||||||
nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vida o sufre daños durante un juego.
|
nlVibrateWhenLosingLife=Habilita la vibración cuando tu jugador pierde vida o sufre daños durante un juego.
|
||||||
|
lblEnableRoundBorder=Enable Round Border Mask
|
||||||
|
nlEnableRoundBorder=When enabled, the card corners are rounded (Preferably Card with Full Borders).
|
||||||
|
lblPreloadExtendedArtCards=Preload Extended Art Cards
|
||||||
|
nlPreloadExtendedArtCards=When enabled, Preloads Extended Art Cards to Cache on Startup.
|
||||||
|
lblShowFPSDisplay=Show FPS Display
|
||||||
|
nlShowFPSDisplay=When enabled, show the FPS Display (Experimental).
|
||||||
#MatchScreen.java
|
#MatchScreen.java
|
||||||
lblPlayers=Jugadores
|
lblPlayers=Jugadores
|
||||||
lblLog=Log
|
lblLog=Log
|
||||||
@@ -1172,3 +1178,27 @@ lblItsADraw=¡Es un empate!
|
|||||||
lblTeamWon=¡El equipo %s ha ganado!
|
lblTeamWon=¡El equipo %s ha ganado!
|
||||||
lblWinnerWon=¡%s ha ganado!
|
lblWinnerWon=¡%s ha ganado!
|
||||||
lblGameLog=Registro del Juego
|
lblGameLog=Registro del Juego
|
||||||
|
#NewDraftScreen.java
|
||||||
|
lblLoadingNewDraft=Cargando nuevo Draft...
|
||||||
|
#LoadDraftScreen.java
|
||||||
|
lblDoubleTapToEditDeck=Pulsa 2 veces para editar el mazo (Pulsación prologanda para ver)
|
||||||
|
lblMode=Modo:
|
||||||
|
lblYouMustSelectExistingDeck=Debes seleccionar un mazo existente o construir un mazo a partir de un nuevo juego de booster draft.
|
||||||
|
lblWhichOpponentWouldYouLikeToFace=¿A qué oponente te gustaría enfrentarte?
|
||||||
|
lblSingleMatch=Partida individual
|
||||||
|
#NewGauntletScreen.java
|
||||||
|
lblGauntletText1=En el modo Desafío, selecciona un mazo y juega contra varios oponentes.
|
||||||
|
lblGauntletText2=Configura a cuántos oponentes deseas enfrentarte y qué mazos o tipos de mazos jugarán.
|
||||||
|
lblGauntletText3=Luego, intenta derrotar a todos los oponentes de la IA sin perder una partida.
|
||||||
|
lblSelectGauntletType=Seleccione el Tipo de Desafío
|
||||||
|
lblCustomGauntlet=Desafío Personalizado
|
||||||
|
lblGauntletContest=Concurso de Desafío
|
||||||
|
lblSelectYourDeck=Seleccciona Tu Mazo
|
||||||
|
lblSelectDeckForOpponent=Seleccionar Mazo para el Oponente
|
||||||
|
lblSelectGauntletContest=Seleccionar Concurso de Desafío
|
||||||
|
#PuzzleScreen.java
|
||||||
|
lblPuzzleText1=En el Modo Puzzle se carga un rompecabezas que tienes que ganar en un tiempo/forma predeterminados.
|
||||||
|
lblPuzzleText2=Para comenzar, pulsa el botón Inicio y selecciona un puzzle de una lista.
|
||||||
|
lblPuzzleText3=Tu objetivo se mostrará en una ventana emergente cuando se inicie el puzzle y también se especificará en una carta de efectos especiales que se colocará en tu zona de comandos.
|
||||||
|
lblChooseAPuzzle=Elige un puzzle
|
||||||
|
lblLoadingThePuzzle=Cargando el puzzle...
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
language.name=Chinese (CN)
|
language.name=Chinese (CN)
|
||||||
#SplashScreen.java
|
#SplashScreen.java
|
||||||
splash.loading.examining-cards=加载牌张,检查文件夹
|
splash.loading.examining-cards=加载卡牌,检查文件夹
|
||||||
splash.loading.cards-folders=从文件夹加载牌张
|
splash.loading.cards-folders=从文件夹加载卡牌
|
||||||
splash.loading.cards-archive=从存档中加载牌张
|
splash.loading.cards-archive=从存档中加载卡牌
|
||||||
splash.loading.decks=加载套牌
|
splash.loading.decks=加载套牌
|
||||||
splash.loading.processingimagesprites=处理精灵图
|
splash.loading.processingimagesprites=处理精灵图
|
||||||
#FControl.java
|
#FControl.java
|
||||||
lblOpeningMainWindow=打开主窗口中
|
lblOpeningMainWindow=打开主窗口中
|
||||||
lblCloseScreen=关闭屏幕
|
lblCloseScreen=关闭屏幕
|
||||||
txCloseAction1=Forge现在支持选项卡导航,可以轻松关闭和切换不同屏幕。因此,您不再需要使用右上角X按钮关闭当前屏幕并返回
|
txCloseAction1=Forge现在支持选项卡导航,可以轻松关闭和切换不同屏幕。因此,你不再需要使用右上角X按钮关闭当前屏幕并返回
|
||||||
txCloseAction2=请选择右上角的X按钮选择接下来将要进行的操作。此选项保留给未来使用,您将不会再看到此消息,您可以随时在“首选项”中更改此行为
|
txCloseAction2=请通过右上角的X按钮选择将要进行的动作。此选项保留给未来使用,你将不会再看到此消息,你可以随时在“首选项”中更改此行为
|
||||||
titCloseAction=选择您的关闭行动
|
titCloseAction=选择你的关闭动作
|
||||||
lblAreYouSureYouWishRestartForge=你确定要重启Forge吗?
|
lblAreYouSureYouWishRestartForge=你确定要重启Forge吗?
|
||||||
lblAreYouSureYouWishExitForge=你确定要退出Forge吗?
|
lblAreYouSureYouWishExitForge=你确定要退出Forge吗?
|
||||||
lblOneOrMoreGamesActive=一个或多个游戏正处于活动状态
|
lblOneOrMoreGamesActive=一个或多个游戏正处于活动状态
|
||||||
lblerrLoadingLayoutFile=无法读取您的布局文件:%s。按OK然后删除。\n游戏将以默认布局进行。
|
lblerrLoadingLayoutFile=无法读取你的布局文件:%s。按OK然后删除。\n游戏将以默认布局进行。
|
||||||
lblLoadingQuest=加载时空竞逐中...
|
lblLoadingQuest=加载冒险之旅...
|
||||||
#FScreen.java
|
#FScreen.java
|
||||||
lblHome=主页
|
lblHome=主页
|
||||||
lblWorkshop=作坊页面
|
lblWorkshop=作坊页面
|
||||||
@@ -30,13 +30,13 @@ lblDraftDeckEditor=轮抓套牌编辑器
|
|||||||
lblSealedDeckEditor=现开套牌编辑器
|
lblSealedDeckEditor=现开套牌编辑器
|
||||||
lblTokenViewer=衍生物查看器
|
lblTokenViewer=衍生物查看器
|
||||||
lblCloseViewer=关闭查看器
|
lblCloseViewer=关闭查看器
|
||||||
lblQuestDeckEditor=竞逐套牌编辑器
|
lblQuestDeckEditor=冒险套牌编辑器
|
||||||
lblQuestTournamentDeckEditor=竞逐比赛套牌编辑器
|
lblQuestTournamentDeckEditor=冒险比赛套牌编辑器
|
||||||
lblSpellShop=轮替商店
|
lblSpellShop=卡牌商店
|
||||||
lblLeaveShop=离开商店
|
lblLeaveShop=离开商店
|
||||||
lblLeaveDraft=离开轮抓
|
lblLeaveDraft=离开轮抓
|
||||||
lblBazaar=珍宝集市
|
lblBazaar=珍宝集市
|
||||||
lblConcedeGame=让出这场游戏
|
lblConcedeGame=这场游戏认输
|
||||||
txerrFailedtodeletelayoutfile=删除布局文件失败。
|
txerrFailedtodeletelayoutfile=删除布局文件失败。
|
||||||
#VSubmenuPreferences.java
|
#VSubmenuPreferences.java
|
||||||
Preferences=偏好
|
Preferences=偏好
|
||||||
@@ -62,7 +62,7 @@ cbEnableAICheats=允许人工智能作弊
|
|||||||
cbManaBurn=法术力灼烧
|
cbManaBurn=法术力灼烧
|
||||||
cbManaLostPrompt=提示法术力池将要清空
|
cbManaLostPrompt=提示法术力池将要清空
|
||||||
cbDevMode=开发人员模式
|
cbDevMode=开发人员模式
|
||||||
cbLoadCardsLazily=惰性加载牌张脚本
|
cbLoadCardsLazily=惰性加载卡牌脚本
|
||||||
cbLoadHistoricFormats=加载史记赛制
|
cbLoadHistoricFormats=加载史记赛制
|
||||||
cbWorkshopSyntax=作坊语法检查
|
cbWorkshopSyntax=作坊语法检查
|
||||||
cbEnforceDeckLegality=套牌一致性
|
cbEnforceDeckLegality=套牌一致性
|
||||||
@@ -74,7 +74,7 @@ cbCloneImgSource=复制使用原始的图片
|
|||||||
cbScaleLarger=将图像缩放的更大
|
cbScaleLarger=将图像缩放的更大
|
||||||
cbRenderBlackCardBorders=渲染黑卡边框
|
cbRenderBlackCardBorders=渲染黑卡边框
|
||||||
cbLargeCardViewers=使用大图查看器
|
cbLargeCardViewers=使用大图查看器
|
||||||
cbSmallDeckViewer=使用小套牌查看器
|
cbSmallDeckViewer=使用小图查看器
|
||||||
cbDisplayFoil=显示闪卡
|
cbDisplayFoil=显示闪卡
|
||||||
cbRandomFoil=随机闪卡
|
cbRandomFoil=随机闪卡
|
||||||
cbRandomArtInPools=在生成的卡池中随机加入闪卡
|
cbRandomArtInPools=在生成的卡池中随机加入闪卡
|
||||||
@@ -102,7 +102,7 @@ cbpGameLogEntryType=游戏日志详细程度
|
|||||||
cbpCloseAction=关闭动作
|
cbpCloseAction=关闭动作
|
||||||
cbpDefaultFontSize=默认字体大小
|
cbpDefaultFontSize=默认字体大小
|
||||||
cbpAiProfiles=人工智能强度
|
cbpAiProfiles=人工智能强度
|
||||||
cbpDisplayCurrentCardColors=显示牌张颜色详情
|
cbpDisplayCurrentCardColors=显示卡牌颜色详情
|
||||||
cbpAutoYieldMode=自动让过
|
cbpAutoYieldMode=自动让过
|
||||||
cbpCounterDisplayType=计数器显示类型
|
cbpCounterDisplayType=计数器显示类型
|
||||||
cbpCounterDisplayLocation=计数器显示区域
|
cbpCounterDisplayLocation=计数器显示区域
|
||||||
@@ -141,13 +141,13 @@ nlSingletons=禁止在生成的套牌中非地牌重复出现
|
|||||||
nlRemoveArtifacts=在生成的套牌中禁用神器牌
|
nlRemoveArtifacts=在生成的套牌中禁用神器牌
|
||||||
nlCardBased=构建具有更多协同效应的套牌(需要重启)
|
nlCardBased=构建具有更多协同效应的套牌(需要重启)
|
||||||
DeckEditorOptions=套牌编辑器选项
|
DeckEditorOptions=套牌编辑器选项
|
||||||
nlFilterLandsByColorId=当使用牌张颜色筛选器时,过滤地可以更容易找到产数相关法术力的地
|
nlFilterLandsByColorId=当使用卡牌颜色筛选器时,过滤地可以更容易找到产数相关法术力的地
|
||||||
AdvancedSettings=高级设置
|
AdvancedSettings=高级设置
|
||||||
nlDevMode=启用在开发期间进行测试的功能菜单
|
nlDevMode=启用在开发期间进行测试的功能菜单
|
||||||
nlWorkshopSyntax=在作坊中启用牌张脚本检查。注意:该功能任在测试阶段。
|
nlWorkshopSyntax=在作坊中启用卡牌脚本检查。注意:该功能任在测试阶段。
|
||||||
nlGameLogEntryType=更改游戏中日志显示的信息量。排序为最少到最详细。
|
nlGameLogEntryType=更改游戏中日志显示的信息量。排序为最少到最详细。
|
||||||
nlCloseAction=更改单击右上角X按钮时的行为
|
nlCloseAction=更改单击右上角X按钮时的动作
|
||||||
nlLoadCardsLazily=如果打开该选项Forge将在使用到牌张脚本时才加载(警告:实验状态)。
|
nlLoadCardsLazily=如果打开该选项Forge将在使用到卡牌脚本时才加载(警告:实验状态)。
|
||||||
nlLoadHistoricFormats=如果打开,Forge将加载史记赛制,这个能会导致游戏载入时间变长。
|
nlLoadHistoricFormats=如果打开,Forge将加载史记赛制,这个能会导致游戏载入时间变长。
|
||||||
GraphicOptions=图形选项
|
GraphicOptions=图形选项
|
||||||
nlDefaultFontSize=UI中字体的默认大小。所有字体元素都相对于此缩放。(需要重启)
|
nlDefaultFontSize=UI中字体的默认大小。所有字体元素都相对于此缩放。(需要重启)
|
||||||
@@ -155,21 +155,21 @@ cbpMulliganRule = 调度规则
|
|||||||
nlImageFetcher=允许从在线资源中实时获取缺失的图片
|
nlImageFetcher=允许从在线资源中实时获取缺失的图片
|
||||||
nlDisplayFoil=显示闪卡
|
nlDisplayFoil=显示闪卡
|
||||||
nlRandomFoil=随机将牌设置为闪卡
|
nlRandomFoil=随机将牌设置为闪卡
|
||||||
nlScaleLarger=允许牌张图片缩放为初始大小
|
nlScaleLarger=允许卡牌图片缩放为初始大小
|
||||||
nlRenderBlackCardBorders=为牌周围渲染黑色边框
|
nlRenderBlackCardBorders=为牌周围渲染黑色边框
|
||||||
nlLargeCardViewers=是所有牌看起来更大以便高分辨率图片看起来更舒适,不适合低分辨率设备使用
|
nlLargeCardViewers=是所有牌看起来更大以便高分辨率图片看起来更舒适,不适合低分辨率设备使用
|
||||||
nlSmallDeckViewer=将套牌查看器设置为800X600而不是按屏幕大小等比缩放
|
nlSmallDeckViewer=将套牌查看器设置为800X600而不是按屏幕大小等比缩放
|
||||||
nlRandomArtInPools=限制赛生成的卡池中带有闪卡。
|
nlRandomArtInPools=限制赛生成的卡池中带有闪卡。
|
||||||
nlUiForTouchScreen=增加一些UI元素以提高触屏体验(需要重启)。
|
nlUiForTouchScreen=增加一些UI元素以提高触屏体验(需要重启)。
|
||||||
nlCompactPrompt=隐藏标题并在“提示”窗格中使用较小的字体使其更紧凑。
|
nlCompactPrompt=隐藏标题并在“提示”窗格中使用较小的字体使其更紧凑。
|
||||||
nlHideReminderText=在“牌张详情“窗格中隐藏提醒文本
|
nlHideReminderText=在“卡牌详情“窗格中隐藏提醒文本
|
||||||
nlOpenPacksIndiv=打开肥包或者补充盒的时候一包一包开。
|
nlOpenPacksIndiv=打开肥包或者补充盒的时候一包一包开。
|
||||||
nlTokensInSeparateRow=生物与衍生物分不同的行显示。
|
nlTokensInSeparateRow=生物与衍生物分不同的行显示。
|
||||||
nlStackCreatures=在战场上如同地、神器、结界一般堆叠一样的生物。
|
nlStackCreatures=在战场上如同地、神器、结界一般堆叠一样的生物。
|
||||||
nlTimedTargOverlay=启用基于限制目标的覆盖优化以减少CPU使用率(仅在旧设备上需要使用,需要重启游戏)。
|
nlTimedTargOverlay=启用基于限制目标的覆盖优化以减少CPU使用率(仅在旧设备上需要使用,需要重启游戏)。
|
||||||
nlCounterDisplayType=选择指示物的样式。基于文本还是基于图片还是二者混合。
|
nlCounterDisplayType=选择指示物的样式。基于文本还是基于图片还是二者混合。
|
||||||
nlCounterDisplayLocation=确定牌张上指示物的位置:靠近底部还是顶部
|
nlCounterDisplayLocation=确定卡牌上指示物的位置:靠近底部还是顶部
|
||||||
nlDisplayCurrentCardColors=在牌张详情窗格中显示当前牌的颜色
|
nlDisplayCurrentCardColors=在卡牌详情窗格中显示当前牌的颜色
|
||||||
SoundOptions=声音选项
|
SoundOptions=声音选项
|
||||||
nlEnableSounds=在游戏中启用声音效果
|
nlEnableSounds=在游戏中启用声音效果
|
||||||
nlEnableMusic=在游戏中启用背景音乐
|
nlEnableMusic=在游戏中启用背景音乐
|
||||||
@@ -188,18 +188,18 @@ btnListImageData=统计牌和图片数据
|
|||||||
lblListImageData=统计Forge实现且缺少的图片的牌
|
lblListImageData=统计Forge实现且缺少的图片的牌
|
||||||
btnImportPictures=导入数据
|
btnImportPictures=导入数据
|
||||||
btnHowToPlay=如何玩
|
btnHowToPlay=如何玩
|
||||||
btnDownloadPrices=下载牌张价格
|
btnDownloadPrices=下载卡牌价格
|
||||||
btnLicensing=许可证详情
|
btnLicensing=许可证详情
|
||||||
lblDownloadPics=下载缺省牌的图片
|
lblDownloadPics=下载缺省牌的图片
|
||||||
lblDownloadPicsHQ=下载缺省牌的高清图片
|
lblDownloadPicsHQ=下载缺省牌的高清图片
|
||||||
lblDownloadSetPics=下载每张牌的图片(每张牌出现一次)
|
lblDownloadSetPics=下载每张牌的图片(每张牌出现一次)
|
||||||
lblDownloadQuestImages=下载冒险之旅里使用的衍生物与图标
|
lblDownloadQuestImages=下载冒险之旅里使用的衍生物与图标
|
||||||
lblDownloadAchievementImages=下载成就图片,让你的奖杯更引人注目。
|
lblDownloadAchievementImages=下载成就图片,让你的奖杯更引人注目。
|
||||||
lblDownloadPrices=下载牌张商店最新的价格表
|
lblDownloadPrices=下载卡牌商店最新的价格表
|
||||||
lblYourVersionOfJavaIsTooOld=你的Java版本太旧无法开始下载内容
|
lblYourVersionOfJavaIsTooOld=你的Java版本太旧无法开始下载内容
|
||||||
lblPleaseUpdateToTheLatestVersionOfJava=请更新到最新版本的JRE
|
lblPleaseUpdateToTheLatestVersionOfJava=请更新到最新版本的JRE
|
||||||
lblYoureRunning=你在运行
|
lblYoureRunning=你在运行
|
||||||
lblYouNeedAtLeastJavaVersion=您的JRE版本至少需要为1.8.0_101。
|
lblYouNeedAtLeastJavaVersion=你的JRE版本至少需要为1.8.0_101。
|
||||||
lblImportPictures=从本地目录导入数据
|
lblImportPictures=从本地目录导入数据
|
||||||
lblReportBug=什么东西坏了?
|
lblReportBug=什么东西坏了?
|
||||||
lblHowToPlay=游戏规则。
|
lblHowToPlay=游戏规则。
|
||||||
@@ -230,7 +230,7 @@ lblGameSettings=游戏设置
|
|||||||
#VLobby.java
|
#VLobby.java
|
||||||
lblHeaderConstructedMode=游戏模式:构筑
|
lblHeaderConstructedMode=游戏模式:构筑
|
||||||
lblGetNewRandomName=获取一个随机名称
|
lblGetNewRandomName=获取一个随机名称
|
||||||
lbltypeofName=您想要生成什么类型的名称?
|
lbltypeofName=你想要生成什么类型的名称?
|
||||||
lblconfirmName=你想使用名称%s,还是想重试
|
lblconfirmName=你想使用名称%s,还是想重试
|
||||||
lblUseThisName=使用这个名称
|
lblUseThisName=使用这个名称
|
||||||
lblTryAgain=再试一次
|
lblTryAgain=再试一次
|
||||||
@@ -299,7 +299,7 @@ lblAlphaStrike=先攻
|
|||||||
lblEndTurn=结束回合
|
lblEndTurn=结束回合
|
||||||
lblTargetingArcs=瞄准弧
|
lblTargetingArcs=瞄准弧
|
||||||
lblOff=关闭
|
lblOff=关闭
|
||||||
lblCardMouseOver=牌张悬停
|
lblCardMouseOver=卡牌悬停
|
||||||
lblAlwaysOn=总是打开
|
lblAlwaysOn=总是打开
|
||||||
lblAutoYields=自动让过
|
lblAutoYields=自动让过
|
||||||
lblDeckList=套牌列表
|
lblDeckList=套牌列表
|
||||||
@@ -357,7 +357,7 @@ lblDraftText3=然后对抗一个或多个人工智能对手
|
|||||||
lblNewBoosterDraftGame=新的补充包轮抓
|
lblNewBoosterDraftGame=新的补充包轮抓
|
||||||
lblDraftDecks=轮抓套牌
|
lblDraftDecks=轮抓套牌
|
||||||
#CSubmenuDraft.java
|
#CSubmenuDraft.java
|
||||||
lblNoDeckSelected=没有为人类选择套牌。\n(您可能要建立一个新的套牌)
|
lblNoDeckSelected=没有为人类选择套牌。\n(你可能要建立一个新的套牌)
|
||||||
lblNoDeck=没有套牌
|
lblNoDeck=没有套牌
|
||||||
lblChooseDraftFormat=选择轮抓模式
|
lblChooseDraftFormat=选择轮抓模式
|
||||||
#VSubmenuSealed.java
|
#VSubmenuSealed.java
|
||||||
@@ -365,7 +365,7 @@ lblSealedDeck=现开
|
|||||||
lblSealedDecks=现开套牌
|
lblSealedDecks=现开套牌
|
||||||
lblHeaderSealed=游戏模式:现开
|
lblHeaderSealed=游戏模式:现开
|
||||||
lblSealedText1=构建或选择一个套牌
|
lblSealedText1=构建或选择一个套牌
|
||||||
lblSealedText2=在现开模式中,您可以从补充包里(最多10个)构建一套牌
|
lblSealedText2=在现开模式中,你可以从补充包里(最多10个)构建一套牌
|
||||||
lblSealedText3=从你得到的牌中组一套牌。人工智能也会这样做
|
lblSealedText3=从你得到的牌中组一套牌。人工智能也会这样做
|
||||||
lblSealedText4=然后对抗一个或多个人工智能对手
|
lblSealedText4=然后对抗一个或多个人工智能对手
|
||||||
btnBuildNewSealedDeck=构建新的现开套牌
|
btnBuildNewSealedDeck=构建新的现开套牌
|
||||||
@@ -392,7 +392,7 @@ lblGauntlet=决斗
|
|||||||
lblTournament=锦标赛
|
lblTournament=锦标赛
|
||||||
lblQuest=冒险
|
lblQuest=冒险
|
||||||
lblQuestDraft=冒险轮抓
|
lblQuestDraft=冒险轮抓
|
||||||
lblPlanarConquest=时空竞逐征服
|
lblPlanarConquest=时空征服
|
||||||
lblPuzzle=谜题
|
lblPuzzle=谜题
|
||||||
lblPuzzleDesc=从给定的游戏状态解谜
|
lblPuzzleDesc=从给定的游戏状态解谜
|
||||||
lblDeckManager=套牌管理
|
lblDeckManager=套牌管理
|
||||||
@@ -425,7 +425,7 @@ lblNextChallengeNotYet=没有确定下次胜利后的挑战
|
|||||||
btnUnlockSets=解锁系列
|
btnUnlockSets=解锁系列
|
||||||
btnTravel=时空旅行
|
btnTravel=时空旅行
|
||||||
btnBazaar=珍宝集市
|
btnBazaar=珍宝集市
|
||||||
btnSpellShop=牌张商店
|
btnSpellShop=卡牌商店
|
||||||
cbSummonPlant=召唤植物
|
cbSummonPlant=召唤植物
|
||||||
cbLaunchZeppelin=启动飞艇
|
cbLaunchZeppelin=启动飞艇
|
||||||
#VSubmenuQuest.java
|
#VSubmenuQuest.java
|
||||||
@@ -448,7 +448,7 @@ lblCustomdeck=自定义套牌
|
|||||||
lblDefineCustomFormat=定义自定义赛制
|
lblDefineCustomFormat=定义自定义赛制
|
||||||
lblSelectFormat=选择赛制
|
lblSelectFormat=选择赛制
|
||||||
lblStartWithAllCards=从所选系列的所有牌开始
|
lblStartWithAllCards=从所选系列的所有牌开始
|
||||||
lblAllowDuplicateCards=允许重复的牌张
|
lblAllowDuplicateCards=允许重复的卡牌
|
||||||
lblStartingPoolDistribution=初始牌池分配
|
lblStartingPoolDistribution=初始牌池分配
|
||||||
lblChooseDistribution=选择分配
|
lblChooseDistribution=选择分配
|
||||||
lblPrizedCards=奖励卡
|
lblPrizedCards=奖励卡
|
||||||
@@ -505,9 +505,9 @@ lblColors=颜色
|
|||||||
lblnoSettings=没有可用于此选择的设置
|
lblnoSettings=没有可用于此选择的设置
|
||||||
lblDistribution=分配
|
lblDistribution=分配
|
||||||
lblHoverforDescription=将鼠标悬停在每个选项上以获得更详细的说明
|
lblHoverforDescription=将鼠标悬停在每个选项上以获得更详细的说明
|
||||||
lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的牌张。
|
lblradBalanced=“均衡”将在每种选定的颜色中提供数量均衡的卡牌。
|
||||||
lblradRandom=“随机”将随机分配牌张和颜色。
|
lblradRandom=“随机”将随机分配卡牌和颜色。
|
||||||
lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机牌张。
|
lblradSurpriseMe=随机挑选颜色并提供数量均衡的随机卡牌。
|
||||||
lblradBoosters=忽略所有颜色设置,从指定数量的补充包中生成牌池
|
lblradBoosters=忽略所有颜色设置,从指定数量的补充包中生成牌池
|
||||||
lblcbxArtifacts=选择后无论选择的颜色如何,神器都包涵在牌池中,这模拟了旧牌池的行为。
|
lblcbxArtifacts=选择后无论选择的颜色如何,神器都包涵在牌池中,这模拟了旧牌池的行为。
|
||||||
#VSubmenuChallenges.java
|
#VSubmenuChallenges.java
|
||||||
@@ -620,7 +620,7 @@ lblBuildAndSelectaDeck=构建,然后在“冒险套牌”子菜单中选择一
|
|||||||
lblCurrentDeck=你现在的套牌是%n
|
lblCurrentDeck=你现在的套牌是%n
|
||||||
PleaseCreateAQuestBefore=请在%n之前创建套牌。
|
PleaseCreateAQuestBefore=请在%n之前创建套牌。
|
||||||
lblNoQuest=没有探索
|
lblNoQuest=没有探索
|
||||||
lblVisitTheSpellShop=参观牌张商店
|
lblVisitTheSpellShop=进入卡牌商店
|
||||||
lblVisitTheBazaar=参观珍宝集市
|
lblVisitTheBazaar=参观珍宝集市
|
||||||
lblUnlockEditions=解锁新的时空
|
lblUnlockEditions=解锁新的时空
|
||||||
lblUnlocked=你已经成功解锁%n
|
lblUnlocked=你已经成功解锁%n
|
||||||
@@ -628,7 +628,7 @@ titleUnlocked=%n解锁!
|
|||||||
lblStartADuel=开始决斗!
|
lblStartADuel=开始决斗!
|
||||||
lblSelectAQuestDeck=请选择一个冒险套牌。
|
lblSelectAQuestDeck=请选择一个冒险套牌。
|
||||||
lblInvalidDeck=错误的套牌
|
lblInvalidDeck=错误的套牌
|
||||||
lblInvalidDeckDesc=您的套牌%n请编辑或者选择其他套牌
|
lblInvalidDeckDesc=你的套牌%n请编辑或者选择其他套牌
|
||||||
#VSubmenuQuestPrefs.java
|
#VSubmenuQuestPrefs.java
|
||||||
lblQuestPreferences=冒险偏好
|
lblQuestPreferences=冒险偏好
|
||||||
lblRewardsError=奖励错误
|
lblRewardsError=奖励错误
|
||||||
@@ -672,7 +672,7 @@ lblStartingCredits=初始积分
|
|||||||
lblWinsforNewChallenge=新挑战所需的胜利
|
lblWinsforNewChallenge=新挑战所需的胜利
|
||||||
lblStartingSnowLands=初始雪境地
|
lblStartingSnowLands=初始雪境地
|
||||||
lblColorBias=颜色偏差(1-100%)
|
lblColorBias=颜色偏差(1-100%)
|
||||||
ttColorBias=初始卡池中您选择的颜色的百分比
|
ttColorBias=初始卡池中的颜色百分比
|
||||||
lblPenaltyforLoss=失败补偿
|
lblPenaltyforLoss=失败补偿
|
||||||
lblMoreDuelChoices=更多决斗选择
|
lblMoreDuelChoices=更多决斗选择
|
||||||
lblCommon=铁
|
lblCommon=铁
|
||||||
@@ -695,11 +695,11 @@ lblCardSalePercentageCap=出售牌的系数上限
|
|||||||
lblCardSalePriceCap=出售牌的价格上限
|
lblCardSalePriceCap=出售牌的价格上限
|
||||||
lblWinstoUncapSalePrice=胜利解锁价格系数
|
lblWinstoUncapSalePrice=胜利解锁价格系数
|
||||||
lblPlaysetSize=玩家收藏大小
|
lblPlaysetSize=玩家收藏大小
|
||||||
ttPlaysetSize=在售卖牌张时要保留的牌张数量
|
ttPlaysetSize=在售卖卡牌时要保留的卡牌数量
|
||||||
lblPlaysetSizeBasicLand=玩家收藏大小:基本地
|
lblPlaysetSizeBasicLand=玩家收藏大小:基本地
|
||||||
ttPlaysetSizeBasicLand=在售卖牌张时要保留的基本地数量
|
ttPlaysetSizeBasicLand=在售卖卡牌时要保留的基本地数量
|
||||||
lblPlaysetSizeAnyNumber=玩家收藏大小:任意数量
|
lblPlaysetSizeAnyNumber=玩家收藏大小:任意数量
|
||||||
ttPlaysetSizeAnyNumber=售卖牌张时不保留牌张
|
ttPlaysetSizeAnyNumber=售卖卡牌时不保留
|
||||||
lblItemLevelRestriction=物品等级限制
|
lblItemLevelRestriction=物品等级限制
|
||||||
lblFoilfilterAlwaysOn=闪卡过滤器始终开启
|
lblFoilfilterAlwaysOn=闪卡过滤器始终开启
|
||||||
lblRatingsfilterAlwaysOn=评级过滤器始终开启。
|
lblRatingsfilterAlwaysOn=评级过滤器始终开启。
|
||||||
@@ -767,7 +767,7 @@ lblRemove4ofcard=移除4张牌
|
|||||||
ttRemove4ofcard=最多可以将4张所选牌从当前套牌移除
|
ttRemove4ofcard=最多可以将4张所选牌从当前套牌移除
|
||||||
lblAddBasicLands=添加基本地
|
lblAddBasicLands=添加基本地
|
||||||
ttAddBasicLands=添加基本地到套牌
|
ttAddBasicLands=添加基本地到套牌
|
||||||
lblCardCatalog=牌张目录
|
lblCardCatalog=卡牌目录
|
||||||
lblJumptoprevioustable=跳转到上一个表格
|
lblJumptoprevioustable=跳转到上一个表格
|
||||||
lblJumptopnexttable=跳转到下一个表格
|
lblJumptopnexttable=跳转到下一个表格
|
||||||
lblJumptotextfilter=跳转到文本筛选器
|
lblJumptotextfilter=跳转到文本筛选器
|
||||||
@@ -904,8 +904,8 @@ lblAutomaticBugReports=自动报告BUG
|
|||||||
lblBattlefieldTextureFiltering=战场纹理过滤
|
lblBattlefieldTextureFiltering=战场纹理过滤
|
||||||
lblCompactListItems=紧凑的项目列表
|
lblCompactListItems=紧凑的项目列表
|
||||||
lblCompactTabs=紧凑标签
|
lblCompactTabs=紧凑标签
|
||||||
lblCardOverlays=牌张叠加层
|
lblCardOverlays=卡牌叠加层
|
||||||
lblDisableCardEffect=禁用牌张“效果”图
|
lblDisableCardEffect=禁用卡牌“效果”图
|
||||||
lblDynamicBackgroundPlanechase=动态时空背景
|
lblDynamicBackgroundPlanechase=动态时空背景
|
||||||
lblGameplayOptions=游戏选项
|
lblGameplayOptions=游戏选项
|
||||||
lblGeneralSettings=常规设置
|
lblGeneralSettings=常规设置
|
||||||
@@ -915,14 +915,14 @@ lblLater=以后
|
|||||||
lblMinimizeScreenLock=锁屏时最小化
|
lblMinimizeScreenLock=锁屏时最小化
|
||||||
lblOrderGraveyard=坟场顺序
|
lblOrderGraveyard=坟场顺序
|
||||||
lblRestartForge=重启Forge
|
lblRestartForge=重启Forge
|
||||||
lblRestartForgeDescription=您必须重启Forge才能使此更改生效
|
lblRestartForgeDescription=你必须重启Forge才能使此更改生效
|
||||||
lblRotateZoomPlanesPhenomena=旋转缩放时空/异象图
|
lblRotateZoomPlanesPhenomena=旋转缩放时空/异象图
|
||||||
lblRotateZoomSplit=旋转缩放连体牌
|
lblRotateZoomSplit=旋转缩放连体牌
|
||||||
lblShowAbilityIconsOverlays=显示异能图标
|
lblShowAbilityIconsOverlays=显示异能图标
|
||||||
lblShowCardIDOverlays=显示牌张ID叠加层
|
lblShowCardIDOverlays=显示卡牌ID叠加层
|
||||||
lblShowCardManaCostOverlays=显示牌张法术力费用叠加层
|
lblShowCardManaCostOverlays=显示卡牌法术力费用叠加层
|
||||||
lblShowCardNameOverlays=显示牌张名称叠加层
|
lblShowCardNameOverlays=显示卡牌名称叠加层
|
||||||
lblShowCardOverlays=显示牌张叠加层
|
lblShowCardOverlays=显示卡牌叠加层
|
||||||
lblShowCardPTOverlays=显示攻击/防御叠加层
|
lblShowCardPTOverlays=显示攻击/防御叠加层
|
||||||
lblShowMatchBackground=显示比赛背景
|
lblShowMatchBackground=显示比赛背景
|
||||||
lblVibrateAfterLongPress=长按后震动
|
lblVibrateAfterLongPress=长按后震动
|
||||||
@@ -930,26 +930,32 @@ lblVibrateWhenLosingLife=失去生命时震动
|
|||||||
lblVibrationOptions=振动选项
|
lblVibrationOptions=振动选项
|
||||||
nlAutomaticBugReports=在没有提示的情况下自动向开发人员报告错误
|
nlAutomaticBugReports=在没有提示的情况下自动向开发人员报告错误
|
||||||
nlBattlefieldTextureFiltering=在战场上过滤闪卡特效,使其在大屏幕上不像素化(需要重启,可能会降低性能)。
|
nlBattlefieldTextureFiltering=在战场上过滤闪卡特效,使其在大屏幕上不像素化(需要重启,可能会降低性能)。
|
||||||
nlCompactListItems=默认情况下,在所有视图列表中只显示牌张和套牌的单行文本。
|
nlCompactListItems=默认情况下,在所有视图列表中只显示卡牌和套牌的单行文本。
|
||||||
nlCompactTabs=在标签页屏幕顶部显示较小的标签(例如此屏幕)。
|
nlCompactTabs=在标签页屏幕顶部显示较小的标签(例如此屏幕)。
|
||||||
nlDisableCardEffect=禁用“效果”卡的缩放图片。
|
nlDisableCardEffect=禁用“效果”卡的缩放图片。
|
||||||
nlDynamicBackgroundPlanechase=使用当前时空图片作为背景(时空图片必须位于cache/pics/planechase文件夹中)。
|
nlDynamicBackgroundPlanechase=使用当前时空图片作为背景(时空图片必须位于cache/pics/planechase文件夹中)。
|
||||||
nlHotSeatMode=当用两个人类玩家开始游戏的时候,用单个提示控制两个玩家。
|
nlHotSeatMode=当用两个人类玩家开始游戏的时候,用单个提示控制两个玩家。
|
||||||
nlLandscapeMode=使用横向(水平)而不是纵向(垂直)。
|
nlLandscapeMode=使用横向(水平)而不是纵向(垂直)。
|
||||||
nlMinimizeScreenLock=锁定屏幕时最小化Forge(锁屏以后出现图形故障使用)。
|
nlMinimizeScreenLock=锁定屏幕时最小化Forge(锁屏以后出现图形故障使用)。
|
||||||
nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关牌张)。
|
nlOrderGraveyard=确定何时让玩家确定同时进入坟场的牌的顺序(绝不/总是/只对有关卡牌)。
|
||||||
nlRotateZoomPlanesPhenomena=旋转缩放时空或异象图片。
|
nlRotateZoomPlanesPhenomena=旋转缩放时空或异象图片。
|
||||||
nlRotateZoomSplit=旋转缩放连体牌图片。
|
nlRotateZoomSplit=旋转缩放连体牌图片。
|
||||||
nlShowAbilityIconsOverlays=在牌张上显示异能图标,否则他们被隐藏。
|
nlShowAbilityIconsOverlays=在卡牌上显示异能图标,否则他们被隐藏。
|
||||||
nlShowCardIDOverlays=显示牌张的ID叠加层,否则他们被隐藏。
|
nlShowCardIDOverlays=显示卡牌的ID叠加层,否则他们被隐藏。
|
||||||
nlShowCardManaCostOverlays=显示牌张的法术力费用叠加层,否则他们被隐藏。
|
nlShowCardManaCostOverlays=显示卡牌的法术力费用叠加层,否则他们被隐藏。
|
||||||
nlShowCardNameOverlays=显示牌张的名称费用叠加层,否则他们被隐藏。
|
nlShowCardNameOverlays=显示卡牌的名称费用叠加层,否则他们被隐藏。
|
||||||
nlShowCardOverlays=显示牌张名称,法术力费用,力量/防御和ID叠加层,否则他们被隐藏。
|
nlShowCardOverlays=显示卡牌名称,法术力费用,力量/防御和ID叠加层,否则他们被隐藏。
|
||||||
nlShowCardPTOverlays=显示力量/防御/忠诚叠加层,否则他们被隐藏。
|
nlShowCardPTOverlays=显示力量/防御/忠诚叠加层,否则他们被隐藏。
|
||||||
nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。
|
nlShowMatchBackground=在战场显示背景图片,否则显示背景纹理。
|
||||||
nlTheme=设置显示的组件使用的外观主题。
|
nlTheme=设置显示的组件使用的外观主题。
|
||||||
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放牌张图片。
|
nlVibrateAfterLongPress=启用长按触发震动,例如长按缩放卡牌图片。
|
||||||
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
|
nlVibrateWhenLosingLife=启用当玩家在游戏中失去生命或收到伤害时震动。
|
||||||
|
lblEnableRoundBorder=启用圆角边框掩码
|
||||||
|
nlEnableRoundBorder=启用后,卡牌边框会变成圆角(带有完整边框的卡牌图片效果最好)。
|
||||||
|
lblPreloadExtendedArtCards=预加载拉伸卡图
|
||||||
|
nlPreloadExtendedArtCards=启用后,拉伸卡图将在启动时加载到缓存。
|
||||||
|
lblShowFPSDisplay=显示当前的FPS值
|
||||||
|
nlShowFPSDisplay=启用后,将在画面左上角显示当前Forge的FPS(实验性特性)。
|
||||||
#MatchScreen.java
|
#MatchScreen.java
|
||||||
lblPlayers=玩家列表
|
lblPlayers=玩家列表
|
||||||
lblLog=日志
|
lblLog=日志
|
||||||
@@ -973,7 +979,7 @@ lblChangePreferredArt=改变首选卡图
|
|||||||
lblSelectPreferredArt=选择首选的卡图版本
|
lblSelectPreferredArt=选择首选的卡图版本
|
||||||
lblTo=到
|
lblTo=到
|
||||||
lblAvatar=头像
|
lblAvatar=头像
|
||||||
lblCards=牌张
|
lblCards=卡牌
|
||||||
lblPlanes=时空
|
lblPlanes=时空
|
||||||
lblSchemes=阴谋
|
lblSchemes=阴谋
|
||||||
lblToMainDeck=到主牌
|
lblToMainDeck=到主牌
|
||||||
@@ -984,7 +990,7 @@ lblCommanders=指挥官
|
|||||||
lblOathbreakers=破誓者
|
lblOathbreakers=破誓者
|
||||||
#Forge.java
|
#Forge.java
|
||||||
lblLoadingFonts=加载字体中
|
lblLoadingFonts=加载字体中
|
||||||
lblLoadingCardTranslations=加载牌张翻译中
|
lblLoadingCardTranslations=加载卡牌翻译中
|
||||||
lblFinishingStartup=完成启动
|
lblFinishingStartup=完成启动
|
||||||
#LobbyScreen.java
|
#LobbyScreen.java
|
||||||
lblMore=更多
|
lblMore=更多
|
||||||
@@ -1038,11 +1044,11 @@ lblNoPlayerPriorityNoDeckListViewed=现在玩家没有优先权,因此无法
|
|||||||
#FilesPage.java
|
#FilesPage.java
|
||||||
lblFiles=文件
|
lblFiles=文件
|
||||||
lblStorageLocations=储存位置
|
lblStorageLocations=储存位置
|
||||||
lblCardPicsLocation=牌张图片位置
|
lblCardPicsLocation=卡牌图片位置
|
||||||
lblDecksLocation=套牌位置
|
lblDecksLocation=套牌位置
|
||||||
lblDataLocation=数据位置(例如 设置和探索模式)
|
lblDataLocation=数据位置(例如 设置和探索模式)
|
||||||
lblImageCacheLocation=图片缓存位置
|
lblImageCacheLocation=图片缓存位置
|
||||||
lblRestartForgeMoveFilesNewLocation=您必须重启Forge才能使此更改生效。执行此操作之前,请确保将所有必要的文件移动到新的位置。
|
lblRestartForgeMoveFilesNewLocation=你必须重启Forge才能使此更改生效。执行此操作之前,请确保将所有必要的文件移动到新的位置。
|
||||||
lblRestartRequired=需要重启
|
lblRestartRequired=需要重启
|
||||||
lblSelect=选择%s
|
lblSelect=选择%s
|
||||||
#AddBasicLandsDialog.java
|
#AddBasicLandsDialog.java
|
||||||
@@ -1050,17 +1056,17 @@ lblLandSet=地牌的系列
|
|||||||
lblAddBasicLandsAutoSuggest=添加基本地到%s\n(双击自动添加)
|
lblAddBasicLandsAutoSuggest=添加基本地到%s\n(双击自动添加)
|
||||||
lblAssortedArt=各种画
|
lblAssortedArt=各种画
|
||||||
lblCardArt=卡图%d
|
lblCardArt=卡图%d
|
||||||
lblNonLandCount=%d张非地
|
lblNonLandCount=%d张非地牌
|
||||||
lblOldLandCount=%d张地
|
lblOldLandCount=%d张地牌
|
||||||
lblNewLandCount=添加%d张地
|
lblNewLandCount=添加%d张地牌
|
||||||
lblNewTotalCount=%d张牌
|
lblNewTotalCount=%d张牌
|
||||||
#FDeckImportDialog.java
|
#FDeckImportDialog.java
|
||||||
lblImportLatestVersionCard=导入牌张的最新版本
|
lblImportLatestVersionCard=导入卡牌的最新版本
|
||||||
lblUseOnlySetsReleasedBefore=只用之前上市系列的版本:
|
lblUseOnlySetsReleasedBefore=只用之前上市系列的版本:
|
||||||
lblUseOnlyCoreAndExpansionSets=只使用核心系列和拓展系列
|
lblUseOnlyCoreAndExpansionSets=只使用核心系列和拓展系列
|
||||||
lblFollowingCardsCannotBeImported=由于拼写错误,系列限制或forge尚未实现,以下牌张没有被导入:
|
lblFollowingCardsCannotBeImported=由于拼写错误,系列限制或forge尚未实现,以下卡牌没有被导入:
|
||||||
lblImportRemainingCards=导入剩余的卡?
|
lblImportRemainingCards=导入剩余的卡?
|
||||||
lblNoKnownCardsOnClipboard=在剪切板找不到已知的牌张。\n\n将套牌列表复制到剪切板,然后重新打开此对话框。
|
lblNoKnownCardsOnClipboard=在剪切板找不到已知的卡牌。\n\n将套牌列表复制到剪切板,然后重新打开此对话框。
|
||||||
#FDeckViewer.java
|
#FDeckViewer.java
|
||||||
lblDeckListCopiedClipboard=套牌列表'%s'已经复制到剪切板
|
lblDeckListCopiedClipboard=套牌列表'%s'已经复制到剪切板
|
||||||
#FSideboardDialog.java
|
#FSideboardDialog.java
|
||||||
@@ -1092,11 +1098,11 @@ lblWouldYouLiketoPlayorDraw=你想先手还是后手?
|
|||||||
lblWhoWouldYouLiketoStartthisGame=你想谁先开始游戏?(单击头像)
|
lblWhoWouldYouLiketoStartthisGame=你想谁先开始游戏?(单击头像)
|
||||||
lblPlay=先手
|
lblPlay=先手
|
||||||
lblDraw=后手
|
lblDraw=后手
|
||||||
lblTooFewCardsMainDeck=主牌中牌张数过少(最少为%s),请重新修改套牌。
|
lblTooFewCardsMainDeck=主牌中卡牌数过少(最少为%s),请重新修改套牌。
|
||||||
lblTooManyCardsSideboard=备牌中牌张数过多(最多为%s),请重新修改套牌。
|
lblTooManyCardsSideboard=备牌中卡牌数过多(最多为%s),请重新修改套牌。
|
||||||
lblAssignCombatDamageWerentBlocked=是否要像没有被阻挡一样分配战斗伤害?
|
lblAssignCombatDamageWerentBlocked=是否要像没有被阻挡一样分配战斗伤害?
|
||||||
lblChosenCards=选择牌
|
lblChosenCards=选择牌
|
||||||
lblAttacker=攻击者
|
lblAttacker=进攻者
|
||||||
lblTriggeredby=触发者
|
lblTriggeredby=触发者
|
||||||
lblChooseWhichCardstoReveal=选择要展示的牌
|
lblChooseWhichCardstoReveal=选择要展示的牌
|
||||||
lblChooseCardsActivateOpeningHandandOrder=选择要展示的手牌和顺序
|
lblChooseCardsActivateOpeningHandandOrder=选择要展示的手牌和顺序
|
||||||
@@ -1110,16 +1116,16 @@ lblPleaseDefineanActionSequenceFirst=请先定义一个动作序列。
|
|||||||
lblRememberActionSequence=记住动作序列
|
lblRememberActionSequence=记住动作序列
|
||||||
lblYouMustHavePrioritytoUseThisFeature=你必须有使用此功能的优先权。
|
lblYouMustHavePrioritytoUseThisFeature=你必须有使用此功能的优先权。
|
||||||
lblNameTheCard=命名牌
|
lblNameTheCard=命名牌
|
||||||
lblWhichPlayerShouldRoll=那个玩家掷骰子?
|
lblWhichPlayerShouldRoll=哪位玩家掷骰子?
|
||||||
lblChooseResult=选择结果
|
lblChooseResult=选择结果
|
||||||
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=选择的牌不是永久物,也不能在战场单独存在。\n如果你想释放费永久物咒语或者你想释放永久物咒语并将之放于堆叠上,请按"Cast Spell/Play Land"按钮。
|
lblChosenCardNotPermanentorCantExistIndependentlyontheBattleground=选择的牌不是永久物,也不能在战场单独存在。\n如果你想释放费永久物咒语或者你想释放永久物咒语并将之放于堆叠上,请按"Cast Spell/Play Land"按钮。
|
||||||
lblError=错误
|
lblError=错误
|
||||||
lblWinGame=赢得这局游戏
|
lblWinGame=赢得这局游戏
|
||||||
lblSetLifetoWhat=设定生命值为多少?
|
lblSetLifetoWhat=设定生命值为多少?
|
||||||
lblSetLifeforWhichPlayer=设定哪个牌手的生命值?
|
lblSetLifeforWhichPlayer=设定哪位牌手的生命值?
|
||||||
lblChoosePermanentstoTap=选择要横置的永久物
|
lblChoosePermanentstoTap=选择要横置的永久物
|
||||||
lblChoosePermanentstoUntap=选择要重置的永久物
|
lblChoosePermanentstoUntap=选择要重置的永久物
|
||||||
lblWhichTypeofCounter=那种指示物?
|
lblWhichTypeofCounter=哪种指示物?
|
||||||
lblHowManyCounters=多少指示物?
|
lblHowManyCounters=多少指示物?
|
||||||
lblRemoveCountersFromWhichCard=从哪张牌移除指示物?
|
lblRemoveCountersFromWhichCard=从哪张牌移除指示物?
|
||||||
lblAddCountersToWhichCard=添加指示物到哪张牌?
|
lblAddCountersToWhichCard=添加指示物到哪张牌?
|
||||||
@@ -1127,23 +1133,23 @@ lblChooseaCard=选择一张牌
|
|||||||
lblNoPlayerPriorityDeckCantBeTutoredFrom=目前没有玩家拥有优先权,因此无法从其套牌导师。
|
lblNoPlayerPriorityDeckCantBeTutoredFrom=目前没有玩家拥有优先权,因此无法从其套牌导师。
|
||||||
lblNoPlayerPriorityGameStateCannotBeSetup=目前没有玩家拥有优先权,因此无法设置游戏状态。
|
lblNoPlayerPriorityGameStateCannotBeSetup=目前没有玩家拥有优先权,因此无法设置游戏状态。
|
||||||
lblErrorLoadingBattleSetupFile=加载战场设置文件出错!
|
lblErrorLoadingBattleSetupFile=加载战场设置文件出错!
|
||||||
lblSelectCardstoAddtoYourDeck=选择要添加到套牌的牌张。
|
lblSelectCardstoAddtoYourDeck=选择要添加到套牌的卡牌。
|
||||||
lblAddTheseToMyDeck=添加这些到我的套牌
|
lblAddTheseToMyDeck=添加这些到我的套牌
|
||||||
lblChooseaPile=选择一堆
|
lblChooseaPile=选择一堆
|
||||||
lblSelectOrderForSimultaneousAbilities=选择同时触发的异能的结算顺序
|
lblSelectOrderForSimultaneousAbilities=选择同时触发的异能的结算顺序
|
||||||
lblReorderSimultaneousAbilities=重新对同时触发异能的结算顺序进行排序
|
lblReorderSimultaneousAbilities=重新对同时触发异能的结算顺序进行排序
|
||||||
lblResolveFirst=先结算
|
lblResolveFirst=先结算
|
||||||
lblMoveCardstoToporBbottomofLibrary=将牌张移动到牌库顶或底
|
lblMoveCardstoToporBbottomofLibrary=将卡牌移动到牌库顶或底
|
||||||
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=选择要放到牌库底的牌张
|
lblSelectCardsToBeOutOnTheBottomOfYourLibrary=选择要放到牌库底的卡牌
|
||||||
lblCardsToPutOnTheBottom=放到底部的牌张
|
lblCardsToPutOnTheBottom=放到底部的卡牌
|
||||||
lblArrangeCardsToBePutOnTopOfYourLibrary=为放于牌库顶的牌张排序
|
lblArrangeCardsToBePutOnTopOfYourLibrary=为放于牌库顶的卡牌排序
|
||||||
lblTopOfLibrary=牌库顶
|
lblTopOfLibrary=牌库顶
|
||||||
lblSelectCardsToBePutIntoTheGraveyard=选择要放于坟场的牌张
|
lblSelectCardsToBePutIntoTheGraveyard=选择要放于坟场的卡牌
|
||||||
lblCardsToPutInTheGraveyard=放于坟场的牌张
|
lblCardsToPutInTheGraveyard=放于坟场的卡牌
|
||||||
#AbstractGuiGame.java
|
#AbstractGuiGame.java
|
||||||
lblConcedeCurrentGame=这将让出这局游戏,而你将输掉。\n\n一定要让出吗?
|
lblConcedeCurrentGame=这局游戏认输。\n\n确认吗?
|
||||||
lblConcedeTitle=让出这局游戏?
|
lblConcedeTitle=这局游戏认输?
|
||||||
lblConcede=让出
|
lblConcede=认输
|
||||||
lblCloseGameSpectator=这将关闭游戏,你将无法继续观看它。\n\n一定要关闭吗?
|
lblCloseGameSpectator=这将关闭游戏,你将无法继续观看它。\n\n一定要关闭吗?
|
||||||
lblCloseGame=关闭游戏?
|
lblCloseGame=关闭游戏?
|
||||||
lblWaitingForOpponent=等待对手中
|
lblWaitingForOpponent=等待对手中
|
||||||
@@ -1153,16 +1159,16 @@ lblEnterNumberBetweenMinAndMax=输入介于%min到%max之间的数字:
|
|||||||
lblEnterNumberGreaterThanOrEqualsToMin=输入一个大于等于%min的数字:
|
lblEnterNumberGreaterThanOrEqualsToMin=输入一个大于等于%min的数字:
|
||||||
lblEnterNumberLessThanOrEqualsToMax=输入一个小于等于%max的数字:
|
lblEnterNumberLessThanOrEqualsToMax=输入一个小于等于%max的数字:
|
||||||
#PlayerOutcome.java
|
#PlayerOutcome.java
|
||||||
lblWonBecauseAllOpponentsHaveLost=由于所有对手都输了所以你赢了
|
lblWonBecauseAllOpponentsHaveLost=因所有对手都输了而赢得胜利
|
||||||
lblWonDueToEffectOf=受'%s'的影响而获胜了
|
lblWonDueToEffectOf=受'%s'的影响赢得胜利
|
||||||
lblConceded=已经让出
|
lblConceded=已经认输
|
||||||
lblLostTryingToDrawCardsFromEmptyLibrary=尝试从为空的牌库中抓牌而输
|
lblLostTryingToDrawCardsFromEmptyLibrary=尝试从为空的牌库中抓牌而输
|
||||||
lblLostBecauseLifeTotalReachedZero=生命值为0而输
|
lblLostBecauseLifeTotalReachedZero=生命值为0而输
|
||||||
lblLostBecauseOfObtainingTenPoisonCounters=中毒指示物达到10而输
|
lblLostBecauseOfObtainingTenPoisonCounters=中毒指示物达到10而输
|
||||||
lblLostBecauseAnOpponentHasWonBySpell=因对手用咒语'%s'获胜而输
|
lblLostBecauseAnOpponentHasWonBySpell=因对手用咒语'%s'获胜而输
|
||||||
lblLostDueToEffectOfSpell=受咒语'%s'的影响而输
|
lblLostDueToEffectOfSpell=受咒语'%s'的影响而输
|
||||||
lblLostDueToAccumulationOf21DamageFromGenerals=受到大于21点主将伤害而输
|
lblLostDueToAccumulationOf21DamageFromGenerals=受到大于21点主将伤害而输
|
||||||
lblAcceptedThatTheGameIsADraw=已经接受此局游戏平局
|
lblAcceptedThatTheGameIsADraw=此局游戏平局
|
||||||
lblLostForUnknownReasonBug=由于未知错误而输(这是一个错误)
|
lblLostForUnknownReasonBug=由于未知错误而输(这是一个错误)
|
||||||
#ViewWinLose.java
|
#ViewWinLose.java
|
||||||
btnNextGame=下一局游戏
|
btnNextGame=下一局游戏
|
||||||
@@ -1172,3 +1178,27 @@ lblItsADraw=平局!
|
|||||||
lblTeamWon=队伍%s胜利了!
|
lblTeamWon=队伍%s胜利了!
|
||||||
lblWinnerWon=%s胜利了!
|
lblWinnerWon=%s胜利了!
|
||||||
lblGameLog=游戏日志
|
lblGameLog=游戏日志
|
||||||
|
#NewDraftScreen.java
|
||||||
|
lblLoadingNewDraft=加载新的轮抽中
|
||||||
|
#LoadDraftScreen.java
|
||||||
|
lblDoubleTapToEditDeck=双击以编辑套牌(长按可以查看)
|
||||||
|
lblMode=模式:
|
||||||
|
lblYouMustSelectExistingDeck=你必须选择一个已有的卡组或者从新的补充包轮抽游戏中构筑一个卡组。
|
||||||
|
lblWhichOpponentWouldYouLikeToFace=你想面对哪个对手?
|
||||||
|
lblSingleMatch=单场比赛
|
||||||
|
#NewGauntletScreen.java
|
||||||
|
lblGauntletText1=在决斗模式下,你可以选择一套牌与多个对手进行对战。
|
||||||
|
lblGauntletText2=设置你想面对的对手数量以及他们所使用的套牌类型或者套牌。
|
||||||
|
lblGauntletText3=然后,尝试击败所有人工智能对手而不输掉一场比赛。
|
||||||
|
lblSelectGauntletType=选择一个决斗类型
|
||||||
|
lblCustomGauntlet=自定义决斗
|
||||||
|
lblGauntletContest=决斗竞赛
|
||||||
|
lblSelectYourDeck=选择你的套牌
|
||||||
|
lblSelectDeckForOpponent=选择对手的套牌
|
||||||
|
lblSelectGauntletContest=选择决斗竞赛
|
||||||
|
#PuzzleScreen.java
|
||||||
|
lblPuzzleText1=解谜模式会加载一个谜题,你必须在预定的时间/方式中获胜。
|
||||||
|
lblPuzzleText2=首先,按下面的开始按钮,然后从列表中选择一个谜题。
|
||||||
|
lblPuzzleText3=当解谜开始的时候,该谜题的要求将会显示在弹窗中,并且还会在指挥官区域放置一张特殊效应卡指示这个谜题的要求。
|
||||||
|
lblChooseAPuzzle=选择一个谜题
|
||||||
|
lblLoadingThePuzzle=加载新的谜题中
|
||||||
Reference in New Issue
Block a user