new library commons-codec, authenticator for cheats, cyrillic support, unicode han logographic support, test for Actor that is 'Luminous', ascii punctuation kerning for Hangul
Former-commit-id: 1d083344abc3d6f08dfb252021c68f2a6cc7e068 Former-commit-id: 3b6dd15580a698bfe36b1dae24d6b2daeaf369c7
2
.idea/libraries/lib.xml
generated
@@ -8,6 +8,8 @@
|
|||||||
<root url="jar://$PROJECT_DIR$/lib/gson-2.5-javadoc.jar!/" />
|
<root url="jar://$PROJECT_DIR$/lib/gson-2.5-javadoc.jar!/" />
|
||||||
<root url="file://$PROJECT_DIR$/lib/javadoc" />
|
<root url="file://$PROJECT_DIR$/lib/javadoc" />
|
||||||
<root url="file://$PROJECT_DIR$/lib/apidocs" />
|
<root url="file://$PROJECT_DIR$/lib/apidocs" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/lib/commons-codec-1.10-javadoc.jar!/" />
|
||||||
|
<root url="https://commons.apache.org/proper/commons-csv/archives/1.1/apidocs/index.html" />
|
||||||
</JAVADOC>
|
</JAVADOC>
|
||||||
<NATIVE>
|
<NATIVE>
|
||||||
<root url="file://$PROJECT_DIR$/lib/native" />
|
<root url="file://$PROJECT_DIR$/lib/native" />
|
||||||
|
|||||||
BIN
lib/commons-codec-1.10-javadoc.jar
Normal file
BIN
lib/commons-codec-1.10.jar
Normal file
@@ -21,7 +21,7 @@
|
|||||||
"17";"TILE_ORE_NATURAL_GOLD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "17"; "0";"16"
|
"17";"TILE_ORE_NATURAL_GOLD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "17"; "0";"16"
|
||||||
"18";"TILE_ORE_NATURAL_SILVER" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "18"; "0";"16"
|
"18";"TILE_ORE_NATURAL_SILVER" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "18"; "0";"16"
|
||||||
"19";"TILE_ORE_RUTILE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "19"; "0";"16"
|
"19";"TILE_ORE_RUTILE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "19"; "0";"16"
|
||||||
"20";"TILE_ORE_AURICHALCUMITE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "20"; "0";"16"
|
"20";"TILE_ORE_AURICHALCUMITE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "20"; "0";"16"
|
||||||
"21";"TILE_GEM_RUBY" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "21"; "0";"16"
|
"21";"TILE_GEM_RUBY" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "21"; "0";"16"
|
||||||
"22";"TILE_GEM_EMERALD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "22"; "0";"16"
|
"22";"TILE_GEM_EMERALD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "22"; "0";"16"
|
||||||
"23";"TILE_GEM_SAPPHIRE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "23"; "0";"16"
|
"23";"TILE_GEM_SAPPHIRE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "23"; "0";"16"
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 1 and column 12.
|
@@ -3,10 +3,10 @@ Un royaume de solitude, ma place est là pour toujours
|
|||||||
Der Wind, er heult so wie der Sturm ganz tief in mir
|
Der Wind, er heult so wie der Sturm ganz tief in mir
|
||||||
Het werd mij te veel, hoe ik mijn best ook deed
|
Het werd mij te veel, hoe ik mijn best ook deed
|
||||||
|
|
||||||
[han logographics not supported]
|
别让他们进来看见,做好女孩,就像妳的从前
|
||||||
Visa ingenting, vad du än gör, allt är förstört
|
Visa ingenting, vad du än gör, allt är förstört
|
||||||
|
|
||||||
ありの ままの すがた みせるのよ
|
ありのままの姿見せるのよ
|
||||||
Libre soy, libre soy, ¡libertad sin vuelta atrás!
|
Libre soy, libre soy, ¡libertad sin vuelta atrás!
|
||||||
Wszystkim wbrew na ten gest mnie stać
|
Wszystkim wbrew na ten gest mnie stać
|
||||||
Jöjjön száz orkán, és közben a szívemen ül a jég
|
Jöjjön száz orkán, és közben a szívemen ül a jég
|
||||||
@@ -17,7 +17,7 @@ Non è un difetto, è una virtù! e non la fermerò mai più,
|
|||||||
내 맘대로 자유롭게 살래!
|
내 맘대로 자유롭게 살래!
|
||||||
|
|
||||||
Сад је крај, сад је крај На крилима ветра сам
|
Сад је крај, сад је крај На крилима ветра сам
|
||||||
[han logographics not supported]
|
誰亦要隨心講忘掉昨天悲歌
|
||||||
Estou aqui, e vou ficar! Venha a tempestade
|
Estou aqui, e vou ficar! Venha a tempestade
|
||||||
|
|
||||||
Kuasaku buat hidup bercelaru
|
Kuasaku buat hidup bercelaru
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 327 B After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
BIN
res/graphics/fonts/cyrilic_ef.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
res/graphics/fonts/cyrilic_majuscule.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
res/graphics/fonts/unifont_unihan.png
Normal file
|
After Width: | Height: | Size: 605 KiB |
@@ -222,7 +222,7 @@ TERM_PHYS_MASS=質量
|
|||||||
##########
|
##########
|
||||||
|
|
||||||
DEV_MEMORY_SHORT_CAP=メモリー
|
DEV_MEMORY_SHORT_CAP=メモリー
|
||||||
DEV_MEMORY_A_OF_B=%2$sM 中 %1$sM
|
DEV_MEMORY_A_OF_B=%2$sM中%1$sM
|
||||||
|
|
||||||
DEV_COLOUR_LEGEND_GREEN=緑
|
DEV_COLOUR_LEGEND_GREEN=緑
|
||||||
DEV_COLOUR_LEGEND_BLUE=青
|
DEV_COLOUR_LEGEND_BLUE=青
|
||||||
@@ -255,8 +255,8 @@ CREDITS_POLYGLOT=Translated by the Polyglot Project.
|
|||||||
## Languages #
|
## Languages #
|
||||||
################
|
################
|
||||||
|
|
||||||
LANGUAGE_ENGLISH=えい ご
|
LANGUAGE_ENGLISH=英語
|
||||||
LANGUAGE_FRENCH=フランス ご
|
LANGUAGE_FRENCH=フランス語
|
||||||
LANGUAGE_JAPANESE=日本語
|
LANGUAGE_JAPANESE=日本語
|
||||||
LANGUAGE_JAPANESE_KANA=日本語・仮名
|
LANGUAGE_JAPANESE_KANA=日本語・仮名
|
||||||
LANGUAGE_KOREAN=かんこく ご
|
LANGUAGE_KOREAN=韓国語
|
||||||
|
|||||||
@@ -17,16 +17,21 @@ public class GameFontBase implements Font {
|
|||||||
static SpriteSheet extASheetEF;
|
static SpriteSheet extASheetEF;
|
||||||
static SpriteSheet kanaSheet;
|
static SpriteSheet kanaSheet;
|
||||||
static SpriteSheet cjkPunct;
|
static SpriteSheet cjkPunct;
|
||||||
|
static SpriteSheet uniHan;
|
||||||
|
static SpriteSheet cyrilic;
|
||||||
|
static SpriteSheet cyrilicEF;
|
||||||
|
|
||||||
static final int JUNG_COUNT = 21;
|
static final int JUNG_COUNT = 21;
|
||||||
static final int JONG_COUNT = 28;
|
static final int JONG_COUNT = 28;
|
||||||
|
|
||||||
static final int W_CJK = 10;
|
static final int W_CJK = 10;
|
||||||
|
static final int W_UNIHAN = 16;
|
||||||
static final int W_CJK_DRAW = 11;
|
static final int W_CJK_DRAW = 11;
|
||||||
static final int W_LATIN_WIDE = 9; // width of regular letters, including m
|
static final int W_LATIN_WIDE = 9; // width of regular letters, including m
|
||||||
static final int W_LATIN_NARROW = 5; // width of letter f, t, i, l
|
static final int W_LATIN_NARROW = 5; // width of letter f, t, i, l
|
||||||
static final int H = 20;
|
static final int H = 20;
|
||||||
static final int H_HANGUL = 16;
|
static final int H_HANGUL = 16;
|
||||||
|
static final int H_UNIHAN = 16;
|
||||||
static final int H_KANA = 20;
|
static final int H_KANA = 20;
|
||||||
|
|
||||||
static final int SHEET_ASCII_EM = 0;
|
static final int SHEET_ASCII_EM = 0;
|
||||||
@@ -37,17 +42,24 @@ public class GameFontBase implements Font {
|
|||||||
static final int SHEET_EXTA_EF = 5;
|
static final int SHEET_EXTA_EF = 5;
|
||||||
static final int SHEET_KANA = 6;
|
static final int SHEET_KANA = 6;
|
||||||
static final int SHEET_CJK_PUNCT = 7;
|
static final int SHEET_CJK_PUNCT = 7;
|
||||||
|
static final int SHEET_UNIHAN = 8;
|
||||||
|
static final int SHEET_CYRILIC_EM = 9;
|
||||||
|
static final int SHEET_CYRILIC_EF = 10;
|
||||||
|
|
||||||
static SpriteSheet[] sheetKey;
|
static SpriteSheet[] sheetKey;
|
||||||
static final Character[] asciiEFList = {
|
static final Character[] asciiEFList = {
|
||||||
' ','!','"','\'','(',')','I','[',']','`','f','i','j','l','t','{'
|
' ','!','"','\'','(',')',',','.',':',';','I','[',']','`','f','i'
|
||||||
,'|','}',0xA1,'Ì','Í','Î','Ï','ì','í','î','ï','·'
|
,'j','l','t','{','|','}',0xA1,'Ì','Í','Î','Ï','ì','í','î','ï','·'
|
||||||
};
|
};
|
||||||
|
|
||||||
static final Character[] extAEFList = {
|
static final Character[] extAEFList = {
|
||||||
0x12E, 0x12F, 0x130, 0x131, 0x135, 0x13A, 0x13C, 0x142, 0x163, 0x167, 0x17F
|
0x12E, 0x12F, 0x130, 0x131, 0x135, 0x13A, 0x13C, 0x142, 0x163, 0x167, 0x17F
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static final Character[] cyrilecEFList = {
|
||||||
|
0x406, 0x407, 0x456, 0x457, 0x458
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runic letters list used for game. The set is
|
* Runic letters list used for game. The set is
|
||||||
* Younger Futhark + Medieval rune 'e' + Punct + Runic Almanac
|
* Younger Futhark + Medieval rune 'e' + Punct + Runic Almanac
|
||||||
@@ -111,6 +123,18 @@ public class GameFontBase implements Font {
|
|||||||
return (c >= 0x3000 && c < 0x3040);
|
return (c >= 0x3000 && c < 0x3040);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isUniHan(char c) {
|
||||||
|
return (c >= 0x3400 && c < 0xA000);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isCyrilic(char c) {
|
||||||
|
return (c >= 0x400 && c < 0x460);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isCyrilicEF(char c) {
|
||||||
|
return (Arrays.asList(cyrilecEFList).contains(c));
|
||||||
|
}
|
||||||
|
|
||||||
private int asciiEFindexX(char c) {
|
private int asciiEFindexX(char c) {
|
||||||
return (Arrays.asList(asciiEFList).indexOf(c) % 16);
|
return (Arrays.asList(asciiEFList).indexOf(c) % 16);
|
||||||
}
|
}
|
||||||
@@ -151,18 +175,49 @@ public class GameFontBase implements Font {
|
|||||||
return (c - 0x3000) / 16;
|
return (c - 0x3000) / 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int uniHanIndexX(char c) {
|
||||||
|
return (c - 0x3400) % 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int uniHanIndexY(char c) {
|
||||||
|
return (c - 0x3400) / 256;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int cyrilicIndexX(char c) {
|
||||||
|
return (c - 0x400) % 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int cyrilicIndexY(char c) {
|
||||||
|
return (c - 0x400) / 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int cyrilicEFindexX(char c) {
|
||||||
|
return (Arrays.asList(cyrilecEFList).indexOf(c) % 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int cyrilicEFindexY(char c) {
|
||||||
|
return (Arrays.asList(cyrilecEFList).indexOf(c) / 16);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getWidth(String s) {
|
public int getWidth(String s) {
|
||||||
int len = 0;
|
int len = 0;
|
||||||
for (int i = 0; i < s.length(); i++) {
|
for (int i = 0; i < s.length(); i++) {
|
||||||
char c = s.charAt(i);
|
char c = s.charAt(i);
|
||||||
|
|
||||||
switch (getSheetType(c)) {
|
switch (getSheetType(c)) {
|
||||||
case SHEET_ASCII_EF:
|
case SHEET_ASCII_EF:
|
||||||
len += W_LATIN_NARROW; break;
|
len += W_LATIN_NARROW; break;
|
||||||
case SHEET_HANGUL: case SHEET_KANA: case SHEET_CJK_PUNCT:
|
case SHEET_KANA: case SHEET_CJK_PUNCT:
|
||||||
len += W_CJK_DRAW; break;
|
len += W_CJK_DRAW; break;
|
||||||
|
case SHEET_HANGUL:
|
||||||
|
len += W_CJK_DRAW;
|
||||||
|
break;
|
||||||
|
case SHEET_UNIHAN:
|
||||||
|
len += W_UNIHAN; break;
|
||||||
default:
|
default:
|
||||||
len += W_LATIN_WIDE;
|
len += W_LATIN_WIDE;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
@@ -204,12 +259,31 @@ public class GameFontBase implements Font {
|
|||||||
}
|
}
|
||||||
hangulSheet.endUse();
|
hangulSheet.endUse();
|
||||||
|
|
||||||
|
// unihan fonts
|
||||||
|
uniHan.startUse();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
char ch = s.charAt(i);
|
||||||
|
|
||||||
|
if (isUniHan(ch)) {
|
||||||
|
uniHan.renderInUse(
|
||||||
|
Math.round(x
|
||||||
|
+ getWidth(s.substring(0, i))
|
||||||
|
)
|
||||||
|
, Math.round((H - H_HANGUL) / 2 + y)
|
||||||
|
, uniHanIndexX(ch)
|
||||||
|
, uniHanIndexY(ch)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uniHan.endUse();
|
||||||
|
|
||||||
//ascii fonts
|
//ascii fonts
|
||||||
int prevInstance = -1;
|
int prevInstance = -1;
|
||||||
for (int i = 0; i < s.length(); i++) {
|
for (int i = 0; i < s.length(); i++) {
|
||||||
char ch = s.charAt(i);
|
char ch = s.charAt(i);
|
||||||
|
|
||||||
if (!isHangul(ch)) {
|
if (!isHangul(ch) && !isUniHan(ch)) {
|
||||||
|
|
||||||
// if not init, enduse first
|
// if not init, enduse first
|
||||||
if (prevInstance != -1) {
|
if (prevInstance != -1) {
|
||||||
@@ -245,6 +319,14 @@ public class GameFontBase implements Font {
|
|||||||
sheetX = cjkPunctIndexX(ch);
|
sheetX = cjkPunctIndexX(ch);
|
||||||
sheetY = cjkPunctIndexY(ch);
|
sheetY = cjkPunctIndexY(ch);
|
||||||
break;
|
break;
|
||||||
|
case SHEET_CYRILIC_EM:
|
||||||
|
sheetX = cyrilicIndexX(ch);
|
||||||
|
sheetY = cyrilicIndexY(ch);
|
||||||
|
break;
|
||||||
|
case SHEET_CYRILIC_EF:
|
||||||
|
sheetX = cyrilicEFindexX(ch);
|
||||||
|
sheetY = cyrilicEFindexY(ch);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
sheetX = ch % 16;
|
sheetX = ch % 16;
|
||||||
sheetY = ch / 16;
|
sheetY = ch / 16;
|
||||||
@@ -253,9 +335,9 @@ public class GameFontBase implements Font {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
sheetKey[prevInstance].renderInUse(
|
sheetKey[prevInstance].renderInUse(
|
||||||
Math.round(x
|
Math.round(x + getWidth(s.substring(0, i)))
|
||||||
+ getWidth(s.substring(0, i))
|
// pull punct right next to hangul to the left
|
||||||
)
|
+ ((i > 0 && isHangul(s.charAt(i - 1))) ? -2 : 0)
|
||||||
, Math.round(y)
|
, Math.round(y)
|
||||||
- ((prevInstance == SHEET_CJK_PUNCT) ? 1 : 0)
|
- ((prevInstance == SHEET_CJK_PUNCT) ? 1 : 0)
|
||||||
, sheetX
|
, sheetX
|
||||||
@@ -263,11 +345,11 @@ public class GameFontBase implements Font {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch (ArrayIndexOutOfBoundsException e) {
|
catch (ArrayIndexOutOfBoundsException e) {
|
||||||
System.out.println("char: '" + ch + "' (" + String.valueOf((int) ch) + ")");
|
// System.out.println("ArrayIndexOutOfBoundsException")
|
||||||
System.out.println("sheet: " + prevInstance);
|
// System.out.println("char: '" + ch + "' (" + String.valueOf((int) ch) + ")");
|
||||||
System.out.println("sheetX: " + sheetX);
|
// System.out.println("sheet: " + prevInstance);
|
||||||
System.out.println("sheetY: " + sheetY);
|
// System.out.println("sheetX: " + sheetX);
|
||||||
e.printStackTrace();
|
// System.out.println("sheetY: " + sheetY);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -279,14 +361,22 @@ public class GameFontBase implements Font {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getSheetType(char c) {
|
private int getSheetType(char c) {
|
||||||
|
// EFs
|
||||||
if (isAsciiEF(c)) return SHEET_ASCII_EF;
|
if (isAsciiEF(c)) return SHEET_ASCII_EF;
|
||||||
else if (isHangul(c)) return SHEET_HANGUL;
|
|
||||||
else if (isRunic(c)) return SHEET_RUNIC;
|
|
||||||
else if (isExtA(c)) return SHEET_EXTA_EM;
|
|
||||||
else if (isExtAEF(c)) return SHEET_EXTA_EF;
|
else if (isExtAEF(c)) return SHEET_EXTA_EF;
|
||||||
|
else if (isCyrilicEF(c)) return SHEET_CYRILIC_EF;
|
||||||
|
// fixed width
|
||||||
|
else if (isRunic(c)) return SHEET_RUNIC;
|
||||||
|
else if (isHangul(c)) return SHEET_HANGUL;
|
||||||
else if (isKana(c)) return SHEET_KANA;
|
else if (isKana(c)) return SHEET_KANA;
|
||||||
|
else if (isUniHan(c)) return SHEET_UNIHAN;
|
||||||
|
else if (isAscii(c)) return SHEET_ASCII_EM;
|
||||||
|
else if (isExtA(c)) return SHEET_EXTA_EM;
|
||||||
|
else if (isCyrilic(c)) return SHEET_CYRILIC_EM;
|
||||||
|
// fixed width punctuations
|
||||||
else if (isCJKPunct(c)) return SHEET_CJK_PUNCT;
|
else if (isCJKPunct(c)) return SHEET_CJK_PUNCT;
|
||||||
else return SHEET_ASCII_EM;
|
|
||||||
|
else return SHEET_ASCII_EM; // fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,9 +42,21 @@ public class GameFontWhite extends GameFontBase {
|
|||||||
"./res/graphics/fonts/cjkpunct.png"
|
"./res/graphics/fonts/cjkpunct.png"
|
||||||
, W_CJK, H_KANA
|
, W_CJK, H_KANA
|
||||||
);
|
);
|
||||||
|
uniHan = new SpriteSheet(
|
||||||
|
"./res/graphics/fonts/unifont_unihan.png"
|
||||||
|
, W_UNIHAN, H_UNIHAN
|
||||||
|
);
|
||||||
|
cyrilic = new SpriteSheet(
|
||||||
|
"./res/graphics/fonts/cyrilic_majuscule.png"
|
||||||
|
, W_LATIN_WIDE, H
|
||||||
|
);
|
||||||
|
cyrilicEF = new SpriteSheet(
|
||||||
|
"./res/graphics/fonts/cyrilic_ef.png"
|
||||||
|
, W_LATIN_NARROW, H
|
||||||
|
);
|
||||||
|
|
||||||
SpriteSheet[] shk = {
|
SpriteSheet[] shk = {
|
||||||
asciiSheet
|
asciiSheet
|
||||||
, asciiSheetEF
|
, asciiSheetEF
|
||||||
, hangulSheet
|
, hangulSheet
|
||||||
, runicSheet
|
, runicSheet
|
||||||
@@ -52,6 +64,9 @@ public class GameFontWhite extends GameFontBase {
|
|||||||
, extASheetEF
|
, extASheetEF
|
||||||
, kanaSheet
|
, kanaSheet
|
||||||
, cjkPunct
|
, cjkPunct
|
||||||
|
, uniHan
|
||||||
|
, cyrilic
|
||||||
|
, cyrilicEF
|
||||||
};
|
};
|
||||||
sheetKey = shk;
|
sheetKey = shk;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class ActorWithBody implements Actor, Visible, Glowing {
|
|||||||
private final int CONTACT_AREA_BOTTOM = 2;
|
private final int CONTACT_AREA_BOTTOM = 2;
|
||||||
private final int CONTACT_AREA_LEFT = 3;
|
private final int CONTACT_AREA_LEFT = 3;
|
||||||
|
|
||||||
private final int UD_COMPENSATOR_MAX = 100;
|
private final int UD_COMPENSATOR_MAX = TSIZE;
|
||||||
private final int LR_COMPENSATOR_MAX = TSIZE;
|
private final int LR_COMPENSATOR_MAX = TSIZE;
|
||||||
private final int TILE_CLIMB_RATE = 4;
|
private final int TILE_CLIMB_RATE = 4;
|
||||||
|
|
||||||
@@ -155,17 +155,15 @@ public class ActorWithBody implements Actor, Visible, Glowing {
|
|||||||
if (veloY > VELO_HARD_LIMIT) veloY = VELO_HARD_LIMIT;
|
if (veloY > VELO_HARD_LIMIT) veloY = VELO_HARD_LIMIT;
|
||||||
|
|
||||||
// Set 'next' positions to fiddle with
|
// Set 'next' positions to fiddle with
|
||||||
if (!playerNoClip()) {
|
updateNextHitboxY();
|
||||||
updateNextHitboxY();
|
updateVerticalPos();
|
||||||
updateVerticalPos();
|
clampNextHitbox();
|
||||||
clampNextHitbox();
|
updateHitboxY();
|
||||||
updateHitboxY();
|
|
||||||
|
|
||||||
updateNextHitboxX();
|
updateNextHitboxX();
|
||||||
updateHorizontalPos();
|
updateHorizontalPos();
|
||||||
clampNextHitbox();
|
clampNextHitbox();
|
||||||
updateHitboxX();
|
updateHitboxX();
|
||||||
}
|
|
||||||
|
|
||||||
clampHitbox();
|
clampHitbox();
|
||||||
}
|
}
|
||||||
@@ -200,16 +198,18 @@ public class ActorWithBody implements Actor, Visible, Glowing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateVerticalPos() {
|
private void updateVerticalPos() {
|
||||||
if (collidedBottomAndAdjusted()) {
|
if (!playerNoClip()) {
|
||||||
grounded = true;
|
if (collidedBottomAndAdjusted()) {
|
||||||
veloY = 0;
|
grounded = true;
|
||||||
}
|
veloY = 0;
|
||||||
else {
|
}
|
||||||
grounded = false;
|
else {
|
||||||
}
|
grounded = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (collidedTopAndAdjusted()) {
|
if (collidedTopAndAdjusted()) {
|
||||||
veloY = 0;
|
veloY = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,20 +254,22 @@ public class ActorWithBody implements Actor, Visible, Glowing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updateHorizontalPos() {
|
private void updateHorizontalPos() {
|
||||||
if (collidedRightAndAdjusted()) { // treat as 'event--collided right'
|
if (!playerNoClip()) {
|
||||||
veloX = 0;
|
if (collidedRightAndAdjusted()) { // treat as 'event--collided right'
|
||||||
walledRight = true;
|
veloX = 0;
|
||||||
|
walledRight = true;
|
||||||
|
|
||||||
// TODO remove above two lines and implement tile climb (multi-frame calculation.)
|
// TODO remove above two lines and implement tile climb (multi-frame calculation.)
|
||||||
// Use variable TILE_CLIMB_RATE
|
// Use variable TILE_CLIMB_RATE
|
||||||
}
|
}
|
||||||
else if (collidedLeftAndAdjusted()) { // treat as 'event--collided left'
|
else if (collidedLeftAndAdjusted()) { // treat as 'event--collided left'
|
||||||
veloX = 0;
|
veloX = 0;
|
||||||
walledLeft = true;
|
walledLeft = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
walledRight = false;
|
walledRight = false;
|
||||||
walledLeft = false;
|
walledLeft = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
src/com/Torvald/Terrarum/Actors/Luminous.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package com.Torvald.Terrarum.Actors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by minjaesong on 16-02-19.
|
||||||
|
*/
|
||||||
|
public interface Luminous {
|
||||||
|
|
||||||
|
void setLuminance(int RGB);
|
||||||
|
int getLuminance();
|
||||||
|
|
||||||
|
}
|
||||||
@@ -62,7 +62,7 @@ public class PBFSigrid {
|
|||||||
|
|
||||||
p.actorValue.set("intelligent", true);
|
p.actorValue.set("intelligent", true);
|
||||||
|
|
||||||
p.setHitboxDimension(17, 47, 9, 0);
|
p.setHitboxDimension(17, 46, 9, 0);
|
||||||
|
|
||||||
p.inventory = new ActorInventory(0x7FFFFFFF, true);
|
p.inventory = new ActorInventory(0x7FFFFFFF, true);
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@ package com.Torvald.Terrarum.Actors;
|
|||||||
import com.Torvald.Terrarum.Actors.Faction.Faction;
|
import com.Torvald.Terrarum.Actors.Faction.Faction;
|
||||||
import com.Torvald.Terrarum.GameControl.EnumKeyFunc;
|
import com.Torvald.Terrarum.GameControl.EnumKeyFunc;
|
||||||
import com.Torvald.Terrarum.GameControl.KeyMap;
|
import com.Torvald.Terrarum.GameControl.KeyMap;
|
||||||
|
import com.Torvald.Terrarum.MapDrawer.LightmapRenderer;
|
||||||
|
import com.Torvald.Terrarum.MapDrawer.MapCamera;
|
||||||
|
import com.Torvald.Terrarum.MapDrawer.MapDrawer;
|
||||||
import com.Torvald.Terrarum.Terrarum;
|
import com.Torvald.Terrarum.Terrarum;
|
||||||
import com.Torvald.spriteAnimation.SpriteAnimation;
|
import com.Torvald.spriteAnimation.SpriteAnimation;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
@@ -18,7 +21,7 @@ import java.util.HashSet;
|
|||||||
/**
|
/**
|
||||||
* Created by minjaesong on 15-12-31.
|
* Created by minjaesong on 15-12-31.
|
||||||
*/
|
*/
|
||||||
public class Player extends ActorWithBody implements Controllable, Pocketed, Factionable {
|
public class Player extends ActorWithBody implements Controllable, Pocketed, Factionable, Luminous {
|
||||||
|
|
||||||
@Nullable public Controllable vehicleRiding;
|
@Nullable public Controllable vehicleRiding;
|
||||||
|
|
||||||
@@ -50,6 +53,10 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac
|
|||||||
private final float AXIS_POSMAX = 1.0f;
|
private final float AXIS_POSMAX = 1.0f;
|
||||||
private final int GAMEPAD_JUMP = 5;
|
private final int GAMEPAD_JUMP = 5;
|
||||||
|
|
||||||
|
private final int TSIZE = MapDrawer.TILE_SIZE;
|
||||||
|
|
||||||
|
private int LUMINANCE_RGB = 0xFFFFFF;
|
||||||
|
|
||||||
private HashSet<Faction> factionSet = new HashSet<>();
|
private HashSet<Faction> factionSet = new HashSet<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -78,6 +85,8 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac
|
|||||||
updateMovementControl();
|
updateMovementControl();
|
||||||
|
|
||||||
if (noClip) { super.setGrounded(true); }
|
if (noClip) { super.setGrounded(true); }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updatePhysicalInfos() {
|
private void updatePhysicalInfos() {
|
||||||
@@ -536,4 +545,14 @@ public class Player extends ActorWithBody implements Controllable, Pocketed, Fac
|
|||||||
public void clearFactionAssigning() {
|
public void clearFactionAssigning() {
|
||||||
factionSet.clear();
|
factionSet.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLuminance(int RGB) {
|
||||||
|
LUMINANCE_RGB = RGB;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLuminance() {
|
||||||
|
return LUMINANCE_RGB;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
44
src/com/Torvald/Terrarum/ConsoleCommand/Authenticator.java
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package com.Torvald.Terrarum.ConsoleCommand;
|
||||||
|
|
||||||
|
import com.Torvald.Terrarum.Terrarum;
|
||||||
|
import com.Torvald.Terrarum.UserInterface.ConsoleWindow;
|
||||||
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
|
import org.newdawn.slick.SlickException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by minjaesong on 16-02-19.
|
||||||
|
*/
|
||||||
|
public class Authenticator implements ConsoleCommand {
|
||||||
|
|
||||||
|
private static final String A = "0d34076fc15db1b7c7a0943045699eba6f186ec1"; // alpine
|
||||||
|
// or 'srisrimahasri'
|
||||||
|
|
||||||
|
private static boolean B = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(String[] args) {
|
||||||
|
if (args.length == 2) {
|
||||||
|
String pwd = args[1];
|
||||||
|
|
||||||
|
String hashedPwd = DigestUtils.sha1Hex(pwd);
|
||||||
|
|
||||||
|
if (A.equalsIgnoreCase(hashedPwd)) {
|
||||||
|
new Echo().execute(((B) ? "Dis" : "") + "authenticated.");
|
||||||
|
B = !B;
|
||||||
|
((ConsoleWindow) (Terrarum.game.consoleHandler.getUI())).reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printUsage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean C() {
|
||||||
|
return B;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void printUsage() {
|
||||||
|
CommandInterpreter.echoUnknownCmd("auth");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.Torvald.Terrarum.ConsoleCommand;
|
package com.Torvald.Terrarum.ConsoleCommand;
|
||||||
|
|
||||||
import com.Torvald.Terrarum.LangPack.Lang;
|
import com.Torvald.Terrarum.LangPack.Lang;
|
||||||
|
import com.Torvald.Terrarum.Terrarum;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Formatter;
|
import java.util.Formatter;
|
||||||
@@ -17,18 +18,28 @@ public class CommandInterpreter {
|
|||||||
|
|
||||||
for (CommandInput single_command : cmd) {
|
for (CommandInput single_command : cmd) {
|
||||||
try {
|
try {
|
||||||
ConsoleCommand commandObj = CommandDict.getCommand(single_command.getName().toLowerCase());
|
if (single_command.getName().equalsIgnoreCase("auth")) {
|
||||||
commandObj.execute(single_command.toStringArray());
|
Terrarum.game.auth.execute(single_command.toStringArray());
|
||||||
|
}
|
||||||
|
else if (single_command.getName().equalsIgnoreCase("qqq")) {
|
||||||
|
new QuitApp().execute(single_command.toStringArray());
|
||||||
|
}
|
||||||
|
else if (single_command.getName().equalsIgnoreCase("zoom")) {
|
||||||
|
new Zoom().execute(single_command.toStringArray());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (Terrarum.game.auth.C()) {
|
||||||
|
ConsoleCommand commandObj = CommandDict.getCommand(
|
||||||
|
single_command.getName().toLowerCase());
|
||||||
|
commandObj.execute(single_command.toStringArray());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new NullPointerException(); // if not authorised, say "Unknown command"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (NullPointerException e) {
|
catch (NullPointerException e) {
|
||||||
StringBuilder sb = new StringBuilder();
|
echoUnknownCmd(single_command.getName());
|
||||||
Formatter formatter = new Formatter(sb);
|
|
||||||
|
|
||||||
new Echo().execute(
|
|
||||||
formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN")
|
|
||||||
, single_command.getName()
|
|
||||||
).toString()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -64,6 +75,17 @@ public class CommandInterpreter {
|
|||||||
return parsedCommands;
|
return parsedCommands;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void echoUnknownCmd(String cmdname) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
Formatter formatter = new Formatter(sb);
|
||||||
|
|
||||||
|
new Echo().execute(
|
||||||
|
formatter.format(Lang.get("DEV_MESSAGE_CONSOLE_COMMAND_UNKNOWN")
|
||||||
|
, cmdname
|
||||||
|
).toString()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CommandInput {
|
class CommandInput {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ public class QuitApp implements ConsoleCommand {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(String[] args) {
|
public void execute(String[] args) {
|
||||||
System.exit(0);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.Torvald.Terrarum;
|
package com.Torvald.Terrarum;
|
||||||
|
|
||||||
import com.Torvald.Terrarum.Actors.*;
|
import com.Torvald.Terrarum.Actors.*;
|
||||||
|
import com.Torvald.Terrarum.ConsoleCommand.Authenticator;
|
||||||
import com.Torvald.Terrarum.ConsoleCommand.CommandDict;
|
import com.Torvald.Terrarum.ConsoleCommand.CommandDict;
|
||||||
import com.Torvald.Terrarum.GameControl.GameController;
|
import com.Torvald.Terrarum.GameControl.GameController;
|
||||||
import com.Torvald.Terrarum.GameControl.KeyMap;
|
import com.Torvald.Terrarum.GameControl.KeyMap;
|
||||||
@@ -61,6 +62,8 @@ public class Game extends BasicGameState {
|
|||||||
private Shader shaderBlurH;
|
private Shader shaderBlurH;
|
||||||
private Shader shaderBlurV;
|
private Shader shaderBlurV;
|
||||||
|
|
||||||
|
public static Authenticator auth = new Authenticator();
|
||||||
|
|
||||||
public Game() throws SlickException { }
|
public Game() throws SlickException { }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -45,9 +45,21 @@ public class LightmapRenderer {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addLantern(int x, int y, LightmapLantern lantern) {
|
public static void addLantern(int x, int y, int intensity) {
|
||||||
// TODO check for duplicates
|
LightmapLantern thisLantern = new LightmapLantern(x, y, intensity);
|
||||||
lanterns.add(lantern);
|
|
||||||
|
for (int i = lanterns.size() - 1; i >= 0; i--) {
|
||||||
|
LightmapLantern lanternInList = lanterns.get(i);
|
||||||
|
// found duplicates
|
||||||
|
if (lanternInList.getX() == x && lanternInList.getY() == y) {
|
||||||
|
// add colour
|
||||||
|
int addedL = addRaw(intensity, lanternInList.getIntensity());
|
||||||
|
lanternInList.intensity = addedL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//else
|
||||||
|
lanterns.add(thisLantern);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeLantern(int x, int y) {
|
public static void removeLantern(int x, int y) {
|
||||||
@@ -260,6 +272,18 @@ public class LightmapRenderer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// mix actor Luminous
|
||||||
|
// test player TODO for all actor.Luminous in the game
|
||||||
|
int tileX = Math.round(Terrarum.game.getPlayer().getHitbox().getPointedX() / TSIZE);
|
||||||
|
int tileY = Math.round(Terrarum.game.getPlayer().getHitbox().getPointedY() / TSIZE)
|
||||||
|
- 1;
|
||||||
|
int lum = Terrarum.game.getPlayer().getLuminance();
|
||||||
|
if (x == tileX && y == tileY) {
|
||||||
|
lightColorR = getR(lum);
|
||||||
|
lightColorG = getG(lum);
|
||||||
|
lightColorB = getB(lum);
|
||||||
|
}
|
||||||
|
|
||||||
float[] bgrVal = new float[3]; // {B, G, R}
|
float[] bgrVal = new float[3]; // {B, G, R}
|
||||||
|
|
||||||
// test for each R, G, B channel
|
// test for each R, G, B channel
|
||||||
@@ -375,7 +399,15 @@ public class LightmapRenderer {
|
|||||||
return getRawB(rgb) / 255f;
|
return getRawB(rgb) / 255f;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int constructRGBFromFloat(int r, int g, int b) {
|
private static int addRaw(int rgb1, int rgb2) {
|
||||||
|
int newR = clampByte(getRawR(rgb1) + getRawB(rgb2));
|
||||||
|
int newG = clampByte(getRawG(rgb1) + getRawG(rgb2));
|
||||||
|
int newB = clampByte(getRawB(rgb1) + getRawB(rgb2));
|
||||||
|
|
||||||
|
return constructRGBFromInt(newR, newG, newB);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int constructRGBFromInt(int r, int g, int b) {
|
||||||
if (r < 0 || r > 0xFF) { throw new IllegalArgumentException("Red: out of range"); }
|
if (r < 0 || r > 0xFF) { throw new IllegalArgumentException("Red: out of range"); }
|
||||||
if (g < 0 || g > 0xFF) { throw new IllegalArgumentException("Green: out of range"); }
|
if (g < 0 || g > 0xFF) { throw new IllegalArgumentException("Green: out of range"); }
|
||||||
if (b < 0 || b > 0xFF) { throw new IllegalArgumentException("Blue: out of range"); }
|
if (b < 0 || b > 0xFF) { throw new IllegalArgumentException("Blue: out of range"); }
|
||||||
@@ -391,14 +423,14 @@ public class LightmapRenderer {
|
|||||||
int intG = Math.round(g * 0xFF);
|
int intG = Math.round(g * 0xFF);
|
||||||
int intB = Math.round(b * 0xFF);
|
int intB = Math.round(b * 0xFF);
|
||||||
|
|
||||||
return constructRGBFromFloat(intR, intG, intB);
|
return constructRGBFromInt(intR, intG, intB);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int colourLinearMix(int colA, int colB) {
|
private static int colourLinearMix(int colA, int colB) {
|
||||||
int r = (getRawR(colA) + getRawR(colB)) >> 1;
|
int r = (getRawR(colA) + getRawR(colB)) >> 1;
|
||||||
int g = (getRawG(colA) + getRawG(colB)) >> 1;
|
int g = (getRawG(colA) + getRawG(colB)) >> 1;
|
||||||
int b = (getRawB(colA) + getRawB(colB)) >> 1;
|
int b = (getRawB(colA) + getRawB(colB)) >> 1;
|
||||||
return constructRGBFromFloat(r, g, b);
|
return constructRGBFromInt(r, g, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -417,7 +449,7 @@ public class LightmapRenderer {
|
|||||||
int bSide = max(getRawG(side1), getRawG(side2), getRawG(corner) / 2);
|
int bSide = max(getRawG(side1), getRawG(side2), getRawG(corner) / 2);
|
||||||
int b = arithmeticAverage(bSide, getRawG(thisTile));
|
int b = arithmeticAverage(bSide, getRawG(thisTile));
|
||||||
|
|
||||||
return constructRGBFromFloat(r, g, b);
|
return constructRGBFromInt(r, g, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int quantise16(int x) {
|
private static int quantise16(int x) {
|
||||||
@@ -454,13 +486,15 @@ public class LightmapRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int clampZero(int i) {
|
private static int clampZero(int i) {
|
||||||
if (i < 0) return 0;
|
return (i < 0) ? 0 : i;
|
||||||
else return i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float clampZero(float i) {
|
private static float clampZero(float i) {
|
||||||
if (i < 0) return 0;
|
return (i < 0) ? 0 : i;
|
||||||
else return i;
|
}
|
||||||
|
|
||||||
|
private static int clampByte(int i) {
|
||||||
|
return (i < 0) ? 0 : (i > 0xFF) ? 0xFF : i;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int[][] getStaticLightMap() {
|
public static int[][] getStaticLightMap() {
|
||||||
|
|||||||
@@ -125,6 +125,14 @@ public class MapGenerator {
|
|||||||
, "Carving out cave..."
|
, "Carving out cave..."
|
||||||
);
|
);
|
||||||
|
|
||||||
|
fillByMapNoFilterUnderground(
|
||||||
|
generate2DSimplexNoiseWorldSize(1f, 1f)
|
||||||
|
, 0.9f
|
||||||
|
, AIR
|
||||||
|
, STONE
|
||||||
|
, "Collapsing caves..."
|
||||||
|
);
|
||||||
|
|
||||||
/*fillByMapInverseGradFilter(
|
/*fillByMapInverseGradFilter(
|
||||||
generate2DSimplexNoiseWorldSize(2.5f, 2.5f)
|
generate2DSimplexNoiseWorldSize(2.5f, 2.5f)
|
||||||
, 1.02f
|
, 1.02f
|
||||||
@@ -223,9 +231,9 @@ public class MapGenerator {
|
|||||||
float[][] noiseMap = new float[height][width];
|
float[][] noiseMap = new float[height][width];
|
||||||
|
|
||||||
SimplexNoise simplexNoise = new SimplexNoise(CAVEGEN_LARGEST_FEATURE, CAVEGEN_PERTURB_RATE
|
SimplexNoise simplexNoise = new SimplexNoise(CAVEGEN_LARGEST_FEATURE, CAVEGEN_PERTURB_RATE
|
||||||
, 0x51621D);
|
, seed);
|
||||||
SimplexNoise simplexNoisePerturbMap = new SimplexNoise(CAVEGEN_LARGEST_FEATURE_PERTURB, 0.5f
|
SimplexNoise simplexNoisePerturbMap = new SimplexNoise(CAVEGEN_LARGEST_FEATURE_PERTURB, 0.5f
|
||||||
, 0x51621D ^ random.nextLong());
|
, seed ^ random.nextLong());
|
||||||
|
|
||||||
float xEnd=width * yStretch;
|
float xEnd=width * yStretch;
|
||||||
float yEnd=height * xStretch;
|
float yEnd=height * xStretch;
|
||||||
@@ -293,8 +301,11 @@ public class MapGenerator {
|
|||||||
/** higher = denser.
|
/** higher = denser.
|
||||||
* Recommended: (width or height) * 3
|
* Recommended: (width or height) * 3
|
||||||
*/
|
*/
|
||||||
float xEnd=height * yStretch;
|
float xEnd=width * yStretch;
|
||||||
float yEnd=width * xStretch;
|
float yEnd=height * xStretch;
|
||||||
|
|
||||||
|
float lowestNoiseVal = 10000f;
|
||||||
|
float highestNoiseVal = -10000f;
|
||||||
|
|
||||||
float[][] result=new float[sizeY][sizeX];
|
float[][] result=new float[sizeY][sizeX];
|
||||||
|
|
||||||
@@ -302,22 +313,31 @@ public class MapGenerator {
|
|||||||
for(int j=0;j<sizeX;j++){
|
for(int j=0;j<sizeX;j++){
|
||||||
int x=(int)(xStart+i*((xEnd-xStart)/sizeX));
|
int x=(int)(xStart+i*((xEnd-xStart)/sizeX));
|
||||||
int y=(int)(yStart+j*((yEnd-yStart)/sizeY));
|
int y=(int)(yStart+j*((yEnd-yStart)/sizeY));
|
||||||
result[i][j]=(float) (0.5*(1+simplexNoise.getNoise(x,y)));
|
|
||||||
|
float noiseValue = (float) (0.5*(1+simplexNoise.getNoise(x,y)));
|
||||||
|
|
||||||
|
if (noiseValue < lowestNoiseVal) lowestNoiseVal = noiseValue;
|
||||||
|
if (noiseValue > highestNoiseVal) highestNoiseVal = noiseValue;
|
||||||
|
|
||||||
|
result[i][j] = noiseValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-scaling noise
|
||||||
|
|
||||||
|
for (int y = 0; y < height; y++) {
|
||||||
|
for (int x = 0; x < width; x++) {
|
||||||
|
float noiseInit = result[y][x] - lowestNoiseVal;
|
||||||
|
|
||||||
|
float noiseFin = noiseInit * (1f / (highestNoiseVal - lowestNoiseVal));
|
||||||
|
|
||||||
|
result[y][x] = noiseFin;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static float[] generateWhiteNoiseArray(long seed) {
|
|
||||||
float[] noiseArray = new float[MapGenerator.width + 1];
|
|
||||||
for (int i = 0; i < noiseArray.length; i++) {
|
|
||||||
noiseArray[i] = random.nextFloat();
|
|
||||||
}
|
|
||||||
|
|
||||||
return noiseArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int[] generateOcean(int[] noiseArrayLocal) {
|
private static int[] generateOcean(int[] noiseArrayLocal) {
|
||||||
int oceanLeftP1 = noiseArrayLocal[OCEAN_WIDTH];
|
int oceanLeftP1 = noiseArrayLocal[OCEAN_WIDTH];
|
||||||
int oceanRightP1 = noiseArrayLocal[noiseArrayLocal.length - OCEAN_WIDTH];
|
int oceanRightP1 = noiseArrayLocal[noiseArrayLocal.length - OCEAN_WIDTH];
|
||||||
@@ -557,7 +577,8 @@ public class MapGenerator {
|
|||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
for (int j = 0; j < width; j++) {
|
for (int j = 0; j < width; j++) {
|
||||||
if (map[i][j] > gradientQuadratic(i, noiseGradientStart, noiseGrdCaveEnd) / scarcity) {
|
if (map[i][j] > gradientQuadratic(i, noiseGradientStart, noiseGrdCaveEnd) *
|
||||||
|
scarcity) {
|
||||||
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -577,7 +598,7 @@ public class MapGenerator {
|
|||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
for (int j = 0; j < width; j++) {
|
for (int j = 0; j < width; j++) {
|
||||||
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) / scarcity
|
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity
|
||||||
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
||||||
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
||||||
}
|
}
|
||||||
@@ -598,7 +619,8 @@ public class MapGenerator {
|
|||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
for (int j = 0; j < width; j++) {
|
for (int j = 0; j < width; j++) {
|
||||||
if (map[i][j] > getNoiseGradientInversed(i, noiseGradientEnd, noiseGradientStart) / scarcity
|
if (map[i][j] > getNoiseGradientInversed(i, noiseGradientEnd, noiseGradientStart)
|
||||||
|
* scarcity
|
||||||
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
||||||
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
||||||
}
|
}
|
||||||
@@ -621,7 +643,7 @@ public class MapGenerator {
|
|||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
for (int j = 0; j < width; j++) {
|
for (int j = 0; j < width; j++) {
|
||||||
if (map[i][j] > noiseGradientStart / scarcity
|
if (map[i][j] > noiseGradientStart * scarcity
|
||||||
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
||||||
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
||||||
}
|
}
|
||||||
@@ -629,12 +651,27 @@ public class MapGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void fillByMapNoFilterUnderground(float[][] map, float scarcity, byte replaceFrom, byte
|
||||||
|
tile, String message) {
|
||||||
|
System.out.println("[MapGenerator] " + message);
|
||||||
|
|
||||||
|
for (int i = 0; i < height; i++) {
|
||||||
|
for (int j = 0; j < width; j++) {
|
||||||
|
if (map[i][j] > noiseGradientStart * scarcity
|
||||||
|
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom
|
||||||
|
&& MapGenerator.map.getTileFromWall(j, i) == STONE) {
|
||||||
|
MapGenerator.map.getTerrainArray()[i][j] = tile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static void fillByMap(float[][] map, float scarcity, byte replaceFrom, byte[] tile, String message) {
|
private static void fillByMap(float[][] map, float scarcity, byte replaceFrom, byte[] tile, String message) {
|
||||||
System.out.println("[MapGenerator] " + message);
|
System.out.println("[MapGenerator] " + message);
|
||||||
|
|
||||||
for (int i = 0; i < height; i++) {
|
for (int i = 0; i < height; i++) {
|
||||||
for (int j = 0; j < width; j++) {
|
for (int j = 0; j < width; j++) {
|
||||||
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) / scarcity
|
if (map[i][j] > getNoiseGradient(i, noiseGradientStart, noiseGradientEnd) * scarcity
|
||||||
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
&& MapGenerator.map.getTileFromTerrain(j, i) == replaceFrom) {
|
||||||
MapGenerator.map.getTerrainArray()[i][j]
|
MapGenerator.map.getTerrainArray()[i][j]
|
||||||
= tile[random.nextInt(tile.length)];
|
= tile[random.nextInt(tile.length)];
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import java.util.logging.Level;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
import com.Torvald.ImageFont.GameFontWhite;
|
import com.Torvald.ImageFont.GameFontWhite;
|
||||||
|
import com.Torvald.Terrarum.ConsoleCommand.Authenticator;
|
||||||
import com.Torvald.Terrarum.LangPack.Lang;
|
import com.Torvald.Terrarum.LangPack.Lang;
|
||||||
import org.lwjgl.input.Controllers;
|
import org.lwjgl.input.Controllers;
|
||||||
import org.newdawn.slick.*;
|
import org.newdawn.slick.*;
|
||||||
@@ -41,7 +42,7 @@ public class Terrarum extends StateBasedGame {
|
|||||||
public static String defaultDir;
|
public static String defaultDir;
|
||||||
public static String defaultSaveDir;
|
public static String defaultSaveDir;
|
||||||
|
|
||||||
public static String gameLocale = "jp_kana";
|
public static String gameLocale = "ko";
|
||||||
|
|
||||||
public static Font gameFontWhite;
|
public static Font gameFontWhite;
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
"17";"TILE_ORE_NATURAL_GOLD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "17"; "0";"16"
|
"17";"TILE_ORE_NATURAL_GOLD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "17"; "0";"16"
|
||||||
"18";"TILE_ORE_NATURAL_SILVER" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "18"; "0";"16"
|
"18";"TILE_ORE_NATURAL_SILVER" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "18"; "0";"16"
|
||||||
"19";"TILE_ORE_RUTILE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "19"; "0";"16"
|
"19";"TILE_ORE_RUTILE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "19"; "0";"16"
|
||||||
"20";"TILE_ORE_AURICHALCUMITE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "20"; "0";"16"
|
"20";"TILE_ORE_AURICHALCUMITE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "20"; "0";"16"
|
||||||
"21";"TILE_GEM_RUBY" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "21"; "0";"16"
|
"21";"TILE_GEM_RUBY" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "21"; "0";"16"
|
||||||
"22";"TILE_GEM_EMERALD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "22"; "0";"16"
|
"22";"TILE_GEM_EMERALD" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "22"; "0";"16"
|
||||||
"23";"TILE_GEM_SAPPHIRE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "23"; "0";"16"
|
"23";"TILE_GEM_SAPPHIRE" ; "32"; "25"; "0"; "N/A"; "1"; "0"; "0"; "23"; "0";"16"
|
||||||
|
|||||||
|
Can't render this file because it contains an unexpected character in line 1 and column 12.
|
@@ -16,15 +16,15 @@ public class ConsoleWindow implements UICanvas {
|
|||||||
|
|
||||||
Color UIColour = new Color(0x90000000);
|
Color UIColour = new Color(0x90000000);
|
||||||
|
|
||||||
private StringBuffer commandInputPool = new StringBuffer();
|
private StringBuffer commandInputPool;
|
||||||
private String prevCommand = "";
|
private String prevCommand;
|
||||||
|
|
||||||
private int inputCursorPos = 0;
|
private int inputCursorPos;
|
||||||
|
|
||||||
private final int MESSAGES_MAX = 5000;
|
private final int MESSAGES_MAX = 5000;
|
||||||
private String[] messages = new String[MESSAGES_MAX];
|
private String[] messages;
|
||||||
private int messageDisplayPos = 0;
|
private int messageDisplayPos;
|
||||||
private int messagesCount = 0;
|
private int messagesCount;
|
||||||
|
|
||||||
private final int LINE_HEIGHT = 20;
|
private final int LINE_HEIGHT = 20;
|
||||||
private final int MESSAGES_DISPLAY_COUNT = 9;
|
private final int MESSAGES_DISPLAY_COUNT = 9;
|
||||||
@@ -34,11 +34,7 @@ public class ConsoleWindow implements UICanvas {
|
|||||||
|
|
||||||
public ConsoleWindow() {
|
public ConsoleWindow() {
|
||||||
super();
|
super();
|
||||||
|
reset();
|
||||||
width = Terrarum.WIDTH;
|
|
||||||
height = 200;
|
|
||||||
|
|
||||||
sendMessage(Lang.get("DEV_MESSAGE_CONSOLE_CODEX"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -182,6 +178,20 @@ public class ConsoleWindow implements UICanvas {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
width = Terrarum.WIDTH;
|
||||||
|
height = 200;
|
||||||
|
|
||||||
|
messages = new String[MESSAGES_MAX];
|
||||||
|
messageDisplayPos = 0;
|
||||||
|
messagesCount = 0;
|
||||||
|
inputCursorPos = 0;
|
||||||
|
prevCommand = "";
|
||||||
|
commandInputPool = new StringBuffer();
|
||||||
|
|
||||||
|
if (Terrarum.game.auth.C()) sendMessage(Lang.get("DEV_MESSAGE_CONSOLE_CODEX"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getWidth() {
|
public int getWidth() {
|
||||||
return width;
|
return width;
|
||||||
|
|||||||
11
work_files/Shutdown_codes.txt
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
== Shutdown codes
|
||||||
|
|
||||||
|
bit 0 0 0 0 0 0 0 0
|
||||||
|
index 8 7 6 5 4 3 2 1
|
||||||
|
|
||||||
|
all zero: nominal
|
||||||
|
|
||||||
|
1: exit by console command 'qqq'
|
||||||
|
|
||||||
|
8: erratic, reserved by Java
|
||||||