From ef5fe47274bc87bda63c9a901bcaabc68b1bc8d2 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Wed, 28 Oct 2015 20:01:50 +0300 Subject: [PATCH 1/6] Added "GAME_ENGINE" and "LUNALUA_VER" constants why need GAME_ENGINE constant? Common PGE Engine and LunaLUA constant to identify which engine is uses to run lunadll.lua script. This need to have able use same lunadll.lua script with both PGE Engine and LunaLUA. PGE Engine going to have similar to LunaLUA API, but some super-special functions like mem() will NOT be made at PGE Engine because useless with PGE's opened API. --- LunaDll/Defines.h | 6 +++++- LunaDll/LuaMain/LunaLuaMain.cpp | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/LunaDll/Defines.h b/LunaDll/Defines.h index 00af5fab9..2c6429a55 100644 --- a/LunaDll/Defines.h +++ b/LunaDll/Defines.h @@ -18,7 +18,11 @@ #define LUNALUA_VERSION "LUNALUA V0.7.0.3 BETA" #endif - +// Common PGE Engine and LunaLUA constant to identify which engine is uses to run lunadll.lua script +// This need to have able use same lunadll.lua script with both PGE Engine and LunaLUA. +// PGE Engine going to have similar to LunaLUA API, but some super-special functions like mem() will NOT be made +// at PGE Engine because useless with PGE's opened API. +#define GAME_ENGINE "LunaLUA" #define LUNA_VERSION 8 #define COMPILE_PLAYGROUND 0 //See Misc/Playground.cpp diff --git a/LunaDll/LuaMain/LunaLuaMain.cpp b/LunaDll/LuaMain/LunaLuaMain.cpp index 823873f8d..f08a6cb65 100644 --- a/LunaDll/LuaMain/LunaLuaMain.cpp +++ b/LunaDll/LuaMain/LunaLuaMain.cpp @@ -183,6 +183,9 @@ void CLunaLua::init(LuaLunaType type, std::wstring codePath, std::wstring levelP void CLunaLua::setupDefaults() { object _G = globals(L); + _G["GAME_ENGINE"] = GAME_ENGINE; + _G["LUNALUA_VER"] = LUNALUA_VERSION; + _G["PLAYER_SMALL"] = PLAYER_SMALL; _G["PLAYER_BIG"] = PLAYER_BIG; _G["PLAYER_FIREFLOWER"] = PLAYER_FIREFLOWER; From e12e5d2eba511a3e4890e29cd1100ad18471789b Mon Sep 17 00:00:00 2001 From: Bluenaxela Date: Wed, 28 Oct 2015 22:43:58 -0700 Subject: [PATCH 2/6] Basic changes to implement hDC switching in the GL renderer, as to support editor fullscreen. --- LunaDll/Rendering/GLCompat.h | 16 +++++++ LunaDll/Rendering/GLContextManager.cpp | 63 ++++++++++++++++++++++++-- LunaDll/Rendering/GLContextManager.h | 12 +++-- LunaDll/Rendering/GLEngine.cpp | 17 +++---- LunaDll/Rendering/GLTextureStore.cpp | 36 ++++++++++----- LunaDll/Rendering/GLTextureStore.h | 3 ++ 6 files changed, 122 insertions(+), 25 deletions(-) diff --git a/LunaDll/Rendering/GLCompat.h b/LunaDll/Rendering/GLCompat.h index cc6b48387..3e2681f98 100644 --- a/LunaDll/Rendering/GLCompat.h +++ b/LunaDll/Rendering/GLCompat.h @@ -71,6 +71,22 @@ static inline GLenum glCheckFramebufferStatusANY(GLenum target) { } return GL_FRAMEBUFFER_UNSUPPORTED_EXT; } +static inline void glDeleteFramebuffersANY(GLsizei n, GLuint *framebuffers) { + if (GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object) { + glDeleteFramebuffers(n, framebuffers); + } + else if (GLEW_EXT_framebuffer_object) { + glDeleteFramebuffersEXT(n, framebuffers); + } +} +static inline void glDeleteRenderbuffersANY(GLsizei n, GLuint *renderbuffers) { + if (GLEW_VERSION_3_0 || GLEW_ARB_framebuffer_object) { + glDeleteRenderbuffers(n, renderbuffers); + } + else if (GLEW_EXT_framebuffer_object) { + glDeleteRenderbuffersEXT(n, renderbuffers); + } +} // Core in OpenGL >=1.4 static inline void glBlendFuncSeparateANY(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) diff --git a/LunaDll/Rendering/GLContextManager.cpp b/LunaDll/Rendering/GLContextManager.cpp index 460ed2356..43091a2b6 100644 --- a/LunaDll/Rendering/GLContextManager.cpp +++ b/LunaDll/Rendering/GLContextManager.cpp @@ -11,13 +11,20 @@ GLContextManager g_GLContextManager; GLContextManager::GLContextManager() : hDC(NULL), hCTX(NULL), mInitialized(false), mHadError(false), - mFB(0), mColorRB(0), mDepthRB(0), + mFB(0), mDepthRB(0), mBufTex(NULL, 800, 600) { } bool GLContextManager::Init(HDC hDC) { - // Note: In future versions, check if the hDC is different, and if so - // re-init. + // If we're switching HDCs, deal with it... + if (mInitialized && !mHadError && hDC != this->hDC) { + // If we're switching HDCs, deal with it... + g_GLDraw.UnbindTexture(); // Unbind current texture + g_GLTextureStore.Reset(); // Delete all textures + ReleaseFramebuffer(); // Release framebuffer + ReleaseContext(); // Release context + mInitialized = false; + } // Don't re-run if already run if (mInitialized || mHadError) return true; @@ -72,6 +79,8 @@ bool GLContextManager::InitContextFromHDC(HDC hDC) { pfd.cDepthBits = 32; pfd.iLayerType = PFD_MAIN_PLANE; + mOldPixelFormat = GetPixelFormat(hDC); + int nPixelFormat = ChoosePixelFormat(hDC, &pfd); if (0 == nPixelFormat) return false; @@ -197,3 +206,51 @@ bool GLContextManager::InitProjectionAndState() { } +void GLContextManager::ReleaseFramebuffer() { + // Unbind framebuffer + glBindFramebufferANY(GL_FRAMEBUFFER_EXT, 0); + GLERRORCHECK(); + + // Unbind texture just in case + g_GLDraw.UnbindTexture(); + + // Delete framebuffer + if (mFB) { + glDeleteFramebuffersANY(1, &mFB); + GLERRORCHECK(); + mFB = 0; + } + + // Delete depth renderbuffer + if (mDepthRB) { + glDeleteRenderbuffersANY(1, &mDepthRB); + GLERRORCHECK(); + mDepthRB = 0; + } + + // Delete texture + if (mBufTex.name) { + glDeleteTextures(1, &mBufTex.name); + GLERRORCHECK(); + mBufTex.name = 0; + } +} + +void GLContextManager::ReleaseContext() { + // Delete Context + if (hCTX) { + wglMakeCurrent(NULL, NULL); + wglDeleteContext(hCTX); + hCTX = NULL; + } + + // Restore pixel format if necessary + if (mOldPixelFormat != GetPixelFormat(hDC)) { + PIXELFORMATDESCRIPTOR pfd; + DescribePixelFormat(hDC, mOldPixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &pfd); + SetPixelFormat(hDC, mOldPixelFormat, &pfd); + } + + // Clear hDC + hDC = NULL; +} \ No newline at end of file diff --git a/LunaDll/Rendering/GLContextManager.h b/LunaDll/Rendering/GLContextManager.h index c1e809e11..deec9c29e 100644 --- a/LunaDll/Rendering/GLContextManager.h +++ b/LunaDll/Rendering/GLContextManager.h @@ -18,20 +18,26 @@ class GLContextManager { private: bool mInitialized; bool mHadError; + + // Context variables + int mOldPixelFormat; HDC hDC; HGLRC hCTX; + // Framebuffer variables + // TODO: Move framebuffer into a class. GLuint mFB; - GLuint mColorRB; GLuint mDepthRB; GLDraw::Texture mBufTex; + // Init functions bool InitContextFromHDC(HDC hDC); bool InitFramebuffer(); bool InitProjectionAndState(); - // TODO: Implement the following to support switching hDCs - // void ReleaseContext() + // Release functions + void ReleaseContext(); + void ReleaseFramebuffer(); }; // Instance diff --git a/LunaDll/Rendering/GLEngine.cpp b/LunaDll/Rendering/GLEngine.cpp index 674f56154..725c5cebb 100644 --- a/LunaDll/Rendering/GLEngine.cpp +++ b/LunaDll/Rendering/GLEngine.cpp @@ -66,15 +66,16 @@ BOOL GLEngine::EmulatedStretchBlt(HDC hdcDest, int nXOriginDest, int nYOriginDes HDC hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, DWORD dwRop) { - // TODO: This block of code will need to be changed once - // GLContextManager is modified to handle re-init - // with a new hDC - if (!g_GLContextManager.IsInitialized()) { - if (!g_GLContextManager.Init(hdcDest)) { - dbgboxA("Failed to init..."); - } else { + static bool runOnce = true; + if (!g_GLContextManager.Init(hdcDest)) { + dbgboxA("Failed to init..."); + } else { + // TODO: Move mGifRecorder initialization somewhere else. It can't be + // in the constructor due to when the constructor + if (runOnce) { mGifRecorder.init(); - } + runOnce = false; + } } if (!g_GLContextManager.IsInitialized()) return FALSE; diff --git a/LunaDll/Rendering/GLTextureStore.cpp b/LunaDll/Rendering/GLTextureStore.cpp index 07c29fd14..f9bdd1abb 100644 --- a/LunaDll/Rendering/GLTextureStore.cpp +++ b/LunaDll/Rendering/GLTextureStore.cpp @@ -12,6 +12,20 @@ GLTextureStore::GLTextureStore() { mSmbxTexMap.clear(); } +void GLTextureStore::Reset() { + ClearSMBXSprites(); + ClearLunaTextures(); +} + +void GLTextureStore::ClearLunaTextures() { + for (const auto i : mLunaTexMap) { + glDeleteTextures(1, &i.second->name); + GLERRORCHECK(); + delete i.second; + } + mLunaTexMap.clear(); +} + void GLTextureStore::ClearSMBXSprites() { for (const auto i : mSmbxTexMap) { @@ -20,6 +34,17 @@ void GLTextureStore::ClearSMBXSprites() mSmbxTexMap.clear(); } +void GLTextureStore::ClearLunaTexture(const BMPBox& bmp) +{ + auto it = mLunaTexMap.find(&bmp); + if (it != mLunaTexMap.end()) { + glDeleteTextures(1, &it->second->name); + GLERRORCHECK(); + delete it->second; + mLunaTexMap.erase(it); + } +} + const GLSprite* GLTextureStore::SpriteFromSMBXBitmap(HDC hdc) { uint32_t w; uint32_t h; @@ -87,17 +112,6 @@ const GLSprite* GLTextureStore::SpriteFromSMBXBitmap(HDC hdc) { return sprite; } -void GLTextureStore::ClearLunaTexture(const BMPBox& bmp) -{ - auto it = mLunaTexMap.find(&bmp); - if (it != mLunaTexMap.end()) { - glDeleteTextures(1, &it->second->name); - GLERRORCHECK(); - delete it->second; - mLunaTexMap.erase(it); - } -} - const GLDraw::Texture* GLTextureStore::TextureFromLunaBitmap(const BMPBox& bmp) { if (bmp.m_hbmp == NULL) return NULL; diff --git a/LunaDll/Rendering/GLTextureStore.h b/LunaDll/Rendering/GLTextureStore.h index 93b1c9a78..5270738a3 100644 --- a/LunaDll/Rendering/GLTextureStore.h +++ b/LunaDll/Rendering/GLTextureStore.h @@ -15,10 +15,13 @@ class GLTextureStore { std::unordered_map mSmbxTexMap; std::unordered_map mLunaTexMap; + void Reset(); + GLTextureStore(); void ClearSMBXSprites(); const GLSprite* SpriteFromSMBXBitmap(HDC hdc); + void ClearLunaTextures(); void ClearLunaTexture(const BMPBox& bmp); const GLDraw::Texture* TextureFromLunaBitmap(const BMPBox& bmp); }; From 5f776b18d3553e227062b4b72db0ceefbedcb386 Mon Sep 17 00:00:00 2001 From: KevinW1998 Date: Fri, 30 Oct 2015 07:42:45 +0100 Subject: [PATCH 3/6] Added default launcher data --- LunadllNewLauncher/sample/default/default.css | 47 ++++++++++++++++++ LunadllNewLauncher/sample/default/header.png | Bin 0 -> 27971 bytes LunadllNewLauncher/sample/default/index.html | 47 ++++++++++++++++++ 3 files changed, 94 insertions(+) create mode 100644 LunadllNewLauncher/sample/default/default.css create mode 100644 LunadllNewLauncher/sample/default/header.png create mode 100644 LunadllNewLauncher/sample/default/index.html diff --git a/LunadllNewLauncher/sample/default/default.css b/LunadllNewLauncher/sample/default/default.css new file mode 100644 index 000000000..51459f331 --- /dev/null +++ b/LunadllNewLauncher/sample/default/default.css @@ -0,0 +1,47 @@ +body { + background: -webkit-linear-gradient(top, #3BE7E8 0%,#59ffff 100%); +} +#header img { + display: block; + text-align: center; + margin-right: auto; + margin-left: auto; +} +.bodycontent { + margin: 2em 10em 2em 10em; + background-color: #F2F1E5; + padding: 2em; + border-radius: 30px; + border: 2px solid black; + text-shadow: rgba(0, 0, 0, .01) 0 0 1px; + color: #222; + -webkit-font-smoothing: antialiased; + background-color: #f2f2f2; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 1.05em; + font-weight: 400; + height: 50%; +} +ul { + list-style-type: none; +} +#buttonContainer { + margin-left: auto; + margin-right: auto; + text-align: center; +} +.buttons { + color: #fff; + background-color: #6496c8; + border: 1px solid black; + border-radius: 15px; + box-shadow: 0 3px #27496d; + padding: 20px; + margin: 0px 10px 0px 10px; + font-size: 1.25em; +} +.buttons:hover { + background-color: #417cb8; + box-shadow: 0 0px #27496d; + transform: translateY(5px); +} \ No newline at end of file diff --git a/LunadllNewLauncher/sample/default/header.png b/LunadllNewLauncher/sample/default/header.png new file mode 100644 index 0000000000000000000000000000000000000000..8beb614e4ac3f1671676bf409485d062dc43fc2e GIT binary patch literal 27971 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 + + + Super Mario Bros. X + + + + + + +
+

World Name Field

+

Number of Stars: Number of Stars Field

+

Credits:

+
    +
  • Credit Field 1
  • +
  • Credit Field 2
  • +
  • Credit Field 3
  • +
  • Credit Field 4
  • +
  • Credit Field 5
  • +
+

Useable Characters: Useable Characters Listed Here

+
+ + + +
+
+ + \ No newline at end of file From 6513e0afd3c8e696230b57b4faffc20f330ea461 Mon Sep 17 00:00:00 2001 From: KevinW1998 Date: Fri, 30 Oct 2015 07:43:52 +0100 Subject: [PATCH 4/6] Update and fixed defines --- LuaScriptsLib/core/defines.lua | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/LuaScriptsLib/core/defines.lua b/LuaScriptsLib/core/defines.lua index 6bea26695..d5b4a86bb 100644 --- a/LuaScriptsLib/core/defines.lua +++ b/LuaScriptsLib/core/defines.lua @@ -82,7 +82,7 @@ local defines = { player_link_shieldEnabled = {defValue = true, minVal = nil, maxVal = nil, address = nil, size = FIELD_BOOLEAN, n = 1, group = "Player Settings: Link", desc = "If the shield of link is enabled.", customFuncGet = function() - return mem(0x00A53042, FIELD_BYTE) == 0x90 + return mem(0x00A53042, FIELD_BYTE) ~= 0x90 end, customFuncSet = function(value) if(value)then @@ -102,6 +102,18 @@ local defines = { mem(0x00A53047, FIELD_BYTE, 0x90) mem(0x00A53048, FIELD_BYTE, 0x90) end + end}, + player_link_fairyVineEnabled = {defValue = true, minVal = nil, maxVal = nil, address = nil, size = FIELD_BOOLEAN, + n = 2, group = "Player Settings: Link", desc = "If the vine fairy is enabled", + customFuncGet = function() + return mem(0x009AAF93, FIELD_BYTE) == 0x5 + end, + customFuncSet = function(value) + if(value)then + mem(0x009AAF93, FIELD_BYTE, 0x5) + else + mem(0x009AAF93, FIELD_BYTE, 0xFF) + end end} } @@ -123,7 +135,7 @@ end local function getDefine(defTable) if(defTable.customFuncGet)then - defTable.customFuncGet() + return defTable.customFuncGet() else return mem(defTable.address, defTable.size) end From a8c5a1cf97e398a6136035b7eb67c5f71afb0b6e Mon Sep 17 00:00:00 2001 From: KevinW1998 Date: Fri, 30 Oct 2015 08:01:22 +0100 Subject: [PATCH 5/6] Update changelog --- LunaDll/Changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/LunaDll/Changelog.txt b/LunaDll/Changelog.txt index 5cdf9fdf8..ee4114af5 100644 --- a/LunaDll/Changelog.txt +++ b/LunaDll/Changelog.txt @@ -11,6 +11,7 @@ v0.7.2 BETA: * Added some new Defines (Defines.* namespace) * Added switch between letterbox-mode (forced 4:3) or scretched-mode via F4 * Bugfix [LunaLua and SMBX Engine]: Decimal numbers now work perfectly in layer speed and npc codes (Thanks to DarkMecha for testing!) + * Bugfix [LunaLua and SMBX Engine]: Fullscreen in the level editor works again! * Added printTextWP, drawImageWP, drawImageToSceneWP which enables rendering with priority settings (also known as Z-Index) * Added sounds.ini on level-basis From babcc4f4bfe43b5daab8b493e28ddcd0032da5e7 Mon Sep 17 00:00:00 2001 From: KevinW1998 Date: Fri, 30 Oct 2015 08:17:53 +0100 Subject: [PATCH 6/6] Update custom APIs --- .../Readme_For_raocoin2.lua/example.lvl | 5393 +++++++++++++++++ .../example/block-169.gif | Bin 0 -> 596 bytes .../Readme_For_raocoin2.lua/example/coins.png | Bin 0 -> 2966 bytes .../example/lunadll.lua | 37 + LuaScriptsLibExt/hudoftime.lua | 424 ++ LuaScriptsLibExt/hudoftime/bomb.png | Bin 0 -> 3148 bytes LuaScriptsLibExt/hudoftime/btn_S.png | Bin 0 -> 3228 bytes LuaScriptsLibExt/hudoftime/btn_X.png | Bin 0 -> 3228 bytes LuaScriptsLibExt/hudoftime/heart_empty.png | Bin 0 -> 2961 bytes LuaScriptsLibExt/hudoftime/heart_full.png | Bin 0 -> 2955 bytes LuaScriptsLibExt/hudoftime/lives.png | Bin 0 -> 3039 bytes LuaScriptsLibExt/hudoftime/magic_bar.png | Bin 0 -> 2823 bytes LuaScriptsLibExt/hudoftime/magic_bg.png | Bin 0 -> 2907 bytes LuaScriptsLibExt/hudoftime/navi.png | Bin 0 -> 3289 bytes LuaScriptsLibExt/hudoftime/rupee.png | Bin 0 -> 2939 bytes LuaScriptsLibExt/hudoftime/small_key.png | Bin 0 -> 3048 bytes LuaScriptsLibExt/hudoftime/stars.png | Bin 0 -> 2966 bytes LuaScriptsLibExt/hudoftime/sword.png | Bin 0 -> 3299 bytes LuaScriptsLibExt/leveltimer.lua | 221 +- LuaScriptsLibExt/multipoints.lua | 55 +- LuaScriptsLibExt/raocoin/arrow.png | Bin 0 -> 2908 bytes LuaScriptsLibExt/raocoin/buy.ogg | Bin 0 -> 28722 bytes LuaScriptsLibExt/raocoin/dragoncoin.png | Bin 0 -> 3000 bytes LuaScriptsLibExt/raocoin/fail.ogg | Bin 0 -> 12574 bytes LuaScriptsLibExt/raocoin/token_p.png | Bin 0 -> 3154 bytes LuaScriptsLibExt/raocoin/token_t.png | Bin 0 -> 3160 bytes LuaScriptsLibExt/raocoin2.lua | 524 ++ LuaScriptsLibExt/rng.lua | 151 + 28 files changed, 6673 insertions(+), 132 deletions(-) create mode 100644 LuaScriptsLibExt/Readme_For_raocoin2.lua/example.lvl create mode 100644 LuaScriptsLibExt/Readme_For_raocoin2.lua/example/block-169.gif create mode 100644 LuaScriptsLibExt/Readme_For_raocoin2.lua/example/coins.png create mode 100644 LuaScriptsLibExt/Readme_For_raocoin2.lua/example/lunadll.lua create mode 100644 LuaScriptsLibExt/hudoftime.lua create mode 100644 LuaScriptsLibExt/hudoftime/bomb.png create mode 100644 LuaScriptsLibExt/hudoftime/btn_S.png create mode 100644 LuaScriptsLibExt/hudoftime/btn_X.png create mode 100644 LuaScriptsLibExt/hudoftime/heart_empty.png create mode 100644 LuaScriptsLibExt/hudoftime/heart_full.png create mode 100644 LuaScriptsLibExt/hudoftime/lives.png create mode 100644 LuaScriptsLibExt/hudoftime/magic_bar.png create mode 100644 LuaScriptsLibExt/hudoftime/magic_bg.png create mode 100644 LuaScriptsLibExt/hudoftime/navi.png create mode 100644 LuaScriptsLibExt/hudoftime/rupee.png create mode 100644 LuaScriptsLibExt/hudoftime/small_key.png create mode 100644 LuaScriptsLibExt/hudoftime/stars.png create mode 100644 LuaScriptsLibExt/hudoftime/sword.png create mode 100644 LuaScriptsLibExt/raocoin/arrow.png create mode 100644 LuaScriptsLibExt/raocoin/buy.ogg create mode 100644 LuaScriptsLibExt/raocoin/dragoncoin.png create mode 100644 LuaScriptsLibExt/raocoin/fail.ogg create mode 100644 LuaScriptsLibExt/raocoin/token_p.png create mode 100644 LuaScriptsLibExt/raocoin/token_t.png create mode 100644 LuaScriptsLibExt/raocoin2.lua create mode 100644 LuaScriptsLibExt/rng.lua diff --git a/LuaScriptsLibExt/Readme_For_raocoin2.lua/example.lvl b/LuaScriptsLibExt/Readme_For_raocoin2.lua/example.lvl new file mode 100644 index 000000000..f96ab4c21 --- /dev/null +++ b/LuaScriptsLibExt/Readme_For_raocoin2.lua/example.lvl @@ -0,0 +1,5393 @@ +64 +0 +"Shop Test 2" +-200000 +-200600 +-200000 +-198144 +0 +16291944 +#FALSE# +#FALSE# +34 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +16291944 +#FALSE# +#FALSE# +0 +#FALSE# +#FALSE# +"" +-199980 +-200182 +24 +54 +0 +0 +0 +0 +-200000 +-200288 +32 +32 +169 +0 +#FALSE# +#FALSE# +"Default" +"" +"UndoBuys" +"" +-200000 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-200000 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-200000 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-200000 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199968 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199968 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199968 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199968 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199936 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199936 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199936 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199936 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199904 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199904 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199904 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199904 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199872 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199872 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199872 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199872 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199840 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199840 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199840 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199840 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199808 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199808 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199808 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199808 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199776 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199776 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199776 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199776 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199744 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199744 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199744 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199744 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199712 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199712 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199712 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199712 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199680 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199680 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199680 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199680 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199648 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199648 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199648 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199648 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199616 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199616 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199616 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199616 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199584 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199584 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199584 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199584 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199552 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199552 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199552 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199552 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199520 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199520 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199520 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199520 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199488 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199488 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199488 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199488 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199456 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199456 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199456 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199456 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199424 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199424 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199424 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199424 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199392 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199392 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199392 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199392 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199360 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199360 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199360 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199360 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199328 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199328 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199328 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199328 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199296 +-200128 +32 +32 +82 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199296 +-200096 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199296 +-200064 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199296 +-200032 +32 +32 +84 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199264 +-200128 +32 +32 +294 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199264 +-200096 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199264 +-200064 +32 +32 +296 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199264 +-200032 +32 +32 +295 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199232 +-200128 +32 +32 +80 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199232 +-200096 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199232 +-200064 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199232 +-200032 +32 +32 +83 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199200 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199200 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199200 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199200 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199168 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199168 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199168 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199168 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199136 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199136 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199136 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199136 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199104 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199104 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199104 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199104 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199072 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199072 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199072 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199072 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199040 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199040 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199040 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199040 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199008 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199008 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199008 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-199008 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198976 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198976 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198976 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198976 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198944 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198944 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198944 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198944 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198912 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198912 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198912 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198912 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198880 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198880 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198880 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198880 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198848 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198848 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198848 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198848 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198816 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198816 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198816 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198816 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198784 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198784 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198784 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198784 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198752 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198752 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198752 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198752 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198720 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198720 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198720 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198720 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198688 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198688 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198688 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198688 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198656 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198656 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198656 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198656 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198624 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198624 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198624 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198624 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198592 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198592 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198592 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198592 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198560 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198560 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198560 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198560 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198528 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198528 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198528 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198528 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198496 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198496 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198496 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198496 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198464 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198464 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198464 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198464 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198432 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198432 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198432 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198432 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198400 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198400 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198400 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198400 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198368 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198368 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198368 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198368 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198336 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198336 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198336 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198336 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198304 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198304 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198304 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198304 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198272 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198272 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198272 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198272 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198240 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198240 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198240 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198240 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198208 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198208 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198208 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198208 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198176 +-200128 +32 +32 +81 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198176 +-200096 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198176 +-200064 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +-198176 +-200032 +32 +32 +87 +0 +#FALSE# +#FALSE# +"Default" +"" +"" +"" +"next" +"next" +-199264 +-200160 +-1 +170 +#TRUE# +1 +1 +20 +"" +#FALSE# +#TRUE# +#FALSE# +"Shop_Hammer_Generator" +"" +"" +"" +"" +"" +-199904 +-200160 +-1 +9 +#TRUE# +1 +1 +20 +"" +#FALSE# +#TRUE# +#FALSE# +"Shop_Mushroom_Generator" +"" +"" +"" +"" +"" +-199392 +-200160 +-1 +169 +#TRUE# +1 +1 +20 +"" +#FALSE# +#FALSE# +#FALSE# +"Shop_Tanuki_Generator" +"" +"" +"" +"" +"" +-199520 +-200160 +-1 +34 +#TRUE# +1 +1 +20 +"" +#FALSE# +#TRUE# +#FALSE# +"Shop_Leaf_Generator" +"" +"" +"" +"" +"" +-199776 +-200160 +-1 +183 +#TRUE# +1 +1 +20 +"" +#FALSE# +#TRUE# +#FALSE# +"Shop_Fire_Generator" +"" +"" +"" +"" +"" +-199648 +-200160 +-1 +277 +#TRUE# +1 +1 +20 +"" +#FALSE# +#TRUE# +#FALSE# +"Shop_Ice_Generator" +"" +"" +"" +"" +"" +-198272 +-200178 +-1 +274 +#TRUE# +1 +1 +1 +"" +#FALSE# +#FALSE# +#FALSE# +"Default" +"" +"" +"" +"" +"" +-198240 +-200178 +-1 +274 +#TRUE# +1 +1 +1 +"" +#FALSE# +#FALSE# +#FALSE# +"Default" +"" +"" +"" +"" +"" +-198304 +-200178 +-1 +274 +#TRUE# +1 +1 +1 +"" +#FALSE# +#FALSE# +#FALSE# +"Default" +"" +"" +"" +"" +"" +-198208 +-200178 +-1 +274 +#TRUE# +1 +1 +1 +"" +#FALSE# +#FALSE# +#FALSE# +"Default" +"" +"" +"" +"" +"" +"next" +"next" +"next" +"Default" +#FALSE# +"Destroyed Blocks" +#TRUE# +"Spawned NPCs" +#FALSE# +"Shop_Mushroom_Generator" +#TRUE# +"Shop_Fire_Generator" +#TRUE# +"Shop_Ice_Generator" +#TRUE# +"Shop_Leaf_Generator" +#TRUE# +"Shop_Tanuki_Generator" +#TRUE# +"Shop_Hammer_Generator" +#TRUE# +"next" +"Level - Start" +"" +0 +0 +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"P Switch - Start" +"" +0 +0 +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"P Switch - End" +"" +0 +0 +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyMushroom" +"" +0 +0 +"" +"Shop_Mushroom_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyFire" +"" +0 +0 +"" +"Shop_Fire_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"UndoBuys" +"" +0 +0 +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyIce" +"" +0 +0 +"" +"Shop_Ice_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyLeaf" +"" +0 +0 +"" +"Shop_Leaf_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyTanuki" +"" +0 +0 +"" +"Shop_Tanuki_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 +"BuyHammer" +"" +0 +0 +"" +"Shop_Hammer_Generator" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +"" +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +"" +0 +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +#FALSE# +"" +0 +0 +0 +0 +0 diff --git a/LuaScriptsLibExt/Readme_For_raocoin2.lua/example/block-169.gif b/LuaScriptsLibExt/Readme_For_raocoin2.lua/example/block-169.gif new file mode 100644 index 0000000000000000000000000000000000000000..4560e3cb5628c2957389f89ece203a121a7612e9 GIT binary patch literal 596 zcmV-a0;~N;Nk%w1VITm20HOc@UU;HOUwt=AUH||800030|Nj6000000A^8LW000F5 zEC2ui03ZN>000C3NV?qqFv_Vy066QNtq_pKjhhEHVrQ*vyM7;&Vs72SXLSK~|H87J z&xZ?Q2FSti23(|)%H=QS+cQ%7~ae;pYA5u(y zudq|Cp|`l3LAkuQ4!yvl48gq=#>dFX%FE0YGbAG>Av@5~uELBewAY;3WZRb8wMKK| z+@g9eP>8MHE$f2qI?i@p?u1>yg4Bt7l7qG`b zf)QCa zvq&)Rg1H^*asiO&YuT`T$%4sCC~cCGbfL68oN@@;Dsn*y@H;IsOu|W-431Yg2*1tw zI@>fSbF{e9I(p)osoLeR){9=l#x}IJ?b}4DEmhHU?{41Mo{^R()|6SS;f5bq4j5}z z$fHiT0zK96KXxZCV!!ukv!CwKO`N3Omm+j_c%SR|hgiJzH|^C2`gB>o1^ScC>!6NQ irCn1Q-r160OR@|YlWT#@R-l5|FbIKzxJ3v-0suRCP#w7d literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/Readme_For_raocoin2.lua/example/coins.png b/LuaScriptsLibExt/Readme_For_raocoin2.lua/example/coins.png new file mode 100644 index 0000000000000000000000000000000000000000..7be3fd70f40741cef91f8ec2235ceeb2b7dc66e2 GIT binary patch literal 2966 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 2) then + player:mem(0x16, FIELD_WORD, 2); + end + first = false; + end + + if(player:mem(0x16, FIELD_WORD) == 3) then + zelda.hearts = zelda.hearts + 1; + if(zelda.hearts > zelda.maxhearts) then + zelda.hearts = zelda.maxhearts; + end + powercache = player.powerup; + player:mem(0x16, FIELD_WORD,2); + end + + if(player:mem(0x16, FIELD_WORD) == 1) and (zelda.hearts > 1) then + zelda.hearts = zelda.hearts - 1; + end + + if(player:mem(0x16, FIELD_WORD) > zelda.hearts) then + zelda.hearts = player:mem(0x16, FIELD_WORD); + end + + if(player:mem(0x16, FIELD_WORD) == 0) then + zelda.hearts = 0; + end + + if (player.powerup == PLAYER_SMALL) and (zelda.hearts >= 2) then + if(zelda.keep_powerups) then + player.powerup = powercache; + else + player.powerup = PLAYER_BIG; + end + end + end +end + +local function UpdateMagic() + if(not wasfairy and player:mem(0x0C,FIELD_WORD) == -1) then + maxfairycount = player:mem(0x10,FIELD_WORD); + wasfairy = true; + elseif(wasfairy and player:mem(0x0C,FIELD_WORD) ~= -1) then + wasfairy = false; + end + + if(player:mem(0x0C,FIELD_WORD) == -1 and player:mem(0x10,FIELD_WORD) >= 0 and maxfairycount > 0) then + zelda.magic = player:mem(0x10,FIELD_WORD)/maxfairycount; + elseif(player:mem(0x0E,FIELD_WORD) == 1 and player:mem(0x4A,FIELD_WORD) ~= -1) then + zelda.magic = 0; + elseif(player:mem(0x4A,FIELD_WORD) == -1) then + zelda.magic = 1-(player:mem(0x4E,FIELD_WORD)/240); + else + zelda.magic = 1; + end +end + +local function UpdateRupees() + zelda.maxrupees = 99; + zelda.rupees = mem(0x00B2C5A8,FIELD_WORD); +end + +local function UpdateKeys() + if(player:mem(0x12,FIELD_WORD) == -1) then + zelda.keys = 1; + else + zelda.keys = 0; + end +end + +local function UpdateItems() + items[zelda.BTN_X] = zelda.SWORD; + items[zelda.BTN_S] = {zelda.BOMB,player:mem(0x08, FIELD_WORD)}; +end + +local function UpdateTriforce() + zelda.triforce = mem(0x00B251E0,FIELD_WORD); + zelda.maxtriforce = 999; +end + +local function UpdateFairy() + zelda.fairy = mem(0x00B2C5AC,FIELD_FLOAT); + zelda.maxfairy = 99; +end + +local function UpdateNavi() + zelda.navi = false; + for _,v in ipairs(NPC.getIntersecting(player.x,player.y,player.x+player.width,player.y+player.height)) do + if(v:mem(0x46,FIELD_WORD) == -1 --[[Friendly]] and (v:mem(0x4C,FIELD_DWORD) > 0 and v.msg.str ~= nil and v.msg.str ~= "") --[[Has message]]) then + zelda.navi = true; + break; + end + end +end + +function zelda.onLoop() + if(zelda.auto_hearts) then + UpdateHearts(); + end + + if(zelda.auto_magic) then + UpdateMagic(); + end + + if(zelda.auto_rupees) then + UpdateRupees(); + end + + if(zelda.auto_keys) then + UpdateKeys(); + end + + if(zelda.auto_items) then + UpdateItems(); + end + + if(zelda.auto_triforce) then + UpdateTriforce(); + end + + if(zelda.auto_fairy) then + UpdateFairy(); + end + + if(zelda.auto_navi) then + UpdateNavi(); + end +end + +local maxfairycount = 0; +local wasfairy = false; + +local function pad(n,d) + return string.format("%0"..d.."d",n); +end + +local function getDigits(n) + local c = 0; + while(n > 1) do + c = c + 1; + n = n/10; + end + return math.max(c,1); +end + +local function DrawHearts() + local maxy = 0; + for i=0,zelda.maxhearts-1,1 do + local g; + if(i<=zelda.hearts-1) then + g = zelda.HEART_FULL; + else + g = zelda.HEART_EMPT; + end + Graphics.drawImage(g, (i%10)*16 + 16, math.floor(i/10)*16 + 16); + maxy = math.floor(i/10)*16; + end + return maxy + 24; +end + +local function DrawMagic(y) + Graphics.drawImage(zelda.MAGIC_BG, 14, y); + + Graphics.glSetTextureRGBA(zelda.MAGIC_BAR, 0xFFFFFFFF); + local pts = {}; + pts[0] = 16; pts[1] = y; + pts[2] = 16+158*zelda.magic; pts[3] = y; + pts[4] = 16; pts[5] = y+16; + pts[6] = 16; pts[7] = y+16; + pts[8] = 16+158*zelda.magic; pts[9] = y; + pts[10] = 16+158*zelda.magic; pts[11] = y+16; + + Graphics.glDrawTriangles(pts, {0,0,0,1,1,0,1,0,0,1,1,1}, 6); + Graphics.glSetTextureRGBA(nil, 0xFFFFFFFF); +end + +local function DrawRupees() + Graphics.drawImage(zelda.RUPEE, 16, 600 - 32); + zelda.rupees = math.min(zelda.rupees,zelda.maxrupees); + local r = pad(zelda.rupees,getDigits(zelda.maxrupees)) + Text.print(r,36,600-32); +end + +local function DrawKeys() + for i=1,zelda.keys,1 do + Graphics.drawImage(zelda.KEY, 16*i, 600 - 32 - 24); + end +end + +local function DrawButton(x, button) + Graphics.drawImage(button, (800-16)-(32*x), 16); + + local item = zelda.getItem(button); + if(item ~= nil) then + local count = zelda.getItemCount(button); + if(count ~= nil) then + if(count ~= 0) then + Graphics.drawImage(item, (800-16)-(32*x), 16); + end + if(count > 0) then + Text.print(tostring(count),(800+8)-(32*x),40); + end + end + end +end + +local function DrawTriforce() + Graphics.drawImage(zelda.TRIFORCE, 800-32, 600-32); + zelda.triforce = math.min(zelda.triforce, zelda.maxtriforce); + local t = pad(zelda.triforce,getDigits(zelda.maxtriforce)); + Text.print(t,800-30-18*(#t),600-32); +end + +local function DrawFairy() + Graphics.drawImage(zelda.FAIRY, 800-32, 600-32-24); + zelda.fairy = math.min(zelda.fairy, zelda.maxfairy); + local t = pad(zelda.fairy,getDigits(zelda.maxfairy)); + Text.print(t,800-30-18*(#t),600-32-24); +end + +local function DrawNavi() + if(zelda.navi) then + Graphics.drawImage(zelda.NAVI, 800-16-32*(#zelda.buttons + 1), 16); + end +end + +local function DrawScore() + local p = mem(0x00B2C8E4,FIELD_DWORD); + Text.print(pad(p,6),800-24-96,600-32-48); +end + +function zelda.onHUDDraw() + if(zelda.auto_enable) then + UpdateEnabled(); + end + + if(not zelda.show_HUD) then return end; + + local maxy = 0; + + if(zelda.show_hearts) then + maxy = DrawHearts(); + end + + if(zelda.show_magic) then + DrawMagic(maxy+16); + end + + if(zelda.show_rupees) then + DrawRupees(); + end + + if(zelda.show_keys) then + DrawKeys(); + end + + if(zelda.show_items) then + for k,v in ipairs(zelda.buttons) do + DrawButton(#zelda.buttons-(k-1), v); + end + end + + if(zelda.show_triforce) then + DrawTriforce(); + end + + if(zelda.show_fairy) then + DrawFairy(); + end + + if(zelda.show_navi) then + DrawNavi(); + end + + if(zelda.show_score) then + DrawScore(); + end +end + +return zelda; \ No newline at end of file diff --git a/LuaScriptsLibExt/hudoftime/bomb.png b/LuaScriptsLibExt/hudoftime/bomb.png new file mode 100644 index 0000000000000000000000000000000000000000..7f06c5027061a499fcbb354fb821a58ab531cf4f GIT binary patch literal 3148 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 Hu0mjfnrVDS literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/heart_full.png b/LuaScriptsLibExt/hudoftime/heart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..f8d5e174d7485b7026cb27843ee3947f609e14f3 GIT binary patch literal 2955 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 Bb{_x$ literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/lives.png b/LuaScriptsLibExt/hudoftime/lives.png new file mode 100644 index 0000000000000000000000000000000000000000..36365c01721c6a931a53fd7d8bfaea5b5133fcf0 GIT binary patch literal 3039 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 literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/magic_bar.png b/LuaScriptsLibExt/hudoftime/magic_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..56778449187d71a112e83e4d6888d270fbf5afad GIT binary patch literal 2823 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 ZU;r0&4Xo$P`J(^;002ovPDHLkV1oIEKK=jz literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/magic_bg.png b/LuaScriptsLibExt/hudoftime/magic_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1a04af8a5a4b64a45f001eb3f29d4ca7ee0eaf GIT binary patch literal 2907 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 XmWvE1HM2X100000NkvXXu0mjfCfFW< literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/rupee.png b/LuaScriptsLibExt/hudoftime/rupee.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0dabdd26fb1cafabd13dbc9d4f64be43113dff GIT binary patch literal 2939 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 literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/small_key.png b/LuaScriptsLibExt/hudoftime/small_key.png new file mode 100644 index 0000000000000000000000000000000000000000..4039e428264625f364a68302d2e619799dc59516 GIT binary patch literal 3048 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 M07*qoM6N<$f(6luIRF3v literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/hudoftime/sword.png b/LuaScriptsLibExt/hudoftime/sword.png new file mode 100644 index 0000000000000000000000000000000000000000..a675411ad45f65afaf7893dc4b8fccae79c6e379 GIT binary patch literal 3299 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 literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/leveltimer.lua b/LuaScriptsLibExt/leveltimer.lua index 7e1a128dd..7dcc58636 100644 --- a/LuaScriptsLibExt/leveltimer.lua +++ b/LuaScriptsLibExt/leveltimer.lua @@ -1,114 +1,99 @@ -local __title = "Level Timer"; -local __version = "1.1.1.0"; -local __description = "A simple script to provide a level timer, a la Super Mario World and Super Mario Bros. 3."; -local __author = "Mike Santiago, edited by XNBlank"; -local __url = "http://mrmiketheripper.x10.mx/leveltimer" - +local __title = "Level Timer"; local __version = "1.1.1.1"; local __description = "A simple script to provide a level timer, a la Super Mario World and Super Mario Bros. 3."; local __author = "Mike Santiago, edited by XNBlank"; local __url = "http://mrmiketheripper.x10.mx/leveltimer" local lf_levelTimerApi = {} --instance -local secondsleft = 300; --The amount of seconds left. -local framecounter = 0; --Counts the amount of frames -local postWinFrameCounter = 0; --Counts frams since after the win -local player1 = Player(); --The player variable -local player2 = Player(2); -local beatLevel = false; -local getSeconds = false; -local takeTime = 0; -local playerkilled = false; --If the player was killed already so we don't kill him 21390840239 times -local passTime = true; --Whether or not to pass time, if false, time will stop. -local timerEnabled = true; --Whether or not the timer itself is actually enabled or not -local warnedPlayer = false; --Whether or not we've warned the player that time is running out -local resPath = getSMBXPath() .. "\\LuaScriptsLib\\leveltimer"; --res path -local uiImage = Graphics.loadImage(resPath .. "\\ui.png"); --ui thing - -lf_levelTimerApi.GUIPosition_NoStars = {x = 252, y = 50} -lf_levelTimerApi.GUIPosition_Stars = {x = 252, y = 66} - -function lf_levelTimerApi.onInitAPI() - timerEnabled = false; --user must start it - registerEvent(lf_levelTimerApi, "onLoop", "onLoopOverride"); -end - -function lf_levelTimerApi.onLoopOverride() - if(timerEnabled == true) then - timeelapsed = round(framecounter / 60, 0); - if(tonumber(mem(0x00B251E0, FIELD_DWORD)) > 0) and (beatLevel == false) then - Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_Stars.x, lf_levelTimerApi.GUIPosition_Stars.y, "", 2); - Text.print(tostring(secondsleft - timeelapsed), 1, lf_levelTimerApi.GUIPosition_Stars.x + 44, lf_levelTimerApi.GUIPosition_Stars.y + 1); - elseif (tonumber(mem(0x00B251E0, FIELD_DWORD)) == 0) and (beatLevel == false) then - Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_NoStars.x, lf_levelTimerApi.GUIPosition_NoStars.y, "", 2); - Text.print(tostring(secondsleft - timeelapsed), 1, lf_levelTimerApi.GUIPosition_NoStars.x + 44, lf_levelTimerApi.GUIPosition_NoStars.y + 1); - end - +local secondsleft = 300; --The amount of seconds left. local framecounter = 0; --Counts the amount of frames +local postWinFrameCounter = 0; --Counts frams since after the win +local player1 = Player(); --The player variable +local player2 = Player(2); +local beatLevel = false; +local getSeconds = false; +local takeTime = 0; +local playerkilled = false; --If the player was killed already so we don't kill him 21390840239 times +local passTime = true; --Whether or not to pass time, if false, time will stop. +local timerEnabled = true; --Whether or not the timer itself is actually enabled or not +local warnedPlayer = false; --Whether or not we've warned the player that time is running out +local resPath = getSMBXPath() .. "\\LuaScriptsLib\\leveltimer"; --res path +local uiImage = Graphics.loadImage(resPath .. "\\ui.png"); --ui thing + + +lf_levelTimerApi.GUIPosition_NoStars = {x = 252, y = 50} lf_levelTimerApi.GUIPosition_Stars = {x = 252, y = 66} + + +function lf_levelTimerApi.onInitAPI() timerEnabled = false; --user must start it + registerEvent(lf_levelTimerApi, "onLoop", "onLoopOverride"); +end + + +function lf_levelTimerApi.onLoopOverride() if(timerEnabled == true) then timeelapsed = round(framecounter / 60, 0); + if(tonumber(mem(0x00B251E0, FIELD_DWORD)) > 0) and (beatLevel == false) then + Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_Stars.x, lf_levelTimerApi.GUIPosition_Stars.y, "", 2); + Text.print(tostring(secondsleft - timeelapsed), 1, lf_levelTimerApi.GUIPosition_Stars.x + 44, lf_levelTimerApi.GUIPosition_Stars.y + 1); + elseif (tonumber(mem(0x00B251E0, FIELD_DWORD)) == 0) and (beatLevel == false) then + Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_NoStars.x, lf_levelTimerApi.GUIPosition_NoStars.y, "", 2); + Text.print(tostring(secondsleft - timeelapsed), 1, lf_levelTimerApi.GUIPosition_NoStars.x + 44, lf_levelTimerApi.GUIPosition_NoStars.y + 1); + end + --Text.print("Time to take..." .. tostring(takeTime), 0, 0); - --Text.print("Seconds left..." .. tostring(secondsleft - timeelapsed), 0, 15); - - - if (passTime == true) then - framecounter = framecounter + 1; - end - if(timeelapsed >= secondsleft) then - passTime = false; - if(beatLevel == false) then - if(playerkilled == false) then - player1:kill(); - if(player2 ~= nil) then - if(player2.isValid) then - player2:kill(); - end - end - playerkilled = true; - end - end - end - if((secondsleft - timeelapsed) <= 100) then - if(passTime == true) then - if(warnedPlayer == false) then - warnedPlayer = true; - playSFXSDL(resPath .. "\\warning.wav"); - --test = "-----WARNING!-----\n\nYou're running out of time!"; - --Text.showMessageBox(type(test)); - end - end - end - - if(Level.winState() > 0) then - - beatLevel = true; - passTime = false; - postWinFrameCounter = postWinFrameCounter + 1; - lf_levelTimerApi.doEndingStuffs(); - end - end -end - -local added = false; -local showTimeLeft = false; -local showPointCalc = false; -local showAddPoints = false; -local countPoints = false; - -function lf_levelTimerApi.doEndingStuffs() - local timeLeftDrawPoint = {x = 288, y = 150} - local pointCalculationDrawPoint = {x = 247, y = 170} - local addPointsDrawPoint = {x = 461, y = 70}; - local timeleft = secondsleft - timeelapsed; - - if(getSeconds == false) then - takeTime = secondsleft - timeelapsed; - getSeconds = true; - end - - local newPoints = tonumber(mem(0x00B2C8E4, FIELD_DWORD)) + (timeleft * 50); - - Text.print("COURSE CLEAR", 288, 150); - - if(tonumber(mem(0x00B251E0, FIELD_DWORD)) > 0) and (beatLevel == true) then - Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_Stars.x, lf_levelTimerApi.GUIPosition_Stars.y, "", 2); - Text.print(tostring(takeTime), 1, lf_levelTimerApi.GUIPosition_Stars.x + 44, lf_levelTimerApi.GUIPosition_Stars.y + 1); -elseif (tonumber(mem(0x00B251E0, FIELD_DWORD)) == 0) and (beatLevel == true) then - Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_NoStars.x, lf_levelTimerApi.GUIPosition_NoStars.y, "", 2); - Text.print(tostring(takeTime), 1, lf_levelTimerApi.GUIPosition_NoStars.x + 44, lf_levelTimerApi.GUIPosition_NoStars.y + 1); + --Text.print("Seconds left..." .. tostring(secondsleft - timeelapsed), 0, 15); if (passTime == true) then + framecounter = framecounter + 1; + end + + if(timeelapsed >= secondsleft) then passTime = false; + if(beatLevel == false) then + if(playerkilled == false) then + player1:kill(); + if(player2 ~= nil) then + if(player2.isValid) then + player2:kill(); + end + end + playerkilled = true; + end + end + end + if((secondsleft - timeelapsed) <= 100) then + if(passTime == true) then + if(warnedPlayer == false) then + warnedPlayer = true; + playSFXSDL(resPath .. "\\warning.wav"); + --test = "-----WARNING!-----\n\nYou're running out of time!"; + --Text.showMessageBox(type(test)); + end + end + end + + if(Level.winState() > 0) then + beatLevel = true; + passTime = false; + postWinFrameCounter = postWinFrameCounter + 1; + lf_levelTimerApi.doEndingStuffs(); + end + end +end + + +local added = false; local showTimeLeft = false; +local showPointCalc = false; +local showAddPoints = false; +local countPoints = false; + + +function lf_levelTimerApi.doEndingStuffs() local timeLeftDrawPoint = {x = 288, y = 150} + local pointCalculationDrawPoint = {x = 247, y = 170} + local addPointsDrawPoint = {x = 461, y = 70}; + local timeleft = secondsleft - timeelapsed; + + if(getSeconds == false) then + takeTime = secondsleft - timeelapsed; + getSeconds = true; + end + + local newPoints = tonumber(mem(0x00B2C8E4, FIELD_DWORD)) + (timeleft * 50); + Text.print("COURSE CLEAR", 288, 150); + if(tonumber(mem(0x00B251E0, FIELD_DWORD)) > 0) and (beatLevel == true) then + Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_Stars.x, lf_levelTimerApi.GUIPosition_Stars.y, "", 2); + Text.print(tostring(takeTime), 1, lf_levelTimerApi.GUIPosition_Stars.x + 44, lf_levelTimerApi.GUIPosition_Stars.y + 1); + elseif (tonumber(mem(0x00B251E0, FIELD_DWORD)) == 0) and (beatLevel == true) then Graphics.placeSprite(1, uiImage, lf_levelTimerApi.GUIPosition_NoStars.x, lf_levelTimerApi.GUIPosition_NoStars.y, "", 2); Text.print(tostring(takeTime), 1, lf_levelTimerApi.GUIPosition_NoStars.x + 44, lf_levelTimerApi.GUIPosition_NoStars.y + 1); end @@ -128,7 +113,7 @@ end if(added ~= true) then mem(0x00B2C8E4, FIELD_DWORD, newPoints); added = true; - showAddPoints = false; + showAddPoints = false; end end @@ -149,7 +134,7 @@ end if(showPointCalc) then - Text.print(tostring(timeleft) .. " x 50 = " .. tostring(timeleft * 50), pointCalculationDrawPoint.x, pointCalculationDrawPoint.y); + Text.print(tostring(timeleft) .. " x 50 = " .. tostring(timeleft * 50), pointCalculationDrawPoint.x, pointCalculationDrawPoint.y); end if(showAddPoints == true) then Text.print("+" .. tostring(timeleft * 50), 3, addPointsDrawPoint.x, addPointsDrawPoint.y); @@ -161,15 +146,11 @@ function lf_levelTimerApi.getSecondsLeft() return secondsleft; end -function lf_levelTimerApi.setSecondsLeft(to_set) - if (to_set > 999) then - secondsleft = 999; - elseif (to_set < 0) then - setSecondsLeft = 0; - else - secondsleft = to_set; - end -end +function lf_levelTimerApi.setSecondsLeft(to_set) if (to_set > 999) then secondsleft = 999; framecounter = 0; timeelapsed = 0; elseif (to_set < 0) then secondsleft = 0; timeelapsed = 0; + framecounter = 0; + else secondsleft = to_set; timeelapsed = 0; + framecounter = 0; + end end function lf_levelTimerApi.pauseTimer() passTime = false; @@ -190,4 +171,4 @@ function round(num, idp) return math.floor(num * mult + 0.5) / mult end -return lf_levelTimerApi; +return lf_levelTimerApi; \ No newline at end of file diff --git a/LuaScriptsLibExt/multipoints.lua b/LuaScriptsLibExt/multipoints.lua index a345ccd45..af92f26e4 100644 --- a/LuaScriptsLibExt/multipoints.lua +++ b/LuaScriptsLibExt/multipoints.lua @@ -1,7 +1,19 @@ ---multipoints.lua ---v3.0.0 ---Created by Hoeloe, 2015 ---With help from Rednaxela +----------------------------------------------- +----------------------------------------------- +--*******************************************-- +--* _ _ _ _ _ *-- +--* _____ _ _| | |_|_|___ ___|_|___| |_ ___ *-- +--*| | | | | _| | . | . | | | _|_ -|*-- +--*|_|_|_|___|_|_| |_| _|___|_|_|_|_| |___|*-- +--* |_| *-- +--*******************************************-- +----------------------------------------------- +----------------------------------------------- +-----------Created by Hoeloe - 2015------------ +-----------With help from Rednaxella----------- +--------Open-Source Checkpoint Library--------- +------------For Super Mario Bros X------------- +-------------------v3.0.4---------------------- local multipoints = {} local playerMP = { sec = 0, x = 0, y = 0, act = nil } @@ -16,6 +28,7 @@ multipoints.IMG_SIZE = { width = 32, height = 32 } local dataFile; local firstRun = true; +local preRun = true; function multipoints.onInitAPI() --register event handler @@ -27,6 +40,7 @@ function multipoints.onInitAPI() if(dataFile:get("MPCheck_ID") == nil) then multipoints.resetMidpoints(); end + preRun = true; firstRun = true; registerEvent(multipoints, "onLoop", "update", true) --Register the loop event @@ -73,6 +87,7 @@ local function getMP(i) dataFile:set("MPCheck_ID",tostring(i)); dataFile:save() + mem(0x00B250B0, FIELD_STRING, mem(0x00B2C618, FIELD_STRING)) multipoints.onCollected(multipoints.getCheckpoint(i), i) @@ -227,24 +242,38 @@ function multipoints.resetMidpoints() mem(0x00B250B0, FIELD_STRING, "") end -function multipoints.onLoad() +function multipoints.onLevelStart() end function multipoints.update() + if(preRun) then + preRun = false; + return; + end if(firstRun) then - local i = 0; - while(i > -1 and mpData[i] ~= nil) do - if(multipoints.getCheckpointID() == i) then - playerMP = {sec = mpData[i].sec, x = mpData[i].x, y = mpData[i].y, act = mpData[i].actions } - i = -1; - else - i = i + 1; + if(mpData ~= nil) then + local i = 0; + while(i > -1 and mpData[i] ~= nil) do + if(multipoints.getCheckpointID() == i) then + playerMP = {sec = mpData[i].sec, x = mpData[i].x, y = mpData[i].y, act = mpData[i].actions } + i = -1; + else + i = i + 1; + end + end + else + if(mpTrigs == nil) then + mpTrigs = {} + end + if(mpLuaTrigs == nil) then + mpLuaTrigs = {} end end if (multipoints.getCheckpointID() == nil) or (multipoints.getCheckpointID() < 0) then multipoints.resetMidpoints() firstRun = false; + multipoints.onLevelStart(); return end @@ -272,11 +301,13 @@ function multipoints.update() if(playerMP.act ~= nil) then playerMP.act(); end + wasMidpointed = true; else multipoints.resetMidpoints() end firstRun = false; + multipoints.onLevelStart(); end for k,v in pairs(mpLuaTrigs) do diff --git a/LuaScriptsLibExt/raocoin/arrow.png b/LuaScriptsLibExt/raocoin/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..8880f0e596d3c6aff34daa97028dab1c334582a9 GIT binary patch literal 2908 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 literal 0 HcmV?d00001 diff --git a/LuaScriptsLibExt/raocoin/dragoncoin.png b/LuaScriptsLibExt/raocoin/dragoncoin.png new file mode 100644 index 0000000000000000000000000000000000000000..03ffd77062eff76c14f6d2a6eeaf38225d6e301e GIT binary patch literal 3000 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 ) \__( <_> ) | | \/ \ -- +-- |____|_ /(____ /\____/ \___ >____/|__|___| /\_______ \-- +-- \/ \/ \/ \/ \/-- +--------------------------------------------------------------- +--------------------Created by Hoeloe - 2015------------------- +-------------Open-Source Currency and Shop Library------------- +---------------------For Super Mario Bros X-------------------- +----------------------------v2.0.0----------------------------- +----------------------REQUIRES ENCRYPT.dll--------------------- +---------------------REQUIRES COLLIDERS.lua-------------------- +-----------------------REQUIRES PNPC.lua----------------------- + +local raocoin = {} +local encrypt = loadSharedAPI("encrypt"); +local colliders; +local pnpc; + +local currencies = {} +local currencyCache = {} +local memcurrencies = {} +local memcurrencyCache = {} + +local data = encrypt.Data(Data.DATA_WORLD, "raocoin", true); + +local currencyMT = {} + +function currencyMT.createMT(id,memtype) + local mt = {} + mt.__index = + function(tbl, key) + if(key == "refreshUI") then return currencyMT.refreshUI; + elseif(key == "save") then return currencyMT.save; + elseif(key == "get") then return currencyMT.get; + elseif(key == "set") then return currencyMT.set; + elseif(key == "addItem") then return raocoin.addItem; + elseif(key == "id") then return id; + elseif(key == "type") then return memtype; end + end + mt.__newindex = function(tbl, key, val) error("Attempted to write to a read-only field.",2); end + return mt; +end + +function currencyMT:refreshUI() + self.img = Graphics.loadImage(self.path); +end + +function currencyMT:save() + if(self.type == -1) then --npc currency + data:set("currency_"..self.id, data:get("currency_"..self.id)+currencyCache[self.id].value); + currencyCache[self.id].value = 0; + else --mem currency + data:set("memcurrency_"..self.id, self:get()); + end + data:save(); +end + +function currencyMT:get() + if(self.type == -1) then --npc currency + return data:get("currency_"..self.id) + currencyCache[self.id].value + else --mem currency + return mem(self.id,self.type); + end +end + +function currencyMT:set(value) + if(value < 0) then value = 0; end; + if(self.type == -1) then --npc currency + --data:set("currency_"..self.id, value); + currencyCache[self.id].value = value - data:get("currency_"..self.id); + else --mem currency + --data:set("memcurrency_"..self.id, value); + mem(self.id,self.type,value); + end + --self:save(); +end + +function raocoin.registerCurrency(npcID, showUI, UIx, UIy, imgPath) + showUI = showUI or (showUI == nil and false); + UIx = UIx or 0; + UIy = UIy or 0; + imgPath = imgPath or getSMBXPath().."\\LuaScriptsLib\\raocoin\\dragoncoin.png"; + + local c = { visible = showUI, img = Graphics.loadImage(imgPath), x = UIx, y = UIy, path = imgPath }; + setmetatable(c,currencyMT.createMT(npcID,-1)); + + c:refreshUI(); + + if(data:get("currency_"..npcID) == nil) then + data:set("currency_"..npcID, 0); + data:save(); + end + currencyCache[npcID] = { value = 0, lastCount = -1, count = -1 }; + + currencies[npcID] = c; + + return c; +end + + +function raocoin.registerMemCurrency(memaddress, memType, restore, showUI, UIx, UIy, imgPath) + restore = restore or (restore == nil and true); + showUI = showUI or (showUI == nil and false); + UIx = UIx or 0; + UIy = UIy or 0; + imgPath = imgPath or getSMBXPath().."\\LuaScriptsLib\\raocoin\\dragoncoin.png"; + + local c = { visible = showUI, img = Graphics.loadImage(imgPath), x = UIx, y = UIy, path = imgPath }; + setmetatable(c,currencyMT.createMT(memaddress,memType)); + + c:refreshUI(); + + if(data:get("memcurrency_"..memaddress) == nil) then + data:set("memcurrency_"..memaddress, 0); + data:save(); + elseif(restore) then + mem(memaddress,memType,data:get("memcurrency_"..memaddress)) + end + + memcurrencyCache[memaddress] = mem(memaddress,memType); + + memcurrencies[memaddress] = c; + + return c; +end + +function raocoin.getCurrency(npcID) + return currencies[npcID]; +end + +function raocoin.getMemCurrency(address) + return memcurrencies[address]; +end + + +local items = {}; +local tokens = {}; + +raocoin.IMG_TOKEN_T = Graphics.loadImage(getSMBXPath().."\\LuaScriptsLib\\raocoin\\token_t.png"); +raocoin.IMG_TOKEN_P = Graphics.loadImage(getSMBXPath().."\\LuaScriptsLib\\raocoin\\token_p.png"); +raocoin.IMG_ARROW = Graphics.loadImage(getSMBXPath().."\\LuaScriptsLib\\raocoin\\arrow.png"); + +local arrowalpha = 0; + +local itemCount = 0; + +local actionQueue = {}; + +raocoin.CODE_CANTAFFORD = 0; +raocoin.CODE_ALREADYBOUGHT = 1; + +local itemMT = {} + +function itemMT.createMT(id) + local mt = {} + mt.__index = + function(tbl, key) + if(key == "canAfford") then return itemMT.canAfford; + elseif(key == "showPrice") then return itemMT.showPrice; + elseif(key == "buy") then return itemMT.buy; + elseif(key == "forceGet") then return itemMT.forceGet; + elseif(key == "isBought") then return itemMT.isBought; + elseif(key == "undoBuy") then return itemMT.undoBuy; + elseif(key == "placeToken") then return itemMT.placeToken; + elseif(key == "removeToken") then return itemMT.removeToken; + elseif(key == "id") then return id; end + end + mt.__newindex = function(tbl, key, val) error("Attempted to write to a read-only field.",2); end + return mt; +end + +function itemMT:canAfford() + return self.currency:get() >= self.price; +end + +function itemMT:showPrice(x,y,screenSpace) + screenSpace = screenSpace or (screenSpace == nil); + + if(not screenSpace) then + x,y = raocoin.worldToScreen(x,y); + end + + local v = self.currency; + Graphics.placeSprite(1, v.img, x, y, "", 2); + local val = tostring(self.price); + Text.print(val, 1, x + 98-18*(string.len(val)), y); +end + +function itemMT:buy() + if(self:isBought()) then + raocoin.onBuyFail(self, raocoin.CODE_ALREADYBOUGHT); + return; + end + if(not self:canAfford()) then + raocoin.onBuyFail(self, raocoin.CODE_CANTAFFORD); + return; + end + + self.currency:set(self.currency:get()-self.price); + self.currency:save(); + + self:forceGet(); + raocoin.onBuy(self); +end + +function itemMT:forceGet() + if(self.permanent) then + data:set("item_"..self.id, 1); + data:save(); + end + + table.insert(actionQueue,self.actions); +end + +function itemMT:isBought() + return self.permanent and data:get("item_"..self.id) == 1; +end + +function itemMT:undoBuy() + if(not self:isBought()) then return; end + + if(self.permanent) then + data:set("item_"..self.id, 0); + data:save(); + end +end + +function itemMT:placeToken(x,y,section, npcid,text,image) + if(colliders == nil) then + colliders = loadSharedAPI("colliders"); + end + if(npcid ~= nil and pnpc == nil) then + pnpc = loadSharedAPI("pnpc"); + end + local t = {x=x,y=y,section=section,enableTimer = 0,hitbox=colliders.Box(x,y,32,32),npcID=npcid,npc=nil,npcRefreshCount=0,text=text,image=image}; + tokens[self] = t; +end + +function itemMT:removeToken() + if(tokens[self] ~= nil and tokens[self].npc ~= nil) then + tokens[self].npc:mem(0x40,FIELD_WORD,0xFFFF); + end + tokens[self] = nil; +end + +function raocoin.addItem(currency, price, actions, permanent, id) + permanent = permanent or (permanent == nil); + + if(id == nil) then + while(items[itemCount] ~= nil) do + itemCount = itemCount + 1; + end + id = itemCount; + elseif(items[id] ~= nil) then + --error("Item with ID already exists and will be overwritten!",2); --Not actually a problem, as it allows different items to share purchase across levels. + end + + local i = { currency = currency, price = price, permanent = permanent, actions = actions }; + setmetatable(i,itemMT.createMT(id)); + + if(permanent) then + local d = data:get("item_"..id); + if(d == nil) then + data:set("item_"..id, 0); + data:save(); + elseif(d == 1) then + table.insert(actionQueue,actions); + end + end + + items[id] = i; + itemCount = itemCount + 1; + + return i; +end + +local buyingCounter = 0; +local tryBuy = false; +local doBuyAnim = false; +local sourceY = 0; +local buyAction; + +function raocoin.inputupdate() + if(doBuyAnim) then + player.downKeyPressing = false; --Ensure animation lines up correctly + end +end + +function raocoin.update() + for _,v in pairs(actionQueue) do + v(); + end + + actionQueue = {}; + + for k,v in pairs(currencies) do + if(v.visible) then + Graphics.placeSprite(1, v.img, v.x, v.y, "", 2); + local val = tostring(v:get()); + Text.print(val, 1, v.x + 98-18*(string.len(val)), v.y); + end + + currencyCache[k].count = 0; + for _,_ in pairs(findnpcs(k,-1)) do + currencyCache[k].count = currencyCache[k].count + 1; + end + if(currencyCache[k].count < currencyCache[k].lastCount) then + currencyCache[k].value = currencyCache[k].value + currencyCache[k].lastCount - currencyCache[k].count; + raocoin.onCollect(v); + end + currencyCache[k].lastCount = currencyCache[k].count; + end + + for k,v in pairs(memcurrencies) do + if(v.visible) then + Graphics.placeSprite(1, v.img, v.x, v.y, "", 2); + local val = tostring(v:get()); + Text.print(val, 1, v.x + 98-18*(string.len(val)), v.y); + end + + if(memcurrencyCache[v.id] < mem(v.id,v.type)) then + raocoin.onCollect(v); + end + memcurrencyCache[v.id] = mem(v.id,v.type); + end + + + arrowalpha = arrowalpha+0.02; + if(arrowalpha > 1) then + arrowalpha = -1; + end + + if(player.downKeyPressing) then + if(buyingCounter == 0) then + buyingCounter = 15; + end + else + buyingCounter = 0; + end + + if(buyingCounter > 0) then + buyingCounter = buyingCounter - 1; + if(buyingCounter == 0) then + tryBuy = true; + end + end + + if(doBuyAnim) then + player:mem(0x122,FIELD_WORD,7); --Set state to "going through door" + player.y = sourceY+35-player.height; + if(player:mem(0x12A,FIELD_WORD) >= 16440) then --Warp timer counts from 16368 to 16444 by twos. 16440 is an acceptable buffer to ensure it doesn't try to warp, which will crash the game. + player:mem(0x122,FIELD_WORD,0); + player:mem(0x12A,FIELD_WORD,0); + doBuyAnim = false; + if(buyAction ~= nil) then + buyAction:buy(); + end + end + end + + for k,v in pairs(tokens) do + if(not k:isBought()) then + + --npc icon + if(v.npc == nil and v.npcID ~= nil and v.enableTimer <= 0) then + n = pnpc.wrap(spawnNPC(v.npcID,v.x,v.y-70-64,v.section)); + n:mem(0x46,FIELD_WORD,0xFFFF); + n:mem(0x48,FIELD_WORD,0xFFFF); + n:mem(0x12A,FIELD_WORD,100); + n.speedX = 0; + n.speedY = 0; + v.npc = n; + end + if(v.npc ~= nil) then + v.npc.x = v.npc:mem(0xA8,FIELD_DFLOAT); + v.npc.y = v.npc:mem(0xB0,FIELD_DFLOAT); + v.npc.speedX = 0; + v.npc.speedY = 0; + v.npc:mem(0x12A,FIELD_WORD,100); + if(v.npcRefreshCount == 0 and (v.npcID == 287 or v.npcID == 147)) then + v.npc:mem(0x40,FIELD_WORD,0xFFFF); + v.npc = nil; + v.npcRefreshCount = 10; + elseif(v.npcRefreshCount > 0) then + v.npcRefreshCount = v.npcRefreshCount - 1; + end + end + + --bmp icon + if(v.image ~= nil and v.enableTimer <= 0) then + Graphics.placeSprite(2,v.image,v.x,v.y-70-64,"",2); + end + + --text + if(v.text ~= nil and v.enableTimer <= 0) then + local x1,y1 = raocoin.worldToScreen(v.x,v.y-64); + Text.print(v.text,x1+8-string.len(v.text)*9,y1-26); + end + + local img = raocoin.IMG_TOKEN_T; + if(k.permanent) then + img = raocoin.IMG_TOKEN_P; + end + + if(v.enableTimer <= 0) then + Graphics.placeSprite(2,img,v.x,v.y-64,"",2); + k:showPrice(v.x-48,v.y-8-64,false); + + if(colliders.collide(player,v.hitbox)) then + Graphics.drawImageToScene(raocoin.IMG_ARROW,v.x,v.y-32,math.abs(arrowalpha)) + if(tryBuy) then + doBuyAnim = true; + player.speedX = 0; + player.speedY = 0; + player.x = v.x+4; + sourceY = v.y; + if(k:canAfford()) then + Audio.playSFX(getSMBXPath().."\\LuaScriptsLib\\raocoin\\buy.ogg"); + spawnEffect(132,v.x,v.y); + v.enableTimer = 50; + if(v.npc ~= nil) then + v.npc:mem(0x40,FIELD_WORD,0xFFFF); + v.npc = nil; + end + else + Audio.playSFX(getSMBXPath().."\\LuaScriptsLib\\raocoin\\fail.ogg"); + end + buyAction = k; + end + end + + elseif(player:mem(0x122,FIELD_WORD) == 0 or player:mem(0x122,FIELD_WORD) == 7 or player:mem(0x122,FIELD_WORD) == 500) then + v.enableTimer = v.enableTimer - 1; + end + end + end + + tryBuy = false; +end + +function raocoin.onInitAPI() + registerEvent(raocoin, "onLoop", "update", true) --Register the loop event + registerEvent(raocoin, "onInputUpdate", "inputupdate", true) --Register the input event +end + + +function raocoin.onCollect(currency) +end + +function raocoin.onBuy(item) +end + +--code: 0=can't afford, 1=already bought +function raocoin.onBuyFail(item,code) +end + + +function raocoin.getScreenBounds() + local h = (player:mem(0xD0, FIELD_DFLOAT)); + local b = { left = player.x-400+player.speedX, right = player.x+400+player.speedX, top = player.y-260+player.speedY, bottom = player.y+340+player.speedY }; + + local sect = Section(player.section); + local bounds = sect.boundary; + + if(b.left < bounds.left - 10) then + b.left = bounds.left - 10; + b.right = b.left + 800; + end + + if(b.right > bounds.right - 10) then + b.right = bounds.right - 10; + b.left = b.right - 800; + end + + if(b.top < bounds.top+40-h) then + b.top = bounds.top+40-h; + b.bottom = b.top + 600; + end + + if(b.bottom > bounds.bottom+40-h) then + b.bottom = bounds.bottom+40-h; + b.top = b.bottom - 600; + end + + return b; + +end + +function raocoin.worldToScreen(x,y) + local b = raocoin.getScreenBounds(); + local x1 = x-b.left; + local y1 = y-b.top-(player:mem(0xD0, FIELD_DFLOAT))+30; + return x1,y1; +end + +return raocoin; \ No newline at end of file diff --git a/LuaScriptsLibExt/rng.lua b/LuaScriptsLibExt/rng.lua new file mode 100644 index 000000000..b017149bc --- /dev/null +++ b/LuaScriptsLibExt/rng.lua @@ -0,0 +1,151 @@ +--------------------------------------- +--------***********************-------- +--------**______ _ _ _____ **-------- +--------**| ___ \ \ | | __ \**-------- +--------**| |_/ / \| | | \/**-------- +--------**| /| . ` | | __ **-------- +--------**| |\ \| |\ | |_\ \**-------- +--------**\_| \_\_| \_/\____/**-------- +--------** **-------- +--------***********************-------- +--------------------------------------- +--------Created by Hoeloe - 2015------- +--Open-Source Random Number Generator-- +--------For Super Mario Bros X--------- +---------------v1.0.1------------------ + +local rng = {}; + +local MAG_SEED = 817796519; +local quot = 977441620; +rng.seed = nil; + +--Generates the metatable for the rng. +local function genMT() + --Calculate max number (not constant across build platforms.) + local x = 1.0 + while x * 4 > x * 2 do + x = x * 2 + end + if x * 4 < x * 2 then + x = x * 2 + end + local d = x / 2 + while x + d ~= x do + if x + d > x and x + d + d ~= x + d then + x = x + d + end + d = d / 2 + end + x = math.floor(x); + + local mt = {}; + mt.__index = function(tbl,key) + if(key == "MAX") then + return x; + else + return rawget(tbl,key); + end + end + mt.__newindex = function(tbl,key,val) + if(key == "MAX") then + error("Attempted to set a read-only field. This is not allowed.",2); + elseif(key == "seed") then + rawset(tbl,key,val); + else + error("Write access to this object's fields is prohibited.",2); + end + end + + return mt; +end + +local function genRand() + --Initialise RNG + if(rng.seed == nil) then + rng.seed = math.floor(math.fmod(os.clock()*958134896,MAG_SEED)); + end + + --Generate PRN and the quotient for the next iteration + local s = math.abs((26147705 * rng.seed) + quot); + rng.seed = math.fmod(s, MAG_SEED); + quot = math.floor(s/MAG_SEED); + + --Normalise PRN + return rng.seed/(MAG_SEED-1); +end + +function rng.randomInt(a,b) + if(a == nil and b == nil) then + return math.floor(rng.random(1000000)+0.5); + elseif(a == nil and b ~= nil) then + return rng.randomInt(0,b); + elseif(a ~= nil and b == nil) then + return rng.randomInt(0,a); + else + if(a <= b) then + return math.floor(rng.random(a-0.5,b+0.5)+0.5); + else + return rng.randomInt(b,a); + end + end +end + +function rng.random(a,b) + if(b == nil) then + if(a == nil) then + return genRand(); + else + return a * genRand(); + end + else + if(a == b) then + return a; + elseif(a > b) then + return rng.random(b,a); + else + local range = b-a; + return range*genRand() + a; + end + end +end + +function rng.randomEntry(tbl) + local nt = {}; + for _,v in pairs(tbl) do + table.insert(nt,v); + end + local n = rng.randomInt(#nt - 1); + return nt[n+1]; +end + + +function rng.irandomEntry(tbl) + local n = rng.randomInt(table.getn(tbl) - 1); + return tbl[n+1]; +end + +function rng.randomChar(a,b) + if(b == nil and (a == nil or type(a) == 'boolean')) then + if(a == nil) then + local c = rng.randomChar("A","Z"); + local l = rng.randomChar("a","z"); + if(rng.randomInt(0,1) == 0) then return c else return l end; + elseif(a) then --Upper case + return rng.randomChar("A","Z"); + else --Lower case + return rng.randomChar("a","z"); + end + else + local s; + local f; + if(a == nil) then s = string.byte("A",1) else s = string.byte(a,1); end + if(b == nil) then f = s; s = string.byte("A",1); else f = string.byte(b,1); end + local n = rng.randomInt(s,f); + return string.char(n); + end +end + +setmetatable(rng,genMT()); + +return rng; \ No newline at end of file