From bd4c95b3214f234cc76ee84319a040c82c8c3234 Mon Sep 17 00:00:00 2001 From: Song Minjae Date: Mon, 26 Sep 2016 23:28:15 +0900 Subject: [PATCH] Working beeper (it can send morse) Former-commit-id: 02553a52405ef4bba0d3f8f781f710b6c5b3ae16 Former-commit-id: 6cee7d2b44563a664756651d73a4b1ddfa70cf2f --- src/net/torvald/terrarum/StateVTTest.kt | 6 +- src/net/torvald/terrarum/Terrarum.kt | 4 +- .../virtualcomputer/assets/lua/BOOT.lua | 9 +- .../computer/BaseTerrarumComputer.kt | 141 +++++++++++++++++- .../luaapi/HostAccessProvider.kt | 10 +- .../terrarum/virtualcomputer/luaapi/Term.kt | 10 +- .../terminal/SimpleTextTerminal.kt | 137 ++++++++--------- .../virtualcomputer/terminal/Terminal.kt | 11 +- .../worldobject/FixtureBasicTerminal.kt | 6 +- .../worldobject/FixtureComputerBase.kt | 3 +- work_files/monotone.ans | 6 +- work_files/monotone.png | Bin 54987 -> 55048 bytes 12 files changed, 242 insertions(+), 101 deletions(-) diff --git a/src/net/torvald/terrarum/StateVTTest.kt b/src/net/torvald/terrarum/StateVTTest.kt index f22394c21..5404fa38a 100644 --- a/src/net/torvald/terrarum/StateVTTest.kt +++ b/src/net/torvald/terrarum/StateVTTest.kt @@ -20,13 +20,15 @@ import org.newdawn.slick.state.StateBasedGame class StateVTTest : BasicGameState() { // HiRes: 100x64, LoRes: 80x25 - val vt = SimpleTextTerminal(SimpleTextTerminal.GREEN, 80, 25, colour = false, hires = false) - val computerInside = BaseTerrarumComputer(vt) + val computerInside = BaseTerrarumComputer() + val vt = SimpleTextTerminal(SimpleTextTerminal.GREEN, 80, 25, computerInside, colour = false, hires = false) + val vtUI = Image(vt.displayW, vt.displayH) init { + computerInside.attachTerminal(vt) } override fun init(container: GameContainer, game: StateBasedGame) { diff --git a/src/net/torvald/terrarum/Terrarum.kt b/src/net/torvald/terrarum/Terrarum.kt index 662a5af96..88dcd9242 100644 --- a/src/net/torvald/terrarum/Terrarum.kt +++ b/src/net/torvald/terrarum/Terrarum.kt @@ -100,8 +100,8 @@ constructor(gamename: String) : StateBasedGame(gamename) { gc.graphics.clear() // clean up any 'dust' in the buffer - //addState(StateVTTest()) - addState(StateTestingSandbox()) + addState(StateVTTest()) + //addState(StateTestingSandbox()) //addState(StateSplash()) //addState(StateMonitorCheck()) //addState(StateFontTester()) diff --git a/src/net/torvald/terrarum/virtualcomputer/assets/lua/BOOT.lua b/src/net/torvald/terrarum/virtualcomputer/assets/lua/BOOT.lua index 20e4136da..e88d626ce 100644 --- a/src/net/torvald/terrarum/virtualcomputer/assets/lua/BOOT.lua +++ b/src/net/torvald/terrarum/virtualcomputer/assets/lua/BOOT.lua @@ -950,7 +950,7 @@ sandbox._G = sandbox package.path = "/net/torvald/terrarum/virtualcomputer/assets/lua/?.lua;" .. package.path -- global variables -_G._VERSION = "Luaj-jse 5.2.3" +_G._VERSION = "Luaj-jse 3.0.1 (Lua 5.2.3)" _G.EMDASH = string.char(0xC4) _G.UNCHECKED = string.char(0x9C) -- box unchecked _G.CHECKED = string.char(0x9D) -- box checked @@ -962,6 +962,8 @@ _G.DC3 = string.char(19) -- dim grey _G.DC4 = string.char(20) -- light grey _G.DLE = string.char(16) -- default error colour _G.runscript = function(s, src, ...) + if s:byte(1) == 27 then error("Bytecode execution is prohibited.") end + local code, reason = load(s, src) if code then @@ -971,6 +973,8 @@ _G.runscript = function(s, src, ...) end end _G.__scanMode__ = "UNINIT" -- part of inputstream implementation +_G.bell = function(patn) term.bell(patn or ".") end +_G.beep = _G.bell local screenbufferdim = term.width() * term.height() local screencolours = 4 @@ -995,6 +999,9 @@ computer.freeMemory = function() return totalMemory() - getMemory() end -- load libraries that coded in Lua require("ROMLIB") +-- POST passed, initialise beeper +beep "." + -- load bios, if any if fs.exists(computer.bootloader) then shell.run(computer.bootloader) end -- halt/run luaprompt upon the termination of bios. diff --git a/src/net/torvald/terrarum/virtualcomputer/computer/BaseTerrarumComputer.kt b/src/net/torvald/terrarum/virtualcomputer/computer/BaseTerrarumComputer.kt index bf073505c..02a1f22ab 100644 --- a/src/net/torvald/terrarum/virtualcomputer/computer/BaseTerrarumComputer.kt +++ b/src/net/torvald/terrarum/virtualcomputer/computer/BaseTerrarumComputer.kt @@ -1,9 +1,11 @@ package net.torvald.terrarum.virtualcomputer.computer +import com.jme3.math.FastMath import li.cil.repack.org.luaj.vm2.Globals import li.cil.repack.org.luaj.vm2.LuaError import li.cil.repack.org.luaj.vm2.LuaTable import li.cil.repack.org.luaj.vm2.LuaValue +import li.cil.repack.org.luaj.vm2.lib.TwoArgFunction import li.cil.repack.org.luaj.vm2.lib.ZeroArgFunction import li.cil.repack.org.luaj.vm2.lib.jse.JsePlatform import net.torvald.terrarum.KVHashMap @@ -12,9 +14,13 @@ import net.torvald.terrarum.virtualcomputer.luaapi.* import net.torvald.terrarum.virtualcomputer.terminal.* import net.torvald.terrarum.virtualcomputer.worldobject.ComputerPartsCodex import net.torvald.terrarum.virtualcomputer.worldobject.FixtureComputerBase +import org.lwjgl.BufferUtils +import org.lwjgl.openal.AL +import org.lwjgl.openal.AL10 import org.newdawn.slick.GameContainer import org.newdawn.slick.Input import java.io.* +import java.nio.ByteBuffer /** * A part that makes "computer fixture" actually work @@ -24,11 +30,12 @@ import java.io.* * @param term : terminal that is connected to the computer fixtures, null if not connected any. * Created by minjaesong on 16-09-10. */ -class BaseTerrarumComputer(val term: Teletype? = null) { +class BaseTerrarumComputer() { val DEBUG_UNLIMITED_MEM = false - val luaJ_globals: Globals = JsePlatform.debugGlobals() + lateinit var luaJ_globals: Globals + private set var termOut: PrintStream? = null private set @@ -59,6 +66,9 @@ class BaseTerrarumComputer(val term: Teletype? = null) { lateinit var input: Input private set + lateinit var term: Teletype + private set + init { computerValue["memslot0"] = 4864 // -1 indicates mem slot is empty computerValue["memslot1"] = -1 // put index of item here @@ -82,12 +92,17 @@ class BaseTerrarumComputer(val term: Teletype? = null) { // boot device computerValue["boot"] = computerValue.getAsString("hda")!! - - - if (term != null) initSandbox(term) + + } + + fun attachTerminal(term: Teletype) { + this.term = term + initSandbox(term) } fun initSandbox(term: Teletype) { + luaJ_globals = JsePlatform.debugGlobals() + termOut = TerminalPrintStream(term) termErr = TerminalPrintStream(term) termIn = TerminalInputStream(term) @@ -200,6 +215,7 @@ class BaseTerrarumComputer(val term: Teletype? = null) { else throw IllegalArgumentException("Unsupported mode: $mode") + chunk.call() } catch (e: LuaError) { @@ -216,4 +232,119 @@ class BaseTerrarumComputer(val term: Teletype? = null) { return LuaValue.valueOf(computer.memSize) } } + + class EmitTone(val computer: BaseTerrarumComputer) : TwoArgFunction() { + override fun call(millisec: LuaValue, freq: LuaValue): LuaValue { + computer.playTone(millisec.toint(), freq.tofloat()) + return LuaValue.NONE + } + } + + /////////////////// + // BEEPER DRIVER // + /////////////////// + + private val sampleRate = 22050 + private var beepSource: Int? = null + private var beepBuffer: Int? = null + var audioData: ByteBuffer? = null + + /** + * @param duration : milliseconds + */ + private fun makeAudioData(duration: Int, freq: Float): ByteBuffer { + val audioData = BufferUtils.createByteBuffer(duration.times(sampleRate).div(1000)) + + val realDuration = duration * sampleRate / 1000 + val chopSize = freq * 2f / sampleRate + + val amp = Math.max(4600f / freq, 1f) + val nHarmonics = 2 + + val transitionThre = 2300f + + if (freq == 0f) { + for (x in 0..realDuration - 1) { + audioData.put(0x00.toByte()) + } + } + else if (freq < transitionThre) { // chopper generator (for low freq) + for (x in 0..realDuration - 1) { + var sine: Float = amp * FastMath.cos(FastMath.PI * x * chopSize) + if (sine > 1f) sine = 1f + else if (sine < -1f) sine = -1f + audioData.put( + (0.5f + 0.5f * sine).times(0xFF).toByte() + ) + } + } + else { // harmonics generator (for high freq) + for (x in 0..realDuration - 1) { + var sine: Float = 0f + for (k in 0..nHarmonics) { // mix only odd harmonics to make squarewave + sine += (1f / (2*k + 1)) * + FastMath.sin((2 * k + 1) * FastMath.PI * x * chopSize) + } + audioData.put( + (0.5f + 0.5f * sine).times(0xFF).toByte() + ) + } + } + + audioData.rewind() + + return audioData + } + + internal fun playTone(leninmilli: Int, freq: Float) { + audioData = makeAudioData(leninmilli, freq) + + + if (!AL.isCreated()) AL.create() + + + // Clear error stack. + AL10.alGetError() + + beepBuffer = AL10.alGenBuffers() + checkALError() + + try { + AL10.alBufferData(beepBuffer!!, AL10.AL_FORMAT_MONO8, audioData, sampleRate) + checkALError() + + beepSource = AL10.alGenSources() + checkALError() + + try { + AL10.alSourceQueueBuffers(beepSource!!, beepBuffer!!) + checkALError() + + AL10.alSource3f(beepSource!!, AL10.AL_POSITION, 0f, 0f, 1f) + AL10.alSourcef(beepSource!!, AL10.AL_REFERENCE_DISTANCE, 1f) + AL10.alSourcef(beepSource!!, AL10.AL_MAX_DISTANCE, 1f) + AL10.alSourcef(beepSource!!, AL10.AL_GAIN, 0.3f) + checkALError() + + AL10.alSourcePlay(beepSource!!) + checkALError() + + } + catch (e: ALException) { + AL10.alDeleteSources(beepSource!!) + } + } + catch (e: ALException) { + if (beepSource != null) AL10.alDeleteSources(beepSource!!) + } + } + + // Custom implementation of Util.checkALError() that uses our custom exception. + private fun checkALError() { + val errorCode = AL10.alGetError() + if (errorCode != AL10.AL_NO_ERROR) { + throw ALException(errorCode) + } + } + } \ No newline at end of file diff --git a/src/net/torvald/terrarum/virtualcomputer/luaapi/HostAccessProvider.kt b/src/net/torvald/terrarum/virtualcomputer/luaapi/HostAccessProvider.kt index a67be1e0f..e9d485770 100644 --- a/src/net/torvald/terrarum/virtualcomputer/luaapi/HostAccessProvider.kt +++ b/src/net/torvald/terrarum/virtualcomputer/luaapi/HostAccessProvider.kt @@ -22,11 +22,11 @@ internal class HostAccessProvider(globals: Globals, computer: BaseTerrarumComput globals["native"]["println"] = PrintLn() globals["native"]["isHalted"] = IsHalted(computer) - globals["native"]["closeInputString"] = NativeCloseInputString(computer.term!!) - globals["native"]["closeInputKey"] = NativeCloseInputKey(computer.term!!) - globals["native"]["openInput"] = NativeOpenInput(computer.term!!) - globals["native"]["getLastStreamInput"] = NativeGetLastStreamInput(computer.term!!) - globals["native"]["getLastKeyPress"] = NativeGetLastKeyPress(computer.term!!) + globals["native"]["closeInputString"] = NativeCloseInputString(computer.term) + globals["native"]["closeInputKey"] = NativeCloseInputKey(computer.term) + globals["native"]["openInput"] = NativeOpenInput(computer.term) + globals["native"]["getLastStreamInput"] = NativeGetLastStreamInput(computer.term) + globals["native"]["getLastKeyPress"] = NativeGetLastKeyPress(computer.term) // while lua's dofile/require is fixiated to fs, this command allows // libraries in JAR to be loaded. diff --git a/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt b/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt index 94990e3f5..8f046be6b 100644 --- a/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt +++ b/src/net/torvald/terrarum/virtualcomputer/luaapi/Term.kt @@ -24,6 +24,7 @@ internal class Term(globals: Globals, term: Teletype) { globals["term"]["width"] = Term.GetWidth(term) globals["term"]["scroll"] = Term.Scroll(term) globals["term"]["isTeletype"] = Term.IsTeletype(term) + globals["term"]["bell"] = Term.Bell(term) if (term is Terminal) { globals["term"]["emitRaw"] = Term.EmitRaw(term) @@ -59,7 +60,14 @@ internal class Term(globals: Globals, term: Teletype) { throw LuaError("bad argument (string expected, got ${this.typename()})") } } - + + class Bell(val tty: Teletype) : OneArgFunction() { + override fun call(pattern: LuaValue): LuaValue { + tty.bell(pattern.checkjstring()) + return LuaValue.NONE + } + } + class WriteString(val tty: Teletype) : LuaFunction() { override fun call(p0: LuaValue): LuaValue { if (tty is Terminal) diff --git a/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt b/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt index e361617b2..25a945e00 100644 --- a/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt +++ b/src/net/torvald/terrarum/virtualcomputer/terminal/SimpleTextTerminal.kt @@ -5,12 +5,14 @@ import net.torvald.aa.ColouredFastFont import net.torvald.terrarum.blendNormal import net.torvald.terrarum.blendMul import net.torvald.terrarum.blendScreen +import net.torvald.terrarum.virtualcomputer.computer.BaseTerrarumComputer import org.lwjgl.BufferUtils import org.lwjgl.openal.AL import org.lwjgl.openal.AL10 import org.lwjgl.openal.AL11 import org.newdawn.slick.* import java.nio.ByteBuffer +import java.util.* /** * Default text terminal, four text colours (black, grey, lgrey, white). @@ -18,7 +20,7 @@ import java.nio.ByteBuffer * Created by minjaesong on 16-09-07. */ open class SimpleTextTerminal( - phosphorColour: Color, override val width: Int, override val height: Int, + phosphorColour: Color, override val width: Int, override val height: Int, private val host: BaseTerrarumComputer, colour: Boolean = false, hires: Boolean = false ) : Terminal { /** @@ -107,13 +109,31 @@ open class SimpleTextTerminal( wrap() - // beep AL-related - if (beepSource != null && AL10.alGetSourcei(beepSource!!, AL10.AL_SOURCE_STATE) != AL10.AL_PLAYING) { - AL10.alDeleteSources(beepSource!!) - AL10.alDeleteBuffers(beepBuffer!!) - beepSource = null - beepBuffer == null + // start beep queue + if (beepQueue.size > 0 && beepCursor == -1) { + beepCursor = 0 } + + // continue beep queue + if (beepCursor >= 0 && beepQueueLineExecTimer >= beepQueueGetLenOfPtn(beepCursor)) { + beepQueueLineExecTimer -= beepQueueGetLenOfPtn(beepCursor) + beepCursor += 1 + beepQueueFired = false + } + + // complete beep queue + if (beepCursor >= beepQueue.size) { + clearBeepQueue() + println("!! Beep queue clear") + } + + // actually play queue + if (beepCursor >= 0 && beepQueue.size > 0 && !beepQueueFired) { + beep(beepQueue[beepCursor].first, beepQueue[beepCursor].second) + beepQueueFired = true + } + + if (beepQueueFired) beepQueueLineExecTimer += delta } private fun wrap() { @@ -312,85 +332,48 @@ open class SimpleTextTerminal( foreColour = foreDefault } - private val sampleRate = 22050 private val maxDuration = 10000 - private val beepSamples = maxDuration.div(1000).times(sampleRate) - private var beepSource: Int? = null - private var beepBuffer: Int? = null - override fun beep(freq: Float, duration: Int) { - throw NotImplementedError("errenous OpenAL behaviour; *grunts*") + // let's regard it as a tracker... + private val beepQueue = ArrayList>() + private var beepCursor = -1 + private var beepQueueLineExecTimer = 0 // millisec + private var beepQueueFired = false - val audioData = BufferUtils.createByteBuffer(duration.times(sampleRate).div(1000)) - - var chop = false - val realDuration = Math.min(maxDuration, duration) - - for (i in 0..realDuration - 1) { - if (i.mod(freq) < 1.0) chop = !chop - audioData.put(if (chop) 0xFF.toByte() else 0x00.toByte()) - } - - audioData.rewind() - - - - // Clear error stack. - AL10.alGetError() - - beepBuffer = AL10.alGenBuffers() - checkALError() - - try { - AL10.alBufferData(beepBuffer!!, AL10.AL_FORMAT_MONO8, audioData, sampleRate) - checkALError() - - beepSource = AL10.alGenSources() - checkALError() - - try { - AL10.alSourceQueueBuffers(beepSource!!, beepBuffer!!) - checkALError() - - AL10.alSource3f(beepSource!!, AL10.AL_POSITION, 0f, 0f, 1f) - AL10.alSourcef(beepSource!!, AL10.AL_REFERENCE_DISTANCE, 1f) - AL10.alSourcef(beepSource!!, AL10.AL_MAX_DISTANCE, 1f) - AL10.alSourcef(beepSource!!, AL10.AL_GAIN, 0.3f) - checkALError() - - AL10.alSourcePlay(beepSource!!) - checkALError() - - } - catch (e: ALException) { - AL10.alDeleteSources(beepSource!!) - } - } - catch (e: ALException) { - if (beepSource != null) AL10.alDeleteSources(beepSource!!) - } - - - /*def checkFinished = AL10.alGetSourcei(source, AL10.AL_SOURCE_STATE) != AL10.AL_PLAYING && { - AL10.alDeleteSources(source) - AL10.alDeleteBuffers(buffer) - true - }*/ - } - - // Custom implementation of Util.checkALError() that uses our custom exception. - private fun checkALError() { - val errorCode = AL10.alGetError() - if (errorCode != AL10.AL_NO_ERROR) { - throw ALException(errorCode) - } + /** + * @param duration: milliseconds + * @param freg: Frequency (float) + */ + override fun beep(duration: Int, freq: Float) { + println("!! Beep playing row $beepCursor, d ${Math.min(duration, maxDuration)} f $freq") + host.playTone(Math.min(duration, maxDuration), freq) } /** for "beep code" on modern BIOS. Pattern: - . */ override fun bell(pattern: String) { - throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates. + clearBeepQueue() + for (c in pattern) { + when (c) { + '.' -> { enqueueBeep(80, 1000f); enqueueBeep(80, 0f) } + '-' -> { enqueueBeep(250, 1000f); enqueueBeep(80, 0f) } + ' ' -> { enqueueBeep(250, 0f) } + else -> throw IllegalArgumentException("Unacceptable pattern: $c (from '$pattern')") + } + } } + fun clearBeepQueue() { + beepQueue.clear() + beepCursor = -1 + beepQueueLineExecTimer = 0 + } + + fun enqueueBeep(duration: Int, freq: Float) { + beepQueue.add(Pair(Math.min(duration, maxDuration), freq)) + } + + fun beepQueueGetLenOfPtn(ptnIndex: Int) = beepQueue[ptnIndex].first + override var lastInputByte: Int = -1 var sb: StringBuilder = StringBuilder() private var inputOpen = false diff --git a/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt b/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt index 73fe1e90a..4f2850cfd 100644 --- a/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt +++ b/src/net/torvald/terrarum/virtualcomputer/terminal/Terminal.kt @@ -58,11 +58,16 @@ interface Terminal : Teletype { fun setColour(back: Int, fore: Int) fun resetColour() /** - * @param freg: Frequency (float) * @param duration: milliseconds + * @param freg: Frequency (float) + */ + fun beep(duration: Int = 80, freq: Float = 1000f) + /** + * Pattern: - . + * . 80 ms + * - 200 ms + * ( ) 80 ms */ - fun beep(freq: Float = 1000f, duration: Int = 200) - /** for "beep code" on modern BIOS. Pattern: - . */ override fun bell(pattern: String) /** Requires keyPressed() event to be processed. * diff --git a/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureBasicTerminal.kt b/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureBasicTerminal.kt index 0df9db345..737ef84b7 100644 --- a/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureBasicTerminal.kt +++ b/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureBasicTerminal.kt @@ -2,6 +2,7 @@ package net.torvald.terrarum.virtualcomputer.worldobject import net.torvald.terrarum.gameactors.AVKey import net.torvald.terrarum.gameactors.FixtureBase +import net.torvald.terrarum.virtualcomputer.computer.BaseTerrarumComputer import net.torvald.terrarum.virtualcomputer.terminal.SimpleTextTerminal import net.torvald.terrarum.virtualcomputer.terminal.Terminal import net.torvald.terrarum.virtualcomputer.worldobject.ui.UITextTerminal @@ -13,10 +14,13 @@ import java.util.* */ class FixtureBasicTerminal(phosphor: Color) : FixtureBase() { - val vt: Terminal = SimpleTextTerminal(phosphor, 80, 25) + val computer = BaseTerrarumComputer() + val vt: Terminal = SimpleTextTerminal(phosphor, 80, 25, computer) val ui = UITextTerminal(vt) init { + computer.attachTerminal(vt) + collisionFlag = COLLISION_PLATFORM actorValue[AVKey.UUID] = UUID.randomUUID().toString() diff --git a/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureComputerBase.kt b/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureComputerBase.kt index 70d405844..4a9456247 100644 --- a/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureComputerBase.kt +++ b/src/net/torvald/terrarum/virtualcomputer/worldobject/FixtureComputerBase.kt @@ -33,7 +33,8 @@ open class FixtureComputerBase() : FixtureBase() { fun attachTerminal(uuid: String) { val fetchedTerminal = getTerminalByUUID(uuid) - computerInside = BaseTerrarumComputer(fetchedTerminal) + computerInside = BaseTerrarumComputer() + computerInside!!.attachTerminal(fetchedTerminal!!) actorValue["computerid"] = computerInside!!.UUID } diff --git a/work_files/monotone.ans b/work_files/monotone.ans index f808ff9a8..d21ab5a64 100644 --- a/work_files/monotone.ans +++ b/work_files/monotone.ans @@ -61,9 +61,9 @@ °3C°úúú úúú°úúú úúú°úúú úúú°úúú úúú° ±±Ý ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ Þ±±±±±± RecPlay °3D°úúú úúú°úúú úúú°úúú úúú°úúú úúú° ±±ÝZÞÝXÞÝCÞÝVÞÝBÞÝNÞÝMÞÝ,ÞÝ.ÞÝ/Þ±Oct±± Trcks 4 °3E°úúú úúú°úúú úúú°úúú úúú°úúú úúú° ±±Ý ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ ÞÝ Þ± -1±± -Tick 08 °3F°úúú úúú°úúú úúú°úúú úúú°úúú úúú° ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± +Tick 00 °3F°úúú úúú°úúú úúú°úúú úúú°úúú úúú° ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ RecPlay RecPlay Trcks 4 Trcks 4  Editable -Tick 08 Tick 08  Fxx eff -SAUCE00 20160924—~dEIBM VGA50 \ No newline at end of file +Tick 00 Tick 00  Current play tick +SAUCE00 20160924u~dEIBM VGA50 \ No newline at end of file diff --git a/work_files/monotone.png b/work_files/monotone.png index e2d366d79aad377fc223ed07e9597384e5302f8e..b3e19724a8e7c3f6dbc394c653578c23230353db 100644 GIT binary patch delta 25275 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 RT?+7{bzSdT*%h0J{{q9?JpBLw delta 25190 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