diff --git a/assets/graphics/fonts/MDA.png b/assets/graphics/fonts/MDA.png index 842e0e595..aac6be82c 100644 Binary files a/assets/graphics/fonts/MDA.png and b/assets/graphics/fonts/MDA.png differ diff --git a/assets/graphics/fonts/MDA.png.0.png b/assets/graphics/fonts/MDA.png.0.png index d57f75692..bd9fd65f7 100644 Binary files a/assets/graphics/fonts/MDA.png.0.png and b/assets/graphics/fonts/MDA.png.0.png differ diff --git a/assets/graphics/fonts/MDA.png.1.png b/assets/graphics/fonts/MDA.png.1.png index af6ec9412..27ba9630a 100644 Binary files a/assets/graphics/fonts/MDA.png.1.png and b/assets/graphics/fonts/MDA.png.1.png differ diff --git a/assets/graphics/fonts/MDA.png.10.png b/assets/graphics/fonts/MDA.png.10.png index f321b9b07..168ff0f42 100644 Binary files a/assets/graphics/fonts/MDA.png.10.png and b/assets/graphics/fonts/MDA.png.10.png differ diff --git a/assets/graphics/fonts/MDA.png.11.png b/assets/graphics/fonts/MDA.png.11.png index d7221a428..fb3812e7e 100644 Binary files a/assets/graphics/fonts/MDA.png.11.png and b/assets/graphics/fonts/MDA.png.11.png differ diff --git a/assets/graphics/fonts/MDA.png.12.png b/assets/graphics/fonts/MDA.png.12.png index 456c95805..7154448cb 100644 Binary files a/assets/graphics/fonts/MDA.png.12.png and b/assets/graphics/fonts/MDA.png.12.png differ diff --git a/assets/graphics/fonts/MDA.png.13.png b/assets/graphics/fonts/MDA.png.13.png index f185ce6e6..d188b35de 100644 Binary files a/assets/graphics/fonts/MDA.png.13.png and b/assets/graphics/fonts/MDA.png.13.png differ diff --git a/assets/graphics/fonts/MDA.png.14.png b/assets/graphics/fonts/MDA.png.14.png index 6a0b3e31b..5490342f8 100644 Binary files a/assets/graphics/fonts/MDA.png.14.png and b/assets/graphics/fonts/MDA.png.14.png differ diff --git a/assets/graphics/fonts/MDA.png.15.png b/assets/graphics/fonts/MDA.png.15.png index 7011d2322..fc6e1792f 100644 Binary files a/assets/graphics/fonts/MDA.png.15.png and b/assets/graphics/fonts/MDA.png.15.png differ diff --git a/assets/graphics/fonts/MDA.png.2.png b/assets/graphics/fonts/MDA.png.2.png index bf778cfe3..40448a6bd 100644 Binary files a/assets/graphics/fonts/MDA.png.2.png and b/assets/graphics/fonts/MDA.png.2.png differ diff --git a/assets/graphics/fonts/MDA.png.3.png b/assets/graphics/fonts/MDA.png.3.png index f7a7c4789..56429f9f0 100644 Binary files a/assets/graphics/fonts/MDA.png.3.png and b/assets/graphics/fonts/MDA.png.3.png differ diff --git a/assets/graphics/fonts/MDA.png.4.png b/assets/graphics/fonts/MDA.png.4.png index 1f6be0a70..eaf591782 100644 Binary files a/assets/graphics/fonts/MDA.png.4.png and b/assets/graphics/fonts/MDA.png.4.png differ diff --git a/assets/graphics/fonts/MDA.png.5.png b/assets/graphics/fonts/MDA.png.5.png index cb1a9d8c1..e6018e426 100644 Binary files a/assets/graphics/fonts/MDA.png.5.png and b/assets/graphics/fonts/MDA.png.5.png differ diff --git a/assets/graphics/fonts/MDA.png.6.png b/assets/graphics/fonts/MDA.png.6.png index 2d8db80bd..1693a63d8 100644 Binary files a/assets/graphics/fonts/MDA.png.6.png and b/assets/graphics/fonts/MDA.png.6.png differ diff --git a/assets/graphics/fonts/MDA.png.7.png b/assets/graphics/fonts/MDA.png.7.png index 2594e1123..74691bcb9 100644 Binary files a/assets/graphics/fonts/MDA.png.7.png and b/assets/graphics/fonts/MDA.png.7.png differ diff --git a/assets/graphics/fonts/MDA.png.8.png b/assets/graphics/fonts/MDA.png.8.png index 03db0f01a..ff4606a71 100644 Binary files a/assets/graphics/fonts/MDA.png.8.png and b/assets/graphics/fonts/MDA.png.8.png differ diff --git a/assets/graphics/fonts/MDA.png.9.png b/assets/graphics/fonts/MDA.png.9.png index 8cd5a6f36..e9662d308 100644 Binary files a/assets/graphics/fonts/MDA.png.9.png and b/assets/graphics/fonts/MDA.png.9.png differ diff --git a/assets/graphics/fonts/cp949.png b/assets/graphics/fonts/milky.png similarity index 100% rename from assets/graphics/fonts/cp949.png rename to assets/graphics/fonts/milky.png diff --git a/assets/graphics/fonts/cp949.png.0.png b/assets/graphics/fonts/milky.png.0.png similarity index 100% rename from assets/graphics/fonts/cp949.png.0.png rename to assets/graphics/fonts/milky.png.0.png diff --git a/assets/graphics/fonts/cp949.png.1.png b/assets/graphics/fonts/milky.png.1.png similarity index 100% rename from assets/graphics/fonts/cp949.png.1.png rename to assets/graphics/fonts/milky.png.1.png diff --git a/assets/graphics/fonts/cp949.png.10.png b/assets/graphics/fonts/milky.png.10.png similarity index 100% rename from assets/graphics/fonts/cp949.png.10.png rename to assets/graphics/fonts/milky.png.10.png diff --git a/assets/graphics/fonts/cp949.png.11.png b/assets/graphics/fonts/milky.png.11.png similarity index 100% rename from assets/graphics/fonts/cp949.png.11.png rename to assets/graphics/fonts/milky.png.11.png diff --git a/assets/graphics/fonts/cp949.png.12.png b/assets/graphics/fonts/milky.png.12.png similarity index 100% rename from assets/graphics/fonts/cp949.png.12.png rename to assets/graphics/fonts/milky.png.12.png diff --git a/assets/graphics/fonts/cp949.png.13.png b/assets/graphics/fonts/milky.png.13.png similarity index 100% rename from assets/graphics/fonts/cp949.png.13.png rename to assets/graphics/fonts/milky.png.13.png diff --git a/assets/graphics/fonts/cp949.png.14.png b/assets/graphics/fonts/milky.png.14.png similarity index 100% rename from assets/graphics/fonts/cp949.png.14.png rename to assets/graphics/fonts/milky.png.14.png diff --git a/assets/graphics/fonts/cp949.png.15.png b/assets/graphics/fonts/milky.png.15.png similarity index 100% rename from assets/graphics/fonts/cp949.png.15.png rename to assets/graphics/fonts/milky.png.15.png diff --git a/assets/graphics/fonts/cp949.png.2.png b/assets/graphics/fonts/milky.png.2.png similarity index 100% rename from assets/graphics/fonts/cp949.png.2.png rename to assets/graphics/fonts/milky.png.2.png diff --git a/assets/graphics/fonts/cp949.png.3.png b/assets/graphics/fonts/milky.png.3.png similarity index 100% rename from assets/graphics/fonts/cp949.png.3.png rename to assets/graphics/fonts/milky.png.3.png diff --git a/assets/graphics/fonts/cp949.png.4.png b/assets/graphics/fonts/milky.png.4.png similarity index 100% rename from assets/graphics/fonts/cp949.png.4.png rename to assets/graphics/fonts/milky.png.4.png diff --git a/assets/graphics/fonts/cp949.png.5.png b/assets/graphics/fonts/milky.png.5.png similarity index 100% rename from assets/graphics/fonts/cp949.png.5.png rename to assets/graphics/fonts/milky.png.5.png diff --git a/assets/graphics/fonts/cp949.png.6.png b/assets/graphics/fonts/milky.png.6.png similarity index 100% rename from assets/graphics/fonts/cp949.png.6.png rename to assets/graphics/fonts/milky.png.6.png diff --git a/assets/graphics/fonts/cp949.png.7.png b/assets/graphics/fonts/milky.png.7.png similarity index 100% rename from assets/graphics/fonts/cp949.png.7.png rename to assets/graphics/fonts/milky.png.7.png diff --git a/assets/graphics/fonts/cp949.png.8.png b/assets/graphics/fonts/milky.png.8.png similarity index 100% rename from assets/graphics/fonts/cp949.png.8.png rename to assets/graphics/fonts/milky.png.8.png diff --git a/assets/graphics/fonts/cp949.png.9.png b/assets/graphics/fonts/milky.png.9.png similarity index 100% rename from assets/graphics/fonts/cp949.png.9.png rename to assets/graphics/fonts/milky.png.9.png diff --git a/src/net/torvald/imagefont/TinyAlphNum.kt b/src/net/torvald/imagefont/TinyAlphNum.kt index 5343735b8..343a9e2b6 100644 --- a/src/net/torvald/imagefont/TinyAlphNum.kt +++ b/src/net/torvald/imagefont/TinyAlphNum.kt @@ -28,7 +28,7 @@ class TinyAlphNum : Font { private val mappingTable = HashMap()*/ init { - fontSheet = SpriteSheet("./assets/graphics/fonts/cp949.png", W, H) + fontSheet = SpriteSheet("./assets/graphics/fonts/milky.png", W, H) //chars.forEachIndexed { i, c -> mappingTable[c.toInt()] = i } } diff --git a/src/net/torvald/terrarum/virtualcomputer/assets/lua/ROMLIB.lua b/src/net/torvald/terrarum/virtualcomputer/assets/lua/ROMLIB.lua index d7c4aee48..2a35b0367 100644 --- a/src/net/torvald/terrarum/virtualcomputer/assets/lua/ROMLIB.lua +++ b/src/net/torvald/terrarum/virtualcomputer/assets/lua/ROMLIB.lua @@ -2,6 +2,9 @@ Created by minjaesong on 16-09-15. --]] +------------- +-- ALIASES -- +------------- fs.run = function(p) local f = fs.open(p, "r") @@ -11,6 +14,9 @@ end _G.loadstring = _G.load +_G.print = term.print + + -------------- -- HEXUTILS -- -------------- diff --git a/src/net/torvald/terrarum/virtualcomputer/luaapi/Filesystem.kt b/src/net/torvald/terrarum/virtualcomputer/luaapi/Filesystem.kt index 19513e9dd..be2869d99 100644 --- a/src/net/torvald/terrarum/virtualcomputer/luaapi/Filesystem.kt +++ b/src/net/torvald/terrarum/virtualcomputer/luaapi/Filesystem.kt @@ -6,6 +6,7 @@ import li.cil.repack.org.luaj.vm2.lib.TwoArgFunction import li.cil.repack.org.luaj.vm2.lib.ZeroArgFunction import net.torvald.terrarum.Terrarum import net.torvald.terrarum.virtualcomputer.computer.BaseTerrarumComputer +import net.torvald.terrarum.virtualcomputer.luaapi.Term.Companion.checkIBM437 import java.io.* import java.nio.file.Files import java.nio.file.Path @@ -368,7 +369,7 @@ internal class Filesystem(globals: Globals, computer: BaseTerrarumComputer) { private class FileClassWriteBytes(val fos: FileOutputStream): OneArgFunction() { override fun call(byteString: LuaValue): LuaValue { - val byteString = byteString.checkjstring() + val byteString = byteString.checkIBM437() val bytearr = ByteArray(byteString.length, { byteString[it].toByte() }) fos.write(bytearr) @@ -378,7 +379,7 @@ internal class Filesystem(globals: Globals, computer: BaseTerrarumComputer) { private class FileClassPrintText(val fw: FileWriter): OneArgFunction() { override fun call(string: LuaValue): LuaValue { - val text = string.checkjstring() + val text = string.checkIBM437() fw.write(text) return LuaValue.NONE } @@ -386,7 +387,7 @@ internal class Filesystem(globals: Globals, computer: BaseTerrarumComputer) { private class FileClassPrintlnText(val fw: FileWriter): OneArgFunction() { override fun call(string: LuaValue): LuaValue { - val text = string.checkjstring() + "\n" + val text = string.checkIBM437() + "\n" fw.write(text) return LuaValue.NONE } @@ -415,7 +416,7 @@ internal class Filesystem(globals: Globals, computer: BaseTerrarumComputer) { private class FileClassReadAllBytes(val path: Path): ZeroArgFunction() { override fun call(): LuaValue { val byteArr = Files.readAllBytes(path) - val s: String = java.lang.String(byteArr, "ISO-8859-1").toString() + val s: String = java.lang.String(byteArr, "IBM437").toString() return LuaValue.valueOf(s) } } diff --git a/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt b/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt index 222c16e06..1a3c54519 100644 --- a/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt +++ b/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt @@ -4,6 +4,7 @@ import li.cil.repack.org.luaj.vm2.* import li.cil.repack.org.luaj.vm2.lib.* import net.torvald.terrarum.virtualcomputer.terminal.Teletype import net.torvald.terrarum.virtualcomputer.terminal.Terminal +import java.nio.charset.Charset /** * APIs must have some extent of compatibility with ComputerCraft by dan200 @@ -26,6 +27,7 @@ internal class Term(globals: Globals, term: Teletype) { if (term is Terminal) { globals["term"]["emitRaw"] = Term.EmitRaw(term) globals["term"]["emit"] = Term.Emit(term) + globals["term"]["emitString"] = Term.EmitString(term) globals["term"]["resetColor"] = Term.ResetColour(term) globals["term"]["resetColour"] = Term.ResetColour(term) globals["term"]["clear"] = Term.Clear(term) @@ -44,18 +46,28 @@ internal class Term(globals: Globals, term: Teletype) { } } + companion object { + fun LuaValue.checkIBM437(): String { + if (this is LuaString) + return m_bytes.copyOfRange(m_offset, m_length).toString(Charset.forName("ISO-8859-1")) + // it only works if Charset is ISO-8859, despite of the name "IBM437" + else + throw LuaError("bad argument (string expected, got ${this.typename()})") + } + } + class WriteString(val tty: Teletype) : LuaFunction() { override fun call(p0: LuaValue): LuaValue { if (tty is Terminal) - tty.writeString(p0.checkjstring()) + tty.writeString(p0.checkIBM437()) else - tty.writeChars(p0.checkjstring()) + tty.writeChars(p0.checkIBM437()) return LuaValue.NONE } override fun call(s: LuaValue, x: LuaValue, y: LuaValue): LuaValue { if (tty is Terminal) - tty.writeString(s.checkjstring(), x.checkint(), y.checkint()) + tty.writeString(s.checkIBM437(), x.checkint(), y.checkint()) else throw LuaError("couldn't move cursor; TTY is one-dimensional") return LuaValue.NONE @@ -65,15 +77,15 @@ internal class Term(globals: Globals, term: Teletype) { class PrintString(val tty: Teletype) : LuaFunction() { override fun call(p0: LuaValue): LuaValue { if (tty is Terminal) - tty.printString(p0.checkjstring()) + tty.printString(p0.checkIBM437()) else - tty.printChars(p0.checkjstring()) + tty.printChars(p0.checkIBM437()) return LuaValue.NONE } override fun call(s: LuaValue, x: LuaValue, y: LuaValue): LuaValue { if (tty is Terminal) - tty.printString(s.checkjstring(), x.checkint(), y.checkint()) + tty.printString(s.checkIBM437(), x.checkint(), y.checkint()) else throw LuaError("couldn't move cursor; TTY is one-dimensional") return LuaValue.NONE @@ -87,16 +99,23 @@ internal class Term(globals: Globals, term: Teletype) { } } - class EmitRaw(val term: Terminal) : OneArgFunction() { - override fun call(p0: LuaValue): LuaValue { - term.emitChar(p0.checkint()) + class EmitRaw(val term: Terminal) : ThreeArgFunction() { + override fun call(p0: LuaValue, x: LuaValue, y: LuaValue): LuaValue { + term.emitChar(p0.checkint(), x.checkint(), y.checkint()) return LuaValue.NONE } } - class Emit(val term: Terminal) : OneArgFunction() { - override fun call(p0: LuaValue): LuaValue { - term.emitChar(p0.checkint().toChar()) + class Emit(val term: Terminal) : ThreeArgFunction() { + override fun call(p0: LuaValue, x: LuaValue, y: LuaValue): LuaValue { + term.emitChar(p0.checkint().toChar(), x.checkint(), y.checkint()) + return LuaValue.NONE + } + } + + class EmitString(val term: Terminal) : ThreeArgFunction() { + override fun call(p0: LuaValue, x: LuaValue, y: LuaValue): LuaValue { + term.emitString(p0.checkIBM437(), x.checkint(), y.checkint()) return LuaValue.NONE } } diff --git a/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt b/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt index 03ba90ace..64088bd31 100644 --- a/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt +++ b/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt @@ -93,6 +93,7 @@ open class SimpleTextTerminal( open protected val colourScreen = if (colour) Color(4, 4, 4) else Color(19, 19, 19) + override fun getColor(index: Int): Color = colours[index] override fun update(gc: GameContainer, delta: Int) { @@ -191,14 +192,14 @@ open class SimpleTextTerminal( /** Emits a bufferChar. Does not move cursor * It is also not affected by the control sequences; just print them out as symbol */ - override fun emitChar(bufferChar: Int) { - screenBuffer.drawBuffer(cursorX, cursorY, bufferChar.toChar()) + override fun emitChar(bufferChar: Int, x: Int, y: Int) { + screenBuffer.drawBuffer(x, y, bufferChar.toChar()) } /** Emits a char. Does not move cursor * It is also not affected by the control sequences; just print them out as symbol */ - override fun emitChar(c: Char) { - screenBuffer.drawBuffer(cursorX, cursorY, c.toInt().and(0xFF).toChar(), colourKey) + override fun emitChar(c: Char, x: Int, y: Int) { + screenBuffer.drawBuffer(x, y, c.toInt().and(0xFF).toChar(), colourKey) } /** Prints a char and move cursor accordingly. */ @@ -244,18 +245,21 @@ open class SimpleTextTerminal( /** Emits a string and move cursor accordingly. */ override fun writeString(s: String, x: Int, y: Int) { setCursor(x, y) - emitString(s) - val absCursorPos = cursorX + cursorY * width + s.length - setCursor(absCursorPos % width, absCursorPos / width) + + for (i in 0..s.length - 1) { + printChar(s[i]) + wrap() + } } - /** Emits a string. Does not move cursor */ - override fun emitString(s: String) { - val x = cursorX - val y = cursorY + /** Emits a string, does not affected by control sequences. Does not move cursor */ + override fun emitString(s: String, x: Int, y: Int) { + setCursor(x, y) - for (i in 0..s.length - 1) - printChar(s[i]) + for (i in 0..s.length - 1) { + emitChar(s[i]) + wrap() + } setCursor(x, y) } diff --git a/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt b/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt index 6df4e4fde..73fe1e90a 100644 --- a/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt +++ b/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt @@ -39,14 +39,14 @@ interface Terminal : Teletype { fun setCursor(x: Int, y: Int) /** Emits a bufferChar. Does not move cursor * It is also not affected by the control sequences; just print them out as symbol */ - fun emitChar(bufferChar: Int) + fun emitChar(bufferChar: Int, x: Int = cursorX, y: Int = cursorY) /** Emits a char. Does not move cursor * It is also not affected by the control sequences; just print them out as symbol */ - fun emitChar(c: Char) + fun emitChar(c: Char, x: Int = cursorX, y: Int = cursorY) /** Prints a char and move cursor accordingly. */ override fun printChar(c: Char) - /** Emits a string. Does not move cursor */ - fun emitString(s: String) + /** Emits a string, does not affected by control sequences. Does not move cursor */ + fun emitString(s: String, x: Int = cursorX, y: Int = cursorY) /** Emits a string and move cursor accordingly, then do LF */ fun printString(s: String, x: Int = cursorX, y: Int = cursorY) /** Emits a string and move cursor accordingly. */