--platform.apilevel = '2.0' platform.apilevel = '1.0' --WARNING: THIS PROGRAM IS MADE BY JENS KOLBINGER! I AM NOT RESPONSIBLE FOR ANY BRAIN DAMAGE CAUSED BY READING THIS CODE! -- YOU ARE ALLOWED TO READ THIS CODE AND USE PARTS OF IT ON YOUR OWN -- SEND ME ALL YOU WANT TO TELL ME TO jens.software@gmail.com VERSION = "1.0 Pre 2 (v1)" print("========= RESTART: JMC2D CHALEX MOD "..VERSION.." =========") HANDHELD = platform.isDeviceModeRendering() and (not platform.hw or platform.hw()<=5) --detects if played in emulator or actual handheld --HANDHELD=true local math = math -- makes things a bit faster! print("handheld =",HANDHELD) --[[ error logging local startTime = timer.getMilliSecCounter() local errors = {} function errorHandler(lineNumber, errorMessage, callStack, locals) if errorMessage:find("break") then return false else local timeRunning = timer.getMilliSecCounter() - startTime table.insert(errors, timeRunning) if #errors > 5 and timeRunning - errors[#errors - 5] < 1000 then return false else local report = "Error: "..errorMessage report = report.."\n Time Running: "..tostring(timeRunning) report = report.."\n Error Number: "..tostring(#errors) report = report.."\n Call Stack:" for call in callStack:gmatch("\n([^\n]+)") do report = report.."\n "..call end report = report.."\n Locals:" for variable in locals:gmatch("\n([^\n]+)") do report = report.."\n "..variable end report = report.."\n"..string.rep("-", 20).."\n \n" var.store("errorLog", (var.recall("errorLog") or "")..report) print("New report", lineNumber, errorMessage) HUDmessage = {"Error Log updated", "3", 255,130,0} return true end end end platform.registerErrorHandler(errorHandler)]] ---------- BASIC CLASSES ---------- Point = class() function Point:init(x, y) self.x = x self.y = y end Rectangle = class() function Rectangle:init(x, y, width, height) self.x = x self.y = y self.width = width self.height = height end function Rectangle.getRight(rect) return rect.x + rect.width - 1 end function Rectangle.getBottom(rect) return rect.y + rect.height - 1 end function Rectangle.contains(rect, point) if (point.x >= rect.x) and (point.x < rect.x + rect.width) and (point.y >= rect.y) and (point.y < rect.y + rect.height) then return true else return false end end function Rectangle.getFrame(rect1, rect2) local frameX, frameY, frameWidth, frameHeight frameX = math.min(rect1.x, rect2.x) frameY = math.min(rect1.y, rect2.y) frameWidth = math.max(rect1:getRight(), rect2:getRight()) - frameX + 1 frameHeight = math.max(rect1:getBottom(), rect2:getBottom()) - frameY + 1 end ---------- BASIC FUNCTIONS ---------- function xor(A,B) return (A or B) and not (A and B) end function sign(x,zero) if x<0 then return -1 elseif x==0 and zero then return 0 else return 1 end end function getProgress(min, max, x) -- get progress of x from min to max return (x - min) / (max - min) end function lerp(min, max, x) -- linearly interpolates between min and max by x return x * (max - min) + min end function copy(table) local ntable={} for i, val in pairs(table) do if type(val)=="table" then ntable[i]=copy(val) else ntable[i]=val end end return ntable end function nextFree(table, min, max) local min = min or 0 local max = max or min + 200 for i = min, max do if table[i] == nil then return i end end end function inRange(i, min, max) return i and (i >= min and i <= max) end function inRect(p, r) --p=point={x,y}, r=rectangle={x,y,w,h} return (inRange(p[1],r[1],r[1]+r[3]) and inRange(p[2],r[2],r[2]+r[4])) end function getNeighbor(i,x,y) --get direct neighbor coordinates to point P(x,y) 1=above, 2=left, 3=right, 4=below x=x or 0 y=y or 0 if i==1 then return x, y+1 elseif i==2 then return x-1, y elseif i==3 then return x+1, y else return x, y-1 end end function getFrame(rect1,rect2) --smallest possible frame surrounding rect1 and rect2 (with format {x,y,width,height}) local mmax, mmin = math.max, math.min local nx, ny = mmin(rect1[1],rect2[1]), mmin(rect1[2],rect2[2]) local nw, nh = mmax(rect1[1]+rect1[3],rect2[1]+rect2[3])-nx, mmax(rect1[2]+rect1[4],rect2[2]+rect2[4])-ny return {nx,ny,nw,nh} end ----------- GLOBAL VARIABLES ----------- !GLOBALS WH=212 --WindowHeight WW=318 --WindowWidth nl=string.char(10) --new line debug=false jens=0 advCraftTable=nil craftItemInfo={} -- {{ItemID,needed,available},{ItemID2,...}} craftProduct={} craftOk=false mouseVisible=false mouseX=0 mouseY=0 settings={graphics={}} updateIn=10 updateFrame=nil HUDmessage={"","X",0,0,0} --(message,duration("X"^=forever),R,G,B) lavaUpdate=4 worldTime=6000 mode=0 allowSwitch=false fly=false moved=false currentSaveSlot=0 saveInfo={} deathcause="nothing" selBlock = {0, 0} breakBlock={} rareSpaceWarning=false inventory={} nextFlushTime=nil trash={} ovenList={} chestList={} worldSeed=0 worldName="New World" worldHeight={} worldEnd={bottom = -100, top = 50, left={v=0,a=0,height=0,nlv=0,nla=0,nhv=0,nha=0,nhigh=-65,nlow=-85},right={v=0,a=0,height=0,nlv=0,nla=0,nhv=0,nha=0,nhigh=-65,nlow=-85}} player = {pos = {0, 0}, dir = 1, grounded = true, falltimer = 0, fallspeed = 0, health = 10, breath = 50} --1: x-pos / 2: y-pos / 3: direction (1=right/2=left) / 4: grounded / 5: fall-timer / 6: fallspeed / 7: health (max:10) / 8: breath (max:50) world={} worldBuffer = {} spawnBed=nil sunTop={} lightMap={} alwaysUpdate={} selSlot=1 skyVisible=true bobberID=nil starMap={} do local scale = 32 for x = 0, WW, scale do for y = 0, WH, scale do local sx = x+math.random(scale) local sy = y+math.random(scale) local brightness = math.random(50,100) table.insert(starMap,{sx,sy,brightness}) end end end splashes="Your teacher is watching you!2D > 3D!Thanks adriweb!Your calculator is evil!Physics!Hi Björn!Beautiful dirt!Sorry for nonsense!Visit omnimaga.org!Visit codewalr.us!You are looking at this text!Your grades are suffering!Hello, my name is Jens!Infinite worlds!Watch out for the creepers!Mostly bugfree!Perfekt Englisch Language!Donaudampfschifffahrtsgesellschaftskapitänsmütze!Herobrine removed!This is the title screen!4x4=12!x=(-b±√(b²-4ac))/2a!This sentence is wrong!Made in germany!Lua powered!Now with metatables!Runs (almost) smoothly!Minecraft on a calculator!Who needs the 3rd dimension anyway?!Day and night!Diamond hoes!You had the 3rd dimension in the intro!Nspired gaming!Distracting!...!Years of development!THE GAME!Uses floppy discs for world saves!Music not by C418!Out of RAM!You are not connected to the internet!You must login to play!Same price, bigger size!Turn around!Try the nether!Almost dragon free!3D is DLC!Eats up your RAM!So random!Now with pixels!As seen on the interwebz!Made by me!Unlimited edition!Woo, version "..VERSION.."!Now with blocks!More than  sold!≈"..math.random(2,42000000).." lines of code!Perfectly horrifying code!I can't stop shouting!Wer das liest ist doof!I'm not even crazy!Be nice to the bugs!Have you seen this one yet?!Almost ndless fun!Jeeeeeeeeeens!But why?!Probably not worth your time!Never trust yellow text!Yes, this really exists!Pirated version!Best storyline of all time!7.8/10 - too much water!Now on sale!Experience the future!Barely nerdy!I'm different!Produces voices in your head!What, no silver swords?!\"I'm just doing my homework\"!Rated J for Jens!Probably powered by magic!Now with infinity!A chunky experience!Eats up your battery!Wasting your time since 2013!The best 2D Minecraft on the Nspire!Praise the square sun \\[T]/!Don't feed the bugs!It's pronounced \"Yens\"!Based on a true story!This is so 2013!I'm not even in school anymore!...what did you expect?!Pls don't tell Notch!The *real* Minecraft!...but with 3D clouds!Photo-realistic!Not owned by Microsoft yet!Mod made by Chalex!New splash text, wow!chalex has no idea how to code!e!" splashes=splashes:split("!") delay = {0, 0, 0} -- debug information ---------- TEXTURES ---------- !TEXT IDTexture={} --blocks IDTexture[1]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\011\218\169\201\169\201G\189G\189\011\218\169\201\169\201G\189G\189\229\172G\189G\189\011\218G\189\011\218G\189\169\201\229\172G\189G\189\169\201\016\194\229\172G\189\011\218\169\201G\189\011\218\169\201\229\172\229\172\011\218G\189G\189\229\172\011\218G\189G\189G\189\011\218G\189G\189G\189\229\172\229\172\011\218G\189\169\201\173\181\011\218G\189\169\201\229\172G\189\011\218\169\201\169\201G\189\169\201G\189\011\218\169\201G\189\169\201G\189\169\201\011\218\229\172\169\201G\189G\189\169\201\229\172G\189\173\181G\189\169\201\229\172G\189G\189\229\172\169\201\169\201G\189\169\201\229\172\229\172\229\172G\189G\189\229\172G\189G\189G\189\011\218\011\218G\189G\189G\189\016\194G\189G\189\011\218\011\218G\189\011\218\011\218G\189\169\201G\189\169\201G\189G\189\011\218\011\218\169\201\169\201G\189G\189\169\201\229\172\169\201\169\201G\189G\189\169\201\169\201\169\201G\189G\189\169\201G\189\169\201G\189\229\172G\189\169\201\169\201G\189G\189G\189\229\172G\189G\189\169\201\229\172G\189G\189\229\172\229\172G\189G\189G\189G\189G\189\011\218\011\218G\189\169\201G\189\169\201G\189\011\218\011\218G\189\011\218\169\201\229\172\011\218\011\218\229\172\169\201\169\201\016\194G\189\169\201G\189G\189\169\201\169\201\011\218G\189\169\201\173\181\169\201\169\201G\189\229\172\169\201G\189\229\172G\189\229\172\169\201G\189\169\201\169\201\011\218G\189G\189G\189G\189G\189G\189G\189\011\218\011\218G\189\169\201G\189G\189h\185G\189\169\201\169\201G\189\229\172\011\218\229\172G\189\011\218\169\201\169\201\169\201G\189\229\172\011\218G\189\229\172G\189\229\172\011\218\011\218G\189\169\201G\189G\189\169\201\169\201\169\201G\189\011\218\169\201\169\201G\189\016\194G\189\169\201\169\201G\189G\189\169\201\169\201G\189\229\172") IDTexture[2]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\201\186\201\186\201\186\135\178\135\178\168\182f\178\168\182\234\190\201\186\168\182\135\182\168\182\135\178E\170\168\182\201\186\168\182\203\198\170\194\202\194\229\172\136\182\135\178f\178\012\203\236\202\201\186\135\178\168\182\135\182\168\182\235\198\229\172-\207\135\178\168\182\229\172\169\186\229\172\201\186\234\190\236\202\013\203\229\172E\174g\178\229\172\229\172\173\181\229\172\229\172\201\186\229\172\229\172\229\172f\178\229\172\168\182\229\172G\189\229\172\229\172G\189\169\201G\189\169\201\011\218\229\172\169\201G\189G\189\229\172\229\172\229\172\173\181G\189\169\201\229\172G\189G\189\229\172\169\201\169\201G\189\169\201\229\172\229\172\229\172G\189G\189\229\172G\189G\189G\189\011\218\011\218G\189G\189G\189\016\194G\189G\189\011\218\011\218G\189\011\218\011\218G\189\169\201G\189\169\201G\189G\189\011\218\011\218\169\201\169\201G\189G\189\169\201\229\172\169\201\169\201G\189G\189\169\201\169\201\169\201G\189G\189\169\201G\189\169\201G\189\229\172G\189\169\201\169\201G\189G\189G\189\229\172G\189G\189\169\201\229\172G\189G\189\229\172\229\172G\189G\189G\189G\189G\189\011\218\011\218G\189\169\201G\189\169\201G\189\011\218\011\218G\189\011\218\169\201\229\172\011\218\011\218\229\172\169\201\169\201\016\194G\189\169\201G\189G\189\169\201\169\201\011\218G\189\169\201\173\181\169\201\169\201G\189\229\172\169\201G\189\229\172G\189\229\172\169\201G\189\169\201\169\201\011\218G\189G\189G\189G\189G\189G\189G\189\011\218\011\218G\189\169\201G\189G\189h\185G\189\169\201\169\201G\189\229\172\011\218\229\172G\189\011\218\169\201\169\201\169\201G\189\229\172\011\218G\189\229\172G\189\229\172\011\218\011\218G\189\169\201G\189G\189\169\201\169\201\169\201G\189\011\218\169\201\169\201G\189\016\194G\189\169\201\169\201G\189G\189\169\201\169\201G\189\229\172" IDTexture[3]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\239\189\206\185\206\185\206\185\206\185\239\1891\1981\198\173\1811\198\239\189\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\1981\1981\198\206\185\206\185\206\1851\1981\1981\198\173\181\239\189\239\189\206\185\239\189\173\181\206\185\206\185\173\181\206\185\206\185\206\1851\198\206\185\239\189\239\189\239\1891\198\239\189\239\189\239\1891\198\239\189\239\189\239\189\173\181\239\1891\198\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\1981\1981\1981\198\173\181\206\185\206\185\239\189\239\189\239\189\206\185\206\185\206\185\239\189\173\181\239\189\239\189\206\185\206\185\173\181\239\1891\1981\198\239\189\016\194\239\189\206\1851\1981\198\239\189\239\189\239\189\239\1891\1981\1981\198\173\181\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\206\185\173\181\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\198\173\1811\198\206\185\239\189\239\189\239\1891\1981\1981\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\206\185\206\185\206\185\239\189\173\181\239\189\239\189\206\185\206\185\206\1851\198\239\189\239\189\239\1891\198\206\185\206\1851\1981\198\206\185\173\181\206\1851\1981\1981\198\239\189\239\189\239\189\173\181\239\189\239\189\239\189\206\185\239\189\239\189\239\1891\1981\198\239\189\239\189\239\1891\1981\198\173\181\239\189\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\198\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\173\181\206\185\239\189\239\1891\1981\198\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\239\189\206\185\206\185\239\189\206\185\206\185\206\185\206\185\173\1811\1981\198\239\189\239\189\239\189\239\189\206\185\206\185\206\185\239\189\239\189" IDTexture[4]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000k\173\198\152\198\152\198\152\198\152k\173R\202R\202!\132R\202k\173\198\152\198\152\198\152\198\152k\173k\173k\173R\202R\202R\202R\202R\202R\202\198\152R\202R\202R\202!\132k\173k\173\198\152k\173!\132\198\152\198\152!\132\198\152\198\152\198\152R\202\198\152k\173k\173k\173R\202k\173k\173k\173R\202k\173k\173k\173!\132k\173R\202k\173k\173\198\152\198\152\198\152\198\152\198\152k\173k\173R\202R\202\198\152\198\152\198\152\198\152\198\152\198\152\198\152R\202R\202R\202R\202R\202!\132\198\152\198\152k\173k\173k\173\198\152\198\152\198\152k\173!\132k\173k\173\198\152\198\152!\132k\173R\202R\202k\173\140\177k\173\198\152R\202R\202k\173k\173k\173k\173R\202R\202R\202!\132k\173k\173k\173\198\152\198\152\198\152\198\152\198\152\198\152!\132\198\152\198\152\198\152\198\152k\173k\173k\173R\202R\202!\132R\202\198\152k\173k\173k\173R\202R\202R\202R\202R\202R\202R\202k\173\198\152\198\152\198\152\198\152\198\152\198\152k\173!\132k\173k\173\198\152\198\152\198\152R\202k\173k\173k\173R\202\198\152\198\152R\202R\202\198\152!\132\198\152R\202R\202R\202k\173k\173k\173!\132k\173k\173k\173\198\152k\173k\173k\173R\202R\202k\173k\173k\173R\202R\202!\132k\173\198\152\198\152\198\152\198\152\198\152\198\152\198\152R\202R\202\198\152\198\152\198\152\198\152\198\152k\173k\173R\202\198\152R\202!\132k\173k\173\198\152\198\152\198\152!\132\198\152k\173k\173R\202R\202k\173k\173k\173\198\152\198\152\198\152\198\152\198\152k\173k\173R\202R\202k\173\198\152\198\152k\173\198\152\198\152\198\152\198\152!\132R\202R\202k\173k\173k\173k\173\198\152\198\152\198\152k\173k\173" IDTexture[5]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alal\199\197\036\173alalalalalalalal\042\214\070\181alalal\009\210\009\210\228\164\199\197\199\197\009\210\009\210\042\214\042\214\042\214\009\210\199\197\037\177\009\210alal\069\177\199\197\036\173\069\177\069\177\069\177\069\177\069\177\069\177\036\173\036\173\069\177\070\181\069\177alalal\036\173\228\164alalalalalalalal\036\173\195\160alalalal\199\197\036\173alalalalalalalal\009\210\037\177alalal\009\210\069\177\037\177\042\214\042\214\042\214\199\197\199\197\199\197\069\177\042\214\199\197\036\173\009\210alal\069\177\042\214\037\177\036\173\036\173\036\173\069\177\069\177\069\177\036\173\036\173\042\214\070\181\069\177alalal\036\173\195\160alalalalalalalal\036\173\195\160alalalal\042\214\070\181alalalalalalalal\042\214\070\181alalal\009\210\199\197\036\173\042\214\042\214\199\197\199\197\199\197\199\197\009\210\009\210\042\214\036\173\009\210alal\069\177\009\210\037\177\036\173\036\173\036\173\069\177\069\177\069\177\069\177\069\177\009\210\037\177\069\177alalal\069\177\228\164alalalalalalalal\036\173\195\160alalalal\042\214\070\181alalalalalalalal\009\210\228\164alalal\009\210\069\177\070\181\199\197\042\214\042\214\199\197\042\214\042\214\199\197\009\210\199\197\036\173\009\210alal\069\177\199\197\036\173\036\173\036\173\070\181\036\173\069\177\069\177\069\177\036\173\042\214\070\181\069\177alalal\069\177\228\164alalalalalalalal\195\160\195\160alal" IDTexture[6]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000\255\255\255\255\255\255al\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\223\223\255\255alalalalalal\223\223alalalalalalal\091\219\255\255alal\255\255alal\223\223alalalalalalalalal\255\255al\255\255alalalalalalalalalalal\223\223\091\219\255\255\255\255alalalalalalal\255\255alalal\223\223al\091\219\255\255alalalalalalal\255\255alalal\223\223alalalalalalalalalal\223\223alalalalalalal\091\219\255\255al\223\223alalal\223\223alalalalalalalal\091\219\255\255\223\223alalalalalalalalalalalalal\091\219\255\255alalalalalalal\255\255alalalalalalalalalalalalalal\255\255alalalalal\255\255alal\255\255alalalalal\223\223alalalalal\255\255alal\091\219al\223\223alalalalalalalalal\255\255alalal\091\219\223\223alalalalalalalalal\223\223alalalal\091\219\255\255alalalalalalalalalalalalalal\223\223\223\223\091\219\091\219\091\219\091\219\091\219alal\091\219\091\219al\091\219\091\219\091\219\091\219\223\223" IDTexture[7]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\229\164F\181g\181\233\205\196\156g\181\201\201\196\160F\177F\181F\181\136\189g\181\136\189F\181\233\205\196\160F\177g\181\163\156\196\160\233\201\196\160F\177\233\205\196\156F\181\233\205\229\164\136\189\229\164\201\201\163\156&\173F\177\196\160F\181\233\205\196\160F\181\233\201\195\156F\181\136\189\229\164\136\189\229\164\233\205g\181\228\160%\177\196\160\136\189\136\189\196\160F\181\233\201\195\156F\181\233\201\196\156\233\205\196\160\136\189F\181\196\160g\181F\181\136\189\136\189g\181F\181g\181\196\160F\181\233\205\196\156\233\205\195\156\136\189g\181&\173g\181F\177\233\205F\181F\177F\181F\181\196\156F\181\168\197\196\160\136\189\196\160F\181F\181\136\189\229\164g\181\201\201%\177F\181\195\156\200\201\195\156\136\189%\173\163\156\136\189\196\160g\181F\181\233\205\196\160F\181\233\205\196\156\233\205\196\160\233\205\163\156\136\189\229\164F\177\136\189\196\160g\181F\181\233\205\196\160g\185\200\201\196\160F\181\196\160F\181\196\160\200\201\195\156g\181F\181\196\160\136\189F\181\233\205\229\164F\181g\181\200\201\196\160F\181F\181\163\156\201\201\196\160F\181\201\201\196\160\136\189\228\160\136\189\196\160F\181F\181\201\201\163\156F\177\196\160&\173\234\205\196\160F\181\233\205\228\160\201\201\196\160\136\189\196\160F\181g\181\233\205\196\160\233\205\163\156&\173\233\205\196\156g\181\201\201\195\156\233\205\195\156\233\205\163\156F\177F\181\233\205\163\156F\181\196\160F\177\201\201\195\156F\181%\177\196\160\233\201\196\160g\181&\173g\181F\181\136\189\229\164g\181g\181%\177F\181\196\156F\181\200\201\233\205\163\156\163\156F\181\201\201\196\160F\181\136\189\229\164\196\160\200\201F\181\233\201\195\156F\177\136\189\196\156F\181&\173F\181\136\189\196\160F\177F\181F\181\196\160F\181g\181F\181\163\156F\181F\181F\177\136\189" IDTexture[8]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000\070\167al\198\171\132\163\004\146alalal\227\154alalalal\227\141al\166\171\004\159al\232\179\070\167al\227\141alal\227\141\194\137al\199\175\199\175\227\141al\227\141alal\037\163al\196\145\198\171\133\167al\132\163\166\171\036\146\199\175\037\167al\199\171\166\171alalalalal\198\171\004\159al\166\171\070\167\226\137\198\171\004\159al\198\171\070\167al\133\167\133\167alal\104\175\197\149al\070\167\005\163alal\005\163al\037\163\004\159al\199\171\228\158al\226\137\005\163\004\146al\197\149\070\167al\003\142al\004\146al\228\158\227\141\037\167al\227\141\004\146al\133\167\165\167alal\037\150alal\227\141\004\146\004\146\133\167\231\175al\165\167\231\175\004\146\198\171\037\163al\166\167\232\179\227\141al\227\141al\037\150\232\175\037\163al\070\167\037\167\197\149\070\167\037\163al\037\167\037\163alal\232\179\071\171\227\141\005\163\194\137al\004\146\005\163al\070\167al\227\141al\038\167al\227\141\166\171\037\163al\036\146alalalal\164\145\004\146al\166\171\166\171alal\004\146\070\167alal\198\171al\198\171\199\175alalalal\198\171\070\167al\166\171\004\159al\227\141\166\171\004\159al\199\175\070\167al\166\171\199\175alal\004\159al\099\159\037\163al\194\137\133\167\037\163al\004\146\037\163al\165\167\004\159alal\227\141al\037\167\226\137\198\171\166\171al\037\150alal\004\146\004\146\228\158alalal\037\150\227\141\038\167al\199\175\037\163\004\146\133\167alalalal\070\167al\227\141\166\171\198\171\227\141alal\037\163\003\142\198\171" waterRGB={152,197,255} IDTexture[9]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000?\211?\207?\207\031\203\031\203\031\203?\207?\207?\207?\207?\207?\207?\211?\211?\211?\211\031\203?\207?\211?\211?\211?\211?\211?\211?\211?\211?\211?\207?\207?\207\031\203\031\203\031\203\031\203?\207?\207?\207?\211?\207?\207?\207?\207\031\203?\211?\211\031\203\031\203\031\203\031\203?\211?\211?\207?\207?\211?\211?\211?\211\031\203\031\203\031\203\031\203\031\203?\207?\207?\211?\211?\211\031\203\031\203\031\203\031\203\031\203\031\203?\211?\207?\207?\207\031\203?\207\031\203?\211?\207?\207\031\203?\207?\207?\207?\207?\211\031\203\031\203\031\203\031\203?\211\031\203\031\203?\207?\207\031\203\031\203\031\203\031\203\031\203?\211\031\203\031\203\031\203?\207?\207?\211?\211?\211\031\203?\207?\211?\211?\211?\207?\207?\207\031\203?\207?\207?\211?\211?\207?\207\031\203?\207?\207?\211?\207?\207?\207?\207?\207?\207\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203?\211?\211?\211?\211?\207?\211?\211?\207?\207?\207\031\203?\207?\211?\211?\211?\207?\207?\211?\211\031\203\031\203?\211?\207\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203?\211?\211?\211?\211?\211?\211?\211?\211?\207?\207?\207?\207\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203?\207?\207?\211?\211?\211?\211?\211?\211?\207?\207\031\203?\207?\207?\211?\211?\211?\211\031\203\031\203\031\203\031\203?\207?\207?\207?\207?\211?\211\031\203\031\203\031\203\031\203\031\203\031\203?\211\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203\031\203" IDTexture[10]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000K\206S\239S\239S\2392\235S\2392\235S\235t\239S\2393\2352\235\018\2312\235\017\231S\235T\239S\235U\239v\243\209\2222\2352\2312\235\240\222u\243\251\255S\2392\235S\2352\235\149\243U\239v\247\184\2512\2353\2352\235S\239S\239S\239t\239u\243v\243\241\226\018\2312\235\183\251\017\2312\2353\235S\239\018\231T\2392\231\018\2312\2352\235S\235t\239S\239S\235S\239\208\222t\2432\235v\2432\235v\243v\243U\243v\243u\243\018\2312\235u\2433\235\240\226T\239\017\227\017\231S\239\018\231\253\2552\235\149\243T\2394\2392\235\150\247S\239\240\226\018\2312\231S\239\240\226\207\222U\239\242\230S\239\208\222t\2393\2352\2352\2352\235v\243\217\255S\239u\243S\2394\235S\2392\235u\243S\235S\2392\231t\243\215\255S\239\019\2312\2352\235T\239U\2392\235u\243T\239U\239v\247u\243U\2392\235v\243U\239\151\247\250\255\240\222S\2392\2354\2392\235S\239\240\222\174\214U\243S\235S\235T\239u\2432\235S\239S\239S\239\150\247S\239U\239\240\226\149\243T\239T\239\141\214U\243\241\226v\2473\2354\239\151\247\150\247u\2432\235S\2392\2352\235S\239\018\231U\243t\243\242\226S\2392\235S\2393\235S\239S\239S\235\216\2552\2352\2352\231\207\222v\247S\2392\235\150\247T\2392\235t\239\207\222\241\226S\2393\2352\231U\239U\243\018\2312\235\249\255u\243\017\231\174\2182\2312\2352\235\151\251U\239\151\251u\243T\239t\2432\235u\243\019\235U\2394\2352\235\018\231T\239\019\235S\239t\239\174\218T\239\207\2222\235u\243\242\230\018\231U\2392\235t\2432\235\240\222\249\255S\239\241\226v\247S\239\151\2472\2312\2352\235S\2392\235\241\226" IDTexture[11]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\239\189\140\177\140\177\181\214\181\214\239\189\206\185\181\214\148\210\239\189\140\177J\169k\173\173\181\148\210\181\2141\198\140\177\181\214\181\214\016\194\173\181\181\214\016\194\181\2141\1981\198\140\177\140\177\148\210\239\189\239\189\140\177s\206\239\189\239\189\239\189J\169\181\214R\202\239\189\239\189\016\194J\169\140\177\140\177R\202\016\194\140\177\140\177s\206\239\189\206\185J\169\239\189\016\1941\198\239\189J\169k\173\148\210\140\177\140\177J\169s\206\181\214J\169J\169J\169J\169\173\181\239\189J\169J\169\181\214s\206\239\189\239\189\140\177\173\181\181\214\239\189\206\185\181\214\148\210\181\214\140\177J\169\173\181\247\222s\206\239\1891\198\239\189\016\194\173\181\206\185\016\194k\173s\206\016\194\239\189\239\189\140\177\140\177\140\177\239\1891\1981\198R\202k\173k\173\239\189\206\185\206\185J\169)\165)\165J\1691\198\148\210\016\194k\173\140\177\206\185J\169k\173\173\181\140\177\181\214\181\214\181\214\016\194k\173\181\214R\202\181\214\181\214R\202\173\181s\2061\198\140\177\140\177\140\177\239\189\016\194\239\1891\198J\169\140\177\206\185\181\214\181\214\173\181\239\189)\165\140\177\181\214\181\214J\169k\1731\198\239\189J\169\140\177\140\177\173\181k\173\239\189\239\189J\169\140\177\181\214\181\214\016\194J\169\140\177J\169k\173\140\177\148\210\181\214\016\194\206\185J\169\140\177\140\177\181\214\016\194R\202\239\189\140\177s\206s\206R\202k\173\239\189\148\2101\198\181\214\181\214\140\177\140\177\181\214\016\194\016\194k\173\148\210\148\2101\198\016\194\173\181\140\177J\169\140\177\206\185\016\194\239\189\140\177\239\1891\198\239\189J\169\140\1771\198\148\210\239\189\206\185\239\189\239\189k\173\140\177k\173\239\189\140\177\173\181J\169J\169\140\177\016\194J\169\206\185\016\194\239\189J\169\173\181\148\210\239\189\239\189J\169\173\181\148\210\181\214\140\177\016\194" IDTexture[12]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000L\222\009\206\009\206\009\206\009\206L\222L\222K\218\009\206L\222L\222L\222L\222L\222L\222\009\206L\222L\222K\218g\185K\218K\218\009\206\009\206\009\206\009\206\009\206K\218\009\206K\218L\222\009\206L\222L\222\009\206\009\206\009\206\009\206K\218K\218g\185L\222L\222K\218L\222L\222L\222\009\206F\181F\181F\181g\185g\185g\185g\185g\185g\185g\185F\181F\181F\181F\181g\185g\185L\222\009\206\009\206\009\206\009\206L\222L\222\009\206L\222\009\206\009\206g\185K\218K\218K\218L\222\009\206\009\206g\185K\218K\218K\218L\222\009\206K\218K\218K\218K\218\009\206\009\206\009\206\009\206L\222L\222L\222K\218L\222L\222L\222\009\206\009\206\009\206g\185L\222L\222L\222L\222L\222g\185g\185F\181F\181F\181F\181F\181g\185g\185g\185F\181F\181F\181F\181g\185g\185L\222L\222L\222L\222L\222g\185\009\206L\222L\222K\218K\218K\218L\222L\222L\222\009\206\009\206\009\206\009\206\009\206\009\206L\222K\218K\218\009\206\009\206\009\206g\185L\222\009\206\009\206\009\206L\222K\218K\218K\218L\222L\222\009\206\009\206\009\206\009\206K\218K\218K\218K\218K\218\009\206g\185F\181g\185g\185F\181F\181F\181g\185g\185g\185g\185g\185F\181F\181F\181g\185L\222L\222L\222L\222L\222\009\206L\222\009\206\009\206g\185\009\206\009\206K\218L\222L\222L\222K\218\009\206g\185L\222L\222L\222L\222\009\206L\222K\218K\218\009\206\009\206\009\206\009\206K\218L\222L\222\009\206\009\206\009\206L\222L\222\009\206L\222L\222\009\206K\218L\222L\222L\222L\222g\185g\185g\185\136\189F\181F\181\136\189F\181g\185g\185g\185F\181\229\164F\181F\181g\185" IDTexture[13]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\168\174\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\168\174\168\174\0\0\0\0\0\0\0\0\168\174&\162B\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\164\149&\162\0\0\168\174\168\174&\162\0\0&\162\135\189\0\0\0\0\0\0\0\0\0\0\0\0\168\174\135\189\131\145B\137\0\0&\162B\137\194\164\4\173\4\173B\137\0\0\0\0\0\0\0\0\0\0&\162F\185B\137B\137\0\0B\137\135\189\4\173\194\164\194\164\135\189\0\0\0\0\0\0\0\0\0\0\0\0\0\0F\185\135\189\194\164\135\189\4\173\194\164B\137\0\0\168\174&\162\0\0\0\0\0\0\0\0\168\174B\137\0\0\227\168\4\173\168\174\168\174\0\0\0\0\168\174&\162B\137\0\0\0\0\0\0\0\0&\162\0\0\135\189F\185F\185&\162\131\145B\137\194\164\0\0B\137\0\0\0\0\0\0\0\0\0\0\0\0&\162f\185\194\164\4\173\135\189B\137\4\173\4\173F\185\135\189\168\174\0\0\0\0\0\0\0\0\168\174\131\145\194\164\0\0\168\174B\137\194\164\194\164\168\174B\137\0\0B\137&\162\0\0\0\0\168\174&\162B\137B\137\0\0&\162B\137\135\189\194\164\0\0\0\0\0\0\0\0B\137\0\0\0\0&\162B\137\0\0B\137\0\0\194\164\135\189\168\174\164\149\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\135\189f\185\194\164B\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\135\189\4\173\194\164\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0F\185\4\173\194\164\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[14]="\011\000\000\000\016\000\000\000\000\000\000\000\022\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\034\248\034\248alalalalalalalal\034\248\001\200\033\228\033\220\033\228alalalalal\033\228\033\228\033\228\034\248\001\200alalalalalalal\034\248\033\220\001\200\001\200\033\228alalalalalal\033\228\000\142\128\137alalalalalalalalal\007\173alalalalalalalalal\007\173\000\142alalalalalalalalalal\128\137\000\142alalalalalalalalalal\000\142\007\173alalalalalalalal\007\173\128\137alalalalalalalalalal\128\137alal" IDTexture[15]="\009\000\000\000\016\000\000\000\000\000\000\000\018\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\064\255\032\254alalalalalalal\242\255\255\255alalalalalalal\136\189\229\164alalalalalalal\200\201\195\156alalalalalalal\201\201\196\160alalalalalalal\234\205\196\160alalalalalalal\201\201\195\156alalalalalalal\070\181\196\156alalalalalalal\233\201\195\156alalalalalalal\070\181\163\156" IDTexture[16]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\239\189\206\185\206\185\206\185\206\185\239\1891\1981\198\173\1811\198\239\189\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\1981\1981\1981\1981\198\206\1851\1981\1981\198\173\181\239\189\239\189\206\185\239\189\173\181\206\185\206\185\231\156\206\185\206\185\206\1851\198\206\185\239\189\239\189\008\161\231\156\239\189\239\189\239\1891\198\239\189\239\189\239\189\173\181\239\189\008\161\198\152\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\1981\1981\1981\198\173\181\206\185\206\185\239\189\239\189\239\189\008\161\008\161\206\185\239\189\173\181\008\161\008\161\206\185\206\185\173\181\239\1891\1981\198\239\189\008\161\008\161\231\156\231\156\198\152\239\189\239\189\231\156\198\1521\1981\1981\198\173\181\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\206\185\173\181\206\185\206\185\206\185\206\185\239\189\239\189\239\189\008\161\231\156\173\1811\198\206\185\239\189\239\189\008\161\008\1611\1981\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\206\185\206\185\206\185\008\161\198\152\198\152\198\152\206\185\206\185\206\1851\198\239\189\239\189\239\1891\198\206\185\231\1561\1981\198\206\185\173\181\206\1851\1981\1981\198\239\189\239\189\239\189\173\181\239\189\239\189\239\189\206\185\239\189\239\189\239\1891\1981\198\239\189\008\161\198\1521\1981\198\173\181\239\189\206\185\206\185\206\185\206\185\206\185\206\185\206\185\008\161\008\161\008\161\231\156\231\156\198\152\206\185\239\189\239\1891\198\206\185\008\161\198\152\239\189\239\189\206\185\206\185\198\152\198\152\206\185\239\189\239\1891\1981\198\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\239\189\206\185\206\185\239\189\206\185\206\185\206\185\206\185\173\1811\1981\198\239\189\239\189\239\189\239\189\206\185\206\185\206\185\239\189\239\189" IDTexture[17]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\239\189\206\185\206\185\206\185\206\185\239\1891\1981\198\173\1811\198\239\189\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\1981\1981\1981\1981\198\206\1851\1981\1981\198\173\181\239\189\239\189\206\185\239\189\173\181\206\185\206\185p\222\206\185\206\185\206\1851\198\206\185\239\189\239\189\178\234p\222\239\189\239\189\239\1891\198\239\189\239\189\239\189\173\181\239\189\178\234.\214\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\1981\1981\1981\198\173\181\206\185\206\185\239\189\239\189\239\189\245\238\178\234\206\185\239\189\173\181\245\238\178\234\206\185\206\185\173\181\239\1891\1981\198\239\189\245\238\178\234p\222p\222.\214\239\189\239\189p\222.\2141\1981\1981\198\173\181\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\206\185\173\181\206\185\206\185\206\185\206\185\239\189\239\189\239\189\178\234p\222\173\1811\198\206\185\239\189\239\189\245\238\178\2341\1981\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\206\185\206\185\206\185\178\234.\214.\214.\214\206\185\206\185\206\1851\198\239\189\239\189\239\1891\198\206\185p\2221\1981\198\206\185\173\181\206\1851\1981\1981\198\239\189\239\189\239\189\173\181\239\189\239\189\239\189\206\185\239\189\239\189\239\1891\1981\198\239\189\178\234.\2141\1981\198\173\181\239\189\206\185\206\185\206\185\206\185\206\185\206\185\206\185\178\234\245\238\178\234p\222p\222.\214\206\185\239\189\239\1891\198\206\185\178\234.\214\239\189\239\189\206\185\206\185.\214.\214\206\185\239\189\239\1891\1981\198\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\239\189\206\185\206\185\239\189\206\185\206\185\206\185\206\185\173\1811\1981\198\239\189\239\189\239\189\239\189\206\185\206\185\206\185\239\189\239\189" IDTexture[18]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000C\254\193\253\193\253#\254\230\254\197\254d\254\226\253\161\253\002\254\226\253\225\253\002\254\197\254\197\254\197\254#\254\034\254C\254\002\254d\254#\254d\254\002\254\193\253\198\254\198\254\193\253\193\253d\254\230\254\132\254d\254\198\254\165\254d\254\225\253`\253\161\253\002\254\226\253d\254d\254\161\253\193\253\132\254\236\255\007\255d\254C\254C\254#\254\225\253`\253\002\254\165\254C\254\129\253`\253\129\253\226\253i\255H\255\007\255C\254\225\253\034\254\193\253\193\253\225\253\230\254H\255\197\254\226\253\226\253\129\253\034\254\138\255\132\254\132\254C\254\193\253\193\253\161\253\193\253d\254(\255\007\255\034\254\193\253\007\255C\254\193\253C\254\002\254C\254\002\254\193\253\226\253\225\253d\254i\255\235\255\132\254`\253\002\254H\255d\254\193\253#\254C\254\002\254\226\253\193\253\193\253\161\253\197\254\237\255\237\255\230\254a\253\129\253C\254#\254\193\253\226\253\193\253\193\253\034\254\132\254\002\254\161\253\193\253\230\254'\255d\254\129\253`\253`\253\002\254C\254\226\253\002\254\226\253d\254'\255(\255\034\254\129\253\193\253\034\254\161\253 \253 \253\161\253i\255\170\255\226\253\002\254d\254\132\254\006\255\170\255C\254\193\253\226\253\226\253\161\253`\253`\253\193\253\170\255(\255\129\253\161\253C\254\002\254\225\253\225\253\226\253\165\254\006\255\002\254\193\253C\254\034\254\161\253\034\254\225\253`\253\193\253\034\254d\254\002\254\226\253\225\253\006\255(\255\193\253\161\253d\254\132\254d\254\193\253@\253@\253\225\253\165\254i\255\197\254\132\254d\254\002\254\225\253`\253a\253\034\254#\254\165\254\193\253\129\253`\253\193\253i\255H\255\170\255H\255'\255\225\253\129\253@\253`\253\193\253\193\253\034\254\034\254\132\254\226\253\193\253\197\254C\254d\254\165\254\230\254d\254#\254\193\253\129\253\161\253\193\253\226\253d\254\006\255\132\254\225\253C\254" IDTexture[19]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\239\189\206\185\206\185\206\185\206\185\239\1891\1981\198\173\1811\198\239\189\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\1981\1981\1981\1981\198\206\1851\1981\1981\198\173\181\239\189\239\189\206\185\239\189\173\181\206\185\206\185\169\255\206\185\206\185\206\1851\198\206\185\239\189\239\189\246\255\169\255\239\189\239\189\239\1891\198\239\189\239\189\239\189\173\181\239\189\246\255\165\250\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\1981\1981\1981\198\173\181\206\185\206\185\239\189\239\189\239\189\255\255\246\255\206\185\239\189\173\181\255\255\246\255\206\185\206\185\173\181\239\1891\1981\198\239\189\255\255\246\255\169\255\169\255\165\250\239\189\239\189\169\255\165\2501\1981\1981\198\173\181\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\206\185\173\181\206\185\206\185\206\185\206\185\239\189\239\189\239\189\246\255\169\255\173\1811\198\206\185\239\189\239\189\255\255\246\2551\1981\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\206\185\206\185\206\185\246\255\165\250\165\250\165\250\206\185\206\185\206\1851\198\239\189\239\189\239\1891\198\206\185\169\2551\1981\198\206\185\173\181\206\1851\1981\1981\198\239\189\239\189\239\189\173\181\239\189\239\189\239\189\206\185\239\189\239\189\239\1891\1981\198\239\189\246\255\165\2501\1981\198\173\181\239\189\206\185\206\185\206\185\206\185\206\185\206\185\206\185\246\255\255\255\246\255\169\255\169\255\165\250\206\185\239\189\239\1891\198\206\185\246\255\165\250\239\189\239\189\206\185\206\185\165\250\165\250\206\185\239\189\239\1891\1981\198\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\239\189\206\185\206\185\239\189\206\185\206\185\206\185\206\185\173\1811\1981\198\239\189\239\189\239\189\239\189\206\185\206\185\206\185\239\189\239\189" IDTexture[20]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\239\189\206\185\206\185\206\185\206\185\239\1891\1981\198\173\1811\198\239\189\206\185\206\185\206\185\206\185\239\189\239\189\239\1891\1981\1981\1981\1981\1981\198\206\1851\1981\1981\198\173\181\239\189\239\189\206\185\239\189\173\181\206\185\206\185?\187\206\185\206\185\206\1851\198\206\185\239\189\239\189\159\227?\187\239\189\239\189\239\1891\198\239\189\239\189\239\189\173\181\239\189\159\227\190\175\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\206\185\206\185\206\185\206\185\206\185\206\185\206\1851\1981\1981\1981\1981\198\173\181\206\185\206\185\239\189\239\189\239\189\255\255\159\227\206\185\239\189\173\181\255\255\159\227\206\185\206\185\173\181\239\1891\1981\198\239\189\255\255\159\227?\187?\187\190\175\239\189\239\189?\187\190\1751\1981\1981\198\173\181\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\206\185\173\181\206\185\206\185\206\185\206\185\239\189\239\189\239\189\159\227?\187\173\1811\198\206\185\239\189\239\189\255\255\159\2271\1981\1981\1981\1981\1981\198\239\189\206\185\206\185\206\185\206\185\206\185\206\185\159\227\190\175\190\175\190\175\206\185\206\185\206\1851\198\239\189\239\189\239\1891\198\206\185?\1871\1981\198\206\185\173\181\206\1851\1981\1981\198\239\189\239\189\239\189\173\181\239\189\239\189\239\189\206\185\239\189\239\189\239\1891\1981\198\239\189\159\227\190\1751\1981\198\173\181\239\189\206\185\206\185\206\185\206\185\206\185\206\185\206\185\159\227\255\255\159\227?\187?\187\190\175\206\185\239\189\239\1891\198\206\185\159\227\190\175\239\189\239\189\206\185\206\185\190\175\190\175\206\185\239\189\239\1891\1981\198\239\189\239\189\239\189\206\185\206\185\206\185\206\185\206\185\239\189\239\1891\1981\198\239\189\206\185\206\185\239\189\206\185\206\185\206\185\206\185\173\1811\1981\198\239\189\239\189\239\189\239\189\206\185\206\185\206\185\239\189\239\189" IDTexture[21]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0A\140\9\206\9\206\9\206\9\206\131\148\201\217\195\172\163\172\201\217\131\148L\222L\222L\222L\222A\140A\140L\222K\218g\185K\218K\218\130\148\163\172\163\172\130\148\9\206K\218\9\206K\218L\222A\140A\140L\222\9\206\9\206f\189\9\206K\218\131\148\131\148L\222L\222K\218g\185L\222L\222A\140A\140F\181F\181\228\164\228\164g\185g\185b\140b\140g\185\228\160\129\148\129\148\129\148g\185A\140A\140\9\206\9\206f\189\9\206L\222L\222\130\148\131\148\9\206f\189\129\148g\185\129\148g\185A\140A\140\9\206g\185\129\148K\218K\218L\222\130\148\131\148K\218\167\205\129\148\129\148\129\148F\177A\140A\140L\222L\222\129\148L\222L\222L\222\130\148\130\148\9\206\228\164Z\235Z\235\214\218g\185A\140A\140g\185F\181\129\148F\181F\181F\181b\140b\140g\185F\181\255\255Z\235\214\218\228\164A\140A\140L\222L\222\129\148\214\218g\185\9\206\131\148\131\148K\218K\218g\185Z\235\214\218g\185A\140A\140\9\206\214\218Z\235\214\218g\185K\218\131\148\130\148\9\206\9\206g\185\255\255\214\218F\177A\140A\140K\218g\185g\185\214\218g\185\9\206a\144\130\148\9\206K\218K\218Z\235\214\218g\185A\140A\140F\181g\185g\185\196\160\196\160F\181A\136b\140g\185g\185g\185\130\148\214\218\196\160A\140A\140L\222L\222\200\209L\222\9\206L\222a\144\130\148\9\206\9\206\9\206\167\205\255\255g\185A\140A\140\9\206g\185\200\209L\222L\222L\222\130\148\131\148K\218K\218\9\206\9\206F\177F\177A\140A\140L\222\9\206f\189\9\206L\222L\222\130\148\131\148L\222\9\206K\218L\222L\222L\222A\140b\140g\185g\185\136\189F\181F\181\136\189A\140b\140g\185g\185F\181\229\164F\181F\181b\140" IDTexture[22]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\173\181\166\197E\189\166\197\166\197\167\201\167\201(\210E\189\167\201\167\201\167\201\167\201)\210\167\201\4\181J\214\167\201\166\197\199\201(\210(\210\8\206\8\206\166\197\8\206\8\206(\210\8\206(\210\167\201\4\181J\214\167\201\166\197\166\197\166\197\166\197\166\197\166\197\167\201\167\201\167\201\166\197e\189\167\201\167\201\4\181\199\205e\185$\177$\181$\181$\181$\181e\189$\181$\181$\177$\177$\177e\185e\189\227\172J\214\166\197E\189\166\197\166\197\167\201\167\201\8\206e\193\166\197\166\197e\189\166\197(\210\166\197$\185)\214\166\197$\181\166\197\166\197\166\197\167\201\8\206e\193\166\197\166\197\166\197\166\197\8\206\166\197\4\181J\214\167\201e\193\166\197\167\201\167\201\167\201\8\206E\189\166\197e\189\167\201\167\201)\210\167\201$\185\231\205e\189e\185\166\201\166\201\166\201\166\201\199\201e\189\199\201\166\201\166\201\166\201\166\201e\189\227\172J\214\167\201\167\201\167\201\167\201e\189\166\197\167\201\167\201\166\197\166\197\166\197\167\201\167\201\167\201\4\181)\214\166\197E\189E\189E\189e\193e\193\166\197E\189E\189E\189$\181e\193\166\197\166\197\4\181\198\152\166\197e\193\166\197\167\201\167\201\166\197\8\206E\189\166\197\166\197\166\197\166\197(\210\166\197\4\181\173\181e\185$\181e\189e\185e\185e\185\199\201$\181e\189e\189e\189e\185\166\201e\185\227\172J\214\167\201e\193\167\201\167\201\166\197\167\201\8\206E\189\166\197\166\197\166\197\166\197\199\201\167\201$\185I\214\166\197e\189)\210)\210)\210)\210\8\206\167\201(\210(\210\8\206\8\206\8\206\166\197\4\185J\214\167\201\166\197\166\197\166\197\167\201\167\201\166\197\167\201\167\201\166\197\166\197\167\201\167\201\167\201$\185e\189\227\172\227\172\227\172\227\168\227\168\227\172\227\168\227\172\227\172\227\172\227\168\195\164\227\168\227\168\227\172" IDTexture[23]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0J\214)\214)\214)\214)\214J\214J\214I\214)\214J\214J\214J\214J\214J\214J\214\166\197J\214\167\201\166\197e\189\166\197\166\197\166\197\166\197\166\197\166\197\166\197\166\197\166\197\166\197\167\201\4\181J\214\167\201E\189E\189E\189E\189e\193\166\197e\193e\193e\193e\193$\181\167\201\167\201\4\181\199\205e\185$\177\0\0\0\0\0\0\0\0\199\201$\181\0\0\0\0\0\0\0\0\166\201e\189\227\172\198\152E\189E\189\0\0\0\0\0\0\0\0\8\206e\193\0\0\0\0\0\0\0\0(\210\166\197$\185\173\181\166\197$\181\0\0\0\0\0\0\0\0\8\206e\193\0\0\0\0\0\0\0\0\8\206\166\197\4\181J\214\167\201\167\201\167\201(\210)\210)\210\8\206\166\197\166\197\8\206\199\201)\210)\210\167\201$\185\231\205e\189$\177$\177$\177$\177$\177e\189$\181$\181$\181$\177$\177e\185e\189\227\172J\214\167\201e\193\0\0\0\0\0\0\0\0)\210e\193\0\0\0\0\0\0\0\0)\210\167\201\4\181)\214\166\197E\189\0\0\0\0\0\0\0\0(\210E\189\0\0\0\0\0\0\0\0\8\206\166\197\4\181J\214\166\197e\193\0\0\0\0\0\0\0\0\8\206E\189\0\0\0\0\0\0\0\0(\210\166\197\4\181\231\205e\185e\189\199\201\166\201\166\201\166\201\199\201e\189\199\201\199\201\199\201\166\201\166\201e\185\227\172J\214\167\201\167\201)\210)\210\8\206)\210\8\206\166\197\8\206\8\206\8\206(\210\199\201\167\201$\185I\214\166\197$\181e\193e\193e\193e\193\166\197e\193e\193e\193E\189E\189\166\197\166\197\4\185J\214\167\201E\189\166\197\166\197\167\201\167\201\8\206e\193\167\201\166\197\8\161\198\152c\140$\185$\185\198\152e\189$\181e\189e\185e\185e\189\166\201$\181e\189e\189c\140\227\168\166\201\227\168\227\172" IDTexture[24]="\10\0\0\0\16\0\0\0\0\0\0\0\20\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\210\167\201\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\210\167\201\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\167\201\167\201\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0e\185e\189\227\172\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\210\166\197$\185\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\206\166\197\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\210\167\201$\185\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\201e\189\227\172\0\0\0\0\0\0\0\0\0\0\0\0\0\0\167\201\167\201\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\197\166\197\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\210\166\197\4\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\201e\185\227\172\0\0\0\0\0\0\0\0\0\0\0\0\0\0\199\201\167\201$\185\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\206\166\197\4\185\0\0\0\0\0\0\0\0\0\0\0\0\0\0\167\201\167\201$\185\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\168\227\168\227\172" IDTexture[25]=IDTexture[24] IDTexture[26]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\0009\231Z\235\024\2279\231{\239\189\2479\231Z\235\156\243\189\247\247\2229\231\156\243\156\2439\231\024\227{\239\156\243\255\255\255\255\189\247\189\247{\239Z\2359\231\024\227Z\235Z\235\214\218\024\227Z\235{\239\189\247\222\251Z\235{\239\222\251\222\251\156\243Z\235\189\247\222\251\156\243\156\243\255\255\255\255\189\247\156\243{\239Z\235\189\247\222\251Z\235Z\235{\239\222\2519\231{\239\222\251\222\251{\239Z\235\255\255\222\251\156\243{\2399\231{\239\189\247\189\247\247\222\214\218Z\235\156\243Z\235\024\227\189\247\189\2479\231\247\222\024\227\247\2229\231\222\2519\231\214\2189\231Z\2359\231\214\218Z\235Z\235\024\227Z\2359\231Z\235\255\255\255\255\189\247\189\247{\239{\239{\239\156\243\189\247\255\255\156\243{\239\255\255\255\255\189\247\156\243Z\235Z\235\255\255\255\255\189\247\156\243\222\251\222\2519\231Z\235\189\247\222\251\156\243\156\243\222\251\222\251\189\247\156\243\024\227Z\235\222\251\156\2439\231Z\235Z\235Z\235Z\235\024\227{\239{\239\024\227\024\227Z\235{\239Z\235\189\247\247\222\247\222{\239\156\2439\231\156\243\255\255\255\255{\239\156\243\255\255\255\255\222\251\222\251\189\247\189\247\255\255\222\251\189\247\156\243\222\251\189\247Z\235\156\243\156\243{\2399\231{\2399\2319\231\156\243\156\243Z\235Z\235\189\247\156\2439\2319\231Z\235\156\243\247\222\247\222Z\235\156\243Z\235Z\235\247\222\247\222\222\251\222\251\024\227\214\218{\239\189\247\156\243\156\243\255\255\255\255\156\243\024\227\156\243\156\243\255\255\255\255\222\251\189\247\156\243Z\235\247\222{\239\156\243\222\251{\239{\239\222\251\255\255\222\251\222\251{\239{\239\222\251\156\243\156\243\189\247\255\255\189\247Z\235Z\235\156\243\156\243Z\2359\231\024\2279\231\222\251\156\2439\231Z\235\222\251\255\255{\239Z\235\156\243\222\2519\2319\231\189\247\222\251" IDTexture[27]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\033\192\033\192\001\192\032\192\001\192\033\192\033\192\066\192\034\192\066\188\065\192\033\192\033\192\033\192\066\188\034\192\033\192\098\196\066\196\066\196\066\196\066\196\066\196\065\192\066\192\034\192\034\192\066\192\034\196\098\196\066\196\034\192\001\192\066\196\132\204\132\204\132\204\132\204\100\204\131\204\066\196\066\196\098\196\034\192\066\192\033\192\066\196\066\196\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\000\180\073\210\166\201\166\197\167\201\167\201\167\201\165\197\166\197\166\201\166\201\166\193\166\197\166\201\166\201\199\201\003\169\074\218\134\197\004\177\004\181\004\181\004\181\003\181\004\181\226\168\228\168\003\181\004\181\227\172\200\201\167\197\003\173\040\214\134\197\227\168alalalalalalalalalal\073\214\167\201\227\168\106\214\167\197\226\172alalalalalalalalalal\074\218\167\201\003\181\041\214\166\205\003\181alalalalalalalalalal\041\214\167\201\003\181" IDTexture[28]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\003\237\226\228\226\216\194\208\003\237\226\228\226\216\194\208\003\237\226\228\226\216\194\208\003\237\226\228\226\216\194\208\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200{\239{\239{\2399\231{\239{\239{\239{\2399\231{\239{\2399\2319\231{\239{\2399\2319\231{\239\000\128\000\128\000\1289\231\000\1289\231{\239\000\1289\231\000\128\000\128\000\128{\2399\2319\2319\2319\231\000\1289\2319\231\000\128\000\1289\231\000\1289\2319\231\000\1289\2319\2319\2319\2319\2319\231\000\1289\2319\231\000\1289\231\000\128\000\1289\2319\231\000\1289\2319\2319\2319\231\181\214\181\214\000\1289\231\181\214\000\1289\2319\231\000\1289\2319\231\000\128\181\214\181\2149\231\181\214\181\2149\231\181\214\181\2149\231\181\214\181\214\181\2149\231\181\214\181\2149\231\181\214\181\214\181\214\226\216\194\208\162\196\129\188\226\216\194\208\162\196\129\188\226\216\194\208\162\196\129\188\226\216\194\208\162\196\129\188\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\003\237\226\224\194\212\162\200\226\224\194\216\194\208\162\200\226\224\194\216\194\208\162\200\226\224\194\216\194\208\162\200\226\224\194\216\194\208\162\200" IDTexture[29]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\217\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\217\000\217\255\127\255\127`\221\000\217\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127 \221`\225\000\217\000\217\128\225@\221\255\127\255\127\255\127\255\127\000\217\255\127\255\127\255\127\255\127`\225\192\229@\221`\225\128\225\160\225\160\229 \221\255\127\255\127\255\127 \221\160\229!\234\255\127`\225\198\242b\238!\234!\234\000\217@\221\160\229\160\229\255\127\255\127\000\217`\225!\234\160\229!\234B\238b\238\198\242\180\255\144\251!\234\164\242!\234\160\229\255\127\255\127\131\238 \221b\238!\234\160\229b\238b\238\180\255\255\255\180\255b\238!\234\131\238!\234\255\127\000\217B\238\131\238!\234\198\242b\238b\238\198\242\180\255\180\255\255\255\144\251\197\242\131\242\160\225\255\127*\247\255\255\231\246\231\246o\251)\247\198\242b\238p\251\255\255\255\255\144\251\001\234\128\225@\221\255\127b\238\146\251n\251*\247)\247\255\255\180\255\180\255L\251\180\255\180\255B\238`\225\001\234@\221\255\127!\234\255\255\231\246\160\225!\234\180\255\180\255\255\255\180\255L\251\180\251\198\242\182\255\182\255\198\242\255\127\146\251o\251o\251b\238)\247\180\255\255\255\180\255M\251!\234\255\255\182\255\144\251\198\242\182\255\001\234" IDTexture[30]="\012\000\000\000\016\000\000\000\000\000\000\000\024\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\226\130alalalalalalalalalalalal\162\130alalalalalal\226\130alalalal\130\131\160\129alal\002\131" IDTexture[31]="\014\000\000\000\016\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\194\130alalalalalalalalalalalalal\162\130\192\129alalalalalalalalalalalalal\130\131alalalalalalal\194\130alalalalal\225\158\163\142alalal\034\131alalal\066\131alalalal\193\158\192\129alal\130\131al\034\138alal\032\159\098\138\066\130alal\129\158\160\129\226\130al\098\158alal" IDTexture[32]="\014\000\000\000\016\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\002\130alalalalalalalalalalalalal\098\130\224\128alalalalalalal\065\131alalalalal\226\130alalalalalalal\002\131\066\138alalalal\193\162\225\133alalal\194\130alalal\097\131alal\033\131al\161\162\160\133alal\162\130al\192\133alal\034\158\130\142\130\130al\034\138\098\158\128\129\066\130al\098\158alalalal\130\162\224\128\034\158\096\129al\001\174\064\129\098\158\032\129\002\154alal\098\130al\065\178\064\129\001\174\224\128al\128\182\192\132\226\169\064\129\033\178al\034\130" IDTexture[33]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\065\130alalalalalalalalalalalalalalal\032\131\032\129alalalalalalalalalalalalalal\225\130\066\142alalalalalalalalal\193\130alalalalal\000\131alalalal\225\130alalalal\129\130\160\133alal\001\131al\193\166\033\138alalal\000\131\225\137alalalal\225\130alal\097\130\001\138\225\166\160\133alal\161\130al\033\138alalalal\098\162\225\137\032\131al\064\129\193\166\193\137\001\130al\225\166alalalalalal\000\167\064\129\129\162\066\142al\000\191\160\133\129\162\224\128\161\162alal\193\130al\225\130al\193\166\225\137\066\158\096\129al\160\190\225\153\066\162\096\129\000\167al\065\130al\192\133\193\166\225\137\065\178\160\133\097\182\000\129al\033\178\129\149\128\186\000\129\161\162al\034\158\032\129al\002\158\160\133\065\178\000\137\065\178\032\141al\065\178\224\136\001\174\096\145\226\173al\001\174\224\128al" IDTexture[34]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\032\131alalalalalalalalalalalalalalal\128\130\033\142alalalalalalalalalalalalalal\032\131\128\133alalalalalalalalal\000\131alalalalal\160\130alalalal\064\131alalalal\000\131\033\142alal\128\130al\098\166\128\133alalal\000\131\066\146alalalal\224\130alal\224\130\128\133\000\171\032\133alal\128\130al\001\142alalalal\000\171\225\137\160\130al\225\141\193\170\225\141\160\130al\193\170alalalalalal\193\170\225\137\161\166\160\137al\065\186\160\137\225\170\160\137\193\170alal\128\131al\064\130al\225\170\192\137\002\162\128\133al\065\182\000\141\098\166\193\137\066\162al\032\130al\130\150\000\171\032\133\160\194\225\137\097\186\192\128al\001\178\000\137\065\186\032\133\098\166al\066\162\000\129al\098\166\225\137\097\186\129\149\033\182\064\145al\193\173\192\132\065\186\032\145\033\182al\226\173\000\133al\001\178\032\133\225\177\032\145\033\182\224\136al\162\169\128\128\001\178\032\141\225\177al\001\178\160\128al\225\177\160\132\226\173\160\132\001\178\224\136al\001\178\096\128\162\169\192\132\162\169al\194\169\192\132al" IDTexture[35]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalal\193\174alalalalalalalalalalalalalalal\193\174\160\141alalalalalalalalalalalalalal\032\175\160\137alalalalalalalalal\161\170alalalalal\034\166alalalal\000\175alalalal\032\175\128\137alal\098\170al\161\170\224\132alalal\000\175\225\141alalalal\225\174alal\032\175\064\133\129\170\128\137alal\161\170alalalalalal\161\170\192\141\000\179al\001\146\225\174\096\133\193\174al\129\170alalalalalal\000\175\128\137\000\175\001\146al\065\186\193\141\098\170\160\137\000\175alal\193\174al\193\174al\193\174\225\141\032\175\225\141al\000\203\000\141\129\170\064\133\000\175al\129\170al\160\137\161\170\192\141\097\190\192\141\224\198\033\146al\192\198\225\161\000\203\096\137\193\174al\193\174\096\137al\193\174\128\137\160\194\032\145\161\173\193\157al\065\186\161\153\065\186\225\161\065\190al\097\190\160\137al\065\186\160\137\065\186\128\153\097\190\064\128al\225\177\000\141\225\177\000\141\065\186al\160\198\064\149al\001\182\000\141\001\182\000\141\226\177\032\145al\193\177\160\128\194\173\160\128\065\186al\193\177\128\153al\193\173\192\132\129\165\192\132\097\165\160\128al\129\169\128\128\129\169\128\128\001\182al\194\173\128\128al\129\169\128\128\129\169\000\128\097\165\000\128al\065\161\032\128\065\161\032\128\162\169al\001\182\096\128al" IDTexture[36]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalal\000\179alalalalalalalalalalalalalalal\192\202\001\146alalalalalalalalalalalalalal\097\194\161\157alalalalalalalalal\098\174alalalalal\161\174alalalal\193\178alalalal\193\178\064\137alal\000\179al\000\207\128\141alalal\161\174\160\141alalalal\161\174alal\193\178\225\145\224\202\002\166alal\066\170al\128\141alalalal\128\198\128\141\064\183al\160\141\160\198\193\157\064\183al\128\198alalalalalal\000\207\096\153\128\198\066\150al\192\202\096\153\224\202\066\150\160\198alal\193\178al\193\178al\224\202\225\161\097\194\096\149al\160\198\161\157\128\198\193\157\160\202al\034\166al\192\141\192\202\192\141\001\186\193\157\128\198\064\149al\065\194\096\153\128\198\096\149\160\198al\160\202\224\132al\128\198\129\157\097\194\192\136\065\194\096\153al\065\194\032\145\033\186\096\149\128\198al\128\198\129\157al\160\202\096\149\097\194\064\149\033\186\032\149al\033\186\032\145\033\186\224\140\033\186al\160\198\096\153al\065\190\128\157\033\186\032\149\065\194\224\140al\226\177\192\136\226\181\224\140\194\177al\226\177\128\153al\001\186\000\141\193\177\224\136\226\181\032\149al\226\181\128\132\033\161\160\132\226\181al\226\177\128\132al\162\173\192\136\161\173\096\128\194\177\160\132al\065\165\160\132\161\173\000\128\129\173al\226\181\128\132al\161\173\064\128\194\177\064\128\194\177\096\128al\194\177\000\128\065\161\064\128\194\177al\129\169\160\132al" IDTexture[37]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalal\130\181alalalalalalalalalal\130\185alalalal\194\197\096\136alalalal\162\189alalalal\162\189\128\144alalalal\194\193alalalal\194\193\160\148alalalal\225\201alal\162\189al\128\202\192\156alal\225\201al\192\156alalalal\192\206\000\161al\225\201\160\148\128\202\096\153\162\189al\128\202alal\130\185al\066\173al\128\202\161\161\194\193al\000\165\097\198\096\153\194\193\160\148\224\210alal\194\197\096\140\226\197\000\128\224\210\096\153\160\202\192\152al\033\190\032\149\160\206\192\152\033\190al\162\189al\224\156\160\202\000\161\224\210\193\161\224\210\096\153al\097\198\192\140\160\202\128\157\224\210al\160\202\160\144al\224\210\096\153\160\206\193\161\065\198\193\161al\160\202\032\149\160\206\096\153\033\190al\033\190\128\157al\065\194\225\165\065\194\129\157\192\206\032\149al\065\198\128\157\033\190\129\157\033\190al\001\186\192\140al\128\202\032\149\001\186\032\149\224\210\161\161al\065\194\032\149\033\190\224\140\097\198al\160\202\160\136al\065\198\096\153\033\190\192\136\065\194\193\161al\194\181\000\145\033\190\192\140\226\181al\097\198\096\153al\001\186\032\149\193\181\224\140\226\181\032\149al\194\181\128\132\226\181\224\140\193\181al\226\181\032\149al\226\181\160\132\033\190\128\132\193\177\128\132al\161\177\128\132\162\177\128\132\162\173al\129\173\128\132al\193\181\160\132\129\173\224\140\194\177\096\128al\129\173\064\128\129\173\064\128\129\173al\161\177\032\128al\097\169\128\132\193\181\032\128\097\169\096\128al\097\169\032\128\033\161\032\128\162\177al\065\165\064\128al" IDTexture[38]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\005\181\162\164f\193f\193F\189\228\176\195\168\168\205\228\176\162\160f\193\228\176\004\177\005\181\162\164\168\205F\189\228\176\135\197H\181%\185\228\176F\193\135\197F\189\162\160\135\197H\181%\185\228\176\162\160\168\205\168\205%\185\135\205F\189\228\176\162\160\162\160f\193\228\176\162\160\135\205F\189F\189\228\176\168\205F\189F\189\162\160\135\205\004\177\228\176F\189\228\172\168\205F\189\228\172\168\205\228\176\228\176\162\160\135\205F\189%\185\195\168\228\176\168\205F\189\228\176\195\168\135\197'\173%\185\195\168\135\197\228\176\168\205F\193%\185F\189\004\177\162\160\168\205\135\205\004\177\162\164\005\181\135\205\228\176\162\164f\193\004\177\162\164\168\205%\185\011\222G\189G\189G\189\016\194G\189G\189\011\222\011\222G\189\011\222\011\222G\189\169\201G\189\169\201G\189G\189\011\222\011\222\169\201\169\201G\189G\189\169\201\229\172\169\201\169\201G\189G\189\169\201\169\201\169\201G\189G\189\169\201G\189\169\201G\189\229\172G\189\169\201\169\201G\189G\189G\189\229\172G\189G\189\169\201\229\172G\189G\189\229\172\229\172G\189G\189G\189G\189G\189\011\222\011\222G\189\169\201G\189\169\201G\189\011\222\011\222G\189\011\222\169\201\229\172\011\222\011\222\229\172\169\201\169\201\016\194G\189\169\201G\189G\189\169\201\169\201\011\222G\189\169\201\173\181\169\201\169\201G\189\229\172\169\201G\189\229\172G\189\229\172\169\201G\189\169\201\169\201\011\222G\189G\189G\189G\189G\189G\189G\189\011\222\011\222G\189\169\201G\189G\189h\185G\189\169\201\169\201G\189\229\172\011\222\229\172G\189\011\222\169\201\169\201\169\201G\189\229\172\011\222G\189\229\172G\189\229\172\011\222\011\222G\189\169\201G\189G\189\169\201\169\201\169\201G\189\011\222\169\201\169\201G\189\016\194G\189\169\201\169\201G\189G\189\169\201\169\201G\189\229\172" IDTexture[39]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\161\168a\156\194\172\194\172\161\168\129\160a\156\194\176\129\160`\152\161\168\129\160\129\164\161\164a\156\226\184\194\172\129\160\194\172\164\160\129\160\129\156\161\164\161\168\161\164@\148\161\168\163\156\129\160\129\160`\152\226\180\226\180\161\164\194\176\161\164\129\156@\148@\148\129\160a\152@\144\161\168\129\164\129\164\129\156\194\176\161\168\194\172`\152\194\176\129\160\129\156\129\160a\152\161\168\129\160a\152\162\168a\156\129\156@\148\194\176\161\168\161\168\129\156\129\160\194\176\161\168\129\160a\152\162\168\131\152\129\160a\152\194\172\129\160\194\176\162\172\161\168\194\176\161\164a\152\226\180\226\180\129\164a\152\129\164\194\176\129\160a\152\193\172\129\164a\156\226\184\161\172\011\222G\189G\189G\189\016\194G\189G\189\011\222\011\222G\189\011\222\011\222G\189\169\201G\189\169\201G\189G\189\011\222\011\222\169\201\169\201G\189G\189\169\201\229\172\169\201\169\201G\189G\189\169\201\169\201\169\201G\189G\189\169\201G\189\169\201G\189\229\172G\189\169\201\169\201G\189G\189G\189\229\172G\189G\189\169\201\229\172G\189G\189\229\172\229\172G\189G\189G\189G\189G\189\011\222\011\222G\189\169\201G\189\169\201G\189\011\222\011\222G\189\011\222\169\201\229\172\011\222\011\222\229\172\169\201\169\201\016\194G\189\169\201G\189G\189\169\201\169\201\011\222G\189\169\201\173\181\169\201\169\201G\189\229\172\169\201G\189\229\172G\189\229\172\169\201G\189\169\201\169\201\011\222G\189G\189G\189G\189G\189G\189G\189\011\222\011\222G\189\169\201G\189G\189h\185G\189\169\201\169\201G\189\229\172\011\222\229\172G\189\011\222\169\201\169\201\169\201G\189\229\172\011\222G\189\229\172G\189\229\172\011\222\011\222G\189\169\201G\189G\189\169\201\169\201\169\201G\189\011\222\169\201\169\201G\189\016\194G\189\169\201\169\201G\189G\189\169\201\169\201G\189\229\172" IDTexture[40]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000j\177\181\218\140\181\016\202R\202\016\202\017\202\140\181\239\189\140\1811\2021\202\239\193Q\206\173\185\016\202\238\197\016\202\181\218\140\181\240\197S\206R\202\140\181\148\210\148\210\140\1850\198J\173Q\206\206\189\016\202\206\193\173\185\140\181\172\185s\214\016\198\149\218\239\193\140\181J\173\173\181\213\218\213\218\238\193\140\181\140\181\016\194\239\189\181\218t\210\172\185\016\202\239\189\140\181\017\1941\1981\202\173\189\173\189\173\189s\210Q\206\140\181R\2060\210J\1731\202k\177\206\189\140\181R\198\205\189\139\177s\2101\202\016\198s\2060\2022\202\149\218\206\189R\206\239\189t\210\239\193)\169\140\181\172\185\239\193\149\218\214\218k\177\173\185)\169R\206Q\206\239\189\016\202\140\181R\206\239\189s\2101\202\205\185\239\193I\169\240\189\016\198\016\194\140\181\140\181\140\181\181\218\140\181s\210\140\1811\202J\169\140\1810\206\016\198\140\181\239\193\173\185\240\189\206\185\173\185k\173J\173\140\181I\169\016\198r\210\239\193R\202\140\181\140\181\016\202\147\210\140\1811\202\141\177\016\198\140\181s\206s\206\239\193\140\181\214\218\214\218I\169\239\193\181\218\140\185\206\193\017\202\173\185I\169\140\185\148\210\172\185I\1690\210J\177\140\181\205\185\016\202\205\185\140\181\016\198\239\193\206\189\181\218\140\181\140\181\140\181s\210\139\181\172\1851\198\206\185k\173R\206J\173s\210J\173\139\181\140\181\239\189\016\202\147\214Q\2060\198k\177t\210\239\193S\206\239\193\140\181R\202\239\193s\206Q\206k\173\238\193\015\198\172\1851\202\181\214\239\193R\206\140\181R\202s\210\016\198\140\181R\202\016\198k\177R\214\148\214J\1771\202\206\189\141\181\239\193\140\181R\202\238\189J\173\181\214\148\210\015\198Q\206\238\193\139\185\173\189\206\189I\173\016\198)\1692\2061\202\140\181J\173\016\198J\173R\214)\1690\206s\210\140\181/\210R\202" IDTexture[42]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000C\136C\136C\136\034\132\034\132C\136\034\132\034\132C\136!\132\034\132C\136D\136B\136!\132C\136\034\132B\136!\132!\132!\132B\136#\132C\136!\132\170\152C\136C\136C\136!\132\202\156C\136C\136!\132\170\156\202\156\202\156\034\132\034\132!\132\202\156e\140C\136\034\132!\132\202\156e\140C\136\034\132!\132e\140e\144\034\132B\136B\136\236\160e\140e\140\034\132C\136!\132\034\132C\136C\136\034\132!\132e\140C\136B\136B\136\034\132C\136!\132\034\132C\136\034\132e\140#\132C\136C\136C\136C\136B\136\034\132!\132!\132!\132!\132C\136\034\132!\132C\136C\136C\136\034\132\034\132C\136B\136C\136C\136\202\156\202\156\202\156\202\156\034\132!\132\202\156\034\132!\132!\132!\132\034\132C\136C\136!\132\034\132C\136E\140e\140D\136C\136!\132e\140!\132\137\152\202\156e\140D\136\034\132!\132\202\156e\140\034\132C\136f\144e\140C\136\034\132C\136!\132E\140e\140\034\132C\136\034\132C\136C\136C\136C\136B\136C\136e\144#\132\034\132\034\132\002\128e\140\034\132C\136C\136B\136C\136C\136\034\132\034\132C\136#\132#\132C\136!\132\034\132D\136C\136\034\132C\136C\136D\136!\132!\132C\136\034\132\034\132C\136\034\132!\132\202\156\034\132C\136!\132\203\160e\140C\136C\136\202\156\170\156e\144\034\132!\132#\136\034\132!\132\170\156e\140C\136C\136B\136\034\132\034\132$\132C\136e\140e\140C\136\001\128e\140C\136!\132f\144e\140e\140C\136C\136#\132C\136C\136B\136C\136e\140C\136C\136\034\132\034\132!\132D\140e\140e\140e\140C\136\034\132\034\132C\136\034\132C\136#\132C\136C\136C\136C\136C\136C\136B\136C\136C\136C\136\034\132C\136" IDTexture[43]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\148\210\239\189\140\177J\169k\173\173\181\148\210\214\218\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\214\2181\1981\198\140\177\140\177\148\210\239\189\239\189\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\239\189\239\189\016\194J\169\140\177\140\177R\202\016\194\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\1271\198\239\189J\169k\173\148\210\140\177\140\177J\169\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127J\169J\169\181\214s\206\239\189\239\189\140\177\173\181\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\173\181\247\222s\206\239\1891\198\239\189\016\194\173\181\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\140\177\140\177\239\1891\1981\198R\202k\173k\173\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\148\210\016\194k\173\140\177\206\185J\169k\173\140\177\140\177\181\214\181\214\181\214\016\194k\173\181\214R\202\181\214\181\214R\202\173\181s\2061\198\140\177\140\177\140\177\239\189\016\194\239\1891\198J\169\140\177\206\185\181\214\181\214\173\181\239\189)\165\140\177\181\214\181\214J\169k\1731\198\239\189J\169\140\177\140\177\173\181k\173\239\189\239\189J\169\140\177\181\214\181\214\016\194J\169\140\177J\169k\173\140\177\148\210\181\214\016\194\206\185J\169\140\177\140\177\181\214\016\194R\202\239\189\140\177s\206s\206R\202k\173\239\189\148\2101\198\181\214\181\214\140\177\140\177\181\214\016\194\016\194k\173\148\210\148\2101\198\016\194\173\181\140\177J\169\140\177\206\185\016\194\239\189\140\177\239\1891\198\239\189J\169\140\1771\198\148\210\239\189\206\185\239\189\239\189k\173k\173k\173\239\189\140\177\173\181J\169J\169\140\177\016\194J\169\206\185\016\194\239\189J\169\140\177\148\210\239\189\239\189J\169\173\181\148\210\181\214\140\177\016\194" IDTexture[44]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\009\206l\222l\222l\222l\222l\222l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\009\206\009\206\009\206K\218\009\206K\218l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127g\185l\222l\222K\218l\222l\222l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127g\185g\185F\181F\181F\181F\181g\185g\185\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222\009\206\009\206g\185K\218K\218K\218l\222\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127K\218K\218K\218K\218\009\206\009\206\009\206\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\009\206\009\206g\185l\222l\222l\222l\222l\222\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127g\185g\185F\181F\181F\181F\181g\185g\185l\222l\222l\222l\222l\222g\185\009\206l\222l\222K\218K\218K\218l\222l\222l\222\009\206\009\206\009\206\009\206\009\206\009\206l\222K\218K\218\009\206\009\206\009\206g\185l\222\009\206\009\206\009\206l\222K\218K\218K\218l\222l\222\009\206\009\206\009\206\009\206K\218K\218K\218K\218K\218\009\206g\185F\181g\185g\185F\181F\181F\181g\185g\185g\185g\185g\185F\181F\181F\181g\185l\222l\222l\222l\222l\222\009\206l\222\009\206\009\206g\185\009\206\009\206K\218l\222l\222l\222K\218\009\206g\185l\222l\222l\222l\222\009\206l\222K\218K\218\009\206\009\206\009\206\009\206K\218l\222l\222\009\206\009\206\009\206l\222l\222\009\206l\222l\222\009\206K\218l\222l\222l\222l\222g\185g\185g\185\135\189F\181F\181\135\189F\181g\185g\185g\185F\181\228\164F\181F\181g\185" IDTexture[45]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\239\189\140\177\140\177\214\218\181\214\239\189\206\185\181\214\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\1271\198\140\177\181\214\181\214\016\194\140\177\181\214\016\194\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\140\177\148\210\239\189\239\189\239\189J\169\181\214R\202\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\140\177\140\177s\206\239\189\206\185J\169\239\189\016\194\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127s\206\181\214J\169J\169J\169J\169\173\181\239\189\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\181\214\239\189\206\185\181\214\148\210\181\214\140\177J\169\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\206\185\016\194k\173s\206\016\194\239\189\239\189\140\177\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\239\189\206\185\206\185J\169)\165)\165J\1691\198\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\140\177\181\214\181\214\181\214\016\194k\173\181\214R\202\181\214\181\214R\202\173\181s\2061\198\140\177\140\177\140\177\239\189\016\194\239\1891\198J\169\140\177\206\185\181\214\181\214\173\181\239\189)\165\140\177\181\214\181\214J\169k\1731\198\239\189J\169\140\177\140\177\173\181k\173\239\189\239\189J\169\140\177\181\214\181\214\016\194J\169\140\177J\169k\173\140\177\148\210\181\214\016\194\206\185J\169\140\177\140\177\181\214\016\194R\202\239\189\140\177s\206s\206R\202k\173\239\189\148\2101\198\181\214\181\214\140\177\140\177\181\214\016\194\016\194k\173\148\210\148\2101\198\016\194\173\181\140\177J\169\140\177\206\185\016\194\239\189\140\177\239\1891\198\239\189J\169\140\1771\198\148\210\239\189\206\185\239\189\239\189k\173k\173k\173\239\189\140\177\173\181J\169J\169\140\177\016\194J\169\206\185\016\194\239\189J\169\140\177\148\210\239\189\239\189J\169\173\181\148\210\181\214\140\177\016\194" IDTexture[46]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000l\222\009\206\009\206\009\206\009\206l\222l\222K\218\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222l\222K\218g\185K\218K\218\009\206\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222l\222\009\206\009\206\009\206\009\206K\218K\218\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127F\181F\181F\181g\185g\185g\185g\185g\185\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222\009\206\009\206\009\206\009\206l\222l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\009\206\009\206g\185K\218K\218K\218l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222l\222l\222K\218l\222l\222l\222\009\206\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127g\185g\185F\181F\181F\181F\181F\181g\185\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127l\222l\222l\222l\222l\222g\185\009\206l\222l\222K\218K\218K\218l\222l\222l\222\009\206\009\206\009\206\009\206\009\206\009\206l\222K\218K\218\009\206\009\206\009\206g\185l\222\009\206\009\206\009\206l\222K\218K\218K\218l\222l\222\009\206\009\206\009\206\009\206K\218K\218K\218K\218K\218\009\206g\185F\181g\185g\185F\181F\181F\181g\185g\185g\185g\185g\185F\181F\181F\181g\185l\222l\222l\222l\222l\222\009\206l\222\009\206\009\206g\185\009\206\009\206K\218l\222l\222l\222K\218\009\206g\185l\222l\222l\222l\222\009\206l\222K\218K\218\009\206\009\206\009\206\009\206K\218l\222l\222\009\206\009\206\009\206l\222l\222\009\206l\222l\222\009\206K\218l\222l\222l\222l\222g\185g\185g\185\135\189F\181F\181\135\189F\181g\185g\185g\185F\181\228\164F\181F\181g\185" IDTexture[47]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\206\225k\209k\209J\205\013\226\231\184\165\168\132\164\132\164!\192\206\225k\209\231\184\132\164k\213\206\225\206\225k\209\000\160)\197!\140\132\164\206\225!\192\132\164\000\172J\201\000\172!\180\164\180\198\176\140\213\198\172\231\184)\197B\148\132\164!\192\206\225\000\172!\144!\136\008\189\000\172B\148\198\172!\156J\197\008\185\132\160!\136\198\172k\213\231\180k\209\203\213c\152\132\164B\148c\156\132\164\173\221!\196\198\172\144\242\206\225G\197\198\172\206\225J\197J\197!\144\198\172J\201)\201\140\213\132\160\170\213!\188\198\172\000\164J\197\231\184\198\172\231\180\000\176)\197c\152\173\221\016\238)\193J\201H\201\198\172!\136B\148\000\172)\197\231\184\198\172\165\172!\140c\152\165\168\231\176!\176\140\217)\197\198\176)\197\000\172!\152\231\184)\197B\148\165\168J\205\206\225\132\164\132\160\198\176!\148c\152J\201\000\172c\152\000\160B\200\231\184!\136\198\172!\196!\192\203\213\137\205k\209\173\217\231\184\165\168\132\160B\148!\132\016\238\143\238\008\189\132\164\206\225!\192\000\176c\152k\209\000\160\176\242\008\193\012\222\198\172\165\168\239\233\000\172\000\172\132\164!\188\170\213)\197\231\184!\136k\209\231\184)\197\231\184\008\189!\140\198\176\132\164!\184\231\188\198\172!\156\140\213)\193\198\176!\140)\197\231\184k\205\231\184B\148!\152\173\221\132\164!\156c\152\206\225k\209B\148c\152B\148!\140\231\176\000\172\132\160!\140\206\225!\184)\197\231\184G\197\198\172\239\229)\193\198\176\206\229!\188k\213\198\172!\140\231\176B\204\173\217\000\172k\205\000\172\008\189c\152\198\180B\148!\144\140\213\000\172\231\180\000\172!\156\132\164!\156\203\213!\180k\201)\197B\148c\152k\209k\209)\193c\156b\172!\140B\148!\156k\209\203\213\132\164H\201c\156c\156c\156\206\225" IDTexture[49]="\14\0\0\0\16\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\235\217\235\217\235\217\0\0\0\0\0\0\0\0\0\0\0\0\235\217\235\217\235\217\0\0\235\217\2\255\2\255\235\217\0\0\0\0\0\0\0\0\0\0\0\0\235\217\2\255\235\217\0\0\235\217\2\255\2\255\235\217\0\0\0\0\0\0\0\0\0\0\0\0\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\0\0\0\0\0\0\0\0\0\0\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\0\0\0\0\0\0\235\217\235\217\235\217\0\128\235\217\235\217\0\128\235\217\235\217\235\217\235\217\0\0\0\0\0\0\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\0\0\0\0\0\0\235\217\235\217\235\217\235\217\184\254\184\254\235\217\235\217\235\217\235\217\235\217\0\0\0\0\0\0\235\217\235\217\0\128\235\217\235\217\235\217\235\217\0\128\235\217\235\217\235\217\235\217\0\0\0\0\235\217\235\217\235\217\0\128\0\128\0\128\0\128\235\217\235\217\235\217\235\217\235\217\0\0\0\0\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\0\0\235\217\235\217\0\0\0\0\0\0\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\235\217\0\0\0\0\0\0\0\0\0\0\235\217\235\217\0\0\0\0\0\0\0\0\0\0\235\217\235\217\0\0\0\0\0\0\0\0\0\0\235\217\235\217\0\0\0\0\0\0\0\0\0\0\235\217\235\217\0\0\0\0" IDTexture[100]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\231\156\198\152\198\152\198\152\198\152\198\152\165\148\165\148\132\144\231\156\231\156\198\152\165\148\165\148\231\156\198\152\231\156\173\181k\173\140\177)\165k\173\206\185\206\185)\165\140\177\140\177\140\177k\173\8\161J\169\198\152\165\148J\169\239\189J\169\140\1771\1981\198\239\189\140\177J\169\16\194\239\189\140\177\239\189J\169\198\152\165\148J\169k\173\173\181\173\181\165\148\198\152\198\152\132\144\165\148\132\144\8\161\173\1811\198\173\181\165\148\231\156\206\185\239\189)\165\198\152\0\128\0\128\0\128\0\128\0\128\0\128\231\156J\169\16\194\206\185\132\144\165\148k\173\239\189\165\148\0\128\0\128\0\128\0\128\0\128\0\128\0\128\0\128\148\210\173\181\231\156\132\144\198\152\140\177\239\189\165\148\0\128B\136B\136B\136B\136B\136c\140\0\128\148\210\16\194\140\177\132\144\198\152k\173k\173\165\148\206\185\214\218\181\214\181\214\181\214\148\210\148\210\173\181\148\210k\173J\169\231\156\198\152\8\161\239\189\16\194k\173J\169J\169k\173k\173J\169J\169)\165\206\185k\173\239\189\231\156)\1651\198\24\227\24\227\24\227\24\2279\2319\231\247\2229\231\24\227\24\227\24\227\24\2271\198\8\161)\165\239\189\181\214\181\214\181\214\239\189\8\161\8\161\231\156\8\161\239\189\181\214s\206\148\210\239\189\198\152)\165\239\189\148\210\239\189\8\161\231\156\0\128\0\128\0\128\0\128\231\156\231\156\206\185\148\210\206\185\198\152)\165\239\189\239\189\231\156\0\128\0\128\0\128\0\128\0\128\0\128\0\128\0\128\8\161\181\214\239\189\165\148)\165\206\185\8\161\0\128B\136c\140c\140c\140c\140c\140c\140B\136\0\128\214\218\206\185\198\152)\165\239\189\8\161B\136\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148B\136\214\218\239\189\165\148\8\161\140\177\198\152\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148\148\210\140\177\198\152" IDTexture[200]="\15\0\0\0\16\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\165\230\160\230\160\230\160\6\165\6\165\230\160\230\160\6\165\6\165\6\165\6\165\6\165\196\152\0\0\6\165\229\213\164\197\164\197\164\197\197\209d\193\132\197\229\213\229\213\197\209\164\209\229\213\132\148\0\0\230\160\164\209\164\209\164\209\164\209c\1979\231\148\210c\197\164\209\164\209\164\209\164\209\132\148\0\0\6\165\132\189\132\189\132\189\166\201d\189\24\227\16\194\3\169\132\189\132\201\133\201\133\201\164\148\0\0\230\160\196\152\197\156\197\156\197\156\164\148\148\210\206\185\164\148\197\156\197\156\196\152\196\152c\144\0\0\6\165f\185F\185f\185f\185%\177R\202\206\185\195\160E\185f\185f\185f\185\164\148\0\0\230\160\132\201\133\197\133\197\133\197D\185\3\177\3\177C\185\133\197\133\197\133\197e\193\132\148\0\0\6\165\229\213\229\213\229\213\164\209\164\197\229\213\229\213\197\209\197\209\197\209\229\213\166\201\132\148\0\0\230\160\164\197\164\197\164\197\229\213\197\209\197\209\164\197\164\197\164\197\164\209\229\213\132\189\132\148\0\0\6\165\197\209\197\209\229\213\229\213\164\197\164\197\164\197\164\197\197\209\197\209\197\209\133\201\132\148\0\0\230\160\164\209\164\209\164\209\164\209\164\209\164\209\164\209\164\209\164\209\164\209\164\209\133\197\132\148\0\0\6\165\229\213\229\213\229\213\164\197\229\213\164\197\164\197\164\197\164\197\164\197\197\209\166\201\164\148\0\0\6\165\166\201\132\189\132\189\166\201\166\201\132\189\166\201\166\201\132\189\133\201\166\201\134\193\164\148\0\0\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\132\148\131\144" IDTexture[300]=IDTexture[200] IDTexture[320]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000d\140\166\140\132\140\166\140\133\136\133\140\199\144e\132\166\140\166\140\132\140\128\254\192\252\166\148\166\140\132\140\166\140\000\000\166\140\000\252\000\000\166\140\009\174+\182*\182\231\169\166\140`\255\160\253\166\140\000\000\134\136d\136\166\140\132\140\166\140\166\140\166\144\166\140\166\140\134\136\166\140\224\253d\255`\255\163\156d\132\132\140\166\140\000\000\166\140\160\253\000\000\167\144\133\157D\157D\157\133\157`\255\216\255\140\255\128\254\000\000\167\140\166\140\160\253\166\140`\255\000\000\166\140s\130\199\157\167\153\148\130\224\253d\255d\255\224\253\000\000\133\136\132\140\166\140c\156b\208\166\144\165\144\166\140\166\140\166\140\167\140\132\140\199\144\166\140\132\140\166\140\132\140\166\140`\255\196\152\160\253\224\254\166\140\181\130\181\130\148\130\181\130\166\140$\153\000\000d\132\000\000\166\140\166\140\160\253\005\161\128\254@\252\166\140s\130\181\130\148\130s\130\166\140\000\000\000\000\167\140\000\000\134\136\167\144\000\000 \254b\255\128\254\166\140\148\130\148\130Q\150(\201\166\144\000\000\000\252\166\140\000\000\166\140\166\140\000\000d\255\178\255\162\254\167\144\181\130\148\130\177\150\160\253\165\156\000\000\160\253\134\136\000\000\166\140C\132\166\140 \254d\255 \254d\136\133\136\166\140&\165\128\254\163\160\166\140\133\136\132\140\199\144c\136\133\136\000\000\167\140`\255\160\253\199\144\244\160\244\160 \254b\255$\177\000\000`\255\166\140\000\000\166\140\166\140\000\000\166\140`\255`\255\166\140\160\253\244\160d\255\178\255\162\254\160\253`\255\166\140\000\000\166\140\132\140\134\140\132\140\166\140\166\140\132\140\166\140\166\140 \254d\255 \254\134\136\166\140c\136\166\140\132\140\133\136\000\000\167\144\216\255\216\255\166\140\160\253\244\160\244\160\244\160\167\140`\255\216\255\133\136`\255\166\140\132\140\166\140\132\140\166\140\166\140\133\140\166\140\166\140\167\140\166\140C\132\166\140\166\140\165\144\166\140\133\140" IDTexture[321]="\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000d\140\166\140\132\140\166\140\133\136\133\140\199\144e\132\166\140\166\140\132\140\128\254\192\252\166\148\166\140\132\140\166\140\000\000\166\140\000\252\000\000\166\140)\165\024\2279\231)\165\166\140`\255\160\253\166\140\000\000\134\136d\136\166\140\132\140\166\140\166\140\166\144\166\140\166\140\134\136\166\140\224\253d\255`\255\163\156d\132\132\140\166\140\000\000\166\140\160\253\000\000\167\144)\165\194\164)\165)\165`\255\216\255\140\255\128\254\000\000\167\140\166\140\160\253\166\140`\255\000\000\166\140\194\164s\2061\1981\198\224\253d\255d\255\224\253\000\000\133\136\132\140\166\140c\156b\208\166\144\165\144\166\140\166\140\166\140\167\140\132\140\199\144\166\140\132\140\166\140\132\140\166\140`\255\196\152\160\253\224\254\166\140\194\1641\1981\198s\206\166\140\000\000\000\000d\132\000\000\166\140\166\140\160\253\005\161\128\254@\252\166\140s\206s\206s\206s\206\166\140\000\000\000\000\167\140\000\000\134\136\167\144\000\000 \254b\255\128\254\166\140\000\000s\206\239\209 \252\166\144\000\000\000\252\166\140\000\000\166\140\166\140\000\000d\255\178\255\162\254\167\1441\198R\202O\210\160\253\165\156\000\000\160\253\134\136\000\000\166\140C\132\166\140 \254d\255 \254d\136\133\136\166\140&\165\128\254\163\160\166\140\133\136\132\140\199\144c\136\133\136\000\000\167\140`\255\160\253\199\144s\206\000\000 \254b\255$\177\000\000`\255\166\140\000\000\166\140\166\140\000\000\166\140`\255`\255\166\140\160\253\000\000d\255\178\255\162\254\160\253`\255\166\140\000\000\166\140\132\140\134\140\132\140\166\140\166\140\132\140\166\140\166\140 \254d\255 \254\134\136\166\140c\136\166\140\132\140\133\136\000\000\167\144\216\255\216\255\166\140\160\253\000\000\000\000\148\210\167\140`\255\216\255\133\136`\255\166\140\132\140\166\140\132\140\166\140\166\140\133\140\166\140\166\140\167\140\166\140C\132\166\140\166\140\165\144\166\140\133\140" --items IDTexture[51]="\14\0\0\0\16\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\194\184\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\194\184\129\160\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\194\184\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0B\184B\184`\152\129\160\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0B\184B\184e\252\129\168\129\168D\216\34\168\34\168\0\0\0\0\0\0\0\0\0\0B\184e\252e\252e\252e\252D\216e\252D\216D\216\34\168\0\0\0\0\0\0\0\0B\184e\252S\254S\254e\252e\252e\252e\252D\216\34\168\0\0\0\0\0\0B\184e\252S\254S\254e\252e\252e\252e\252e\252D\216D\216\34\168\0\0\0\0B\184e\252S\254S\254e\252e\252e\252e\252e\252D\216D\216\34\168\0\0\0\0B\184e\252e\252e\252e\252e\252e\252e\252e\252D\216D\216\34\168\0\0\0\0B\184e\252e\252e\252e\252e\252e\252e\252D\216D\216D\216\34\168\0\0\0\0\0\0\34\168D\216e\252e\252e\252e\252D\216D\216D\216\34\168\0\0\0\0\0\0\0\0\34\168D\216D\216D\216D\216D\216D\216D\216D\216\34\168\0\0\0\0\0\0\0\0\0\0\34\168D\216D\216a\152a\152D\216D\216\34\168\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\168\34\168\0\0\0\0\34\168\34\168\0\0\0\0\0\0" IDTexture[52]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\227\164\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalal\129\148\129\148alalalalalalalalalalal" IDTexture[53]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\000\128\000\128\000\128alalalalalalalalalal\000\128\099\140\099\140\132\144\000\128alalalalalalalal\000\128\099\140\165\148\231\156\099\140\099\140\000\128alalalalalalal\000\128\132\144\165\148\198\152\165\148\099\140\099\140\000\128alalalalalal\000\128\099\140\165\148\198\152\165\148\198\152\132\144\099\140\000\128alalalal\000\128\099\140\198\152\165\148\165\148\132\144\165\148\099\140\099\140\099\140\000\128alalal\000\128\099\140\165\148\165\148\099\140\066\136\099\140\066\136\099\140\033\132\000\128alalal\000\128\099\140\132\144\132\144\099\140\099\140\099\140\099\140\066\136\099\140\099\140\000\128alal\000\128\099\140\099\140\099\140\099\140\099\140\099\140\099\140\099\140\099\140\099\140\000\128alal\000\128\099\140\066\136\099\140\099\140\099\140\099\140\033\132\033\132\066\136\033\132\000\128alalal\000\128\099\140\099\140\033\132\033\132\033\132\066\136\066\136\066\136\000\128alalalalal\000\128\033\132\033\132\099\140\000\128\000\128\000\128\000\128alalalalalalal\000\128\000\128\000\128alalalalalal" IDTexture[54]="\016\000\000\000\014\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\008\161\008\161\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\008\161\008\161\008\161\181\214\181\214\008\161\255\127\255\127\255\127\255\127\255\127\255\127\255\127\008\161\008\161\008\161\181\214\255\255{\239{\239{\239\181\214\008\161\255\127\255\127\255\127\008\161\008\161\008\161\181\214\255\255\255\255{\239{\239{\239{\239{\239{\239\181\214\008\161\255\127\008\161R\202\255\255\255\255\255\255{\239{\239{\239{\239{\239{\239\173\181\173\181\173\181\173\181\198\152\008\161\255\255R\202{\239{\239{\239{\239{\239\173\181\173\181\173\181R\202R\202R\202R\202\198\152\008\161\255\255{\239R\202{\239\173\181\173\181\173\181R\202R\202R\202R\202R\202\206\185\206\185\198\152\008\161{\239{\239\181\214\239\189R\202R\202R\202R\202R\202\206\185\206\185\206\185\206\185\206\185\198\152\008\161\016\194\016\194\181\214\239\189R\202R\202R\202\206\185\206\185\206\185\173\181\198\152\198\152\198\152\255\127\255\127\008\161\016\194\016\194\239\189\206\185\206\185\206\185\206\185\198\152\198\152\198\152\255\127\255\127\255\127\255\127\255\127\255\127\008\161\016\194\239\189\206\185\198\152\198\152\198\152\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\008\161\198\152\198\152\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127" IDTexture[55]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\230\132\230\132\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\255\255\255\255\255\255\255\255\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\255\255\220\211\220\211\220\211\222\231w\155\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\255\255\222\231\220\211\220\211\255\255\185\167\185\167\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\255\255\220\211\255\255\222\231\222\231\222\231\185\167w\155\230\132\0\0\0\0\0\0\0\0\0\0\230\132\255\255\220\211\255\255\219\199\219\199\219\199\219\199P\146\185\167\230\132\0\0\0\0\0\0\0\0\0\0\230\132\255\255\220\211\222\231\219\199\219\199\219\199\219\199P\146\185\167w\155\230\132\0\0\0\0\0\0\0\0\230\132\255\255\222\2316\151\219\199\219\199\219\199\219\199P\146\237\141\237\141\230\132\0\0\0\0\0\0\0\0\230\132\255\255\185\167\185\167P\146P\146P\146P\1466\1516\151P\146\230\132\0\0\0\0\0\0\0\0\0\0\230\132\185\167\237\1416\1516\1516\1516\151\237\1416\151\230\132\0\0\0\0\0\0\0\0\0\0\0\0\230\132w\155\237\1416\1516\1516\1516\151\237\141P\146\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132P\1466\1516\1516\1516\151P\146\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\230\132\230\132\230\132\230\132\230\132\230\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[56]="\16\0\0\0\14\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\169@\169\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\169@\169@\169\225\255\225\255@\169\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\169@\169@\169\225\255\255\255\241\255\241\255\241\255\225\255@\169\0\0\0\0\0\0@\169@\169@\169\225\255\255\255\255\255\241\255\241\255\241\255\241\255\241\255\241\255\225\255@\169\0\0@\169`\239\255\255\255\255\255\255\241\255\241\255\241\255\241\255\241\255\241\255\0\194\0\194\0\194\0\194\224\156@\169\255\255`\239\241\255\241\255\241\255\241\255\241\255\0\194\0\194\0\194`\239`\239`\239`\239\224\156@\169\255\255\241\255`\239\241\255\0\194\0\194\0\194`\239`\239`\239`\239`\239\194\237\194\237\224\156@\169\241\255\241\255\225\255\160\214`\239`\239`\239`\239`\239\194\237\194\237\194\237\194\237\130\217\224\156@\169\130\238\130\238\225\255\160\214`\239`\239`\239\194\237\194\237\194\237\130\217\224\156\224\156\224\156\0\0\0\0@\169\130\238\130\238\160\214\194\237\194\237\194\237\194\237\224\156\224\156\224\156\0\0\0\0\0\0\0\0\0\0\0\0@\169\130\238\160\214\130\217\224\156\224\156\224\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\169\224\156\224\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[57]="\13\0\0\0\15\0\0\0\0\0\0\0\26\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206F\181\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206F\181\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206a\144\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206\0\0\0\0\0\0\9\206F\181\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206a\144a\144\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206a\144\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206\9\206F\181\0\0\0\0\0\0F\181F\181F\181F\181F\181F\181F\181F\181F\181F\181\0\0\0\0\0\0\196\160\196\160\196\160\196\160\196\160\196\160\196\160\196\160\196\160\196\160" IDTexture[58]="\15\0\0\0\15\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0J\209\173\221\173\221J\209\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\173\221\206\245\206\2451\254\206\245\8\193\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\173\221\181\2541\254\206\253\181\254\206\245\24\255\8\193\0\0\0\0\0\0\0\0\0\0\0\0\173\221\206\245\206\2451\254\206\253\206\2531\254\24\255\8\193\0\0\0\0\0\0\0\0J\209\173\221\206\245\206\2451\254\206\245\206\245\206\253\24\255\214\242\165\168\0\0\0\0\0\0J\209\181\254\206\253\206\245\206\253\206\245\206\253\206\245\181\254\24\255\8\193\165\168\0\0\0\0\0\0\173\221\206\253\206\253\181\2541\254\206\253\206\2531\254\24\255\214\242\8\193\0\0\0\0\0\0\173\221\206\253\206\253\206\245\206\245\24\2551\254\181\254\24\255\214\242\8\193\165\168\0\0\0\0\0\0J\209\181\254\206\2531\254\181\254\24\255\24\255\24\255\214\242\8\193\165\168\0\0\0\0\0\0\0\0\0\0\8\193)\205\24\255\24\255\24\255\214\242\8\193\8\193\165\168\0\0\0\0\0\0\0\0\0\0\0\0\8\193\8\193\8\193\8\193\8\193\8\193\165\168\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\168\165\168\165\168\165\168\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[59]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\229\180\229\180\229\180\229\180\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\229\180\196\176&\193\203\209G\201A\148\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\229\180&\189H\197\229\188\229\184G\201G\201\130\156\255\127\255\127\255\127\255\127\255\127\255\127\229\180'\193\196\176\138\205h\201\005\189'\193G\201\130\156\255\127\255\127\255\127\255\127\229\180\229\180G\201G\201(\197\197\176&\193\136\205G\197G\201A\148\255\127\255\127\255\127\229\180G\193\229\188\229\180h\205G\201G\197\197\176\229\184G\197\130\156A\148\255\127\255\127\255\127\229\180'\197\136\205\229\184'\193G\197\136\205\170\205\229\180\229\180\130\156\255\127\255\127\255\127\229\180&\193\229\188\229\180G\197&\189'\193\229\184G\197G\201\130\156A\148\255\127\255\127\255\127\229\180G\201h\201'\193\229\180G\197G\197\229\180\196\176\130\156A\148\255\127\255\127\255\127\255\127\255\127\130\156\163\168G\201\229\180\197\176G\201\130\156\130\156A\144\255\127\255\127\255\127\255\127\255\127\255\127A\148\130\156\130\156\130\156\130\156\130\156A\148A\148\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127A\148A\148A\148A\148\255\127\255\127\255\127\255\127\255\127\255\127" IDTexture[60]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalal\206\185\206\185\206\185alalalalalalalalalalal\000\184\000\184\247\222\189\247\189\247\206\185alalalalalalalal\000\184\000\184\132\204\132\204\000\184\247\222\189\247\189\247\206\185alalalalal\000\184\000\184\066\196\066\196\066\196\132\204\132\204\000\184\247\222\189\247\189\247\206\185alalal\000\184\066\196\066\196\132\204\066\196\066\196\066\196\132\204\132\204\000\184\247\222\189\247\206\185alal\000\184\066\196\132\204\132\204\066\196\066\196\066\196\066\196\066\196\066\196\000\192\000\184\206\185\196\160alal\000\184\066\196\132\204\066\196\066\196\066\196\066\196\066\196\000\192\000\184\000\184\000\184\070\181\196\160alal\000\184\000\184\066\196\066\196\066\196\066\196\000\192\000\184\000\184\000\184\000\184\196\160\070\181\196\160alal\196\160\000\184\000\184\066\196\000\192\000\184\000\184\000\184\000\184\196\160\196\160al\196\160\196\160alal\070\181\196\160\000\184\000\184\000\184\000\184\000\184\196\160\196\160alalalalalalalalal\196\160\000\184\000\184\196\160\196\160alalalalalalalalalalalal\009\206\196\160alalalalalalalalalalalalalal\070\181\196\160alalalalalalalalalalalalalal\196\160\196\160alalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[61]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\162\156\162\156\162\156\162\156\162\156alalalalalalalalalal\162\156\133\193\100\185\068\181\068\181\100\185\162\156\227\164\036\181alalalalalalalal\162\156\162\156\162\156\162\156\068\181\068\181\165\197\129\148alalalalalalalalalalalal\227\164\100\185\068\181\162\156alalalalalalalalalalal\227\164\036\181\129\148\068\181\100\185\162\156alalalalalalalalal\227\164\165\197\129\148al\162\156\068\181\162\156alalalalalalalal\227\164\036\181\129\148alal\162\156\068\181\162\156alalalalalalal\227\164\165\197\129\148alalal\162\156\100\185\162\156alalalalalal\227\164\036\181\129\148alalalal\162\156\133\193\162\156alalalalal\227\164\165\197\129\148alalalalalal\162\156alalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalal\036\181\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[62]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\041\165\041\165\041\165\041\165\041\165alalalalalalalalalal\041\165\115\206\049\198\239\189\239\189\049\198\041\165\227\164\036\181alalalalalalalal\041\165\041\165\041\165\041\165\239\189\239\189\165\197\129\148alalalalalalalalalalalal\227\164\049\198\239\189\041\165alalalalalalalalalalal\227\164\036\181\129\148\239\189\049\198\041\165alalalalalalalalal\227\164\165\197\129\148al\041\165\239\189\041\165alalalalalalalal\227\164\036\181\129\148alal\041\165\239\189\041\165alalalalalalal\227\164\165\197\129\148alalal\041\165\049\198\041\165alalalalalal\227\164\036\181\129\148alalalal\041\165\115\206\041\165alalalalal\227\164\165\197\129\148alalalalalal\041\165alalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalal\036\181\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[63]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\008\161\008\161\008\161\008\161\008\161alalalalalalalalalal\008\161\255\255\090\235\247\222\247\222\090\235\008\161\227\164\036\181alalalalalalalal\008\161\008\161\008\161\008\161\247\222\247\222\165\197\129\148alalalalalalalalalalalal\227\164\090\235\247\222\008\161alalalalalalalalalalal\227\164\036\181\129\148\247\222\090\235\008\161alalalalalalalalal\227\164\165\197\129\148al\008\161\247\222\008\161alalalalalalalal\227\164\036\181\129\148alal\008\161\247\222\008\161alalalalalalal\227\164\165\197\129\148alalal\008\161\090\235\008\161alalalalalal\227\164\036\181\129\148alalalal\008\161\255\255\008\161alalalalal\227\164\165\197\129\148alalalalalal\008\161alalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalal\036\181\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[64]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\007\137\007\137\007\137\007\137\007\137alalalalalalalalalal\007\137\185\155\021\151\211\150\211\150\021\151\007\137\227\164\036\181alalalalalalalal\007\137\007\137\007\137\007\137\211\150\211\150\165\197\129\148alalalalalalalalalalalal\227\164\021\151\211\150\007\137alalalalalalalalalalal\227\164\036\181\129\148\211\150\021\151\007\137alalalalalalalalal\227\164\165\197\129\148al\007\137\211\150\007\137alalalalalalalal\227\164\036\181\129\148alal\007\137\211\150\007\137alalalalalalal\227\164\165\197\129\148alalal\007\137\021\151\007\137alalalalalal\227\164\036\181\129\148alalalal\007\137\185\155\007\137alalalalal\227\164\165\197\129\148alalalalalal\007\137alalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalal\036\181\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[65]="\15\0\0\0\15\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\228\156\228\156\228\156\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243*\231\233\222\233\222*\231\228\156\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\228\156\228\156\228\156\233\222\233\222\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164*\231\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\233\222*\231\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\228\156\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\228\156\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\228\156*\231\228\156\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\228\156\171\243\228\156\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\228\156\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[66]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\162\156\162\156\162\156alalalalalalalalalalalal\162\156\133\193\133\193\068\181\162\156alalalalalalalalalal\162\156\133\193\100\185\068\181\133\193\162\156alalalalalalalalal\162\156\133\193\100\185\068\181\100\185\133\193\162\156alalalalalalalalalal\227\164\068\181\100\185\133\193\162\156alalalalalalalalalal\227\164\165\197\129\148\133\193\162\156alalalalalalalalalal\227\164\165\197\129\148al\162\156alalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\129\148\227\164\165\197\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalalal\227\164\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[67]="\15\0\0\0\15\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165)\165)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\206s\206\239\189)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198\239\189s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198\239\1891\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\239\1891\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[68]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\008\161\008\161\008\161alalalalalalalalalalalal\008\161\255\255\255\255\247\222\008\161alalalalalalalalalal\008\161\255\255\090\235\247\222\255\255\008\161alalalalalalalalal\008\161\255\255\090\235\247\222\090\235\255\255\008\161alalalalalalalalalal\227\164\247\222\090\235\255\255\008\161alalalalalalalalalal\227\164\165\197\129\148\255\255\008\161alalalalalalalalalal\227\164\165\197\129\148al\008\161alalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\129\148\227\164\165\197\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalalal\227\164\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[69]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\007\137\007\137\007\137alalalalalalalalalalalal\007\137\185\155\185\155\211\150\007\137alalalalalalalalalal\007\137\185\155\021\151\211\150\185\155\007\137alalalalalalalalal\007\137\185\155\021\151\211\150\021\151\185\155\007\137alalalalalalalalalal\227\164\211\150\021\151\185\155\007\137alalalalalalalalalal\227\164\165\197\129\148\185\155\007\137alalalalalalalalalal\227\164\165\197\129\148al\007\137alalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalal\227\164\036\181\129\148alalalalalalalalalalal\129\148\227\164\165\197\129\148alalalalalalalalalalalal\227\164\165\197\129\148alalalalalalalalalalalalalal\227\164\129\148alalalalalalalalalalalalalalalalalalalalalalalalalalal" IDTexture[70]="\15\0\0\0\15\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\228\156\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243\171\243\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243*\231\233\222\171\243\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243*\231\233\222*\231\171\243\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\233\222*\231\171\243\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\171\243\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[71]="\14\0\0\0\15\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193D\181d\185\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193D\181D\181D\181\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185D\181\3\173D\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\162\156\227\164D\181\3\173D\181\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148D\181D\181\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\162\156\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[72]="\14\0\0\0\15\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\206s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\206\239\1891\198)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\206\239\189\239\189\239\189\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198\239\189\173\181\239\189\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165)\165\227\164\239\189\173\181\239\189)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\239\189\239\189)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0)\165)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[73]="\14\0\0\0\15\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255\247\222Z\235\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255\247\222\247\222\247\222\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\247\222R\202\247\222\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\227\164\247\222R\202\247\222\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\247\222\247\222\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[74]="\14\0\0\0\15\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\211\150\21\151\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\211\150\211\150\211\150\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\211\150.\146\211\150\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\7\137\227\164\211\150.\146\211\150\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\211\150\211\150\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\7\137\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[75]="\14\0\0\0\15\0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243\171\243\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243\233\222*\231\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243\233\222\233\222\233\222\227\164$\181\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\171\243*\231\233\222h\206\233\222\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\228\156\228\156\227\164\233\222h\206\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\233\222\233\222\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\228\156\228\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0$\181\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[76]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\162\156\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\129\148\129\148\0\0\0\0\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\129\148\226\164\129\148\0\0\162\156\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\3\173\129\148\133\193d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\3\173\129\148d\185\133\193\162\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\3\173\129\148\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\129\148\3\173\226\164\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\129\148\129\148\226\164\129\148\0\0\0\0\0\0\0\0\0\0\0\0\129\148\129\148$\181\129\148\0\0\0\0\0\0\0\0\129\148\129\148\0\0\0\0\0\0\0\0\0\0\0\0\129\148\3\173\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\129\148\129\148\129\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[77]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165)\165)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\231\156\231\156\0\0\0\0\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\231\156k\173\231\156\0\0)\165s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\156\173\181\231\156s\2061\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\156\173\181\231\1561\198s\206)\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\156\173\181\231\156\231\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\231\156\173\181k\173\231\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\231\156\231\156k\173\231\156\0\0\0\0\0\0\0\0\0\0\0\0\231\156\231\156$\181\129\148\0\0\0\0\0\0\0\0\231\156\231\156\0\0\0\0\0\0\0\0\0\0\0\0\231\156\173\181\231\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\231\156\231\156\231\156\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[78]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\165\148\165\148\0\0\0\0\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\165\148\173\181\165\148\0\0\8\161\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\148R\202\165\148\255\255Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\148R\202\165\148Z\235\255\255\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\148R\202\165\148\165\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\165\148R\202\173\181\165\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\165\148\165\148\173\181\165\148\0\0\0\0\0\0\0\0\0\0\0\0\165\148\165\148$\181\129\148\0\0\0\0\0\0\0\0\165\148\165\148\0\0\0\0\0\0\0\0\0\0\0\0\165\148R\202\165\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\148\165\148\165\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[79]="\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\7\137\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\132\132\132\132\0\0\0\0\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\132\132\138\141\132\132\0\0\7\137\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\132\132.\146\132\132\185\155\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\132\132.\146\132\132\21\151\185\155\7\137\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\132\132.\146\132\132\132\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164$\181\132\132.\146\138\141\132\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\227\164\165\197\129\148\0\0\132\132\132\132\138\141\132\132\0\0\0\0\0\0\0\0\0\0\0\0\132\132\132\132$\181\129\148\0\0\0\0\0\0\0\0\132\132\132\132\0\0\0\0\0\0\0\0\0\0\0\0\132\132.\146\132\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\132\132\132\132\132\132\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" IDTexture[80]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalal\228\156\228\156\228\156alalalalalalalalalalalal\228\156\170\247\074\231\228\156alalalalalalalalalalal\228\156\170\247\074\231\170\247\228\156alalalalalalalalalal\228\156\170\247\074\231\170\247\228\156alalalalalalalalalal\228\156\170\247\074\231\170\247\228\156alalalalalalalalalal\228\156\170\247\074\231\170\247\228\156alalalalal\229\156\229\156alalal\228\156\170\247\074\231\170\247\228\156alalalalalal\229\156\231\189\229\156al\228\156\170\247\074\231\170\247\228\156alalalalalalalal\229\156\104\206\229\156\170\247\074\231\170\247\228\156alalalalalalalalal\229\156\104\206\229\156\074\231\170\247\228\156alalalalalalalalalalal\229\156\104\206\229\156\229\156alalalalalalalalalalal\194\164\035\181\229\156\104\206\231\189\229\156alalalalalalalalal\194\164\132\197\097\148al\229\156\229\156\231\189\229\156alalalalalal\229\156\229\156\035\181\097\148alalalal\229\156\229\156alalalalalal\229\156\104\206\229\156alalalalalalalalalalalalal\229\156\229\156\229\156alalalalalalalalalalalalal" IDTexture[81]="\014\000\000\000\014\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148alalalalalalalalalalal\165\148\206\185\206\185\165\148alalalalalalalalal\165\148\049\198\206\185\074\169\041\165\165\148alalalalalalal\165\148\206\185\206\185\206\185\206\185\041\165\041\165\165\148alalalalal\165\148\206\185\206\185\206\185\206\185\206\185\041\165\198\152\041\165\165\148alalal\165\148\206\185\206\185\206\185\074\169\206\185\049\198\041\165\041\165\041\165\041\165\165\148alal\165\148\206\185\074\169\206\185\206\185\206\185\206\185\041\165\041\165\198\152\041\165\165\148alal\165\148\041\165\206\185\049\198\206\185\206\185\206\185\041\165\041\165\041\165\041\165\165\148alalal\165\148\041\165\041\165\206\185\206\185\198\152\041\165\041\165\107\173\165\148alalalalal\165\148\165\148\041\165\041\165\041\165\041\165\165\148\165\148alalalalalalalal\165\148\165\148\165\148\165\148alalalal" IDTexture[82]="\014\000\000\000\013\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\130\131alalalalal\130\131alalalalalalal\199\182alalalalalal\130\131alalalalalal\001\149alalalalalal\199\182\199\182alalalal\130\131alalal\199\182\196\161alal\001\149\001\149alalalal\130\131al\199\214al\001\149\001\149alalalalalalal\199\182\196\161al\001\149alalalalalalalalalal\001\149\001\149alalal\130\131alal\199\214\196\181alalalalalalalal\199\182\196\161alal\001\149\001\149alalalalalalalal\001\149\001\149alalalalal" IDTexture[83]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalal\132\185alalalalalalalalalalalalal\104\235\199\214\132\185al\132\185alalalalalalalal\132\185\132\185al\199\214\036\198\226\189\132\185alalal\132\185alalalalalal\104\235\165\214\132\185\199\214\104\235\226\189\199\214\132\185\132\185alalalalalalal\165\214\132\185\165\214\199\214\132\185\036\198\098\169\132\185alalalalalalalal\104\235\165\214\069\194\104\235\199\214\132\185\036\198\226\189\104\235\132\185alalalalalal\104\235\165\214\104\235\036\198\130\177\199\214\196\177\104\235\199\214alalalalalal\104\235\165\214\104\235\130\173\005\190\005\190\130\177\199\214\199\214\132\185\132\185alalalalal\104\235\104\235\036\198\005\190\130\177\034\161\005\190\005\190\193\144\193\144alalalalal\098\157\193\144\196\177\005\190\130\177\005\190\005\190\193\144\193\144alalalalalal\104\235\193\144\034\153\128\140\005\190\005\190\193\144\193\144\005\190\132\185alalalal\104\235\069\194\165\214\199\214\128\140\193\144\193\144\193\144alal\193\144\193\144\132\185alalal\165\214\165\214\199\214\130\177\005\190\193\144alalalalalalalalalal\193\144\199\214\130\177\067\165\193\144alalalalalalalalalalal\199\214\193\144\193\144\005\190\193\144alalalalalalalalalalal\193\144alal\193\144alalalalalalalalalalal" IDTexture[84]="\015\000\000\000\016\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\067\185\067\185alalalalalalalalalalal\067\185\067\185\196\205\196\205\099\189\034\177alalalalalalalal\067\185\196\205\164\201\164\201\164\201\164\201\034\177\226\164alalalalalal\067\185\196\205\034\177\034\177\164\201\164\201\164\201\099\189\034\177\161\156alalalal\067\185\196\205\164\201\196\205\196\205\034\177\164\201\164\201\099\189\034\177\161\156alalal\067\185\196\205\164\201\164\201\164\201\164\201\196\205\164\201\099\189\034\177\226\164\161\156alal\067\185\196\205\034\177\034\177\164\201\164\201\164\201\164\201\099\189\034\177\034\177\161\156alalal\067\185\164\201\196\205\196\205\034\177\164\201\164\201\099\189\034\177\226\164\161\156alalal\067\185\196\205\164\201\164\201\164\201\196\205\164\201\034\177\034\177\034\177\161\156alalalal\067\185\196\205\164\201\164\201\164\201\164\201\034\177\034\177\034\177\161\156alalalalal\067\185\196\205\164\201\164\201\164\201\099\189\034\177\226\164\161\156alalalalalalal\034\177\099\189\099\189\034\177\034\177\034\177\161\156alalalalalalalal\226\164\226\168\034\177\034\177\226\164\161\156alalalalalalalalalal\226\164\161\156\161\156\161\156alalalalalalalal" IDTexture[85]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148alalalalalalalalalalal\165\148\090\235\198\152\000\128alalalalalalalalal\165\148\090\235\239\189\198\152\000\128alalalalalalalal\165\148\090\235\239\189\239\189\198\152\066\136\000\128alalalalalal\165\148\090\235\239\189\239\189\074\169\198\152\066\136\000\128alalalalal\165\148\090\235\239\189\239\189\074\169\198\152\198\152\066\136\066\136\000\128alalal\165\148\090\235\239\189\239\189\074\169\198\152\198\152\198\152\198\152\066\136\000\128alalal\165\148\239\189\239\189\074\169\198\152\198\152\198\152\198\152\198\152\066\136\066\136\000\128alal\165\148\239\189\074\169\198\152\198\152\198\152\198\152\198\152\066\136\066\136\066\136\000\128alal\000\128\165\148\165\148\165\148\165\148\165\148\198\152\066\136\066\136\066\136\000\128alalalal\000\128\165\148\165\148\165\148\165\148\165\148\198\152\066\136\000\128alalalalalal\000\128\165\148\165\148\165\148\165\148\165\148\000\128alalalalalalalal\000\128\000\128\000\128\000\128\000\128alalalal" IDTexture[86]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\162\152\162\152\162\152alalalalalalalalalal\162\152\132\193\100\185\100\185\162\152alalalalalalalalalal\162\152\162\152\067\181\100\185\162\152\194\164\035\181alalalalalalalalal\162\152\067\181\067\181\132\197\097\148alalalalalalalalalal\194\164\100\185\067\181\162\152alalalalalalalalal\194\164\035\181\097\148\162\152alalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalal\035\181\097\148alalalalalalalalalal" IDTexture[87]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\041\165\041\165\041\165alalalalalalalalalal\041\165\115\206\049\198\049\198\041\165alalalalalalalalalal\041\165\041\165\239\189\049\198\041\165\194\164\035\181alalalalalalalalal\041\165\239\189\239\189\132\197\097\148alalalalalalalalalal\194\164\049\198\239\189\041\165alalalalalalalalal\194\164\035\181\097\148\041\165alalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalal\035\181\097\148alalalalalalalalalal" IDTexture[88]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\008\161\008\161\008\161alalalalalalalalalal\008\161\255\255\123\239\123\239\008\161alalalalalalalalalal\008\161\008\161\024\227\123\239\008\161\194\164\035\181alalalalalalalalal\008\161\024\227\024\227\132\197\097\148alalalalalalalalalal\194\164\123\239\024\227\008\161alalalalalalalalal\194\164\035\181\097\148\008\161alalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalal\035\181\097\148alalalalalalalalalal" IDTexture[89]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\230\132\230\132\230\132alalalalalalalalalal\230\132\185\155\021\151\021\151\230\132alalalalalalalalalal\230\132\230\132\211\146\021\151\230\132\194\164\035\181alalalalalalalalal\230\132\211\146\211\146\132\197\097\148alalalalalalalalalal\194\164\021\151\211\146\230\132alalalalalalalalal\194\164\035\181\097\148\230\132alalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalal\035\181\097\148alalalalalalalalalal" IDTexture[90]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\228\156\228\156\228\156alalalalalalalalalal\228\156\170\247\074\231\074\231\228\156alalalalalalalalalal\228\156\228\156\233\222\074\231\228\156\194\164\035\181alalalalalalalalal\228\156\233\222\233\222\132\197\097\148alalalalalalalalalal\194\164\074\231\233\222\228\156alalalalalalalalal\194\164\035\181\097\148\228\156alalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalal\194\164\035\181\097\148alalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalal\035\181\097\148alalalalalalalalalal" IDTexture[91]="\015\000\000\000\016\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalal\008\161\008\161alalalalalalalalalalalal\033\132\247\222\247\222\033\132alalalalalalalalalal\008\161\115\206\115\206\008\161\115\206\008\161alalalalalalalalal\008\161\247\222\033\132al\033\132\008\161alalalalalalalalal\008\161\247\222\033\132alalalalalalalalalalalal\008\161\247\222\033\132alalalalalalalalalalalal\008\161\247\222\033\132al\033\132\008\161alalal\165\148alalalalal\008\161\115\206\115\206\008\161\115\206\008\161alal\165\148\090\235\165\148alalalalal\033\132\247\222\247\222\033\132alal\165\148\090\235\239\189\000\128alalalalalal\008\161\008\161alal\165\148\090\235\239\189\198\152\165\148\000\128alalalalalalalal\165\148\090\235\239\189\198\152\198\152\165\148\000\128alalalalalalalal\165\148\239\189\198\152\198\152\198\152\165\148\066\136\000\128alalalalalalal\165\148\165\148\165\148\165\148\165\148\066\136\066\136\000\128alalalalalalalal\000\128\165\148\066\136\000\128\000\128\000\128alalalalalalalalalal\000\128\000\128alalalal" IDTexture[92]="\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalal\194\164\194\164\194\164\194\164alalalalalalalalal\194\164\194\164\194\164\132\197\035\181\035\181\132\197\097\148alalalalalal\194\164\194\164\132\197\035\181\132\197\097\148\097\148\097\148\097\148alalalalalal\194\164\173\181\035\181\097\148\097\148\097\148alal\008\161alalalalalal\194\164\173\181\082\202\173\181alalalal\008\161alalalalalal\194\164\173\181\082\202\173\181alalalal\008\161alalalalalalal\194\164\035\181\173\181alalalal\008\161alalalalalalal\194\164\132\197\097\148alalalal\008\161alalalalalalalal\194\164\035\181\097\148alalal\008\161alalalalalalalalal\194\164\132\197\097\148alal\008\161alalalalalalalalal\194\164\132\197\097\148alal\008\161alalalalalalalalalal\194\164\035\181\097\148al\008\161alalalalalalalalalalal\194\164\035\181\097\148\008\161alalalalalalalalalalalal\194\164\132\197\097\148alalalalalalalalalalalalalal\097\148alalalalalalalalalalalalal" IDTexture[93]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\082\202\255\255\008\161alalalalalalalalalal\082\202\123\239\123\239\082\202\008\161alalalalalalalalalal\008\161\132\197\123\239\008\161alalalalalalalalalalal\132\197\097\148\082\202\008\161alalalalalalalalalal\132\197\097\148al\008\161alalalalalalalalalal\132\197\097\148alalalalalalalalalalalal\132\197\097\148alalalalalalalalalalalal\132\197\097\148alalalalalalalalalalalal\132\197\097\148alalalalalalalalalalal\156\243\024\227\097\148alalalalalalalalalalal\156\243\024\227\156\243\231\156alalalalalalalalalalal\231\156\156\243\231\156alalalalalalalalalalalalal\231\156alalalalalalalalalalal" IDTexture[94]="\013\000\000\000\014\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Z\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255Z\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255Z\235\255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255Z\235\255\255{\239\000\000\000\000\000\000\000\000\000\000\000\000\000\000Z\235Z\235\255\255Z\235\255\255Z\235\000\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\255\255Z\235\255\255\255\255\173\181\000\000\000\000\000\000\000\000\000\000Z\235Z\235\255\255Z\235\255\255Z\235\173\181\000\000\000\000\000\000\000\000\000\000\255\255\255\255\255\255Z\235\255\255\255\255Z\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\198\255\255Z\235\255\255\173\181\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\198\198\152\255\255Z\235\173\181\000\000\000\000\000\000\000\000\000\000\000\0001\1981\198\198\152\000\000\255\255\173\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\198\152\198\152\000\000\000\000\173\181\000\000\000\000\000\000\000\000\000\000" IDTexture[95]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalal\154\243\237\185alalalalalalalalalalalal\254\255\218\251\154\243alalalalalalalalalalalal\185\247\218\251\219\251\238\189alalalalalalalalalal\185\247\220\255\238\189\238\189alalalalalalalalalal\185\247\253\255\238\189alalalalalalalalalalal\185\247\252\255\238\189alalalalalalalalalalal\185\247\253\255\238\189alalalalalalalalalalal\185\247\253\255\238\189alalalalalalalalalalal\185\247\252\255\238\189alalalalalalalalalalal\185\247\253\255\238\189alalalalalalalalalal\251\255\185\247\253\255\238\189alalalalalalalalalal\154\243\253\255\253\255\238\189alalalalalalalalalalal\238\185\154\243\218\251\238\189alalalalalalalalalalalalal\238\189alalalalalalalalalalal" IDTexture[96]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalal\077\169alalalalalalalalalalalalal\077\169\255\255\077\169\077\169alalalal\077\169alalalalalal\077\169\255\255\189\247\249\222\077\169\077\169al\077\169\091\235\077\169alalalal\077\169\255\255\189\247\189\247\077\169\255\255\091\235\077\169\077\169\255\255\077\169alalalal\077\169\249\222\208\185\208\185\255\255\208\185\091\235\091\235\208\185\189\247\091\235\077\169alalalal\077\169\091\235\189\247\208\185\255\255\189\247\249\222\208\185\091\235\208\185\077\169alalal\077\169\255\255\189\247\255\255\208\185\091\235\249\222\208\185\077\169\208\185\077\169\091\235\077\169alal\077\169\255\255\189\247\208\185\255\255\208\185\208\185\249\222\208\185\255\255\091\235\091\235\077\169alal\091\235\091\235\208\185\255\255\091\235\091\235\249\222\208\185\255\255\091\235\077\169\189\247\077\169alal\077\169\255\255\208\185\208\185\091\235\208\185\208\185\249\222\091\235\077\169\249\222\077\169alal\077\169\091\235\077\169\091\235\091\235\208\185\255\255\091\235\208\185\077\169\249\222\189\247\077\169alalal\077\169al\077\169\077\169\091\235\208\185\208\185\189\247\077\169\077\169\189\247\077\169alalalalalal\077\169\189\247\189\247\249\222\077\169al\077\169\091\235\077\169alalalalalalal\077\169\077\169\077\169alalal\077\169alal" IDTexture[97]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalal\123\239alalalalalalalalalalalalal\222\251\008\161\222\251alalalalalalalalalalalal\123\239al\008\161alalalalalalalalalalalal\008\161\222\251\123\239alalalalalalal\222\251alalalalal\008\161\008\161\222\251alalalalal\123\239\008\161alalalalalalal\008\161\123\239alalal\222\251\008\161alal\123\239\222\251\123\239\222\251alalal\008\161\222\251alal\123\239alal\222\251\008\161\008\161\008\161\008\161\123\239\222\251alal\123\239alal\008\161\222\251al\008\161\123\239alalal\008\161\008\161\123\239al\222\251alalal\008\161\123\239\222\251\008\161\008\161alalal\222\251\008\161al\123\239alalalal\008\161\008\161\123\239\222\251\123\239\222\251\123\239\008\161al\222\251\008\161alalalalalal\008\161\008\161\008\161\008\161\008\161al\123\239\008\161alalalalalalalalal\008\161\222\251\123\239\222\251\008\161alalalalalalalalalalal\008\161\008\161\008\161alalal" IDTexture[98]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalal\008\161\008\161alalalalalalalalalalalal\008\161\194\164\097\148alalalalalalalalalalal\008\161\194\164\132\197\097\148alalalalalalalalalal\008\161\194\164\132\197\097\148\008\161alalalalalalalalal\008\161\194\164\035\181\097\148al\008\161alalalalalalalal\008\161\194\164\132\197\097\148alal\008\161alalalalalalal\008\161\194\164\035\181\097\148alalal\008\161alalalalalal\008\161\194\164\132\197\097\148alalalal\008\161alalalalal\008\161\194\164\035\181\097\148alalalalal\008\161alalalalal\194\164\132\197\097\148alalalalal\008\161alalalalal\194\164\035\181\082\202\082\202\198\152alalalal\008\161alalalal\194\164\132\197\097\148\082\202\082\202\198\152alalal\008\161alalalal\194\164\132\197\097\148al\198\152\198\152alal\255\255al\255\255alalalal\097\148\097\148alalalalalal\255\255\255\255alalal" IDTexture[99]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\168\130\168\130\168\130\168\000\000\000\000\000\000\000\000\000\000\000\000\130\168\130\168\000\000\130\168%\205f\225f\225%\205\130\168\000\000\130\168\130\168\000\000\000\000\130\168%\205\130\168f\225f\225f\225f\225%\205f\225\130\168%\205b\156\000\000\000\000\000\000\130\168f\225f\225%\205f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\000\000\130\168%\205f\225%\205f\225f\225%\205f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205f\225f\225f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\000\000\130\168%\205f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\000\000\130\168f\225f\225%\205f\225f\225f\225b\156\000\000\000\000\000\000\000\000\000\000\000\000\130\168f\225f\225%\205f\225f\225f\225b\156\000\000\000\000\000\000\000\000\000\000\130\168%\205%\205f\225%\205f\225%\205%\205%\205b\156\000\000\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\000\000\130\168f\225%\205%\205%\205%\205%\205f\225%\205b\156\000\000\000\000\000\000\130\168%\205%\205b\156b\156%\205%\205b\156b\156%\205%\205b\156\000\000\000\000\130\168b\156b\156\000\000\000\000b\156b\156\000\000\000\000b\156b\156b\156" IDTexture[401]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\198\152\198\152\198\152\074\169\074\169\074\169alalalalalal\198\152\198\152\173\181\239\189\239\189\239\189\239\189\115\206\074\169\074\169alalal\198\152\074\169\074\169\173\181\239\189\239\189\239\189\239\189\115\206\115\206\115\206\198\152alal\074\169\198\152\074\169\173\181\173\181\239\189\239\189\239\189\115\206\115\206\198\152\198\152alal\074\169\123\239\198\152\198\152\173\181\239\189\239\189\239\189\198\152\198\152\206\185\198\152alal\074\169\123\239\123\239\123\239\198\152\198\152\198\152\198\152\082\202\082\202\206\185\198\152alal\074\169\123\239\123\239\255\255\123\239\181\214\181\214\181\214\082\202\082\202\206\185\198\152alalal\074\169\123\239\255\255\123\239\181\214\181\214\181\214\082\202\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\082\202\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\082\202\206\185\198\152alalalalal\074\169\123\239\123\239\123\239\181\214\082\202\082\202\198\152alalalalalal\074\169\082\202\123\239\123\239\082\202\082\202\082\202\198\152alalalalalalal\198\152\198\152\198\152\198\152\198\152\198\152alalal" IDTexture[402]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\198\152\198\152\198\152\074\169\074\169\074\169alalalalalal\198\152\198\152\148\165\181\169\181\169\181\169\181\169\247\177\074\169\074\169alalal\198\152\083\157\083\157\122\153\123\153\123\153\123\153\123\153\156\157\247\177\247\177\198\152alal\074\169\198\152\122\149\122\153\122\153\123\153\123\153\123\153\156\157\156\157\198\152\198\152alal\074\169\123\239\198\152\198\152\122\153\123\153\123\153\123\153\198\152\198\152\206\185\198\152alal\074\169\123\239\123\239\123\239\198\152\198\152\198\152\198\152\155\157\155\157\206\185\198\152alal\074\169\123\239\123\239\255\255\221\161\181\214\181\214\181\214\155\157\082\202\206\185\198\152alalal\074\169\123\239\255\255\123\239\181\214\181\214\181\214\155\157\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\082\202\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\155\157\206\185\198\152alalalalal\074\169\123\239\123\239\123\239\181\214\082\202\082\202\198\152alalalalalal\074\169\082\202\123\239\123\239\082\202\082\202\082\202\198\152alalalalalalal\198\152\198\152\198\152\198\152\198\152\198\152alalal" IDTexture[403]="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\198\152\198\152\198\152\074\169\074\169\074\169alalalalalal\198\152\198\152\236\209\013\214\141\214\141\214\013\214\079\222\074\169\074\169alalal\198\152\042\202\170\201\227\224\039\242\075\243\075\243\039\242\005\229\079\222\207\222\198\152alal\074\169\198\152\007\238\043\243\043\243\039\242\075\243\075\243\072\246\005\229\198\152\198\152alal\074\169\156\243\198\152\198\152\043\243\004\225\039\242\039\242\198\152\198\152\181\214\198\152alal\074\169\123\239\156\243\156\243\198\152\198\152\198\152\198\152\076\247\004\229\206\185\198\152alal\074\169\123\239\123\239\255\255\070\237\057\231\057\231\057\231\072\246\082\202\206\185\198\152alalal\074\169\123\239\255\255\123\239\181\214\181\214\181\214\004\229\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\082\202\206\185\198\152alalalal\074\169\123\239\123\239\255\255\123\239\181\214\082\202\004\229\206\185\198\152alalalalal\074\169\123\239\123\239\123\239\181\214\082\202\082\202\198\152alalalalalal\074\169\082\202\123\239\123\239\082\202\082\202\082\202\198\152alalalalalalal\198\152\198\152\198\152\198\152\198\152\198\152alalal" IDTexture[405]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalal\251\214\084\194alalalalalalalalalalalalal\251\214\084\194\251\214alalalalalalalalalalalal\084\194\241\181\109\169\109\169alalalalal\251\214\251\214al\015\174\114\182\015\174\139\161\109\169\241\181\241\181alalalal\251\214\251\214\114\182\015\174\114\182\015\174\114\182\073\157\133\144\133\144\133\144alalalal\251\214\114\182\015\174\114\182\015\174\114\182\015\174\139\161alalalalalalal\114\182\015\174\114\182\015\174\114\182\015\174\139\161\073\157alalalalalal\114\182\015\174\114\182\015\174\251\214\251\214\241\181\073\157\165\140alalalalalal\015\174\114\182\015\174\251\214\241\181\241\181\073\157\139\161alalalalalal\114\182\114\182\015\174\114\182\015\174\114\182\073\157\139\161\165\140alalalalalal\114\182\000\128\114\182\015\174\114\182\073\157\139\161\165\140alalalalalalal\114\182\114\182\114\182\139\161\073\157\139\161\165\140alalalalalalalal\165\140\139\161\139\161\139\161\165\140\165\140alalalalalalalalalal\165\140\165\140\165\140alalalalalalalalal" IDTexture[406]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalal\251\214\084\194alalalalalalalalalalalalal\251\214\084\194\251\214alalalalalalalalalalalal\084\194\241\181\109\169\109\169alalalalalalalal\115\214\214\226\115\214\239\193\109\169\241\181\241\181alalalalalal\115\214\115\214\214\226\214\226\214\226\239\193\133\144\133\144\133\144alalalalal\115\214\214\226\115\214\173\185\214\226\214\226\239\193alalalalalalal\115\214\115\214\214\226\173\185\115\214\115\214\115\214\173\185alalalalalal\115\214\214\226\115\214\173\185\214\226\214\226\115\214\239\193\008\165alalalalalal\115\214\214\226\173\185\115\214\115\214\115\214\173\185\008\165alalalalalal\114\182\114\182\173\185\214\226\214\226\115\214\239\193\008\165alalalalalalal\114\182\000\128\114\182\115\214\115\214\173\185\008\165alalalalalalalal\114\182\114\182\114\182\139\161\008\165\008\165alalalalalalalalal\165\140\139\161\139\161\139\161alalalalalalalalalalalal\165\140\165\140\165\140alalalalalalalalal" IDTexture[410]="\013\000\000\000\012\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\168\130\168\130\168\130\168\130\168\130\168\000\000\000\000\000\000\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225f\225%\205%\205b\156\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225%\205%\205%\205b\156\000\000\000\000\000\000\130\168f\225f\225\130\168\130\168\130\168b\156%\205%\205b\156\000\000\000\000\000\000\130\168f\225\130\168!\140!\140!\140!\140b\156%\205b\156\000\000\000\000\000\000\130\168f\225\130\168!\140!\140!\140!\140b\156%\205b\156\000\000\000\000\000\000\130\168f\225b\156!\140!\140!\140!\140b\156%\205b\156\000\000\000\000\000\000\000\000\130\168b\156\000\000\000\000\000\000\000\000b\156b\156\000\000" IDTexture[411]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\130\168\130\168alalalal\130\168\130\168alalalalal\130\168\130\168\102\225\037\205\130\168alal\130\168\102\225\102\225\130\168\098\156alal\130\168\102\225\102\225\102\225\037\205\098\156alal\130\168\102\225\102\225\102\225\037\205\098\156al\130\168\102\225\102\225\102\225\102\225\102\225\130\168\130\168\102\225\102\225\102\225\102\225\037\205\098\156al\130\168\037\205\102\225\102\225\102\225\102\225\102\225\102\225\102\225\102\225\102\225\037\205\037\205\098\156alal\130\168\102\225\102\225\102\225\102\225\102\225\102\225\102\225\102\225\037\205\037\205\098\156alalal\098\156\037\205\102\225\102\225\102\225\102\225\102\225\102\225\102\225\037\205\037\205\098\156alalalal\130\168\102\225\102\225\102\225\102\225\102\225\102\225\102\225\037\205\098\156alalalalal\098\156\102\225\102\225\102\225\102\225\102\225\102\225\037\205\037\205\098\156alalalalal\098\156\037\205\102\225\102\225\102\225\102\225\037\205\037\205\037\205\098\156alalalalal\098\156\037\205\037\205\037\205\037\205\037\205\037\205\037\205\037\205\098\156alalalalalal\098\156\037\205\037\205\037\205\037\205\037\205\037\205\098\156alalalalalalalal\098\156\098\156\098\156\098\156\098\156\098\156alalalal" IDTexture[412]="\013\000\000\000\015\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\168\130\168\130\168\130\168\130\168\130\168\130\168\130\168\000\000\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\130\168f\225f\225f\225f\225f\225f\225f\225%\205b\156\000\000\000\000\000\000\130\168f\225f\225%\205%\205%\205%\205f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205%\205b\156b\156%\205f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\130\168%\205%\205b\156\000\000\000\000\130\168%\205%\205b\156\000\000\000\000\000\000\130\168b\156b\156b\156\000\000\000\000\130\168b\156b\156b\156" IDTexture[413]="\015\000\000\000\013\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\130\168\130\168\130\168\000\000\000\000\130\168\130\168\130\168\000\000\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\130\168f\225%\205b\156\000\000\000\000\000\000\000\000\130\168f\225f\225%\205b\156\000\000\000\000\130\168f\225f\225f\225\130\168\000\000\000\000\130\168f\225f\225%\205%\205b\156\000\000\000\000\130\168%\205f\225f\225%\205b\156\000\000\130\168%\205%\205%\205b\156\000\000\000\000\000\000\000\000b\156%\205%\205%\205b\156\000\000\130\168b\156b\156b\156\000\000\000\000\000\000\000\000\000\000\000\000b\156b\156b\156b\156" IDTexture[415]="\013\000\000\000\012\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\165\148\165\148\165\148\000\000\000\000\000\000\000\000\000\000\000\000\165\148\024\227\024\227\024\227\024\227\024\227R\202c\140\000\000\000\000\000\000\000\000\165\148\024\227\255\255\255\255\024\227\024\227\024\227R\202R\202c\140\000\000\000\000\000\000\165\148\024\227\255\255\024\227\024\227\024\227R\202R\202R\202c\140\000\000\000\000\000\000\165\148\024\227\024\227\165\148\165\148\165\148c\140R\202R\202c\140\000\000\000\000\000\000\165\148\024\227\165\148!\140!\140!\140!\140c\140R\202c\140\000\000\000\000\000\000\165\148\024\227\165\148!\140!\140!\140!\140c\140R\202c\140\000\000\000\000\000\000\165\148\024\227c\140!\140!\140!\140!\140c\140R\202c\140\000\000\000\000\000\000\000\000\165\148c\140\000\000\000\000\000\000\000\000c\140c\140\000\000" IDTexture[416]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148alalalal\165\148\165\148alalalalal\165\148\165\148\024\227\082\202\165\148alal\165\148\024\227\024\227\165\148\099\140alal\165\148\024\227\024\227\024\227\082\202\099\140alal\165\148\024\227\024\227\024\227\082\202\099\140al\165\148\024\227\024\227\024\227\024\227\024\227\165\148\165\148\024\227\024\227\024\227\024\227\082\202\099\140al\165\148\082\202\024\227\255\255\255\255\024\227\024\227\024\227\024\227\024\227\024\227\082\202\082\202\099\140alal\165\148\024\227\255\255\024\227\024\227\024\227\024\227\024\227\024\227\082\202\082\202\099\140alalal\099\140\082\202\024\227\024\227\024\227\024\227\024\227\024\227\024\227\082\202\082\202\099\140alalalal\165\148\024\227\024\227\024\227\024\227\024\227\024\227\024\227\082\202\099\140alalalalal\099\140\024\227\024\227\024\227\024\227\024\227\024\227\082\202\082\202\099\140alalalalal\099\140\082\202\024\227\024\227\024\227\024\227\082\202\082\202\082\202\099\140alalalalal\099\140\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\099\140alalalalalal\099\140\082\202\082\202\082\202\082\202\082\202\082\202\099\140alalalalalalalal\099\140\099\140\099\140\099\140\099\140\099\140alalalal" IDTexture[417]="\013\000\000\000\015\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148\000\000\000\000\000\000\000\000\165\148\024\227\024\227\024\227\024\227\024\227\024\227\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227\255\255\255\255\024\227\024\227\024\227\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227\255\255R\202R\202R\202R\202\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202R\202c\140c\140R\202\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\165\148R\202R\202c\140\000\000\000\000\165\148R\202R\202c\140\000\000\000\000\000\000\165\148c\140c\140c\140\000\000\000\000\165\148c\140c\140c\140" IDTexture[418]="\015\000\000\000\013\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\000\000\000\000\165\148\165\148\165\148\000\000\000\000\000\000\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\000\000\000\000\165\148\255\255R\202c\140\000\000\000\000\165\148\255\255R\202c\140\000\000\000\000\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\165\148\024\227R\202c\140\000\000\000\000\000\000\000\000\165\148\255\255\024\227R\202c\140\000\000\000\000\165\148\024\227\024\227\024\227\165\148\000\000\000\000\165\148\024\227\024\227R\202R\202c\140\000\000\000\000\165\148R\202\024\227\024\227R\202c\140\000\000\165\148R\202R\202R\202c\140\000\000\000\000\000\000\000\000c\140R\202R\202R\202c\140\000\000\165\148c\140c\140c\140\000\000\000\000\000\000\000\000\000\000\000\000c\140c\140c\140c\140" IDTexture[420]="\013\000\000\000\012\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\165\148\165\148\165\148\000\000\000\000\000\000\000\000\000\000\000\000\165\148\185\155\185\155\185\155\185\155\185\155.\142c\140\000\000\000\000\000\000\000\000\165\148\185\155\255\255\255\255\185\155\185\155\185\155.\142.\142c\140\000\000\000\000\000\000\165\148\185\155\255\255\185\155\185\155\185\155.\142.\142.\142c\140\000\000\000\000\000\000\165\148\185\155\185\155\165\148\165\148\165\148c\140.\142.\142c\140\000\000\000\000\000\000\165\148\185\155\165\148!\140!\140!\140!\140c\140.\142c\140\000\000\000\000\000\000\165\148\185\155\165\148!\140!\140!\140!\140c\140.\142c\140\000\000\000\000\000\000\165\148\185\155c\140!\140!\140!\140!\140c\140.\142c\140\000\000\000\000\000\000\000\000\165\148c\140\000\000\000\000\000\000\000\000c\140c\140\000\000" IDTexture[421]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148alalalal\165\148\165\148alalalalal\165\148\165\148\185\155\046\142\165\148alal\165\148\185\155\185\155\165\148\099\140alal\165\148\185\155\185\155\185\155\046\142\099\140alal\165\148\185\155\185\155\185\155\046\142\099\140al\165\148\185\155\185\155\185\155\185\155\185\155\165\148\165\148\185\155\185\155\185\155\185\155\046\142\099\140al\165\148\046\142\185\155\255\255\255\255\185\155\185\155\185\155\185\155\185\155\185\155\046\142\046\142\099\140alal\165\148\185\155\255\255\185\155\185\155\185\155\185\155\185\155\185\155\046\142\046\142\099\140alalal\099\140\046\142\185\155\185\155\185\155\185\155\185\155\185\155\185\155\046\142\046\142\099\140alalalal\165\148\185\155\185\155\185\155\185\155\185\155\185\155\185\155\046\142\099\140alalalalal\099\140\185\155\185\155\185\155\185\155\185\155\185\155\046\142\046\142\099\140alalalalal\099\140\046\142\185\155\185\155\185\155\185\155\046\142\046\142\046\142\099\140alalalalal\099\140\046\142\046\142\046\142\046\142\046\142\046\142\046\142\046\142\099\140alalalalalal\099\140\046\142\046\142\046\142\046\142\046\142\046\142\099\140alalalalalalalal\099\140\099\140\099\140\099\140\099\140\099\140alalalal" IDTexture[422]="\013\000\000\000\015\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148\000\000\000\000\000\000\000\000\165\148\185\155\185\155\185\155\185\155\185\155\185\155\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155\255\255\255\255\185\155\185\155\185\155\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155\255\255.\142.\142.\142.\142\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142.\142c\140c\140.\142\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\165\148\185\155.\142c\140\000\000\000\000\000\000\165\148.\142.\142c\140\000\000\000\000\165\148.\142.\142c\140\000\000\000\000\000\000\165\148c\140c\140c\140\000\000\000\000\165\148c\140c\140c\140" IDTexture[423]="\015\000\000\000\013\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148\165\148alal\165\148\165\148\165\148alalalalalal\165\148\185\155\046\142\099\140alal\165\148\185\155\046\142\099\140alalalalal\165\148\255\255\046\142\099\140alal\165\148\255\255\046\142\099\140alalalalal\165\148\185\155\046\142\099\140alal\165\148\185\155\046\142\099\140alalalalal\165\148\185\155\046\142\099\140alal\165\148\185\155\046\142\099\140alalalalal\165\148\185\155\046\142\099\140alal\165\148\185\155\046\142\099\140alalalal\165\148\255\255\185\155\046\142\099\140alal\165\148\185\155\185\155\185\155\165\148alal\165\148\185\155\185\155\046\142\046\142\099\140alal\165\148\046\142\185\155\185\155\046\142\099\140al\165\148\046\142\046\142\046\142\099\140alalalal\099\140\046\142\046\142\046\142\099\140al\165\148\099\140\099\140\099\140alalalalalal\099\140\099\140\099\140\099\140" IDTexture[425]="\013\000\000\000\012\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\165\148\165\148\165\148\165\148\165\148\165\148\000\000\000\000\000\000\000\000\000\000\000\000\165\148\170\247\170\247\170\247\170\247\170\247\130\238c\140\000\000\000\000\000\000\000\000\165\148\170\247\255\255\255\255\170\247\170\247\170\247\130\238\130\238c\140\000\000\000\000\000\000\165\148\170\247\255\255\170\247\170\247\170\247\130\238\130\238\130\238c\140\000\000\000\000\000\000\165\148\170\247\170\247\165\148\165\148\165\148c\140\130\238\130\238c\140\000\000\000\000\000\000\165\148\170\247\165\148!\140!\140!\140!\140c\140\130\238c\140\000\000\000\000\000\000\165\148\170\247\165\148!\140!\140!\140!\140c\140\130\238c\140\000\000\000\000\000\000\165\148\170\247c\140!\140!\140!\140!\140c\140\130\238c\140\000\000\000\000\000\000\000\000\165\148c\140\000\000\000\000\000\000\000\000c\140c\140\000\000" IDTexture[426]="\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148alalalal\165\148\165\148alalalalal\165\148\165\148\170\247\130\238\165\148alal\165\148\170\247\170\247\165\148\099\140alal\165\148\170\247\170\247\170\247\130\238\099\140alal\165\148\170\247\170\247\170\247\130\238\099\140al\165\148\170\247\170\247\170\247\170\247\170\247\165\148\165\148\170\247\170\247\170\247\170\247\130\238\099\140al\165\148\130\238\170\247\255\255\255\255\170\247\170\247\170\247\170\247\170\247\170\247\130\238\130\238\099\140alal\165\148\170\247\255\255\170\247\170\247\170\247\170\247\170\247\170\247\130\238\130\238\099\140alalal\099\140\130\238\170\247\170\247\170\247\170\247\170\247\170\247\170\247\130\238\130\238\099\140alalalal\165\148\170\247\170\247\170\247\170\247\170\247\170\247\170\247\130\238\099\140alalalalal\099\140\170\247\170\247\170\247\170\247\170\247\170\247\130\238\130\238\099\140alalalalal\099\140\130\238\170\247\170\247\170\247\170\247\130\238\130\238\130\238\099\140alalalalal\099\140\130\238\130\238\130\238\130\238\130\238\130\238\130\238\130\238\099\140alalalalalal\099\140\130\238\130\238\130\238\130\238\130\238\130\238\099\140alalalalalalalal\099\140\099\140\099\140\099\140\099\140\099\140alalalal" IDTexture[427]="\013\000\000\000\015\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148\165\148\165\148\165\148\165\148\165\148\165\148alalalal\165\148\170\247\170\247\170\247\170\247\170\247\170\247\170\247\130\238\099\140alalal\165\148\170\247\255\255\255\255\170\247\170\247\170\247\170\247\130\238\099\140alalal\165\148\170\247\255\255\130\238\130\238\130\238\130\238\170\247\130\238\099\140alalal\165\148\170\247\130\238\130\238\099\140\099\140\130\238\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalal\165\148\130\238\130\238\099\140alal\165\148\130\238\130\238\099\140alalal\165\148\099\140\099\140\099\140alal\165\148\099\140\099\140\099\140" IDTexture[428]="\015\000\000\000\013\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\165\148\165\148\165\148alal\165\148\165\148\165\148alalalalalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalalalal\165\148\255\255\130\238\099\140alal\165\148\255\255\130\238\099\140alalalalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalalalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalalalal\165\148\170\247\130\238\099\140alal\165\148\170\247\130\238\099\140alalalal\165\148\255\255\170\247\130\238\099\140alal\165\148\170\247\170\247\170\247\165\148alal\165\148\170\247\170\247\130\238\130\238\099\140alal\165\148\130\238\170\247\170\247\130\238\099\140al\165\148\130\238\130\238\130\238\099\140alalalal\099\140\130\238\130\238\130\238\099\140al\165\148\099\140\099\140\099\140alalalalalal\099\140\099\140\099\140\099\140" --base color must be green R=0,G=255,B=0: "\224\131" overlay color must be pink R=255,G=0,B=255: "\031\252" spawnEggTexture="\014\000\000\000\015\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000\146&\146&\146&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\146&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\146&\000\000\000\000\000\000\000\000\000\000\000\000J\169\231\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\169J\169\224\131\224\131J\169J\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000J\169\031\252\031\252\031\252\224\131\224\131\031\252\231\156\000\000\000\000\000\000\000\000\000\000\000\000J\169\031\252\031\252\031\252\224\131\224\131\031\252\231\156\000\000\000\000\000\000\000\000\000\000J\169\224\131\031\252\031\252\224\131\224\131\224\131\224\131\224\131\231\156\000\000\000\000\000\000\000\000J\169\224\131\224\131\224\131\224\131\224\131\031\252\031\252\224\131\231\156\000\000\000\000\000\000J\169\224\131\224\131\031\252\031\252\224\131\224\131\031\252\031\252\224\131\224\131\231\156\000\000\000\000J\169\031\252\224\131\031\252\224\131\224\131\224\131\224\131\224\131\224\131\224\131\198\152\000\000\000\000J\169\031\252\224\131\224\131\224\131\031\252\224\131\224\131\224\131\224\131\031\252\165\148\000\000\000\000\000\000J\169\224\131\224\131\031\252\031\252\031\252\224\131\031\252\031\252\198\152\000\000\000\000\000\000\000\000J\169\224\131\224\131\031\252\031\252\031\252\224\131\031\252\031\252\198\152\000\000\000\000\000\000\000\000\000\000\231\156\231\156\224\131\224\131\224\131\224\131\198\152\198\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\231\156\198\152\198\152\198\152\000\000\000\000\000\000\000\000" colorCode={} colorCode["green"]="\224\131" colorCode["pink"]="\031\252" colorCode["red"]="\000\216" colorCode["turquoise"]="R\130" colorCode["dark green"]="\197\157" colorCode["light grey"]="Z\235" colorCode["rose"]="1\230" colorCode["brown"]="\197\164" colorCode["dark grey"]="\165\148" colorCode["grey"]="\016\194" function createSpawnEggTexture(base, over) local gsub=string.gsub local s1 = base=="green" and spawnEggTexture or gsub(spawnEggTexture,colorCode["green"],colorCode[base])--colorCode["green"],colorCode[base]) s1 = over=="pink" and s1 or gsub(s1,colorCode["pink"],colorCode[over]) return s1 end function createTexture(i) if i=="f" then IDTexture[41]=IDTexture[7] for i=101, 199 do IDTexture[i]=IDTexture[100] end for i=201, 299 do IDTexture[i]=IDTexture[200] end for i=1,8 do IDTexture[300+i]=image.copy(IDTexture[9],16,i*2) end for i=1,4 do IDTexture[310+i]=image.copy(IDTexture[18],16,i*4) end IDTexture[350]=IDTexture[51] return nil else local nextI = next(IDTexture,i) if not nextI then return "f" else IDTexture[nextI]=image.new(IDTexture[nextI]) return nextI end end end lavaStrip={} for i=0,15 do lavaStrip[i]={} end lavaStrip[0][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000C\254#\254d\254d\254C\254C\254\002\254\226\253\034\254d\254\132\254\002\254d\254i\255H\255C\254") lavaStrip[1][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\193\253\034\254\198\254C\254\225\253\193\253\193\253\193\253\132\254'\255\006\255\225\253\002\254\197\254\170\255d\254") lavaStrip[2][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\193\253C\254\165\254C\254\034\254\193\253\226\253\193\253\002\254(\255\170\255\225\253\226\253\132\254H\255\165\254") lavaStrip[3][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000#\254\002\254d\254#\254\193\253\161\253\225\253\161\253\161\253\034\254C\254\226\253\225\253d\254'\255\230\254") lavaStrip[4][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\230\254d\254\225\253\225\253\193\253\193\253d\254\197\254\193\253\129\253\193\253\165\254\006\255\002\254\225\253d\254") lavaStrip[5][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\197\254#\254`\253`\253\225\253d\254i\255\237\255\230\254\193\253\226\253\006\255(\255\225\253\129\253#\254") lavaStrip[6][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000d\254d\254\161\253\002\254\230\254(\255\235\255\237\255'\255\034\254\226\253\002\254\193\253`\253@\253\193\253") lavaStrip[7][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\226\253\002\254\002\254\165\254H\255\007\255\132\254\230\254d\254\161\253\161\253\193\253\161\253a\253`\253\129\253") lavaStrip[8][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\161\253\193\253\226\253C\254\197\254\034\254`\253a\253\129\253 \253`\253C\254d\254\034\254\193\253\161\253") lavaStrip[9][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\002\254\198\254d\254\129\253\226\253\193\253\002\254\129\253`\253 \253`\253\034\254\132\254#\254\193\253\193\253") lavaStrip[10][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\226\253\198\254d\254`\253\226\253\007\255H\255C\254`\253\161\253\193\253\161\253d\254\165\254\034\254\226\253") lavaStrip[11][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\225\253\193\253\161\253\129\253\129\253C\254d\254#\254\002\254i\255\170\255\034\254\193\253\193\253\034\254d\254") lavaStrip[12][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\002\254\193\253\193\253\226\253\034\254\193\253\193\253\193\253C\254\170\255(\255\225\253@\253\129\253\132\254\006\255") lavaStrip[13][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\197\254d\254\132\254i\255\138\255C\254#\254\226\253\226\253\226\253\129\253`\253@\253`\253\226\253\132\254") lavaStrip[14][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\197\254\230\254\236\255H\255\132\254\002\254C\254\193\253\002\254\002\254\161\253\193\253\225\253\193\253\193\253\225\253") lavaStrip[15][16]=image.new("\001\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\197\254\132\254\007\255\007\255\132\254C\254\002\254\193\253\226\253d\254C\254\034\254\165\254i\255\197\254C\254") for i=0,15 do for ii=4,15 do lavaStrip[i][ii]=image.copy(lavaStrip[i][16],1,ii) end end specialTexture={} specialTexture["Torch left"]=image.new("\005\000\000\000\013\000\000\000\000\000\000\000\010\000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127`\255 \254\255\127\255\127\255\127\242\255\255\255\255\127\255\127\135\189\135\189\196\160\255\127\255\127\135\189\196\160\255\127\255\127\201\201\005\173\196\160\255\127\255\127\136\193\196\160\255\127\255\127\135\189\228\168\196\160\255\127\255\127&\177\163\156\255\127\255\127\255\127\228\164\163\156\255\127\255\127\255\127\162\152\255\127\255\127\255\127\255\127") specialTexture["Torch right"]=image.new("\016\000\000\000\013\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\032\254\096\255alalalalalalalalalalalalalal\255\255\242\255alalalalalalalalalalalalalal\196\160\135\189\135\189alalalalalalalalalalalalalal\196\160\135\189alalalalalalalalalalalalalal\196\160\005\173\201\201alalalalalalalalalalalalalal\196\160\136\193alalalalalalalalalalalalalal\196\160\228\168\135\189alalalalalalalalalalalalalal\163\156\038\177alalalalalalalalalalalalalal\163\156\228\164alalalalalalalalalalalalalalal\162\152") specialTexture["Furnace burning"]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\231\156\198\152\198\152\198\152\198\152\165\148\165\148\165\148\132\144\231\156\231\156\198\152\165\148\132\144\198\152\198\152\231\156\173\181k\173\140\177\008\161J\169\206\185\206\185)\165\140\177\140\177\140\177J\169\008\161J\169\198\152\165\148J\169\239\189J\169\140\1771\1981\198\239\189\140\177J\169\016\194\239\189k\173\239\189J\169\198\152\165\148J\169k\173\173\181\173\181\132\144\198\152\198\152\132\144\165\148\132\144\008\161\173\1811\198\173\181\165\148\231\156\206\185\239\189)\165\198\152\000\128\000\128\000\128\000\128\000\128\000\128\198\152J\169\016\194\206\185\132\144\165\148k\173\239\189\165\148\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\148\210\173\181\231\156\132\144\198\152\140\177\239\189\165\148\000\128!\132!\132B\136B\136B\136B\136\000\128\148\210\016\194\140\177\132\144\165\148k\173k\173\132\144\206\185\214\218\181\214\181\214\181\214\148\210\148\210\173\181\181\214k\173J\169\231\156\165\148\008\161\239\189\016\194k\1731\1981\198R\202R\202R\2021\198)\165\206\185k\173\239\189\231\156)\1651\198\024\227{\239{\239\156\243\222\251\222\251\222\251\222\251\156\243{\239{\239\024\2271\198\231\156)\165\239\1899\231{\239\189\247\156\243\008\161\008\161\231\156\008\161\156\243\189\247Z\235\024\227\239\189\198\152)\165\181\214Z\235{\239\231\156\231\156\000\252\000\228\000\252\000\228\231\156\231\156{\239Z\235\148\210\198\1521\198\024\227\156\243\231\156\000\228\000\228\128\254\000\228\128\254\000\252\000\228\000\228\008\161\189\247\181\214\165\1481\198{\239\231\156\000\252\128\254\128\254\128\254\000\252\224\255\128\254\000\252\000\252\000\252\189\247\148\210\198\1521\198\156\243\231\156\128\254\224\255\224\255\224\255\128\254\128\254\224\255\224\255\128\254\128\254\189\247\181\214\165\148\016\194{\239\198\152\000\252\128\254\000\252\128\254\224\255\000\252\128\254\224\255\128\254\000\252\189\247s\206\198\152") specialTexture["Fire left"]=image.new("\009\000\000\000\016\000\000\000\000\000\000\000\018\000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\217\255\127\255\127\255\127\255\127\255\127\000\217\255\127\255\127\000\217\255\127\255\127\255\127\255\127\000\217\255\127\255\127\255\127\160\229!\234\255\127\255\127\255\127\000\217\000\217\255\127\255\127\160\229\255\127`\225`\225\192\229`\225\255\127\255\127\255\127!\234B\238\198\242b\238@\221`\225\000\217\128\225\000\217b\238b\238\198\242!\234!\234\128\225\160\225@\221\255\127b\238\180\255\180\255\144\251\000\217@\221\160\229 \221\255\127\180\255\255\255\180\255!\234\164\242\160\229\160\229\255\127\255\127\255\255\255\255\144\251!\234!\234\160\229\255\127\255\127\255\127\255\255\144\251\197\242\131\242!\234\255\127\255\127\255\127\255\127B\238\001\234\128\225\160\225\255\127\255\127\255\127\255\127\255\127`\225\001\234@\221\255\127\255\127\255\127\255\127\255\127\255\127\182\255@\221\255\127\255\127\255\127\255\127\255\127\255\127\255\127\198\242\198\242\255\127\255\127\255\127\255\127\255\127\255\127\255\127\182\255\001\234\255\127\255\127\255\127\255\127\255\127\255\127\255\127") specialTexture["Fire right"]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalal\000\217alalalalal\000\217alalalalalalalalalal\000\217alalalal\000\217alalalalalalalalal\000\217\000\217alalal\033\234\160\229alalalalalalalalalal\096\225\192\229\096\225\096\225al\160\229alalalalalalal\000\217\128\225\000\217\096\225\064\221\098\238\198\242\066\238\033\234alalalalalalalal\064\221\160\225\128\225\033\234\033\234\198\242\098\238\098\238alalalalalalalal\032\221\160\229\064\221\000\217\144\251\180\255\180\255\098\238alalalalalalalalal\160\229\160\229\164\242\033\234\180\255\255\255\180\255alalalalalalalalalal\160\229\033\234\033\234\144\251\255\255\255\255alalalalalalalalalalal\033\234\131\242\197\242\144\251\255\255alalalalalalalalalalalal\160\225\128\225\001\234\066\238alalalalalalalalalalalalal\064\221\001\234\096\225alalalalalalalalalalalalalal\064\221\182\255alalalalalalalalalalalalalal\198\242\198\242alalalalalalalalalalalalalal\001\234\182\255") specialTexture["Fire both"]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalal\000\217alalalalal\000\217alal\000\217alalalalal\000\217\000\217alalalal\000\217alalalal\000\217alalalal\000\217\160\229\033\234alalal\000\217\000\217alal\000\217\000\217alalal\033\234\160\229\160\229al\096\225\096\225\192\229\096\225alalalal\096\225\192\229\096\225\096\225al\160\229\033\234\066\238\198\242\098\238\064\221\096\225\000\217\128\225\000\217\000\217\096\225\064\221\098\238\198\242\066\238\033\234\098\238\098\238\198\242\033\234\033\234\128\225\160\225\064\221\064\221\160\225\128\225\033\234\033\234\198\242\098\238\098\238\098\238\180\255\180\255\144\251\000\217\064\221\160\229\032\221\032\221\160\229\064\221\000\217\144\251\180\255\180\255\098\238\180\255\255\255\180\255\033\234\164\242\160\229\160\229alal\160\229\160\229\164\242\033\234\180\255\255\255\180\255\255\255\255\255\144\251\033\234\033\234\160\229alalalal\160\229\033\234\033\234\144\251\255\255\255\255\255\255\144\251\197\242\131\242\033\234alalalalalal\033\234\131\242\197\242\144\251\255\255\066\238\001\234\128\225\160\225alalalalalalalal\160\225\128\225\001\234\066\238\096\225\001\234\064\221alalalalalalalalalal\064\221\001\234\096\225\182\255\064\221alalalalalalalalalalalal\064\221\182\255\198\242\198\242alalalalalalalalalalalal\198\242\198\242\182\255\001\234alalalalalalalalalalalal\001\234\182\255") specialTexture["Fire top"]=image.new("\016\000\000\000\006\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\146\251o\251o\251b\238)\247\180\255\255\255\180\255M\251!\234\255\255\182\255\144\251\198\242\182\255\001\234b\238\146\251n\251*\247)\247\255\255\180\255\180\255L\251\180\255\180\255B\238`\225\001\234@\221\255\127\000\217B\238\131\238!\234\198\242b\238b\238\198\242\180\255\180\255\255\255\144\251\197\242\131\242\160\225\255\127\255\127\000\217`\225!\234\160\229!\234B\238b\238\198\242\180\255\144\251!\234\164\242!\234\160\229\255\127\255\127\255\127\000\217\255\127\255\127\255\127\255\127`\225\192\229@\221`\225\128\225\160\225\160\229 \221\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\217\000\217\255\127\255\127`\221\000\217\255\127\255\127") specialTexture["Unknown block"] = image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\214\218R\202R\202R\206R\202R\202s\206r\206R\202R\202R\202R\202R\202R\202R\202\140\177R\202\140\177\140\177\141\177J\169\008\161\008\161\008\161\008\161\008\161\008\161J\169\140\177\140\177\140\177\231\156R\202l\173\140\177J\169\008\161@\254@\254@\254@\254@\254@\254\008\161J\169\140\177\141\177\231\156R\202\140\173l\173\008\161@\254@\254@\254@\254@\254@\254@\254@\254\008\161\140\177\140\177\231\156R\202\140\177\140\177\008\161@\254@\254\008\161\008\161\008\161\008\161@\254@\254\008\161\140\177\140\177\008\161R\202\140\177\172\181J\169\008\161\008\161J\169\140\177l\173\008\161@\254@\254\008\161\140\177\140\181\008\161R\202\140\177\172\177\140\177\140\177\140\177\140\177J\169\008\161\008\161@\254@\254\008\161\140\177\140\177\008\165R\202\140\177\140\177\172\177\140\177\140\177J\169\008\161@\254@\254@\254@\254\008\161\140\177\172\177\008\161R\202\140\177\140\177\140\177\140\177\140\173\008\161@\254@\254@\254@\254\008\161J\169\173\181l\177\008\161R\202\140\177\140\177\140\177\141\177\140\177\008\161@\254@\254\008\161\008\161J\169\140\177l\177\173\177\008\161R\202\140\177\140\177\140\177\140\177\140\177\008\161@\254@\254\008\161\140\177\140\177\140\177\140\177\140\173\007\161R\202\140\177\172\181\140\177\140\177\140\177J\169\008\161\008\161J\169\141\181\172\177\140\177\140\177\140\177\008\161r\202\140\177\140\177\140\177\140\177\140\177\008\161@\254@\254\008\161\140\177\140\177\140\177\140\177\140\177\008\161R\202\139\177\140\181\140\177\140\177\140\177\008\161@\254@\254\008\161\140\177\141\181\140\177\172\181\140\177\232\160R\202\140\177\140\177k\177\140\177\140\177J\169\008\161\008\161J\169\140\177\140\177\140\177\172\181\140\177\008\161\140\177\007\157\231\160(\161\008\161\008\161\231\156\231\160\231\160\008\161\008\161\008\161\231\156\008\161\008\161\165\148") objTexture={} objTexture["TNT bright"]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000\019\255\242\254\210\254\210\254\019\255\242\254\210\254\210\254\019\255\242\254\210\254\210\254\019\255\242\254\210\254\210\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\239\189\239\189\239\189\255\255\239\189\255\255\255\255\239\189\255\255\239\189\239\189\239\189\255\255\255\255\255\255\255\255\255\255\239\189\255\255\255\255\239\189\239\189\255\255\239\189\255\255\255\255\239\189\255\255\255\255\255\255\255\255\255\255\255\255\239\189\255\255\255\255\239\189\255\255\239\189\239\189\255\255\255\255\239\189\255\255\255\255\255\255\255\255\255\255\255\255\239\189\255\255\255\255\239\189\255\255\255\255\239\189\255\255\255\255\239\189\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\210\254\210\254\177\254\145\250\210\254\210\254\177\254\145\250\210\254\210\254\177\254\145\250\210\254\210\254\177\254\145\250\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\019\255\242\254\210\254\178\254\242\254\210\254\210\254\178\254\242\254\210\254\210\254\178\254\242\254\210\254\210\254\178\254\242\254\210\254\210\254\178\254") objTexture["particle"]={} objTexture["particle"][1]=image.new("\001\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\016\000\001\000\255\255") objTexture["particle"][2]=image.new("\002\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\016\000\001\000\255\255\255\127\255\127\255\255") objTexture["particle"][3]=image.new("\003\000\000\000\004\000\000\000\000\000\000\000\006\000\000\000\016\000\001\000\255\255\255\127\255\127\255\127\255\255\255\255\255\127\255\127\255\127\255\127\255\255\255\127") objTexture["particle"][4]=image.new("\003\000\000\000\005\000\000\000\000\000\000\000\006\000\000\000\016\000\001\000\255\127\255\127\255\255\255\255\255\127\255\127\255\127\255\255\255\255\255\255\255\255\255\255\255\127\255\255\255\127") objTexture["particle"][5]=image.new("\004\000\000\000\005\000\000\000\000\000\000\000\008\000\000\000\016\000\001\000\255\255\255\127\255\255\255\127\255\255\255\255\255\127\255\127\255\127\255\255\255\255\255\127\255\255\255\255\255\255\255\255\255\127\255\255\255\127\255\127") objTexture["particle"][6]=image.new("\005\000\000\000\005\000\000\000\000\000\000\000\010\000\000\000\016\000\001\000\255\127\255\255\255\127\255\255\255\127\255\127\255\255\255\255\255\127\255\255\255\255\255\127\255\255\255\255\255\127\255\127\255\255\255\255\255\255\255\255\255\255\255\127\255\255\255\127\255\127") objTexture["particle"][7]=image.new("\007\000\000\000\007\000\000\000\000\000\000\000\014\000\000\000\016\000\001\000\255\127\255\127\255\127\255\255\255\127\255\127\255\127\255\127\255\255\255\255\255\127\255\255\255\127\255\127\255\127\255\127\255\255\255\255\255\127\255\255\255\255\255\255\255\255\255\127\255\255\255\255\255\127\255\127\255\127\255\127\255\255\255\255\255\255\255\255\255\127\255\127\255\255\255\127\255\255\255\127\255\255\255\127\255\127\255\127\255\255\255\127\255\127\255\127\255\127") objTexture["particle"][8]=image.new("\008\000\000\000\008\000\000\000\000\000\000\000\016\000\000\000\016\000\001\000\255\127\255\127\255\127\255\255\255\127\255\127\255\127\255\127\255\127\255\255\255\127\255\127\255\255\255\255\255\255\255\127\255\127\255\127\255\255\255\255\255\127\255\255\255\127\255\127\255\255\255\127\255\127\255\255\255\255\255\127\255\255\255\255\255\127\255\255\255\255\255\127\255\255\255\255\255\127\255\127\255\127\255\255\255\127\255\255\255\255\255\255\255\255\255\127\255\127\255\127\255\255\255\127\255\255\255\127\255\255\255\255\255\127\255\127\255\255\255\255\255\127\255\255\255\127\255\127") objTexture["bobber"]=image.new("\004\000\000\000\007\000\000\000\000\000\000\000\008\000\000\000\016\000\001\000\000\000Z\235Z\235R\202\000\000\165\232\165\232B\196\000\000Z\235R\202R\202\000\000\000\000\000\128\000\000\000\000\000\000\000\128\000\000\000\128\000\000\000\128\000\000\000\000\000\128\000\128\000\000") objTexture["Fishing Rod"]={} objTexture["Fishing Rod"][1]=image.new("\012\000\000\000\014\000\000\000\000\000\000\000\024\000\000\000\016\000\001\000\008\161\008\161alalalalalalalalalal\097\148\194\164\008\161alalalalalalalalal\097\148\132\197\194\164\008\161alalalalalalalalal\097\148\132\197\194\164\008\161alalalalalalalalal\097\148\035\181\194\164\008\161alalalalalalalalal\097\148\132\197\194\164\008\161alalalalalalalalal\097\148\035\181\194\164\008\161alalalalalalalalal\097\148\132\197\194\164\008\161alalalalalalalalal\097\148\035\181\194\164\008\161alalalalalalalalal\097\148\132\197\194\164alalalalalalalal\198\152\082\202\082\202\035\181\194\164alalalalalalal\198\152\082\202\082\202\097\148\132\197\194\164alalalalalalal\198\152\198\152al\097\148\132\197alalalalalalalalalalal\097\148") objTexture["Fishing Rod"][2]=image.new("\012\000\000\000\014\000\000\000\000\000\000\000\024\000\000\000\016\000\001\000alalalalalalalalalal\008\161\008\161alalalalalalalalal\008\161\194\164\097\148alalalalalalalal\008\161\194\164\132\197\097\148alalalalalalal\008\161\194\164\132\197\097\148alalalalalalal\008\161\194\164\035\181\097\148alalalalalalal\008\161\194\164\132\197\097\148alalalalalalal\008\161\194\164\035\181\097\148alalalalalalal\008\161\194\164\132\197\097\148alalalalalalal\008\161\194\164\035\181\097\148alalalalalalalal\194\164\132\197\097\148alalalalalalalal\194\164\035\181\082\202\082\202\198\152alalalalalal\194\164\132\197\097\148\082\202\082\202\198\152alalalalalal\132\197\097\148al\198\152\198\152alalalalalalal\097\148alalalalalalalalalalal") objTexture["fireball"]=image.new("\012\000\000\000\012\000\000\000\000\000\000\000\024\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128c\140-\202\231\156c\140\000\128\000\128\000\000\000\000\000\000\000\128c\140-\202\138\181\231\156\163\246\161\209@\140\000\128\000\128\000\000\000\000\000\128\138\181\231\156\231\156-\202\160\168\192\208@\140&\173\000\128\000\000\000\128H\173\231\156\161\209\160\168\231\156\160\168\160\168\160\168c\140\000\128\000\128\000\128-\202\163\246\192\208\192\208\160\168\231\156-\202\160\168@\140\229\160\000\128\000\128\138\181\160\168\160\168\160\168\160\168\163\246\161\225\192\204@\140\000\128\000\128\000\128c\140-\202\231\156\231\156Q\247\161\225\192\208`\148@\140\000\128\000\128\000\000\000\128`\148`\148\010\230\010\230\192\208`\148@\140\229\160\000\128\000\000\000\000\000\128\000\128`\148@\140&\173@\140@\140\000\128\000\128\000\128\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\000\000\000\000\000\000\000") mobTexture={} mobTexture["sheep"]={} mobTexture["sheep"][1]=image.new("\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\189\247\189\247\189\247\189\247\189\247\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\156\243O\218{\239{\239\156\243\222\251\189\247\189\247\189\247\189\247\189\247\255\255\222\251\222\251\189\247\189\247\222\251.\214{\239\156\243\189\247\255\255\156\243\156\243\255\255\156\243\189\247\222\251\189\247\189\247\189\247\156\243\189\247.\214{\239{\239\156\243\156\243\156\243\189\247\189\247\255\255\222\251\156\243\156\243\189\247{\239\189\247\156\243\156\243{\239\156\243\156\243\189\247\222\251\189\247\255\255\255\255\255\255{\239\156\243\156\243{\239\189\247\156\243\189\247\156\243\156\243\189\247\222\251\222\251\189\247\189\247\255\255\255\255\222\251\222\251\156\243\189\247\189\247\0\0\156\243\156\243{\239{\239\189\247\156\243\222\251\255\255\222\251\222\251\189\247\222\251\222\251\255\255\255\255\0\0\0\0\156\243\156\243\156\243\156\243\222\251\189\247\222\251\189\247\156\243\189\247\255\255\255\255\255\255\255\255\0\0\0\0{\239{\239\156\243\189\247\189\247\189\247\189\247\156\243\255\255\222\251\255\255\222\251\255\255\222\251\0\0\0\0{\239{\239{\239\156\243\189\247\156\243\156\243{\239\189\247\222\251\189\247\189\247\255\255\189\247\0\0\0\0\0\0p\218O\218p\222p\222\0\0\0\0\0\0\0\0\0\0p\218O\218p\222p\222\0\0\0\0\0\0.\214O\214.\214O\218\0\0\0\0\0\0\0\0\0\0.\214O\214.\214O\218\0\0\0\0\0\0.\214N\214.\214.\214\0\0\0\0\0\0\0\0\0\0.\214N\214.\214.\214\0\0\0\0\0\0.\214O\218O\218P\218\0\0\0\0\0\0\0\0\0\0.\214O\218O\218P\218\0\0\0\0\0\0(\169(\169(\169(\169\0\0\0\0\0\0\0\0\0\0(\169(\169(\169(\169") mobTexture["sheep"][2]=image.new("\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\189\247\189\247\189\247\189\247\189\247\255\255\0\0\189\247\189\247\222\251\222\251\255\255\189\247\189\247\189\247\189\247\189\247\222\251\156\243{\239{\239O\218\156\243\156\243\189\247\189\247\189\247\222\251\189\247\156\243\255\255\156\243\156\243\255\255\189\247\156\243{\239.\214\222\251\189\247{\239\189\247\156\243\156\243\222\251\255\255\189\247\189\247\156\243\156\243\156\243{\239{\239.\214\189\247\189\247{\239\156\243\156\243{\239\255\255\255\255\255\255\189\247\222\251\189\247\156\243\156\243{\239\156\243\156\243\189\247\189\247\156\243\222\251\222\251\255\255\255\255\189\247\189\247\222\251\222\251\189\247\156\243\156\243\189\247\156\243\255\255\255\255\222\251\222\251\189\247\222\251\222\251\255\255\222\251\156\243\189\247{\239{\239\156\243\156\243\0\0\255\255\255\255\255\255\255\255\189\247\156\243\189\247\222\251\189\247\222\251\156\243\156\243\156\243\156\243\0\0\0\0\222\251\255\255\222\251\255\255\222\251\255\255\156\243\189\247\189\247\189\247\189\247\156\243{\239{\239\0\0\0\0\189\247\255\255\189\247\189\247\222\251\189\247{\239\156\243\156\243\189\247\156\243{\239{\239{\239\0\0\0\0p\222p\222O\218p\218\0\0\0\0\0\0\0\0\0\0p\222p\222O\218p\218\0\0\0\0\0\0O\218.\214O\214.\214\0\0\0\0\0\0\0\0\0\0O\218.\214O\214.\214\0\0\0\0\0\0.\214.\214N\214.\214\0\0\0\0\0\0\0\0\0\0.\214.\214N\214.\214\0\0\0\0\0\0P\218O\218O\218.\214\0\0\0\0\0\0\0\0\0\0P\218O\218O\218.\214\0\0\0\0\0\0(\169(\169(\169(\169\0\0\0\0\0\0\0\0\0\0(\169(\169(\169(\169\0\0\0\0\0\0") mobTexture["pig"]={} mobTexture["pig"][1]=image.new("\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\148\246\148\246\180\246\148\246s\246\180\246\148\246\148\246\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\181\246r\242Q\2421\238\16\238s\246s\246s\246\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\213\246\148\246\17\226\15\226R\246\16\238\16\242S\246\0\0\0\0\0\0\0\0\0\0\0\0\0\0t\246\148\246\17\226)\201\239\221r\246s\246s\246\147\246\239\241\16\242\16\242\15\242\240\241\16\246\240\241\147\246\148\246\240\225)\201\239\225R\242R\246R\246R\246\239\241\238\241\15\242\239\237\239\2410\242\239\237t\246\181\246\180\246)\197\15\226R\246R\246R\246R\246\140\237\172\233\172\237\205\237\206\237\141\233\173\233\0\0Q\2421\238\148\246\147\246s\246\239\237R\246R\242\206\241\206\241\15\242\16\242\16\2421\246\16\242\0\0t\242\148\246\147\246s\246s\246R\246R\2461\242k\233k\233\140\233\173\237\173\2330\242\16\242\0\0\0\0\239\241\206\241\206\241\173\241\205\237\205\241\140\241\174\241\239\241\238\241\15\2420\246\16\246\16\246\0\0\0\0\16\242\174\241\238\241\238\241\205\241J\233)\229j\233k\233k\233\172\237\141\233\173\233\173\237\0\0\0\0\205\237\206\241\15\242\206\241\237\241\140\241\173\241\205\241\173\237\206\241\207\241\239\241\239\241\16\242\0\0\0\0\239\241\16\242Q\2421\242\0\0\0\0\0\0\0\0\0\0\0\0\239\241\16\242Q\2421\242\0\0\0\0P\242\16\242\16\242\16\242\0\0\0\0\0\0\0\0\0\0\0\0P\242\16\242\16\242\16\242\0\0\0\0\239\241\206\237\239\237\239\241\0\0\0\0\0\0\0\0\0\0\0\0\239\241\206\237\239\237\239\241\0\0\0\0\239\241\239\241\239\241\239\241\0\0\0\0\0\0\0\0\0\0\0\0\239\241\239\241\239\241\239\241") mobTexture["pig"][2]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\148\246\148\246\180\246s\246\148\250\180\246\148\246\180\246\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127s\246s\246s\246\016\2421\242Q\242s\242\181\250\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127S\246\016\242\016\242R\246\015\226\017\226\148\246\213\250\255\127\240\241\016\246\240\245\015\246\016\242\016\242\239\241\147\246\147\246s\246r\246\239\221)\201\017\226\148\250\148\246\239\2410\246\239\245\239\237\015\246\238\241\239\241R\246R\246R\246R\246\239\225)\201\240\225\180\250\147\246\173\237\140\233\206\237\205\237\140\237\140\237\140\237R\246R\246R\246R\246\015\226)\197\180\246\181\250\148\246\016\2461\246\016\246\016\246\015\246\206\241\206\241R\246r\246\239\237s\246\147\246\148\2461\242Q\242\255\127\016\2420\246\173\237\172\237\140\233k\233k\2331\246R\246R\246s\246s\246\147\246\148\246t\246\255\127\016\246\016\2460\246\015\242\238\241\239\241\174\241\140\241\205\241\205\241\173\241\206\241\206\241\239\245\255\127\255\127\173\237\173\237\140\233\172\237k\233k\233j\233)\233J\233\205\241\238\241\238\245\174\241\016\246\255\127\255\127\016\246\239\241\239\241\207\245\206\245\173\241\205\241\172\241\140\241\237\241\206\241\015\246\206\241\205\237\255\127\255\1271\246Q\242\016\246\239\245\255\127\255\127\255\127\255\127\255\127\255\1271\246Q\242\016\246\239\245\255\127\255\127\016\242\016\246\016\242P\246\255\127\255\127\255\127\255\127\255\127\255\127\016\242\016\246\016\242P\246\255\127\255\127\239\241\239\241\206\237\239\241\255\127\255\127\255\127\255\127\255\127\255\127\239\241\239\241\206\237\239\241\255\127\255\127\239\245\239\241\239\241\239\245\255\127\255\127\255\127\255\127\255\127\255\127\239\245\239\241\239\241\239\245\255\127\255\127") mobTexture["cow"]={} mobTexture["cow"][1]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\196\156\196\156\148\210\148\210\196\156\196\156\196\156\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\196\156R\230\173\201\016\218\163\152\163\152\196\156\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\163\152R\234R\234\163\152\196\156\196\156\196\160\196\156\196\156\196\156\196\156\196\156\196\156\196\156\196\160\196\156\196\156R\234\016\194\214\218\016\194\148\210\148\210\148\210\016\194\016\194\214\218\016\194\148\210\148\210\196\156\196\156\163\152\163\152\148\210\016\194\148\210\148\210\148\210\214\218\214\218\016\194\016\194\148\210\214\218\163\152\163\152\163\152\163\152\163\152\016\194\016\194\016\194\016\194\016\194\148\210\148\210\148\210\148\210\148\210\214\218\196\156\196\156\196\156\163\152\163\152\016\194\148\210\148\210\214\218\016\194\214\218\016\194\016\194\016\194\016\194\163\152\196\156\163\152\163\152\196\156\196\156\148\210\016\194\148\210\148\210\148\210\016\194\148\210\148\210\196\156\196\156\196\156\196\156\196\156\196\156\255\127\255\127\196\156\163\152\196\156\196\160\163\152\163\152\148\210\148\210\016\194\148\210\196\160\163\152\163\152\196\156\255\127\255\127\163\152\196\160\163\152\196\156\196\160\148\210\016\194\016\194\016\194\148\210\214\218\016\194\196\156\196\156\255\127\255\127\196\156\196\160\196\156\148\210\255\127\255\127\255\127\255\127\255\127\255\127\196\156\196\160\196\156\148\210\255\127\255\127\196\156\196\156\196\156\196\160\255\127\255\127\255\127\255\127\255\127\255\127\196\156\196\156\196\156\196\160\255\127\255\127\196\160\196\156\163\152\196\156\255\127\255\127\255\127\255\127\255\127\255\127\196\160\196\156\163\152\196\156\255\127\255\127\196\156\196\156\163\152\196\156\255\127\255\127\255\127\255\127\255\127\255\127\196\156\196\156\163\152\196\156\255\127\255\127\163\152\163\152\163\152\163\152\255\127\255\127\255\127\255\127\255\127\255\127\163\152\163\152\163\152\163\152\255\127\255\127c\140c\140c\140c\140\255\127\255\127\255\127\255\127\255\127\255\127c\140c\140c\140c\140") mobTexture["cow"][2]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\196\156\196\156\196\156\148\210\148\210\196\156\196\156\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\196\156\163\152\163\152\016\218\173\201R\230\196\156\196\156\196\160\196\156\196\156\196\156\196\156\196\156\196\156\196\156\196\160\196\156\196\156\163\152R\234R\234\163\152\196\156\196\156\148\210\148\210\016\194\214\218\016\194\016\194\148\210\148\210\148\210\016\194\214\218\016\194R\234\196\156\163\152\163\152\163\152\214\218\148\210\016\194\016\194\214\218\214\218\148\210\148\210\148\210\016\194\148\210\163\152\163\152\196\156\196\156\196\156\214\218\148\210\148\210\148\210\148\210\148\210\016\194\016\194\016\194\016\194\016\194\163\152\163\152\163\152\163\152\196\156\163\152\016\194\016\194\016\194\016\194\214\218\016\194\214\218\148\210\148\210\016\194\163\152\163\152\196\156\196\156\196\156\196\156\196\156\196\156\148\210\148\210\016\194\148\210\148\210\148\210\016\194\148\210\196\156\196\156\196\156\163\152\163\152\196\160\148\210\016\194\148\210\148\210\163\152\163\152\196\160\196\156\163\152\196\156\255\127\255\127\196\156\196\156\016\194\214\218\148\210\016\194\016\194\016\194\148\210\196\160\196\156\163\152\196\160\163\152\255\127\255\127\148\210\196\156\196\160\196\156\255\127\255\127\255\127\255\127\255\127\255\127\148\210\196\156\196\160\196\156\255\127\255\127\196\160\196\156\196\156\196\156\255\127\255\127\255\127\255\127\255\127\255\127\196\160\196\156\196\156\196\156\255\127\255\127\196\156\163\152\196\156\196\160\255\127\255\127\255\127\255\127\255\127\255\127\196\156\163\152\196\156\196\160\255\127\255\127\196\156\163\152\196\156\196\156\255\127\255\127\255\127\255\127\255\127\255\127\196\156\163\152\196\156\196\156\255\127\255\127\163\152\163\152\163\152\163\152\255\127\255\127\255\127\255\127\255\127\255\127\163\152\163\152\163\152\163\152\255\127\255\127c\140c\140c\140c\140\255\127\255\127\255\127\255\127\255\127\255\127c\140c\140c\140c\140\255\127\255\127") mobTexture["chicken"]={} mobTexture["chicken"][1]=image.new("\13\0\0\0\16\0\0\0\0\0\0\0\26\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\239Z\235{\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\235\24\227Z\235\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0H\222H\222\24\227{\239\24\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\198\201\198\201{\239Z\235{\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\252Z\235\24\227Z\235Z\235{\239Z\235{\239Z\235{\239Z\235\0\0\0\0\0\252\24\227{\239\24\227\24\227Z\235\24\227Z\235\24\227Z\235\24\227\0\0\0\0\0\0\0\0\0\0\24\227{\239\24\227{\239\24\227{\239\24\227{\239\0\0\0\0\0\0\0\0\0\0{\239Z\235{\239Z\235{\239Z\235{\239Z\235\0\0\0\0\0\0\0\0\0\0Z\235\24\227Z\235\24\227Z\235\24\227Z\235\24\227\0\0\0\0\0\0\0\0\0\0\24\227{\239\24\227{\239\24\227{\239\24\227{\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239-\239-\239\0\0\0\0\0\0") mobTexture["chicken"][2]=image.new("\15\0\0\0\16\0\0\0\0\0\0\0\30\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\239Z\235{\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\235\24\227Z\235\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\227{\239\24\227H\222H\222\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\239Z\235{\239\198\201\198\201\0\0\0\0\0\0Z\235{\239Z\235{\239Z\235{\239Z\235Z\235\24\227Z\235\0\252\0\0\0\0\0\0\0\0\24\227Z\235\24\227Z\235\24\227Z\235\24\227\24\227{\239\24\227\0\252\0\0\0\0\0\0\0\0{\239\24\227{\239\24\227{\239\24\227{\239\24\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0Z\235{\239Z\235{\239Z\235{\239Z\235{\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\227Z\235\24\227Z\235\24\227Z\235\24\227Z\235\0\0\0\0\0\0\0\0\0\0\0\0\0\0{\239\24\227{\239\24\227{\239\24\227{\239\24\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0-\239-\239-\239\0\0\0\0\0\0\0\0\0\0\0\0") mobTexture["zombie"]={} mobTexture["zombie"][1]=image.new("\14\0\0\0 \0\0\0\0\0\0\0\28\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\199\165\199\165\231\165\166\161\134\157\134\157\166\157\166\157\0\0\0\0\0\0\0\0\0\0\0\0\231\165\166\161\166\161\167\165\134\157\134\157\166\157\166\157\0\0\0\0\0\0\0\0\0\0\0\0\166\161f\157\166\157\167\161\166\161\134\157\134\161\167\165\0\0\0\0\0\0\0\0\0\0\0\0\200\165\167\165\134\157\166\157\167\165\166\165\166\165\166\157\0\0\0\0\0\0\0\0\0\0\0\0\8\170\231\165\165\161e\157\134\161\166\157\166\157\166\157\0\0\0\0\0\0\0\0\0\0\0\0\165\157\198\165\165\157\167\165\134\161\166\165\166\157\166\157\0\0\0\0\0\0\0\0\0\0\0\0d\157\165\157\231\165\232\169$\153\166\165\166\157\167\165\0\0\0\0\0\0\0\0\0\0\0\0d\157\166\161\198\165\231\165\165\157\231\165\165\157\165\157\198\165\198\165\198\165\198\165\198\165\166\161\166\161\166\161\239\129\239\129\239\129\239\129\0\0\0\0\198\165\166\161\166\161\166\161\198\165\198\165\198\165\198\165\173\129\173\129\173\129\239\129\0\0\0\0\198\165\198\165\198\165\198\165\198\165\198\165\198\165\198\165\173\129\173\129\173\129\239\129\0\0\0\0\198\165\198\165\198\165\166\161\166\161\166\161\198\165\198\165\239\129\239\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0k\129k\129k\129\173\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\173\129k\129k\129k\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\173\129k\129k\129\173\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\173\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\173\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\239\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\139\148\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\8\161\8\161\0\0\0\0") mobTexture["zombie"][2]=image.new("\16\0\0\0 \0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0\0\0\166\157\166\157\134\157\134\157\166\161\231\165\199\165\199\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\157\166\157\134\157\134\157\167\165\166\161\166\161\231\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\167\165\134\161\134\157\166\161\167\161\166\157f\157\166\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\157\166\165\166\165\167\165\166\157\134\157\167\165\200\165\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\157\166\157\166\157\134\161e\157\165\161\231\165\8\170\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\166\157\166\157\166\165\134\161\167\165\165\157\198\165\165\157\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\167\165\166\157\166\165$\153\232\169\231\165\165\157d\157\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\165\157\165\157\231\165\165\157\231\165\198\165\166\161d\157\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\239\129\239\129\239\129\166\161\166\161\166\161\198\165\198\165\198\165\198\165\198\165\0\0\0\0\0\0\0\0\239\129\173\129\173\129\173\129\198\165\198\165\198\165\198\165\166\161\166\161\166\161\198\165\0\0\0\0\0\0\0\0\239\129\173\129\173\129\173\129\198\165\198\165\198\165\198\165\198\165\198\165\198\165\198\165\0\0\0\0\0\0\0\0\239\129\173\129\239\129\239\129\198\165\198\165\166\161\166\161\166\161\198\165\198\165\198\165\0\0\0\0\0\0\0\0\173\129k\129k\129k\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0k\129k\129k\129\173\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\173\129k\129k\129\173\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\173\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\173\129\173\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\239\129\173\129\239\129\239\129\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\139\148\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\139\148\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\139\148\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\152\174\152\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\174\152\174\152\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\8\161\8\161\8\161\8\161\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") mobTexture["skeleton"]={} mobTexture["skeleton"][1]=image.new("\015\000\000\000\032\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalal\148\210\148\210\148\210\082\202\049\198\049\198\082\202\082\202alalalal\194\164\097\148al\181\214\115\206\082\202\115\206\049\198\049\198\082\202\082\202alalal\194\164\035\181\097\148al\082\202\049\198\082\202\115\206\082\202\049\198\082\202\115\206alal\194\164\035\181\097\148\097\148al\148\210\115\206\049\198\082\202\115\206\115\206\115\206\082\202alal\194\164\097\148\097\148\008\161al\214\218\148\210\082\202\049\198\082\202\082\202\082\202\082\202al\194\164\035\181\097\148al\008\161al\082\202\148\210\082\202\115\206\082\202\115\206\082\202\082\202al\132\197\035\181\097\148al\008\161al\016\194\082\202\148\210\181\214\239\189\115\206\082\202\115\206\194\164\194\164\097\148alal\008\161al\016\194\115\206\181\214\181\214\181\214\181\214\148\210\082\202\194\164\173\181\173\181alal\008\161alalal\239\189\239\189\239\189\239\189alal\194\164\082\202\082\202\115\206\148\210\115\206\115\206\115\206\115\206\049\198\115\206\115\206\115\206alal\194\164\082\202\082\202\115\206\115\206\082\202\049\198\115\206\148\210\148\210\148\210\049\198\115\206alal\194\164\173\181\173\181alal\008\161alalalalalal\049\198alal\194\164\194\164\097\148alal\008\161alalal\239\189\239\189\239\189\239\189alalal\132\197\035\181\097\148al\008\161alalalalalal\115\206alalal\194\164\035\181\097\148al\008\161alalalalalal\115\206alalalal\194\164\097\148\097\148\008\161alalalalalal\115\206alalalal\194\164\035\181\097\148\097\148alalalalalal\148\210alalalalal\194\164\035\181\097\148alalalalalal\115\206alalalalalal\194\164\097\148alalal\115\206\148\210\148\210\148\210alalalalalalalalalalal\082\202\181\214\115\206\082\202alalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalal\115\206\049\198alalalalalalalalalalalalal\115\206\148\210alalalalalalalalalalalalal\049\198\148\210alalalalalalalalalalalalal\115\206\148\210alalalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalal\115\206\049\198alalalalalalalalalalalalal\115\206\082\202alalalalalalalalalalalalal\148\210\115\206alalalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalal\082\202\082\202alalalalalalalalalalalalal\082\202\082\202alalal") mobTexture["skeleton"][2]=image.new("\016\000\000\000\032\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000al\082\202\082\202\049\198\049\198\082\202\148\210\148\210\148\210alalalalalalalal\082\202\082\202\049\198\049\198\115\206\082\202\115\206\181\214al\097\148\194\164alalalalal\115\206\082\202\049\198\082\202\115\206\082\202\049\198\082\202al\097\148\035\181\194\164alalalal\082\202\115\206\115\206\115\206\082\202\049\198\115\206\148\210al\097\148\097\148\035\181\194\164alalal\082\202\082\202\082\202\082\202\049\198\082\202\148\210\214\218al\008\161\097\148\097\148\194\164alalal\082\202\082\202\115\206\082\202\115\206\082\202\148\210\082\202al\008\161al\097\148\035\181\194\164alal\115\206\082\202\115\206\239\189\181\214\148\210\082\202\016\194al\008\161al\097\148\035\181\132\197alal\082\202\148\210\181\214\181\214\181\214\181\214\115\206\016\194al\008\161alal\097\148\194\164\194\164alalal\239\189\239\189\239\189\239\189alalal\008\161alal\173\181\173\181\194\164alalal\115\206\115\206\115\206\049\198\115\206\115\206\115\206\115\206\148\210\115\206\082\202\082\202\194\164alalal\115\206\049\198\148\210\148\210\148\210\115\206\049\198\082\202\115\206\115\206\082\202\082\202\194\164alalal\049\198alalalalalal\008\161alal\173\181\173\181\194\164alalal\239\189\239\189\239\189\239\189alalal\008\161alal\097\148\194\164\194\164alalal\115\206alalalalalal\008\161al\097\148\035\181\132\197alalalal\115\206alalalalalal\008\161al\097\148\035\181\194\164alalalal\115\206alalalalalal\008\161\097\148\097\148\194\164alalalalal\148\210alalalalalal\097\148\097\148\035\181\194\164alalalalal\115\206alalalalalal\097\148\035\181\194\164alalalalalal\148\210\148\210\148\210\115\206alalal\097\148\194\164alalalalalalal\082\202\115\206\181\214\082\202alalalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalalal\049\198\115\206alalalalalalalalalalalalalal\148\210\115\206alalalalalalalalalalalalalal\148\210\049\198alalalalalalalalalalalalalal\148\210\115\206alalalalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalalal\049\198\115\206alalalalalalalalalalalalalal\082\202\115\206alalalalalalalalalalalalalal\115\206\148\210alalalalalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalalal\082\202\082\202alalalalalalalalalalalalalal\082\202\082\202alalalalalalalalalal") mobTexture["creeper"]={} mobTexture["creeper"][1]=image.new("\014\000\000\000\032\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\051\211\161\138\200\166\019\207\090\235\110\195\045\191\073\166alalalalalal\068\150\011\175\198\162\044\183\073\166\107\187\234\178\090\235alalalalalal\006\163\066\141\102\157\081\203\106\170\035\141\102\157\123\239alalalalalal\039\167\035\141\000\128\042\179\199\162\000\128\226\136\044\191alalalalalal\080\199\202\178\081\203\034\141\034\141\088\227\040\166\073\175alalalalalal\083\211\073\170\102\157\000\128\000\128\067\141\074\179\087\223alalalalalal\151\227\140\178\000\128\000\128\000\128\000\128\234\174\105\170alalalalalal\074\179\110\195\226\136\080\203\085\215\034\141\038\158\042\183alalalalalalalal\201\170\082\207\232\166\202\174alalalalalalalalalal\082\207\073\166\088\227\235\182alalalalalalalalalal\081\207\073\166\074\170\075\174alalalalalalalalalal\081\203\072\162\119\223\106\170alalalalalalalalalal\009\166\005\154\196\149\067\145alalalalalalalalalal\071\162\039\167\199\162\078\195alalalalalalalalalal\072\166\234\178\084\215\046\195alalalalalalalalalal\232\170\048\203\072\162\040\167alalalalalalalalalal\196\149\013\182\068\145\005\158alalalalalalalalalal\041\166\076\187\039\171\081\203alalalalalalalalalal\080\199\041\175\198\162\071\162alalalalalalalalalal\087\223\200\170\038\158\040\171alalalalalal\235\182\199\166\046\195\048\203alalalal\235\182\199\166\046\195\048\203alal\042\170\012\183\116\219\100\146alalalal\042\170\012\183\116\219\100\146alal\120\227\116\215\105\166\163\142alalalal\120\227\116\215\105\166\163\142alal\089\235\041\175\106\183\038\154alalalal\089\235\041\175\106\183\038\154alal\121\231\233\174\234\178\081\203alalalal\121\231\233\174\234\178\081\203alal\034\141\080\199\200\170\078\195alalalal\034\141\080\199\200\170\078\195") mobTexture["creeper"][2]=image.new("\014\000\000\000\032\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\051\211\161\138\200\166\019\207\090\235\110\195\045\191\073\166alalalalalal\068\150\011\175\198\162\044\183\073\166\107\187\234\178\090\235alalalalalal\006\163\066\141\102\157\081\203\106\170\035\141\102\157\123\239alalalalalal\039\167\035\141\000\128\042\179\199\162\000\128\226\136\044\191alalalalalal\080\199\202\178\081\203\034\141\034\141\088\227\040\166\073\175alalalalalal\083\211\073\170\102\157\000\128\000\128\067\141\074\179\087\223alalalalalal\151\227\140\178\000\128\000\128\000\128\000\128\234\174\105\170alalalalalal\074\179\110\195\226\136\080\203\085\215\034\141\038\158\042\183alalalalalalalal\078\191\006\163\006\163\046\195alalalalalalalalalal\009\170\228\149\163\149\009\170alalalalalalalalalal\038\158\199\162\046\195\037\154alalalalalalalalalal\006\163\039\167\046\195\008\171alalalalalalalalalal\039\167\198\162\078\191\012\187alalalalalalalalalal\198\162\005\154\078\195\073\170alalalalalalalalalal\070\158\078\195\046\191\082\211alalalalalalalalalal\228\149\010\178\007\162\039\166alalalalalalalalalal\201\170\128\130\228\150\232\170alalalalalalalalalal\197\154\128\130\101\154\198\158alalalalalalalalalal\129\134\128\130\011\179\069\150alalalalalalalalalal\007\167\082\207\079\195\079\195alalalalalal\087\227\042\179\041\175\081\203alalalal\087\227\042\179\041\175\081\203alal\078\195\039\167\166\162\048\199alalalal\078\195\039\167\166\162\048\199alal\073\166\010\179\085\219\069\150alalalal\073\166\010\179\085\219\069\150alal\043\187\109\191\122\235\073\175alalalal\043\187\109\191\122\235\073\175alal\142\195\236\186\090\235\011\183alalalal\142\195\236\186\090\235\011\183alal\012\187\075\174\090\235\034\141alalalal\012\187\075\174\090\235\034\141") mobTexture["creeper bright"]={} mobTexture["creeper bright"][1]=image.new("\014\000\000\000\032\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\253\251\203\175\241\203\253\247\255\255\247\235\247\231\114\207alalalalalal\110\187\244\215\240\199\246\223\114\203\245\223\244\219\255\255alalalalalal\240\203\108\182\143\194\250\239\148\211\108\182\143\194\255\255alalalalalal\241\203\108\182\041\165\244\219\240\203\041\165\011\178\246\227alalalalalal\249\235\244\219\251\239\107\178\076\182\255\255\082\203\242\215alalalalalal\252\247\147\207\143\194\041\165\041\165\140\182\244\219\255\255alalalalalal\255\255\182\219\041\165\041\165\041\165\041\165\243\215\147\207alalalalalal\244\219\247\231\011\178\249\239\254\255\076\182\112\195\244\219alalalalalalalal\242\211\251\247\241\207\243\215alalalalalalalalalal\251\247\114\207\255\255\244\219alalalalalalalalalal\251\243\146\207\147\211\148\211alalalalalalalalalal\250\243\113\199\255\255\147\211alalalalalalalalalal\050\207\046\191\014\191\141\182alalalalalalalalalal\113\199\241\207\240\203\248\231alalalalalalalalalal\145\203\243\215\254\255\247\231alalalalalalalalalal\242\211\249\239\113\199\241\207alalalalalalalalalal\238\190\086\223\141\186\047\195alalalalalalalalalal\082\207\245\223\241\207\250\239alalalalalalalalalal\249\235\242\211\240\199\112\199alalalalalalalalalal\255\255\242\207\112\195\241\211alalalalalal\245\219\241\203\248\235\249\239alalalal\245\219\241\203\248\235\249\239alal\115\211\245\223\254\255\173\183alalalal\115\211\245\223\254\255\173\183alal\255\255\254\251\178\207\236\183alalalal\255\255\254\251\178\207\236\183alal\255\255\242\211\244\219\079\191alalalal\255\255\242\211\244\219\079\191alal\255\255\243\215\243\215\251\243alalalal\255\255\243\215\243\215\251\243alal\076\178\249\235\241\207\248\231alalalal\076\178\249\235\241\207\248\231") mobTexture["creeper bright"][2]=image.new("\014\000\000\000\032\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\253\251\203\175\241\203\253\247\255\255\247\235\247\231\114\207alalalalalal\110\187\244\215\240\199\246\223\114\203\245\223\244\219\255\255alalalalalal\240\203\108\182\143\194\250\239\148\211\108\182\143\194\255\255alalalalalal\241\203\108\182\041\165\244\219\240\203\041\165\011\178\246\227alalalalalal\249\235\244\219\251\239\107\178\076\182\255\255\082\203\242\215alalalalalal\252\247\147\207\143\194\041\165\041\165\140\182\244\219\255\255alalalalalal\255\255\182\219\041\165\041\165\041\165\041\165\243\215\147\207alalalalalal\244\219\247\231\011\178\249\239\254\255\076\182\112\195\244\219alalalalalalalal\248\231\239\199\240\203\248\235alalalalalalalalalal\050\207\045\191\237\186\050\207alalalalalalalalalal\079\195\240\203\248\235\079\195alalalalalalalalalal\239\203\240\203\247\231\241\207alalalalalalalalalal\240\207\240\199\248\231\245\223alalalalalalalalalal\240\199\079\195\248\231\115\207alalalalalalalalalal\112\195\248\231\247\231\252\247alalalalalalalalalal\045\191\052\215\048\203\081\203alalalalalalalalalal\242\211\201\167\237\187\242\211alalalalalalalalalal\238\191\201\167\143\191\239\195alalalalalalalalalal\171\175\201\167\244\215\110\191alalalalalalalalalal\240\203\251\243\248\231\248\235alalalalalal\255\255\243\215\242\211\250\239alalalal\255\255\243\215\242\211\250\239alal\248\231\241\207\240\199\250\239alalalal\248\231\241\207\240\199\250\239alal\114\203\243\215\254\255\110\191alalalal\114\203\243\215\254\255\110\191alal\245\223\246\231\255\255\242\215alalalal\245\223\246\231\255\255\242\215alal\248\235\246\223\255\255\244\219alalalal\248\235\246\223\255\255\244\219alal\246\227\116\211\255\255\076\178alalalal\246\227\116\211\255\255\076\178") mobTexture["damage"]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127\255\127\000\232\000\232\255\127") mobTexture["ghast"]={} mobTexture["ghast"][1]=image.new("\016\000\000\000\021\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000\255\255\255\255\255\255\255\255\255\255\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\255\255\255\255\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\057\231\057\231\222\251\222\251\222\251\222\251\057\231\057\231\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\057\231\057\231\222\251\222\251\222\251\222\251\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\057\231\255\255\222\251\222\251\222\251\222\251\222\251\057\231\057\231\222\251\222\251\255\255\222\251\222\251\222\251\222\251\057\231\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\057\231\255\255\222\251\222\251\222\251\057\231\057\231\222\251\222\251\222\251\222\251\222\251\255\255\222\251\057\231\057\231\255\255\222\251\222\251\057\231\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\057\231\222\251\255\255\255\255\222\251\057\231\057\231\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\057\231\057\231\255\255\255\255\222\251\222\251\222\251\222\251\222\251\057\231\057\231\222\251\255\255\057\231\057\231\222\251\255\255\255\255\222\251\222\251\057\231\057\231\057\231\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\057\231\057\231\057\231\255\255\255\255\255\255\222\251\222\251\222\251\222\251\222\251\255\255\057\231\057\231\057\231\222\251\255\255\255\255\255\255\222\251\222\251\222\251\222\251\057\231\057\231\222\251\222\251\255\255\255\255\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\255\255\255\255\255\255\255\255\222\251\255\255\255\255\222\251\255\255\222\251\255\255\255\255\255\255\255\255\255\255al\222\251\222\251\222\251al\222\251\222\251alal\222\251\222\251\222\251al\222\251\222\251alalal\222\251\222\251alal\222\251\222\251alal\222\251\222\251al\222\251\222\251alalal\255\255\222\251\222\251al\222\251\222\251alal\222\251\222\251alalalalalal\222\251\222\251\222\251alalalalal\222\251\222\251alalalalalalal\222\251\222\251alalalalal\222\251\222\251alalalal") mobTexture["ghast"][2]=image.new("\016\000\000\000\021\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000\255\255\255\255\255\255\255\255\255\255\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\255\255\255\255\255\255\255\255\057\231\057\231\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\222\251\222\251\222\251\057\231\057\231\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\057\231\222\251\222\251\222\251\222\251\222\251\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\057\231\222\251\222\251\222\251\222\251\255\255\255\255\222\251\057\231\057\231\222\251\057\231\057\231\222\251\222\251\222\251\255\255\057\231\222\251\222\251\222\251\222\251\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\057\231\222\251\222\251\255\255\057\231\057\231\222\251\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\057\231\057\231\222\251\255\255\255\255\222\251\057\231\222\251\057\231\057\231\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\057\231\057\231\222\251\222\251\255\255\255\255\222\251\222\251\222\251\222\251\222\251\057\231\057\231\057\231\222\251\222\251\255\255\255\255\222\251\057\231\057\231\255\255\222\251\222\251\222\251\057\231\057\231\255\255\255\255\255\255\057\231\057\231\057\231\222\251\222\251\255\255\255\255\255\255\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\255\255\222\251\057\231\057\231\057\231\255\255\057\231\057\231\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\222\251\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\222\251\255\255\255\255\222\251\255\255\222\251\255\255\255\255\255\255\255\255\255\255al\222\251\222\251al\222\251\222\251\222\251alal\222\251\222\251al\222\251\222\251\222\251alal\222\251\222\251al\222\251\222\251alal\222\251\222\251alal\222\251\222\251alalalalalal\222\251\222\251alal\222\251\222\251al\222\251\222\251\255\255alalalalalal\222\251\222\251alalalalal\222\251\222\251\222\251alalalalalal\222\251\222\251alalalalal\222\251\222\251alalal") mobTexture["ghast"][1]=image.copy(mobTexture["ghast"][1],mobTexture["ghast"][1]:width()*3,mobTexture["ghast"][1]:height()*3) mobTexture["ghast"][2]=image.copy(mobTexture["ghast"][2],mobTexture["ghast"][2]:width()*3,mobTexture["ghast"][2]:height()*3) guiTexture={} --1: Item Slot / 2: Selected Item Frame / 3: heart empty / 4: heart full / 5: heart half / 6: Arrow / 7: Crossed Arrow / 8: Bubbly Bubble / 9: Destroyed Bubbly Bubble guiTexture[1]=image.new("\020\000\000\000\020\000\000\000\000\000\000\000\040\000\000\000\016\000\001\000\057\231\057\231\181\214\181\214\082\202\082\202\181\214\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\082\202\181\214\107\173\107\173\107\173\173\181\107\173\107\173\140\177\107\173\107\173\107\173\107\173\107\173\107\173\173\181\140\177\107\173\107\173\206\185\107\173\181\214\140\177\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\041\165\206\185\140\177\082\202\140\177\041\165\105\173\137\177\137\177\105\173\137\177\137\177\137\181\137\177\137\177\137\177\105\169\137\177\137\177\137\177\137\177\239\189\074\169\181\214\107\173\041\165\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\239\189\107\173\082\202\173\181\041\165\137\177\137\177\137\177\105\173\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\239\189\107\173\082\202\107\173\041\165\137\177\137\181\137\177\105\173\137\177\137\177\137\177\137\177\105\173\137\181\137\177\137\177\137\177\137\181\137\177\239\189\107\173\082\202\107\173\041\165\137\177\137\177\137\177\137\181\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\105\173\239\189\107\173\082\202\107\173\041\165\137\177\137\177\137\177\137\177\137\177\105\173\137\177\105\173\137\177\137\177\137\177\137\177\137\177\105\169\137\177\239\189\140\177\082\202\140\177\041\165\137\177\137\177\105\173\137\177\137\177\137\177\105\173\137\177\137\181\105\173\137\177\137\177\137\177\137\181\137\177\239\189\140\177\082\202\107\173\041\165\105\173\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\105\173\137\177\137\177\137\177\137\177\049\198\107\173\082\202\107\173\041\165\137\177\137\177\137\177\137\177\105\173\137\177\137\181\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\181\206\185\107\173\082\202\140\177\041\165\137\177\137\177\105\173\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\105\173\137\177\137\177\239\189\107\173\082\202\173\181\041\165\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\105\173\137\177\137\177\137\177\105\173\137\177\239\189\107\173\082\202\107\173\041\165\137\181\137\177\105\173\137\177\105\173\137\177\137\177\137\177\137\177\105\173\137\177\137\177\105\173\105\173\137\177\239\189\107\173\082\202\107\173\041\165\137\177\137\181\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\239\189\173\181\082\202\107\173\041\165\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\137\177\138\181\137\177\137\177\137\177\137\177\137\177\239\189\107\173\082\202\107\173\041\165\137\177\137\177\105\173\137\177\137\177\105\173\137\177\137\177\137\177\137\177\105\169\137\177\137\177\137\177\137\177\016\194\107\173\082\202\206\185\239\189\239\189\239\189\239\189\239\189\239\189\239\189\239\189\239\189\049\198\016\194\239\189\239\189\206\185\049\198\016\194\239\189\107\173\082\202\173\181\107\173\107\173\140\177\107\173\107\173\140\177\140\177\107\173\107\173\107\173\173\181\107\173\107\173\140\177\107\173\107\173\107\173\107\173") guiTexture[2]=image.new("\022\000\000\000\022\000\000\000\000\000\000\000\044\000\000\000\016\000\001\000\255\255\255\255\222\251\222\251\186\239\255\255\153\235\153\235\120\231\153\235\153\235\186\239\153\235\153\235\186\235\153\235\120\231\153\235\153\235\153\235\153\235\211\210\255\255\211\210\211\210\211\210\178\206\211\210\211\210\211\210\211\206\245\214\178\206\211\210\145\202\211\210\178\206\211\210\178\206\211\210\211\210\244\214\211\210\171\173\222\251\211\210\171\177\171\177\138\173\171\177\170\173\171\173\171\177\171\177\171\177\204\177\171\177\171\177\171\173\171\177\171\173\171\177\171\177\212\210\212\210\171\177\255\255\211\210\171\177alalalalalalalalalalalalalalalal\153\231\211\210\171\177\153\235\244\214\171\177alalalalalalalalalalalalalalalal\219\239\211\210\204\177\153\235\211\210\171\177alalalalalalalalalalalalalalalal\153\235\211\210\204\177\153\235\211\210\171\177alalalalalalalalalalalalalalalal\153\235\211\210\171\177\120\231\211\210\171\177alalalalalalalalalalalalalalalal\153\235\211\210\171\177\153\235\211\210\171\177alalalalalalalalalalalalalalalal\153\235\244\214\171\177\153\235\244\214\171\177alalalalalalalalalalalalalalalal\186\235\211\210\138\169\153\235\211\210\171\177alalalalalalalalalalalalalalalal\186\239\211\210\204\181\186\239\211\210\171\173alalalalalalalalalalalalalalalal\153\235\211\210\171\173\153\235\211\210\138\169alalalalalalalalalalalalalalalal\153\235\211\210\171\177\186\239\211\210\204\181alalalalalalalalalalalalalalalal\153\235\211\210\171\177\153\235\211\210\237\181alalalalalalalalalalalalalalalal\153\235\178\206\138\173\186\239\179\206\171\177alalalalalalalalalalalalalalalal\153\235\211\210\171\177\120\231\211\210\138\169alalalalalalalalalalalalalalalal\121\231\211\210\204\177\153\235\146\202\171\173alalalalalalalalalalalalalalalal\154\235\211\210\171\177\153\235\179\206\171\173alalalalalalalalalalalalalalalal\222\251\179\206\138\169\153\235\211\210\153\231\153\235\153\235\153\235\186\235\121\231\153\231\153\235\153\235\153\235\153\235\153\235\153\235\153\235\153\235\186\239\222\251\222\251\211\210\171\177\153\235\211\210\211\210\244\214\178\206\211\210\211\210\211\210\178\206\244\214\211\210\179\206\211\210\211\210\211\210\179\206\211\210\179\206\211\210\179\206\211\206\171\177\211\210\171\177\171\177\204\177\204\177\170\173\171\173\171\177\171\177\204\177\204\181\171\177\171\177\171\177\171\177\171\173\204\177\171\177\237\181\171\177\138\169\171\177") guiTexture[3]=image.new("\9\0\0\0\9\0\0\0\0\0\0\0\18\0\0\0\16\0\1\0\0\0\0\0\0\128\0\128\0\0\0\128\0\128\0\0\0\0\0\0\0\128\165\148\165\148\0\128\165\148\165\148\0\128\0\0\0\128\165\148\165\148\165\148\165\148\165\148\165\148\165\148\0\128\0\128\165\148\165\148\165\148\165\148\165\148\165\148\165\148\0\128\0\128\165\148\165\148\165\148\165\148\165\148\165\148\165\148\0\128\0\0\0\128\165\148\165\148\165\148\165\148\165\148\0\128\0\0\0\0\0\0\0\128\165\148\165\148\165\148\0\128\0\0\0\0\0\0\0\0\0\0\0\128\165\148\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0") guiTexture[4]=image.new("\9\0\0\0\9\0\0\0\0\0\0\0\18\0\0\0\16\0\1\0\0\0\0\0\0\128\0\128\0\0\0\128\0\128\0\0\0\0\0\0\0\128B\252B\252\0\128B\252B\252\0\128\0\0\0\128B\252\24\255B\252B\252B\252B\252B\252\0\128\0\128B\252B\252B\252B\252B\252B\252B\252\0\128\0\128B\220B\252B\252B\252B\252B\252B\220\0\128\0\0\0\128B\220B\252B\252B\252B\220\0\128\0\0\0\0\0\0\0\128B\220B\252B\220\0\128\0\0\0\0\0\0\0\0\0\0\0\128B\220\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0") guiTexture[5]=image.new("\9\0\0\0\9\0\0\0\0\0\0\0\18\0\0\0\16\0\1\0\0\0\0\0\0\128\0\128\0\0\0\128\0\128\0\0\0\0\0\0\0\128B\252B\252\0\128\165\148\165\148\0\128\0\0\0\128B\252\24\255B\252B\252\165\148\165\148\165\148\0\128\0\128B\252B\252B\252B\252\165\148\165\148\165\148\0\128\0\128B\220B\252B\252B\252\165\148\165\148\165\148\0\128\0\0\0\128B\220B\252B\252\165\148\165\148\0\128\0\0\0\0\0\0\0\128B\220B\252\165\148\0\128\0\0\0\0\0\0\0\0\0\0\0\128B\220\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0") guiTexture[6]=image.new("\022\000\000\000\015\000\000\000\000\000\000\000\044\000\000\000\016\000\001\000alalalalalalalalalalalalalal\049\198alalalalalalalalalalalalalalalalalalalalal\049\198\049\198alalalalalalalalalalalalalalalalalalalal\049\198\049\198\049\198alalalalalalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198\049\198\049\198alal\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198al\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalalalal\049\198\049\198\049\198\049\198alalalalalalalalalalalalalalalalalal\049\198\049\198\049\198alalalalalalalalalalalalalalalalalalal\049\198\049\198alalalalalalalalalalalalalalalalalalalal\049\198alalalalalalal") guiTexture[7]=image.new("\022\000\000\000\015\000\000\000\000\000\000\000\044\000\000\000\016\000\001\000alalal\128\200\128\200alalalalalalalalal\049\198al\128\200\128\200alalalalalalal\128\200\226\220\128\200alalalalalalalal\049\198\128\200\226\220\128\200alalalalalalalal\128\200\226\220\128\200alalalalalalal\128\200\226\220\128\200alalalalalalalalalal\128\200\226\220\128\200alalalalal\128\200\226\220\128\200\049\198\049\198alalalalalalalalalal\128\200\226\220\128\200alalal\128\200\226\220\128\200\049\198\049\198\049\198\049\198alalalalalalalalalal\128\200\226\220\128\200al\128\200\226\220\128\200\049\198\049\198\049\198\049\198\049\198\049\198alal\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\128\200\226\220\128\200\226\220\128\200\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198al\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\128\200\226\220\128\200\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198\128\200\226\220\128\200\226\220\128\200\049\198\049\198\049\198\049\198\049\198\049\198\049\198\049\198alalalalalalalal\128\200\226\220\128\200al\128\200\226\220\128\200\049\198\049\198\049\198\049\198\049\198\049\198alalalalalalalal\128\200\226\220\128\200alalal\128\200\226\220\128\200\049\198\049\198\049\198\049\198alalalalalalalal\128\200\226\220\128\200alalalalal\128\200\226\220\128\200\049\198\049\198alalalalalalalal\128\200\226\220\128\200alalalalalalal\128\200\226\220\128\200alalalalalalalal\128\200\226\220\128\200alalalalalalalal\049\198\128\200\226\220\128\200alalalalalalal\128\200\128\200alalalalalalalalal\049\198al\128\200\128\200alalalal") guiTexture[8]=image.new("\9\0\0\0\9\0\0\0\0\0\0\0\18\0\0\0\16\0\1\0\0\0\0\0\0\0\0\128\0\128\0\128\0\0\0\0\0\0\0\0\0\0\0\128_\130_\130_\130\0\128\0\0\0\0\0\0\0\128_\130\0\0\0\0\0\0_\130\0\128\0\0\0\128_\130\0\0\191\231\191\231\0\0\0\0\223\170\0\128\0\128_\130\0\0\191\231\0\0\0\0\0\0\223\170\0\128\0\128_\130\0\0\0\0\0\0\0\0\0\0\223\170\0\128\0\0\0\128_\130\0\0\0\0\0\0\223\170\0\128\0\0\0\0\0\0\0\128\223\170\223\170\223\170\0\128\0\0\0\0\0\0\0\0\0\0\0\128\0\128\0\128\0\0\0\0\0\0") guiTexture[9]=image.new("\9\0\0\0\9\0\0\0\0\0\0\0\18\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0_\130\0\0\0\0\0\0\0\0_\130\0\0\0\0\0\0_\130\0\0\0\0_\130\0\0\0\128_\130\0\0\0\0\0\128\0\0_\130\0\128\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0_\130\0\0\0\0\0\0\0\0\0\0\0\0_\130_\130\0\128\0\0_\130\0\0\0\0\0\0\0\0\0\128\0\128\0\0_\130\0\128\0\0\0\0\0\0_\130\0\0\0\0\0\0\0\128\0\0\0\0\0\0\0\0\0\128\0\0\0\0") --Breaking Animation guiTexture[10]=image.new("\011\000\000\000\011\000\000\000\000\000\000\000\022\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalal\115\206\231\156alalalalalalalalalal\115\206alalalalalalalalalalalalal") guiTexture[11]=image.new("\011\000\000\000\011\000\000\000\000\000\000\000\022\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalal\231\156alalalalalalalalalal\115\206\231\156al\231\156alalalalalalalal\115\206\231\156\115\206alalalalalalalalal\231\156alalalalalalalalalal\115\206alal") guiTexture[12]=image.new("\013\000\000\000\014\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalalalal\231\156alalalalalalalalalalalal\231\156alalal\231\156\231\156alalalalalalal\115\206\231\156al\231\156\115\206\115\206alalalalalalalal\115\206\231\156\115\206alalalalalalalalalalal\231\156alalalalalalalalalalalal\231\156alalalalalalalalalalal\231\156\115\206alalalalalalalalalalal\115\206alalalalalalalalalalalalalalalalalal") guiTexture[13]=image.new("\014\000\000\000\014\000\000\000\000\000\000\000\028\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalalalal\231\156\115\206alalalalalalalalalalalal\231\156alal\231\156alal\231\156alalalalalal\231\156\231\156alal\115\206\231\156\231\156\115\206alalalalalal\115\206\115\206\231\156al\231\156\115\206\115\206alalalalalalalalal\115\206\231\156\115\206alalalalalalalalalalalal\231\156alalalalalalalalalalalalal\231\156alalalalalalalalalalal\231\156\231\156\115\206alalalalalalalalalalal\115\206\115\206alalalalalalalalalalalalalalalalalalalal") guiTexture[14]=image.new("\015\000\000\000\015\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalalalalal\231\156\115\206alalalalalalalalalalalal\231\156\115\206al\231\156alalal\231\156alalalalalalal\231\156alal\231\156alal\231\156\115\206alalalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alalalalal\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\115\206alalalalalal\115\206alalal\115\206\231\156\115\206alalalalalalalalalalalalal\231\156alalalalalalalalalalalalalal\231\156alalalalalalalalalalal\231\156\231\156\231\156\115\206alalalalalalalalalalal\115\206\115\206\115\206\231\156alalalalalalalalalalalalalal\115\206alalalalalalalalalalalalalalalalalalalalal") guiTexture[15]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalal\231\156al\231\156\231\156alalalalalalalalalalalal\115\206\231\156\115\206\115\206alalalalalalalalalalalal\231\156\115\206al\231\156alalal\231\156\231\156alalalalal\231\156al\231\156alal\231\156alal\231\156\115\206\115\206alalalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alalalalalal\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\115\206alalalalalal\231\156\115\206alalal\115\206\231\156\115\206alalalalalalalal\115\206alalalalal\231\156alalalalalalalalalalalal\231\156alal\231\156alalalalalalalalalalalal\231\156\231\156\231\156\115\206alalalalalalalalalalal\231\156\115\206\115\206\115\206\231\156alalalalalalalalalalal\115\206alalal\115\206\231\156alalalalalalalalalalalalalalal\115\206alalalalalalalalalalalalalalalalalalalalalal") guiTexture[16]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalalal\231\156alalalalalalalalalalalalalalal\115\206\231\156al\231\156\231\156alalalalalalalalalalalal\115\206\231\156\115\206\115\206alalalalalalalalalal\231\156al\231\156\115\206al\231\156alalal\231\156\231\156alalalalal\231\156al\231\156alal\231\156alal\231\156\115\206\115\206alalalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alalalalalal\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\231\156alalalalalal\231\156\115\206alalal\115\206\231\156\115\206al\115\206alalalalalal\231\156al\231\156alalal\231\156alalalalalalalalal\115\206al\115\206\231\156alal\231\156\231\156alalalalalalalalalalal\231\156\231\156\231\156\115\206\115\206alalalalalalalalalal\231\156\115\206\115\206\115\206\231\156alalalalalalalalalal\231\156\115\206alalal\115\206\231\156\231\156\231\156alalalalalalal\115\206alalalalal\115\206\115\206\115\206alalalalalalalalalalalalalalalalalalalal") guiTexture[17]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalalalalalalalalalalalalalalalal\231\156\231\156alalalalalalalalalalalalalal\115\206\115\206\231\156al\231\156\231\156alalalalalalalal\231\156\231\156alal\115\206\231\156\115\206\115\206alalal\231\156alalalal\115\206\115\206\231\156al\231\156\115\206al\231\156\231\156alal\231\156\231\156alalalalal\231\156al\231\156alal\231\156\115\206al\231\156\115\206\115\206\231\156alalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alal\115\206alalal\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\231\156alalalalalal\231\156\115\206al\231\156al\115\206\231\156\115\206al\231\156alalalalalal\231\156al\231\156\115\206alal\231\156alal\115\206\231\156alalalalal\115\206al\115\206\231\156alal\231\156\231\156alal\115\206alalalalalalalal\231\156\231\156\231\156\115\206\115\206\231\156\231\156alalalalal\231\156alal\231\156\115\206\115\206\115\206\231\156al\115\206\115\206alalalalal\115\206\231\156\231\156\115\206alalal\115\206\231\156\231\156\231\156alalalalalal\115\206\115\206\231\156alalal\231\156\115\206\115\206\115\206\231\156alalalalalalal\115\206alalal\115\206alalal\115\206alalal") guiTexture[18]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alalalalalal\231\156al\115\206alalalalal\115\206alalalal\231\156\231\156\231\156\115\206alalal\231\156al\231\156alalalal\231\156al\115\206\115\206\115\206\231\156al\231\156\231\156\115\206al\115\206\231\156alalal\115\206\231\156\231\156alal\115\206\231\156\115\206\115\206alalal\231\156alalal\231\156\115\206\115\206\231\156al\231\156\115\206al\231\156\231\156alal\231\156\231\156alal\115\206alal\231\156al\231\156alal\231\156\115\206al\231\156\115\206\115\206\231\156alalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alal\115\206alalal\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\231\156alalalalalal\231\156\115\206al\231\156al\115\206\231\156\115\206al\231\156alalalalalal\231\156al\231\156\115\206alal\231\156alal\115\206\231\156al\231\156al\231\156al\115\206al\115\206\231\156alal\231\156\231\156alal\115\206\231\156\115\206al\115\206\231\156alalal\231\156\231\156\231\156\115\206\115\206\231\156\231\156al\231\156alalal\231\156alal\231\156\115\206\115\206\115\206\231\156al\115\206\115\206al\115\206alalal\115\206\231\156\231\156\115\206alalal\115\206\231\156\231\156\231\156alalalalalal\231\156\115\206\231\156\231\156alal\231\156\115\206\115\206\115\206\231\156\231\156alalalal\115\206al\115\206\115\206alal\231\156alalal\115\206\115\206\231\156al") guiTexture[19]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000\032\000\000\000\016\000\001\000alal\231\156alalal\231\156al\115\206al\231\156al\231\156al\115\206alalal\115\206\231\156\231\156\231\156\115\206alalal\231\156al\231\156alalalal\231\156al\115\206\115\206\115\206\231\156al\231\156\231\156\115\206al\115\206\231\156alalal\115\206\231\156\231\156alal\115\206\231\156\115\206\115\206alalal\231\156alal\231\156\231\156\115\206\115\206\231\156al\231\156\115\206al\231\156\231\156alal\231\156\231\156al\115\206\115\206alal\231\156al\231\156alal\231\156\115\206al\231\156\115\206\115\206\231\156alalalal\231\156\231\156\231\156alal\115\206\231\156\231\156\115\206alal\115\206\231\156\231\156al\231\156\115\206\115\206\115\206\231\156al\231\156\115\206\231\156alalalal\115\206\115\206\231\156\115\206al\231\156al\115\206\231\156\115\206al\231\156alalal\231\156alal\231\156al\231\156\115\206alal\231\156alal\115\206\231\156al\231\156\115\206\231\156al\115\206al\115\206\231\156alal\231\156\231\156alal\115\206\231\156\115\206al\115\206\231\156alalal\231\156\231\156\231\156\115\206\115\206\231\156\231\156al\231\156alalal\231\156alal\231\156\115\206\115\206\115\206\231\156al\115\206\115\206al\115\206\231\156\231\156al\115\206\231\156\231\156\115\206alalal\115\206\231\156\231\156\231\156alal\115\206\115\206alal\231\156\115\206\231\156\231\156alal\231\156\115\206\115\206\115\206\231\156\231\156alalalal\231\156al\115\206\115\206alal\231\156alalal\115\206\115\206\231\156al") --20: Item Slot 2 / 21: rare Space in inventory warning / 22: furnace progress arrow Frame / 23: furnace progress arrow / 24: furnace fire background / 25: furnace fire / 26: advCraft enabled / 27: hand grab guiTexture[20]=image.new("\18\0\0\0\18\0\0\0\0\0\0\0$\0\0\0\16\0\1\0\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\156\231\1561\198\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\255\231\1561\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\1981\198\255\2551\198\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255") guiTexture[21]=image.new("\016\000\000\000\011\000\000\000\000\000\000\000 \000\000\000\016\000\001\000\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\255\127\000\128 \253 \253\000\128 \253 \253 \253 \253 \253 \253 \253 \253 \253 \253\000\128\255\127\000\128 \253 \253\000\128 \253\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128 \253\000\128\255\127\000\128 \253 \253\000\128 \253\000\128 \253 \253 \253 \253\000\128 \253\000\128\000\128\000\128\255\127\000\128 \253 \253\000\128 \253\000\128\000\128\000\128\000\128\000\128\000\128 \253 \253\000\128\000\128\255\127\000\128 \253 \253\000\128 \253\000\128 \253 \253 \253 \253\000\128 \253 \253 \253\000\128\000\128\000\128\000\128\000\128\000\128 \253\000\128\000\128\000\128\000\128\000\128\000\128 \253 \253 \253 \253\000\128\000\128 \253 \253\000\128 \253 \253 \253 \253 \253 \253\000\128 \253 \253 \253\000\128\000\128\000\128 \253 \253\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128 \253\000\128 \253 \253\000\128\000\128\000\128\000\128\000\128\255\127\255\127\255\127\255\127\255\127\255\127\000\128\000\128\000\128\000\128 \253\000\128\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\128\000\128\000\128") guiTexture[22]=image.new("\22\0\0\0\15\0\0\0\0\0\0\0,\0\0\0\16\0\1\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\0\0\0\0\24\227\24\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\227\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\24\227\0\0\24\227\24\227\24\227\24\227\24\227\24\227\24\227") guiTexture[23]=image.new("\22\0\0\0\15\0\0\0\0\0\0\0,\0\0\0\16\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\255\255\0\0\0\0\0\0\0\0\0\0\0\0\0\0") guiTexture[24]=image.new("\013\000\000\000\013\000\000\000\000\000\000\000\026\000\000\000\016\000\001\000\255\1271\198\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\1271\198\255\127\255\1271\198\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\1271\198\255\127\255\127\255\1271\198\255\127\255\127\255\1271\198\255\127\255\127\255\1271\198\255\127\255\127\255\127\255\1271\198\255\127\255\127\255\1271\198\255\127\255\127\255\1271\198\255\127\255\127\255\1271\1981\198\255\127\255\127\255\127\255\1271\198\255\127\255\1271\1981\198\255\127\255\1271\1981\198\255\127\255\127\255\127\255\1271\198\255\127\255\1271\1981\198\255\1271\1981\1981\198\255\127\255\127\255\1271\1981\198\255\127\255\1271\1981\1981\1981\1981\198\255\127\255\127\255\127\255\1271\1981\198\255\127\255\127\255\1271\1981\1981\1981\198\255\127\255\127\255\1271\1981\1981\198\255\127\255\127\255\1271\1981\1981\1981\1981\198\255\127\255\1271\1981\198\255\127\255\127\255\1271\1981\1981\198\255\1271\1981\198\255\127\255\1271\1981\198\255\127\255\127\255\1271\1981\198\255\127\255\1271\1981\198\255\127\255\1271\1981\1981\198\255\127\255\1271\1981\198\255\1271\1981\1981\198\255\127\255\1271\1981\1981\198\255\127\255\1271\1981\1981\198") guiTexture[25]=image.new("\13\0\0\0\13\0\0\0\0\0\0\0\26\0\0\0\16\0\1\0\0\0(\233\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0(\233\0\0\0\0\192\254(\233\0\0\0\0\0\0(\233\0\0\0\0\0\0(\233\192\254\0\0\0\0\0\0\192\254\0\0\0\0\0\0\192\254\0\0\0\0\0\0\192\254\0\0\0\0\0\0(\233\228\255\0\0\0\0\0\0\228\255(\233\0\0\0\0\228\255(\233\0\0\0\0\192\254\228\255\0\0\0\0\0\0\0\0\192\254\0\0\0\0\228\255\192\254\0\0\0\0\228\255\255\255\0\0\0\0\0\0(\233\192\254\0\0\0\0\255\255\228\255\0\0(\233\228\255\192\254\0\0\0\0\0\0\228\255\192\254\0\0\0\0\192\254\228\255(\233\192\254\255\255(\233\0\0\0\0(\233\255\255\228\255\0\0\0\0(\233\228\255\192\254\228\255\255\255\0\0\0\0\0\0\192\254\228\255(\233\0\0\0\0\0\0\255\255\228\255\255\255\255\255\192\254\0\0\0\0\192\254\255\255\0\0\0\0\0\0\192\254\255\255\228\255(\233\255\255\228\255\0\0\0\0\228\255\255\255\0\0\0\0\0\0\228\255\255\255(\233\0\0\255\255\255\255\0\0\0\0\228\255\255\255\228\255\0\0\0\0\255\255\255\255\0\0\192\254\255\255\192\254\0\0\0\0\192\254\255\255\255\255\0\0\0\0\192\254\255\255\192\254") guiTexture[26]=image.new("\012\000\000\000\012\000\000\000\000\000\000\000\024\000\000\000\016\000\001\000A\140L\218L\218A\140\233\217\228\176\163\172\233\217A\140L\218L\218\229\156A\140n\226m\222L\218A\140\004\181\163\172\000\128\011\214L\218\141\226A\140A\140f\185f\185E\181f\185A\140A\136$\173f\185f\185f\185A\140A\140L\218L\218L\218L\218A\140\000\132L\218A\140A\140\009\206\000\128A\140\208\234A\140\141\226L\218A\140A\140L\218A\140b\144\010\210A\140A\140f\185A\140f\185f\185A\140A\140f\185t\206\214\218f\185A\140\131\148L\218A\140\214\218L\218\000\128A\140L\218{\239\214\218\009\206A\140A\140\214\218Z\235\214\218L\218\000\128A\140L\218L\218\214\218\010\210\000\136A\140f\185D\181\214\218f\185A\140A\140f\185\227\168Z\235f\185A\140B\140L\218\009\206L\218L\218A\140A\140\141\226L\218Z\235\009\206A\140A\140L\218\010\210L\218\141\226A\140A\140L\218L\218L\218L\218A\140A\140f\185f\185f\185f\185\130\148A\140\233\201f\185f\185\226\168A\140") guiTexture[27]=image.new("\015\000\000\000\013\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000\255\127\255\127\255\127\000\128\000\128\000\128\000\128\000\128\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\128\246\255\246\255\246\255\246\255\246\255\000\128\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\128\246\255\000\128\000\128\000\128\000\128\145\243\246\255\000\128\255\127\255\127\255\127\255\127\255\127\000\128\246\255\000\128\246\255\246\255\246\255\246\255\000\128\145\243\246\255\000\128\255\127\255\127\255\127\255\127\000\128\246\255\246\255\000\128\000\128\000\128\145\243\246\255\000\128\145\243\246\255\000\128\255\127\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\145\243\246\255\246\255\246\255\246\255\000\128\000\128\000\128\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\128\246\255\246\255\255\255\255\255\246\255\000\128\000\128\255\127\000\128\000\128\255\127\255\127\255\127\000\128\246\255\255\255\255\255\255\255\246\255\246\255\000\128\000\128\000\128\246\255\246\255\000\128\000\128\000\128\246\255\246\255\246\255\246\255\246\255\246\255\246\255\000\128\000\128\255\127\000\128\246\255\246\255\246\255\246\255\246\255\145\243\145\243\145\243\145\243\145\243\145\243\000\128\000\128\255\127\255\127\000\128\000\128\145\243\145\243\145\243\145\243\145\243\145\243\145\243\145\243\145\243\000\128\000\128\255\127\255\127\255\127\255\127\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\000\128\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\255\127\000\128\000\128\000\128") --28: empty defence point / 29: half defence point / 30: full defence point guiTexture[28]=image.new("\009\000\000\000\009\000\000\000\000\000\000\000\018\000\000\000\016\000\001\000\000\000\000\128\000\128\000\000\000\000\000\000\000\128\000\128\000\000\000\128\231\156\231\156\000\128\000\000\000\128\231\156\231\156\000\128\000\128\231\156\231\156\231\156\000\128\231\156\231\156\231\156\000\128\000\000\000\128\231\156\231\156\231\156\231\156\231\156\000\128\000\000\000\000\000\128\231\156\231\156\231\156\231\156\231\156\000\128\000\000\000\000\000\128\231\156\231\156\231\156\231\156\231\156\000\128\000\000\000\000\000\128\231\156\231\156\231\156\231\156\231\156\000\128\000\000\000\000\000\128\231\156\231\156\231\156\231\156\231\156\000\128\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\128\000\000\000\000") guiTexture[29]=image.new("\009\000\000\000\009\000\000\000\000\000\000\000\018\000\000\000\016\000\001\000\000\000\000\128\000\128\000\000\000\000\000\000\000\128\000\128\000\000\000\128\248\222\158\243\000\128\000\000\000\128\231\156\231\156\000\128\000\128\248\222\248\222\248\222\000\128\231\156\231\156\231\156\000\128\000\128\174\181\248\222\248\222\000\128\231\156\231\156\231\156\000\128\000\000\000\128\248\222\248\222\000\128\231\156\231\156\000\128\000\000\000\000\000\128\248\222\248\222\000\128\231\156\231\156\000\128\000\000\000\000\000\128\248\222\248\222\000\128\231\156\231\156\000\128\000\000\000\000\000\128\174\181\174\181\000\128\231\156\231\156\000\128\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\128\000\000\000\000") guiTexture[30]=image.new("\009\000\000\000\009\000\000\000\000\000\000\000\018\000\000\000\016\000\001\000\000\000\000\128\000\128\000\000\000\000\000\000\000\128\000\128\000\000\000\128\158\243\248\222\000\128\000\000\000\128\158\243\248\222\000\128\000\128\248\222\248\222\248\222\000\128\248\222\248\222\248\222\000\128\000\128\174\181\248\222\248\222\248\222\248\222\248\222\174\181\000\128\000\000\000\128\248\222\248\222\248\222\248\222\248\222\000\128\000\000\000\000\000\128\248\222\248\222\248\222\248\222\248\222\000\128\000\000\000\000\000\128\248\222\248\222\248\222\248\222\248\222\000\128\000\000\000\000\000\128\174\181\174\181\174\181\174\181\174\181\000\128\000\000\000\000\000\000\000\128\000\128\000\128\000\128\000\128\000\000\000\000") shadowTexture={} shadowTexture[1]=image.new("\015\000\000\000\016\000\000\000\000\000\000\000\030\000\000\000\016\000\001\000\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127\255\127\000\128\255\127\255\127") shadowTexture[2]=image.new("\016\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\016\000\001\000!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132\255\127!\132") shadowTexture[3]=image.new("\16\0\0\0\16\0\0\0\0\0\0\0 \0\0\0\16\0\1\0\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132!\132!\132\0\0!\132") playerTexture={} armorTexture={} armorTexture[1]={} --Leather armorTexture[1][1]={} armorTexture[1][1][1]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000F\197F\197F\197F\197G\197F\197F\197F\197&\189%\189F\197\168\209\168\209\168\209\136\209\136\209\136\209\136\209\168\209g\197F\193\168\209\168\209\136\209\136\209\168\209\136\209\136\209\135\205&\193F\193F\193F\193&\193F\193g\205g\205g\205\135\205&\193\000\000\000\000\000\000\000\000\000\000F\193F\197F\197G\197F\193") armorTexture[1][1][2]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000&\189F\193F\193F\193&\193G\197F\193F\193F\193&\193F\193\168\209\168\209\168\209\168\209\136\205\136\209\136\209\136\209F\197F\193\168\209\168\209\168\209\168\209\136\209\135\205\135\205\135\205F\193F\193\135\205\135\205g\201\136\205F\193&\189&\189F\197F\197F\197F\193F\193F\193&\189\000\000\000\000\000\000\000\000\000\000") armorTexture[1][2]=image.new("\006\000\000\000\011\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000F\197F\193&\189F\193F\193F\193F\197g\201\135\205\135\205g\201F\197F\193g\201\168\209\136\209g\205g\197&\193g\201\136\209\135\205g\201G\197&\193F\197g\201g\205g\201F\197F\193F\197F\197F\197F\197G\197g\201\255\127\255\127\255\127\255\127F\193g\197\255\127\255\127\255\127\255\127F\193g\197\255\127\255\127\255\127\255\127F\193g\201\255\127\255\127\255\127\255\127F\193G\197\255\127\255\127\255\127\255\127g\197") armorTexture[1][3]=image.new("\006\000\000\000\014\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000&\189\255\127\255\127\255\127\255\127F\197&\193\255\127\255\127\255\127\255\127F\197F\197\255\127\255\127\255\127\255\127F\193F\193\255\127\255\127\255\127\255\127F\193&\193\255\127\255\127\255\127\255\127F\193&\193g\201\136\205\136\209g\201F\197F\193g\201\136\209\136\209g\201F\197F\197g\201\136\209\136\209g\201F\197F\193g\201\135\205\135\205g\201F\193F\197g\201\136\209\136\209g\201F\197g\197\135\205\136\209\136\209g\205G\197g\201\135\205\168\209\168\209\135\205g\197F\193g\197g\201g\201g\201F\197&\189F\193F\197F\193F\193F\197") armorTexture[1][4]=image.new("\006\000\000\000\006\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000F\197F\197G\197g\201g\201g\201F\197g\201\135\205\135\205g\201g\197F\197g\205\168\209\136\209g\201F\197g\201\135\205\168\209\168\209\135\205g\201g\201g\201\135\205\135\205g\201g\197G\197g\201g\201g\197G\197F\197") armorTexture[2]={} --Iron armorTexture[2][1]={} armorTexture[2][1][1]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\0009\2319\2319\2319\2319\2319\2319\2319\231\247\222\247\2229\231\255\255\255\255\255\255{\239{\239{\239{\239{\2399\231\024\227\255\255\255\255{\239{\239{\239{\239{\239Z\235\024\227\024\227\024\227\024\227\024\227\024\227Z\235Z\235Z\235Z\235\024\227\255\127\255\127\255\127\255\127\255\127\024\2279\2319\2319\231\024\227") armorTexture[2][1][2]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000\247\222\247\222\024\2279\2319\2319\2319\2319\2319\2319\2319\231{\239{\239{\239{\239{\239\222\251\255\255\189\2479\231\024\2279\231Z\235{\239{\239{\239{\239\189\247\189\247\024\227\024\2279\231Z\235Z\235Z\235\024\227\024\227\024\227\024\227\024\227\024\2279\2319\2319\231\024\227\024\227\000\000\000\000\000\000\000\000") armorTexture[2][2]=image.new("\006\000\000\000\011\000\000\000\000\000\000\000\012\000\000\000\016\000\001\0009\231\247\222\247\2229\231\024\227\024\2279\231{\239\189\247\222\251{\2399\231\024\227{\239\189\247\189\247{\2399\231\024\227{\239\189\247\189\247{\2399\231\024\227Z\235Z\235Z\2359\2319\2319\2319\2319\2319\2319\2319\2319\231\255\127\255\127\255\127\255\127\024\2279\231\255\127\255\127\255\127\255\127\024\2279\231\255\127\255\127\255\127\255\127\024\2279\231\255\127\255\127\255\127\255\127\024\2279\231\255\127\255\127\255\127\255\1279\231") armorTexture[2][3]=image.new("\006\000\000\000\014\000\000\000\000\000\000\000\012\000\000\000\016\000\001\0009\231\255\127\255\127\255\127\255\1279\231\024\227\255\127\255\127\255\127\255\127\024\227\024\227\255\127\255\127\255\127\255\127\024\227\024\227\255\127\255\127\255\127\255\127\024\227\024\227\255\127\255\127\255\127\255\127\024\227\024\227{\239{\239{\239{\239\024\2279\231{\239{\239{\239{\239\024\2279\231{\239{\239{\239{\239\024\2279\231{\239{\239Z\235Z\235\024\2279\231{\239{\239{\239{\239\024\2279\231\156\243\156\243{\239{\239\024\2279\231{\239{\239{\239Z\235\024\2279\231{\239Z\235Z\235Z\235\024\2279\2319\231\024\227\024\227\024\2279\231") armorTexture[2][4]=image.new("\006\000\000\000\006\000\000\000\000\000\000\000\012\000\000\000\016\000\001\0009\2319\2319\2319\2319\2319\2319\231{\239\189\247\189\247\156\2439\231\024\227{\239{\239Z\235Z\235\024\227\024\227Z\235Z\235Z\235Z\235\024\2279\231{\239{\239{\239{\2399\231\024\227\024\227\024\227\024\227\024\2279\231") armorTexture[4]={} --Diamond armorTexture[4][1]={} armorTexture[4][1][1]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000X\155X\155X\155X\155x\155X\155X\155X\155\021\151\244\150X\155\255\255\255\255\255\255\253\159\253\159\253\159\253\159\253\159y\1557\151\255\255\255\255\220\159\253\159\253\159\220\159\220\159\187\159\022\1516\1516\1516\151\022\1517\155\187\155\187\155\187\155\187\159\022\151\000\000\000\000\000\000\000\000\000\0007\155X\155X\155X\1557\151") armorTexture[4][1][2]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000\245\1506\1516\1516\151\022\151x\1557\1557\1557\151\022\1517\151\255\255\255\255\255\255\253\159\220\159\253\159\253\159\253\159W\1557\155\255\255\255\255\253\159\253\159\252\159\220\159\220\159\187\1556\1516\151\220\159\220\159\154\155\220\1597\151\022\151\022\151W\155X\155X\1557\1517\1517\151\245\150\000\000\000\000\000\000\000\000\000\000") armorTexture[4][2]=image.new("\006\000\000\000\011\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000X\1557\151\022\1517\1557\1557\151X\155\154\191\189\227\221\227\155\191X\1557\151\155\203\254\211\254\211\187\179y\155\022\151z\187\220\167\220\167\154\155x\155\022\151X\155\154\155\187\155y\155W\1557\151W\155X\155X\155X\155x\155y\155\255\127\255\127\255\127\255\1277\151y\155\255\127\255\127\255\127\255\1277\151y\155\255\127\255\127\255\127\255\1277\151y\155\255\127\255\127\255\127\255\1277\151X\155\255\127\255\127\255\127\255\127y\155") armorTexture[4][3]=image.new("\006\000\000\000\014\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000\021\151\255\127\255\127\255\127\255\127X\1556\151\255\127\255\127\255\127\255\127y\155X\155\255\127\255\127\255\127\255\1277\1517\151\255\127\255\127\255\127\255\1277\1516\151\255\127\255\127\255\127\255\1277\151\022\151y\155\220\159\220\159\154\155X\155X\155\219\159\253\159\253\159\154\155X\155X\155\220\159\253\159\252\159\154\155X\1557\155\153\155\220\159\220\159\153\1557\151X\155\154\155\220\159\220\159\154\155X\155y\155\187\155\253\159\253\159\187\155x\155y\155\187\155\253\159\253\159\187\155y\1557\151y\155\154\155\154\155y\155X\155\022\1517\151W\1557\1517\151W\155") armorTexture[4][4]=image.new("\006\000\000\000\006\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000W\155X\155x\155y\155\154\155\154\155X\155y\171\187\187\188\187\154\171y\155X\155\187\183\254\207\254\207\187\179X\155y\155\187\163\253\167\253\167\187\163y\155y\155\154\155\187\155\187\155\154\155y\155x\155y\155y\155y\155X\155X\155") armorTexture[3]={} --Gold armorTexture[3][1]={} armorTexture[3][1][1]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000c\251c\251c\251c\251\132\251c\251c\251c\251#\247\003\247c\251\255\255\255\255\255\255\228\255\228\255\228\255\228\255\228\255\132\251C\247\255\255\255\255\196\255\228\255\228\255\196\255\196\255\196\255C\247C\247C\247C\247C\247c\251\164\255\164\255\164\255\196\255C\247\000\000\000\000\000\000\000\000\000\000c\251c\251c\251c\251C\247") armorTexture[3][1][2]=image.new("\010\000\000\000\005\000\000\000\000\000\000\000\020\000\000\000\016\000\001\000#\247C\247C\247C\247C\247\132\251c\251c\251C\247C\247C\247\255\255\255\255\255\255\228\255\196\255\228\255\228\255\228\255c\251c\251\255\255\255\255\228\255\228\255\228\255\196\255\196\255\196\255C\247C\247\196\255\196\255\164\251\196\255C\247#\247#\247c\251c\251c\251C\247C\247C\247#\247\000\000\000\000\000\000\000\000\000\000") armorTexture[3][2]=image.new("\006\000\000\000\011\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000c\251C\247#\247c\251c\251C\247c\251\174\251\216\255\216\255\174\251c\251c\251\169\251\239\255\239\255\170\255\132\251C\247\132\251\196\255\196\255\164\251\131\251C\247c\251\164\251\164\255\132\251c\251C\247c\251c\251c\251c\251\132\251\132\251\255\127\255\127\255\127\255\127C\247\131\251\255\127\255\127\255\127\255\127C\247\131\251\255\127\255\127\255\127\255\127C\247\132\251\255\127\255\127\255\127\255\127C\247c\251\255\127\255\127\255\127\255\127\132\251") armorTexture[3][3]=image.new("\006\000\000\000\014\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000#\247\255\127\255\127\255\127\255\127\132\251C\247\255\127\255\127\255\127\255\127c\251c\251\255\127\255\127\255\127\255\127c\251C\247\255\127\255\127\255\127\255\127C\247C\247\255\127\255\127\255\127\255\127c\247C\247\132\251\196\255\228\255\164\251c\251c\251\164\251\228\255\228\255\164\251c\251c\251\164\251\228\255\228\255\164\251c\251c\251\132\251\196\255\196\255\132\251C\247c\251\164\251\228\255\196\255\164\251c\251\132\251\164\255\228\255\228\255\164\255\132\251\132\251\196\255\228\255\228\255\196\255\132\251c\251\132\251\164\251\164\251\132\251c\251#\247C\247c\251C\247C\251c\251") armorTexture[3][4]=image.new("\006\000\000\000\006\000\000\000\000\000\000\000\012\000\000\000\016\000\001\000c\251c\251\132\251\132\251\164\251\164\251c\251\134\251\169\251\169\255\166\251\132\251c\251\168\251\237\255\237\255\168\251c\251\132\251\197\255\230\255\230\255\197\255\132\251\132\251\164\251\196\255\196\255\164\251\132\251\132\251\132\251\132\251\132\251c\251c\251") --1:left / 2:right playerTexture[1]=image.new("\8\0\0\0 \0\0\0\0\0\0\0\16\0\0\0\16\0\1\0\162\156\162\156\162\160\130\152\130\152\130\152\130\152\130\152\195\160\162\156\130\152\162\156\130\152\130\152\130\152\130\152\130\152\130\152\130\152\162\156\130\152\130\152\130\152\162\156\163\156\162\156\130\152\130\152\162\156\130\156\130\152\130\152\195\164\234\217\169\205\129\148\130\152\130\152\130\152\130\152\169\209\202\213\136\205\163\156\130\152\130\152\130\152\130\152g\197\168\205\234\217\12\218G\189\130\156\130\152\162\156g\197\169\209\11\218\235\217\235\217\235\217\234\217\168\205\0\0\0\0R\130R\130R\130R\130\0\0\0\0\0\0\0\0R\130\16\130\16\130R\130\0\0\0\0\0\0\0\0R\130\16\130\16\130R\130\0\0\0\0\0\0\0\0R\130\16\130\16\130R\130\0\0\0\0\0\0\0\0\169\205\202\213\202\213\202\213\0\0\0\0\0\0\0\0\202\213\169\205\202\213\202\213\0\0\0\0\0\0\0\0\202\213\169\205\202\213\202\213\0\0\0\0\0\0\0\0\202\213\169\205\202\213\169\205\0\0\0\0\0\0\0\0\202\213\202\213\202\213\169\205\0\0\0\0\0\0\0\0\202\213\202\213\202\213\202\213\0\0\0\0\0\0\0\0\169\205\202\213\169\205\202\213\0\0\0\0\0\0\0\0\169\205\202\213\202\213\202\213\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\209\156\174\152\209\156\0\0\0\0\0\0\0\0\209\156\174\152\174\152\209\156\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\174\152\209\156\209\156\0\0\0\0\0\0\0\0\209\156\209\156\209\156\209\156\0\0\0\0\0\0\0\0\209\156\209\156)\165)\165\0\0\0\0\0\0\0\0)\165)\165)\165)\165\0\0\0\0\0\0\0\0)\165)\165)\165)\165\0\0\0\0") playerTexture[2]=image.new("\008\000\000\000\032\000\000\000\000\000\000\000\016\000\000\000\016\000\001\000\129\152\129\152\129\152\129\152\129\152\162\156\162\156\162\156\129\152\129\152\129\152\129\152\130\156\129\152\130\152\162\160\130\156\097\152\129\152\129\152\130\152\129\152\097\148\129\152\129\152\130\152\130\156\130\156\129\152\129\152\130\156\162\156\129\152\129\152\129\152\129\152\097\148\169\209\234\217\195\164\129\152\129\152\130\152\097\152\130\156\135\205\202\213\168\209\130\156\129\152\130\156\071\189\012\218\234\217\136\205\103\197\136\205\136\205\234\217\136\205\235\217\202\213\169\209\103\197alal\115\130\115\130\115\130\115\130alalalal\016\130\016\130\016\130\115\130alalalal\115\130\016\130\016\130\115\130alalalal\115\130\016\130\016\130\115\130alalalal\202\213\202\213\202\213\169\209alalalal\202\213\202\213\202\213\169\209alalalal\169\209\202\213\202\213\169\209alalalal\169\209\202\213\202\213\202\213alalalal\169\209\202\213\169\209\202\213alalalal\202\213\202\213\169\209\202\213alalalal\202\213\202\213\169\209\202\213alalalal\202\213\202\213\202\213\202\213alalalal\209\156\209\156\174\152\209\156alalalal\209\156\174\152\174\152\209\156alalalal\209\156\174\152\209\156\209\156alalalal\209\156\174\152\209\156\209\156alalalal\209\156\174\152\209\156\209\156alalalal\209\156\174\152\209\156\209\156alalalal\209\156\174\152\209\156\209\156alalalal\209\156\209\156\209\156\209\156alalalal\209\156\209\156\209\156\209\156alalalal\041\165\041\165\209\156\209\156alalalal\041\165\041\165\041\165\041\165alalalal\041\165\041\165\041\165\041\165alal") ---------- BLOCK AND ITEM DATA ---------- !DATA IDList = {} -- lookup for an id Block = class() -- set default fallback properties Block.type = "block" Block.hardness = 0.1 Block.tool = 0 Block.toolLevel = 0 Block.dropAlways = true Block.itemDrops = {} Block.transparent = false Block.lightSource = false Block.fuel = nil Block.furnaceProduct = nil Block.waterLevel = 0 Block.lavaLevel = 0 Block.alwaysUpdate = false Block.stackable = true Block.waterproof = true Block.flammable = false function Block:init(id, name, solid, canWalkThrough, hardness, tool, dropAlways, itemDrops, transparent, lightSource, isFlammable, toolLevel) self.id = id self.name = name or "" self.solid = solid self.canWalkThrough = canWalkThrough -- optional properties (Block class' properties are used otherwise) if hardness ~= nil then self.hardness = hardness end if tool ~= nil then self.tool = tool end if toolLevel ~= nil then self.toolLevel = toolLevel end if dropAlways ~= nil then self.dropAlways = dropAlways end if itemDrops ~= nil then self.itemDrops = itemDrops end if transparent ~= nil then self.transparent = transparent end if lightSource ~= nil then self.lightSource = lightSource end if flammable ~= nil then self.flammable = flammable end -- optional handlers self.update = nil -- function(block, coordX, coordY): gets called after placement and adjacent changes self.tickUpdate = nil -- function(block, coordX, coordY): gets called every world update tick and on screen or block.alwaysUpdate == true self.use = nil -- function(block, coordX, coordY): gets called when the user tries to interact with block. Return true if interaction was successful! self.place = nil -- function(block, coordX, coordY): gets called when user tries to place block. Return true if placement was successful! self.destroyed = nil -- function(block, coordX, coordY): gets called when the block gets destroyed (drops are handled externally) --register self in IDList IDList[self.id] = self end function Block:setProperty(property, value) self[property] = value return self end function Block:draw(gc, pixelX, pixelY, blockX, blockY) if IDTexture[self.id] then gc:drawImage(IDTexture[self.id], pixelX, pixelY) end end function Block:drawAsItem(gc, pixelX, pixelY, scale) if IDTexture[self.id] then if scale == nil or scale == 1 then gc:drawImage(IDTexture[self.id], pixelX, pixelY) else gc:drawImage(image.copy(IDTexture[self.id], image.width(IDTexture[self.id]) * scale, image.height(IDTexture[self.id]) * scale), pixelX, pixelY) end end end Block_air = Block(0, "Air", false, true, 0.1, 0, false, {}, true, false, false):setProperty("waterproof", false) Block_dirt = Block(1, "Dirt", true, false, 2.5, 2, true, {{1, 1}}, false) Block_grass = Block(2, "Grass Block", true, false, 2.5, 2, true, {{1, 1}}, false) Block_stone = Block(3, "Stone", true, false, 5, 1, false, {{11 , 1}}, false) Block_bedrock = Block(4, "Bedrock", true, false, 99999999999, 1, false, {}, false) --i really hope no one attempts to break this in survival... Block_ladder = Block(5, "Ladder", true, true, 2.5, 3, true, {{5, 1}}, true):setProperty("flammable", 4) Block_glass = Block(6, "Glass", true, false, 0.5, 1, false, {}, true) Block_wood = Block(7, "Wood", true, false, 4, 3, true, {{7, 1}}, false):setProperty("fuel", 35):setProperty("furnaceProduct", 53):setProperty("flammable", 7) Block_leaves = Block(8, "Leaves", true, true, 0.5, 4, true, {{13, 1, 0.35}, {51, 1, 0.035}}, true):setProperty("flammable", 3) Block_water_source = Block(9, "Water", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 8):setProperty("waterproof", false) Block_sand = Block(10, "Sand", true, false, 2.5, 2, true, {{10, 1}}, false):setProperty("furnaceProduct", 6) Block_cobblestone = Block(11, "Cobblestone", true, false, 6.5, 1, false, {{11, 1}}, false):setProperty("furnaceProduct", 3) Block_planks = Block(12, "Wooden Planks", true, false, 4, 3, true, {{12, 1}}, false):setProperty("fuel", 35):setProperty("flammable", 5) Block_sapling = Block(13, "Sapling", true, true, 0.5, 4, true, {{13, 1}}, true):setProperty("waterproof", false) Block_rose = Block(14, "Rose", true, true, 0.5, 4, true, {{14, 1}}, true):setProperty("waterproof", false) Block_torch = Block(15, "Torch", true, true, 0.5, 4, true, {{15, 1}}, true, 6):setProperty("waterproof", false) Block_coal_ore = Block(16, "Coal Ore", true, false, 10, 1, false, {{53, 1}}, false):setProperty("toolLevel", 1) Block_iron_ore = Block(17, "Iron Ore", true, false, 10, 1, false, {{17, 1}}, false):setProperty("toolLevel", 2):setProperty("furnaceProduct", 54) Block_lava_source = Block(18, "Lava", false, true, 0.5, 3, true, {}, true, 8):setProperty("lavaLevel", 4):setProperty("waterproof", false) Block_gold_ore = Block(19, "Gold Ore", true, false, 10, 1, false, {{19, 1}}, false):setProperty("toolLevel", 3):setProperty("furnaceProduct", 56) Block_diamond_ore = Block(20, "Diamond Ore", true, false, 10, 1, false, {{55, 1}}, false):setProperty("toolLevel", 3) Block_crafting_table = Block(21, "Crafting Table", true, false, 2.5, 3, true, {{21, 1}}, false) Block_wooden_door_open = Block(22, "Open Wooden Door", true, true, 3, 3, true, {{57, 1}}, true) IDList[23] = Block_wooden_door_open -- backwards compatibility Block_wooden_door_closed = Block(24, "Closed Wooden Door", true, false, 3, 3, true, {{57, 1}}, true) IDList[25] = Block_wooden_door_closed -- backwards compatibility Block_wool = Block(26, "Wool", true, false, 2, 3, true, {{26, 1}}, false):setProperty("flammable", 2) Block_bed = Block(27, "Bed", true, false, 3, 3, true, {{60, 1}}, true) Block_tnt = Block(28, "TNT", true, false, 2, 4, true, {{28, 1}}, false):setProperty("flammable", 1) Block_fire = Block(29, "Fire", true, true, 0.5, 0, false, {}, true, 6):setProperty("waterproof", false) Block_crop_0 = Block(30, "Crop 0", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_1 = Block(31, "Crop 1", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_2 = Block(32, "Crop 2", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_3 = Block(33, "Crop 3", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_4 = Block(34, "Crop 4", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_5 = Block(35, "Crop 5", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_crop_6 = Block(36, "Crop 6", true, true, 0.5, 4, true, {{82, 1}}, true):setProperty("alwaysUpdate", true):setProperty("waterproof", false) Block_wheat = Block(37, "Wheat", true, true, 0.5, 4, true, {{83, 1}, {82, 1, 0.5}, {82, 1, 0.5}, {82, 1, 0.5}}, true):setProperty("waterproof", false) Block_farmland_dry = Block(38, "Farmland dry", true, false, 2.5, 2, true, {{1, 1}}, false) Block_farmland_wet = Block(39, "Farmland wet", true, false, 2.5, 2, true, {{1, 1}}, false) Block_gravel = Block(40, "Gravel", true, false, 2.5, 2, true, {{40, 1, 0.9, 85}}, false) Block_trunk_wood = Block(41, "Trunk Wood", true, true, 4, 3, true, {{7, 1}}, true):setProperty("flammable", 7) Block_obsidian = Block(42, "Obsidian", true, false, 100, 1, false, {{42, 1}}, false):setProperty("toolLevel", 5) Block_stone_stairs_right = Block(43, "Stone Stairs", true, false, 6.5, 1, false, {{43, 1}}, false) Block_wooden_stairs_right = Block(44, "Wooden Stairs", true, false, 4, 3, true, {{44, 1}}, false):setProperty("flammable", 5) Block_stone_stairs_left = Block(45, "Stone Stairs", true, false, 6.5, 1, false, {{43, 1}}, false):setProperty("flammable", 5) Block_wooden_stairs_left = Block(46, "Wooden Stairs", true, false, 4, 3, true, {{44, 1}}, false) Block_netherrack = Block(47, "Netherrack", true, false, 4, 1, false, {{47, 1}}, false):setProperty("flammable", "netherrack") Block_hamster = Block(49, "Hamster", true, false, 9999999999, 1, false, {}, true, 1000):setProperty("alwaysUpdate", true) Block_furnace = Block(100, "Furnace", true, false, 10, 1, false, {{100, 1, 1}}, false) function Block_furnace:createInstance(id) if not id then id = nextFree(IDList, 101, 199) end if id then local newFurnace = Block(id, "Furnace", true, false) newFurnace.content = {inputStack = {nil, 0}, outputStack = {nil, 0}, fuelStack = {nil, 0}} newFurnace.heat = 0 newFurnace.maxHeat = 1 newFurnace.progress = 0 function newFurnace:use(x, y) addScreen(gameFurnace, newFurnace) return true end function newFurnace:destroyed(x, y) for i, stack in pairs(self.content) do if stack[1] then addItem(stack) end end IDList[self.id] = nil end -- redirect queries to Block_furnace local metatable = getmetatable(newFurnace) local newMeta = {} for k, v in pairs(metatable) do newMeta[k] = v end newMeta.__index = Block_furnace setmetatable(newFurnace, newMeta) IDList[id] = newFurnace return newFurnace else return false end end Block_chest = Block(200, "Chest", true, false, 2.5, 3, true, {{200, 1, 1}}, false) function Block_chest:createInstance(id) if not id then id = nextFree(IDList, 201, 299) end if id then local newChest = Block(id, "Chest", true, false) newChest.content = {} for i = 1, 27 do newChest.content[i] = {nil, 0} end function newChest:use(x, y) addScreen(gameChest, newChest) return true end function newChest:destroyed(x, y) for i, stack in pairs(self.content) do if stack[1] then addItem(stack) end end IDList[self.id] = nil end -- redirect queries to Block_chest local metatable = getmetatable(newChest) local newMeta = {} for k, v in pairs(metatable) do newMeta[k] = v end newMeta.__index = Block_chest setmetatable(newChest, newMeta) return newChest else return false end end Block_dungeon_chest = Block(200, "Dungeon Chest", true, false, 2.5, 3, true, {{200, 1, 1}}, false) function Block_dungeon_chest:use(x, y) local newChest = Block_chest:createInstance() if newChest then world[x][y] = newChest for ii = 1, 27 do local r = math.random(1000) if r<20 then newChest.content[ii]={Item_apple, math.random(4)} elseif r<40 then newChest.content[ii]={Item_wheat, math.random(4)} elseif r<60 then newChest.content[ii]={Item_bread, math.random(4)} elseif r<80 then newChest.content[ii]={Item_gunpowder, math.random(4)} elseif r<100 then newChest.content[ii]={Item_string, math.random(4)} elseif r<120 then newChest.content[ii]={Item_iron_ingot, math.random(4)} elseif r<140 then newChest.content[ii]={Item_bucket, math.random(4)} elseif r<160 then newChest.content[ii]={Item_stick, math.random(4)} elseif r<180 then newChest.content[ii]={Item_seeds, math.random(4)} elseif r<200 then newChest.content[ii]={Item_flint, math.random(4)} elseif r<220 then newChest.content[ii]={Item_arrow, math.random(4)} elseif r==999 then --consolation prize ;) newChest.content[ii]={Item_diamond_hoe, 1400} elseif r==1000 then --jackpot newChest.content[ii]={Item_diamond, math.random(2,15)} print("Jackpot!") end end addScreen(gameChest, newChest) return true end end Block_flowing_water_1 = Block(301, "Flowing Water level 1", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 1):setProperty("waterproof", false) Block_flowing_water_2 = Block(302, "Flowing Water level 2", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 2):setProperty("waterproof", false) Block_flowing_water_3 = Block(303, "Flowing Water level 3", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 3):setProperty("waterproof", false) Block_flowing_water_4 = Block(304, "Flowing Water level 4", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 4):setProperty("waterproof", false) Block_flowing_water_5 = Block(305, "Flowing Water level 5", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 5):setProperty("waterproof", false) Block_flowing_water_6 = Block(306, "Flowing Water level 6", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 6):setProperty("waterproof", false) Block_flowing_water_7 = Block(307, "Flowing Water level 7", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 7):setProperty("waterproof", false) Block_flowing_water_8 = Block(308, "Flowing Water level 8", false, true, 0.1, 3, true, {}, true):setProperty("waterLevel", 8):setProperty("waterproof", false) Block_flowing_lava_1 = Block(311, "Flowing Lava level 1", false, true, 0.5, 3, true, {}, true, 8):setProperty("lavaLevel", 1):setProperty("waterproof", false) Block_flowing_lava_2 = Block(312, "Flowing Lava level 2", false, true, 0.5, 3, true, {}, true, 8):setProperty("lavaLevel", 2):setProperty("waterproof", false) Block_flowing_lava_3 = Block(313, "Flowing Lava level 3", false, true, 0.5, 3, true, {}, true, 8):setProperty("lavaLevel", 3):setProperty("waterproof", false) Block_flowing_lava_4 = Block(314, "Flowing Lava level 4", false, true, 0.5, 3, true, {}, true, 8):setProperty("lavaLevel", 4):setProperty("waterproof", false) Block_zombie_spawner = Block(320, "Zombie Spawner", true, false, 16, 1, false, {}, false) Block_skeleton_spawner = Block(321, "Skeleton Spawner", true, false, 16, 1, false, {}, false) Block_redstone_0 = Block(350, "Redstone 0", true, true, 0.5, 1, true, {{51, 1}}, true) Item = class() -- set default fallback properties Item.type = "item" Item.itemType = 0 -- 0=Miscellaneous/1=Pickaxe/2=Shovel/3=Axe/4=Sword/5=Hoe/6=Armor/9=Spawnegg/10=food, Item.minespeed = 0.5 Item.attackDamage = 0.5 Item.toolLevel = 0 Item.maxHealth = 1 Item.armor = false Item.heal = 0 Item.fuel = nil Item.furnaceProduct = nil Item.waterLevel = 0 Item.lavaLevel = 0 function Item:init(id, name, stackable, itemType, minespeed, attackDamage, maxHealth, toolLevel, armor, heal) self.type = "item" self.id = id self.name = name or "" self.stackable = stackable -- optional properties (Item class' properties are used otherwise) if itemType then self.itemType = itemType end if minespeed then self.minespeed = minespeed end if attackDamage then self.attackDamage = attackDamage end if toolLevel then self.toolLevel = toolLevel end if maxHealth then self.maxHealth = maxHealth end if armor then self.armor = armor end if heal then self.heal = heal end -- optional handlers self.use = nil self.place = nil --register self in IDList IDList[self.id] = self end function Item:setProperty(property, value) self[property] = value return self end function Item:draw(gc, x, y, scale) if IDTexture[self.id] then if scale == nil or scale == 1 then gc:drawImage(IDTexture[self.id], x, y) else gc:drawImage(image.copy(IDTexture[self.id], image.width(IDTexture[self.id]) * scale, image.height(IDTexture[self.id]) * scale), x, y) end end end -- Item:init(id, name, stackable, itemType, minespeed, attackDamage, maxHealth, toolLevel, armor, heal) Item_apple = Item(51, "Apple", true, 10):setProperty("heal", 4) Item_stick = Item(52, "Stick", true) Item_coal = Item(53, "Coal", true):setProperty("fuel", 184) Item_iron_ingot = Item(54, "Iron Ingot", true) Item_diamond = Item(55, "Diamond", true) Item_gold_ingot = Item(56, "Gold Ingot", true) Item_wooden_door = Item(57, "Wooden Door", true) Item_meat = Item(58, "Meat", true, 10):setProperty("heal", 3):setProperty("furnaceProduct", 59) Item_cooked_meat = Item(59, "Cooked Meat", true, 10):setProperty("heal", 8) Item_bed = Item(60, "Bed", true) Item_wooden_pickaxe = Item(61, "Wooden Pickaxe", false, 1, 1, 1, 60, 1) Item_stone_pickaxe = Item(62, "Stone Pickaxe", false, 1, 2, 1, 132, 2) Item_iron_pickaxe = Item(63, "Iron Pickaxe", false, 1, 3, 1, 251, 3) Item_diamond_pickaxe = Item(64, "Diamond Pickaxe", false, 1, 5, 1, 1562, 5) Item_golden_pickaxe = Item(65, "Golden Pickaxe", false, 1, 1, 33, 4) Item_wooden_shovel = Item(66, "Wooden Shovel",false, 2, 1, nil, 60, 1) Item_stone_shovel = Item(67, "Stone Shovel",false, 2, 2, nil, 132, 2) Item_iron_shovel = Item(68, "Iron Shovel",false, 2, 3, nil, 251, 3) Item_diamond_shovel = Item(69, "Diamond Shovel",false, 2, 5, nil, 1562, 5) Item_golden_shovel = Item(70, "Golden Shovel",false, 2, 4, nil, 33, 4) Item_wooden_axe = Item(71, "Wooden Axe", false, 3, 1, nil, 60, 1) Item_stone_axe = Item(72, "Stone Axe", false, 3, 2, nil, 132, 2) Item_iron_axe = Item(73, "Iron Axe", false, 3, 3, nil, 251, 3) Item_diamond_axe = Item(74, "Diamond Axe", false, 3, 5, nil, 1562, 5) Item_golden_axe = Item(75, "Golden Axe", false, 3, 4, nil, 33, 4) Item_wooden_sword = Item(76, "Wooden Sword", false, 4, nil, 2, 60, 1) Item_stone_sword = Item(77, "Stone Sword", false, 4, nil, 3, 132, 2) Item_iron_sword = Item(78, "Iron Sword", false, 4, nil, 4, 251, 3) Item_diamond_sword = Item(79, "Diamond Sword", false, 4, nil, 5, 1562, 5) Item_golden_sword = Item(80, "Golden Sword", false, 4, nil, 4, 33, 4) Item_gunpowder = Item(81, "Gunpowder", true) Item_seeds = Item(82, "Seeds", true) Item_wheat = Item(83, "Wheat", true) Item_bread = Item(84, "Bread", true, 10):setProperty("heal", 5) Item_flint = Item(85, "Flint", true) Item_wooden_hoe = Item(86, "Wooden Hoe", false, 5, nil, nil, 60, 1) Item_stone_hoe = Item(87, "Stone Hoe", false, 5, nil, nil, 132, 2) Item_iron_hoe = Item(88, "Iron Hoe", false, 5, nil, nil, 251, 3) Item_diamond_hoe = Item(89, "Diamond Hoe", false, 5, nil, nil, 1562, 4) Item_golden_hoe = Item(90, "Golden Hoe", false, 5, nil, nil, 33, 5) Item_flint_and_steel = Item(91, "Flint and Steel", false, 0, nil, nil, 65) Item_bow = Item(92, "Bow", false, nil, nil, nil, 385) Item_arrow = Item(93, "Arrow", true) Item_feather = Item(94, "Feather", true) Item_bone = Item(95, "Bone", true) Item_bone_meal = Item(96, "Bone Meal", true) Item_string = Item(97, "String", true) Item_fishing_rod = Item(98, "Fishing Rod", false, nil, nil, nil, 65) Item_leather = Item(99, "Leather", true) Item_bucket = Item(401, "Bucket", true) Item_water_bucket = Item(402, "Water Bucket", true) Item_lava_bucket = Item(403, "Lava Bucket", true) Item_fish = Item(405, "Fish", true, 10):setProperty("heal", 2):setProperty("furnaceProduct", 406) Item_cooked_fish = Item(406, "Cooked Fish", true, 10):setProperty("heal", 5) Armor = class(Item) function Armor:init(id, name, part, material, health, armor, textureContainer) Item.init(self, id, name, false, 6, nil, nil, health, nil, armor) self.armorPart = part self.material = material self.textureContainer = textureContainer end function Armor:drawOnPlayer(gc, playerX, playerY, direction) if self.armorPart == 1 then gc:drawImage(self.textureContainer[1][direction], playerX - 1, playerY - 1) elseif self.armorPart == 2 then gc:drawImage(self.textureContainer[2], playerX + 1, playerY + 8) elseif self.armorPart == 3 then gc:drawImage(self.textureContainer[3], playerX + 1, playerY + 15) elseif self.armorPart == 4 then gc:drawImage(self.textureContainer[4], playerX + 1, playerY + 27) end end function Armor:createRecipe() local requiredAmount = 0 if self.armorPart == 1 then requiredAmount = 5 elseif self.armorPart == 2 then requiredAmount = 8 elseif self.armorPart == 3 then requiredAmount = 7 elseif self.armorPart == 2 then requiredAmount = 4 end return Recipe({{self.material, requiredAmount}}, {self, self.maxHealth}, true) end Item_leather_cap = Armor(410, "Leather Cap", 1, Item_leather, 56, 1, armorTexture[1]) Item_leather_tunic = Armor(411, "Leather Tunic", 2, Item_leather, 81, 3, armorTexture[1]) Item_leather_pants = Armor(412, "Leather Pants", 3, Item_leather, 76, 2, armorTexture[1]) Item_leather_boots = Armor(413, "Leather Boots", 4, Item_leather, 66, 1, armorTexture[1]) Item_iron_helmet = Armor(415, "Iron Helmet", 1, Item_iron_ingot, 166, 2, armorTexture[2]) Item_iron_chestplate = Armor(416, "Iron Chestplate", 2, Item_iron_ingot, 241, 6, armorTexture[2]) Item_iron_leggins = Armor(417, "Iron Leggins", 3, Item_iron_ingot, 226, 5, armorTexture[2]) Item_iron_boots = Armor(418, "Iron Boots", 4, Item_iron_ingot, 196, 2, armorTexture[2]) Item_diamond_helmet = Armor(420, "Diamond Helmet", 1, Item_diamond, 364, 3, armorTexture[4]) Item_diamond_chestplate = Armor(421, "Diamond Chestplate", 2, Item_diamond, 529, 8, armorTexture[4]) Item_diamond_leggins = Armor(422, "Diamond Leggins", 3, Item_diamond, 496, 6, armorTexture[4]) Item_diamond_boots = Armor(423, "Diamond Boots", 4, Item_diamond, 430, 3, armorTexture[4]) Item_golden_helmet = Armor(425, "Golden Helmet", 1, Item_gold_ingot, 78, 2, armorTexture[3]) Item_golden_chestplate = Armor(426, "Golden Chestplate", 2, Item_gold_ingot, 113, 5, armorTexture[3]) Item_golden_leggins = Armor(427, "Golden Leggins", 3, Item_gold_ingot, 106, 3, armorTexture[3]) Item_golden_boots = Armor(428, "Golden Boots", 4, Item_gold_ingot, 92, 1, armorTexture[3]) SpawnEgg = class(Item) function SpawnEgg:init(id, mobName, baseColor, overColor) local name = "Spawn "..mobName:gsub("(%c).+", string.upper) Item.init(self, id, name, true, 9) IDTexture[id] = createSpawnEggTexture(baseColor, overColor) self.mob = mobName end function SpawnEgg:use(x, y, eggStack) --local id = nextFree(mobList) --if id then Mob[self.mob](selBlock[1], selBlock[2]) --local mobClass = Mob[self.mob] --mobList[id] = mobClass(selBlock[1], selBlock[2], id) decMeta(eggStack) --end end Item_spawn_creeper = SpawnEgg(429, "creeper", "green", "dark grey") Item_spawn_skeleton = SpawnEgg(430, "skeleton", "light grey","dark grey") Item_spawn_zombie = SpawnEgg(431, "zombie", "turquoise", "dark green") Item_spawn_pig = SpawnEgg(432, "pig", "rose", "red") Item_spawn_sheep = SpawnEgg(433, "sheep", "light grey", "rose") Item_spawn_cow = SpawnEgg(434, "cow", "brown", "grey") Item_spawn_chicken = SpawnEgg(435, "chicken", "light grey", "red") Item_spawn_ghast = SpawnEgg(436, "ghast", "light grey", "grey") Recipe = class() function Recipe:init(ingredients, product, requiresCraftingTable) self.ingredients = ingredients self.product = product self.requiresCraftingTable = requiresCraftingTable end function Recipe.craft(recipe) local leftRequiredAmount = 0 for i, ingredient in pairs(recipe.ingredients) do leftRequiredAmount = ingredient[2] local slot = 1 while leftRequiredAmount > 0 and slot <= 36 do if inventory[slot][1] == ingredient[1] then local usedAmount = math.min(inventory[slot][2], leftRequiredAmount) inventory[slot][2] = inventory[slot][2] - usedAmount leftRequiredAmount = leftRequiredAmount - usedAmount end slot = slot + 1 end end checkForEmptySlots() addItem(recipe.product) end recipeList = { ["Wooden Planks"] = Recipe({{Block_wood, 1}}, {Block_planks, 4}, false), ["Sticks"] = Recipe({{Block_planks, 2}}, {Item_stick, 4}, false), ["Torch"] = Recipe({{Item_stick, 1}, {Item_coal, 1}}, {Block_torch, 4}, false), ["Crafting Table"] = Recipe({{Block_planks, 4}}, {Block_crafting_table, 1}, false), ["Chest"] = Recipe({{Block_planks, 8}}, {Block_chest, 1}, true), ["Furnace"] = Recipe({{Block_cobblestone, 8}}, {Block_furnace, 1}, true), ["Bed"] = Recipe({{Block_planks, 3}, {Block_wool, 3}}, {Item_bed, 1}, true), ["Ladder"] = Recipe({{Item_stick, 7}}, {Block_ladder, 3}, true), ["Door"] = Recipe({{Block_planks, 8}}, {Item_wooden_door, 1}, true), ["Hamster"] = Recipe({{Item_diamond_chestplate, 8}, {Block_obsidian, 8, true}}, {Block_hamster, 1, true}), ["Wooden Pickaxe"] = Recipe({{Item_stick, 2}, {Block_planks, 3}}, {Item_wooden_pickaxe, Item_wooden_pickaxe.maxHealth}, true), ["Stone Pickaxe"] = Recipe({{Item_stick, 2}, {Block_cobblestone, 3}}, {Item_stone_pickaxe, Item_stone_pickaxe.maxHealth}, true), ["Iron Pickaxe"] = Recipe({{Item_stick, 2}, {Item_iron_ingot, 3}}, {Item_iron_pickaxe, Item_iron_pickaxe.maxHealth}, true), ["Diamond Pickaxe"] = Recipe({{Item_stick, 2}, {Item_diamond, 3}}, {Item_diamond_pickaxe, Item_diamond_pickaxe.maxHealth}, true), ["Golden Pickaxe"] = Recipe({{Item_stick, 2}, {Item_gold_ingot, 3}}, {Item_golden_pickaxe, Item_golden_pickaxe.maxHealth}, true), ["Wooden Shovel"] = Recipe({{Item_stick, 2}, {Block_planks, 1}}, {Item_wooden_shovel, Item_wooden_shovel.maxHealth}, true), ["Stone Shovel"] = Recipe({{Item_stick, 2}, {Block_cobblestone, 1}}, {Item_stone_shovel, Item_stone_shovel.maxHealth}, true), ["Iron Shovel"] = Recipe({{Item_stick, 2}, {Item_iron_ingot, 1}}, {Item_iron_shovel, Item_iron_shovel.maxHealth}, true), ["Diamond Shovel"] = Recipe({{Item_stick, 2}, {Item_diamond, 1}}, {Item_diamond_shovel, Item_diamond_shovel.maxHealth}, true), ["Golden Shovel"] = Recipe({{Item_stick, 2}, {Item_gold_ingot, 1}}, {Item_golden_shovel, Item_golden_shovel.maxHealth}, true), ["Wooden Axe"] = Recipe({{Item_stick, 2}, {Block_planks, 3}}, {Item_wooden_axe, Item_wooden_axe.maxHealth}, true), ["Stone Axe"] = Recipe({{Item_stick, 2}, {Block_cobblestone, 3}}, {Item_stone_axe, Item_stone_axe.maxHealth}, true), ["Iron Axe"] = Recipe({{Item_stick, 2}, {Item_iron_ingot, 3}}, {Item_iron_axe, Item_iron_axe.maxHealth}, true), ["Diamond Axe"] = Recipe({{Item_stick, 2}, {Item_diamond, 3}}, {Item_diamond_axe, Item_diamond_axe.maxHealth}, true), ["Golden Axe"] = Recipe({{Item_stick, 2}, {Item_gold_ingot, 3}}, {Item_golden_axe, Item_golden_axe.maxHealth}, true), ["Wooden Sword"] = Recipe({{Item_stick, 1}, {Block_planks, 2}}, {Item_wooden_sword, Item_wooden_sword.maxHealth}, true), ["Stone Sword"] = Recipe({{Item_stick, 1}, {Block_cobblestone, 2}}, {Item_stone_sword, Item_stone_sword.maxHealth}, true), ["Iron Sword"] = Recipe({{Item_stick, 1}, {Item_iron_ingot, 2}}, {Item_iron_sword, Item_iron_sword.maxHealth}, true), ["Diamond Sword"] = Recipe({{Item_stick, 1}, {Item_diamond, 2}}, {Item_diamond_sword, Item_diamond_sword.maxHealth}, true), ["Golden Sword"] = Recipe({{Item_stick, 1}, {Item_gold_ingot, 2}}, {Item_golden_sword, Item_golden_sword.maxHealth}, true), ["Wooden Hoe"] = Recipe({{Item_stick, 2}, {Block_planks, 2}}, {Item_wooden_hoe, Item_wooden_hoe.maxHealth}, true), ["Stone Hoe"] = Recipe({{Item_stick, 2}, {Block_cobblestone, 2}}, {Item_stone_hoe, Item_stone_hoe.maxHealth}, true), ["Iron Hoe"] = Recipe({{Item_stick, 2}, {Item_iron_ingot, 2}}, {Item_iron_hoe, Item_iron_hoe.maxHealth}, true), ["Diamond Hoe"] = Recipe({{Item_stick, 2}, {Item_diamond, 2}}, {Item_diamond_hoe, Item_diamond_hoe.maxHealth}, true), ["Golden Hoe"] = Recipe({{Item_stick, 2}, {Item_gold_ingot, 2}}, {Item_golden_hoe, Item_golden_hoe.maxHealth}, true), ["Bread"] = Recipe({{Item_wheat, 3}}, {Item_bread, 1}, true), ["TNT"] = Recipe({{Block_sand, 4}, {Item_gunpowder, 5}}, {28, 1}, false), ["Flint and Steel"] = Recipe({{Item_iron_ingot, 1}, {Item_flint, 1}}, {Item_flint_and_steel, Item_flint_and_steel.maxHealth}, false), ["Arrow"] = Recipe({{Item_flint, 1}, {Item_stick, 1}, {Item_feather, 1}}, {Item_arrow, 4}, true), ["Bow"] = Recipe({{Item_stick, 3}, {Item_string, 3}}, {Item_bow, Item_bow.maxHealth}, true), ["Bone Meal"] = Recipe({{Item_bone, 1}}, {Item_bone_meal, 3}, false), ["Wool"] = Recipe({{Item_string, 4}}, {Block_wool, 1}, false), ["Stone Stairs"] = Recipe({{Block_cobblestone, 8}}, {Block_stone_stairs_right, 4}, true), ["Wooden Stairs"] = Recipe({{Block_planks, 8}}, {Block_wooden_stairs_right, 4}, true), ["Bucket"] = Recipe({{Item_iron_ingot, 3}}, {Item_bucket, 1}, true), ["Fishing Rod"] = Recipe({{Item_stick, 3}, {Item_string, 2}}, {Item_fishing_rod, 65}, true), ["Leather Cap"] = Item_leather_cap:createRecipe(), ["Leather Tunic"] = Item_leather_tunic:createRecipe(), ["Leather Pants"] = Item_leather_pants:createRecipe(), ["Leather Boots"] = Item_leather_boots:createRecipe(), ["Iron Helmet"] = Item_iron_helmet:createRecipe(), ["Iron Chestplate"] = Item_iron_chestplate:createRecipe(), ["Iron Leggins"] = Item_iron_leggins:createRecipe(), ["Iron Boots"] = Item_iron_boots:createRecipe(), ["Diamond Helmet"] = Item_diamond_helmet:createRecipe(), ["Diamond Chestplate"] = Item_diamond_chestplate:createRecipe(), ["Diamond Leggins"] = Item_diamond_leggins:createRecipe(), ["Diamond Boots"] = Item_diamond_boots:createRecipe(), ["Golden Helmet"] = Item_golden_helmet:createRecipe(), ["Golden Chestplate"] = Item_golden_chestplate:createRecipe(), ["Golden Leggins"] = Item_golden_leggins:createRecipe(), ["Golden Boots"] = Item_golden_boots:createRecipe(), } craftingMenuStructure = { {name = "Structures", "Torch", "Wooden Planks", "Sticks", "Crafting Table", "Chest", "Furnace", "Bed", "Ladder", "Door", "Wooden Stairs", "Stone Stairs", "Wool", "Hamster", }, {name = "Pickaxes and Shovels", "Wooden Pickaxe", "Stone Pickaxe", "Iron Pickaxe", "Golden Pickaxe", "Diamond Pickaxe", "Wooden Shovel", "Stone Shovel", "Iron Shovel", "Golden Shovel", "Diamond Shovel", }, {name = "Axes and Tools", "Wooden Axe", "Stone Axe", "Iron Axe", "Golden Axe", "Diamond Axe", "Fishing Rod", }, {name = "Weapons", "Wooden Sword", "Stone Sword", "Iron Sword", "Golden Sword", "Diamond Sword", "Bow", "Arrow", "Flint and Steel", "TNT", }, {name = "Farming", "Bread", "Bone Meal", "Bucket", "Wooden Hoe", "Stone Hoe", "Iron Hoe", "Golden Hoe", "Diamond Hoe", }, {name = "Armor", "Leather Cap", "Leather Tunic", "Leather Pants", "Leather Boots", "Iron Helmet", "Iron Chestplate", "Iron Leggins", "Iron Boots", "Diamond Helmet", "Diamond Chestplate", "Diamond Leggins", "Diamond Boots", "Golden Helmet", "Golden Chestplate", "Golden Leggins", "Golden Boots", }, } function createCraftingMenu() local craftingMenu = {} local function showCraftingDialogue(category, recipeName) local recipe = recipeList[recipeName] if gameCraft.active then gameCraft:setRecipe(recipe) else addScreen(gameCraft, recipe) end end for ic, category in pairs(craftingMenuStructure) do local subMenu = {category.name} for ii, item in ipairs(category) do if not recipeList[item] then error("Unknown recipe in menu: "..item) end subMenu[ii + 1] = {item, showCraftingDialogue} end craftingMenu[ic] = subMenu end craftingMenu[#craftingMenu + 1] = {"Help",{"Help", on.help}} return craftingMenu end helptimer=0 help={} --{["t"]=helptext,["f"]=requirement} help[1]={["t"]="Move and jump with arrow keys!",["f"]=function () return true end} help[2]={["t"]="Use the touchpad or numpad to move the cursor!",["f"]=function () return help[1].p end} help[3]={["t"]="Use [enter] to break and place blocks!",["f"]=function () return help[2].p and settings.controls==1 end} help[4]={["t"]="Use [+] and [-] or [W] and [,] to change item!",["f"]=function () return help[3].p or help[19].p end} help[5]={["t"]="Use [I] or [ctrl]+[menu] to open the inventory!",["f"]=function () return help[4].p end} help[6]={["t"]="Place a sapling on dirt or grass to let it grow!",["f"]=function () return inventory[selSlot][1] == Block_sapling end} help[7]={["t"]="Use [(-)] (left to [enter]) to use a block/item!",["f"]=function () return (inventory[selSlot][1] or Block_air).use or world[selBlock[1]][selBlock[2]].use end} help[8]={["t"]="Press [(-)] on grass or dirt to plow it to farmland!",["f"]=function () return (inventory[selSlot][1] or Block_air).itemType == 5 end} help[9]={["t"]="Place water near it to make it wet!",["f"]=function () return help[8].p end} help[10]={["t"]="Attack creatures by clicking on them!",["f"]=function () return help[5].p end} help[11]={["t"]="Change your gamemode with [m]!",["f"]=function () return mode==1 end} help[12]={["t"]="It's getting dark, craft torches to stay in safety!",["f"]=function () return worldTime>=16000 end} help[13]={["t"]="Press[(-)] to eat!",["f"]=function () return (inventory[selSlot][1] or Block_air).itemType == 10 end} help[14]={["t"]="You need arrows to use the bow!",["f"]=function () return inventory[selSlot][1]==Item_bow end} help[15]={["t"]="Aim with the cursor and shoot with [(-)]",["f"]=function () return help[15].p end} help[16]={["t"]="Craft a pickaxe to mine stone!",["f"]=function () return world[selBlock[1]][selBlock[2]]==Block_stone end} help[17]={["t"]="Use [(-)] to cast and reel the fishing rod!",["f"]=function () return inventory[selSlot][1]==Item_fishing_rod end} help[18]={["t"]="Wait until the bobber submerges to catch a fish!",["f"]=function () return help[17].p end} help[19]={["t"]="Use [enter] to break and [(-)] to place blocks!",["f"]=function () return help[2].p and settings.controls==2 end} local function returnAir() return Block_air end local metaReturnAir = {__index = returnAir} local function return0() return 0 end local lightMeta = {__index = return0} ----------- CHUNK SYSTEMS ---------- activeChunks = {} chunkSize = 50 Chunk = class() function Chunk:init(ID, size) self.ID = ID self.size = size self.minX = ID * size self.maxX = self.minX + size - 1 --[[ self.world = {} local function returnAir() return Block_air end local metatable = {__index = returnAir} for x = self.minX, self.maxX do self.world[x] = setmetatable({}, metatable) end]] self.mobs = {} activeChunks[ID] = self end function Chunk:initWorld() for x = self.minX, self.maxX do world[x] = setmetatable({}, metaReturnAir) end end function Chunk:initLightMap() -- returns false if lightmap is already initialized if lightMap[self.minX] and lightMap[self.maxX] then return false else for x = self.minX - 16, self.maxX + 16 do if not lightMap[x] then lightMap[x] = setmetatable({}, lightMeta) end end return true end end function Chunk:load(prefix) local split, match = string.split, string.match local minX, size, minY = self.minX, self.size, worldEnd.bottom local varName = prefix..string.gsub(tostring(self.ID), "%-", "n") local chunkStr = var.recall(varName) if not chunkStr or chunkStr == "" then return false end local worldStr, mobStr = chunkStr:match("(.+)|(.*)") self:initWorld() local doLightUpdate = self:initLightMap() local pos = 0 for multi, ID in worldStr:gmatch("(%d+)x?(%d*)") do if ID == "0" then pos = pos + tonumber(multi) else if ID == "" then ID = tonumber(multi) multi = 1 else ID = tonumber(ID) multi = tonumber(multi) end local block = IDList[ID] local relX, x, y; for j = 1, multi do relX = pos % size x = relX + minX y = (pos - relX) / size + minY world[x][y] = block if block then if doLightUpdate and block.lightSource then editLight(x,y,block.lightSource,1) end if block.alwaysUpdate then alwaysUpdate[x..","..y]=true end end pos = pos + 1 end end end --[[ local pos = 0 local ID = nil local multi = nil local doubleID = false local block = 0 local relX, x, y local b = 0 local ready = false local byte = string.byte local iterator = str:gmatch(".") for c1 in iterator do b = byte(c1) if not multi then multi = b elseif doubleID then ID = ID + b - 1 ready = true elseif b > 127 then ID = (b - 128) * 255 doubleID = true else ID = b - 1 ready = true end if ready then if ID == 0 then pos = pos + multi else block = ID for j = 1, multi do relX = pos % size x = relX + minX y = (pos - relX) / size + minY world[x][y] = block pos = pos + 1 end end ready = false multi = nil doubleID = false end end]] self.mobs = {} if mobStr and mobStr ~= "" then local mobListArr = mobStr:split("/") if #mobListArr > 1 then for i, mobStr in pairs(mobListArr) do if mobStr ~= "" then local mobArr = mobStr:split(":") local mobClass = Mob[mobArr[1]] if mobClass then local mob = mobClass(tonumber(mobArr[2]),tonumber(mobArr[3])) mob.health[1] = tonumber(mobArr[4]) end end end end end for x = self.minX, self.maxX do updateSunTop(x) end print("Chunk "..self.ID.." loaded") return true end function Chunk:store(prefix, unload) local worldString = "" local lastID = world[self.minX][worldEnd.bottom].id local multi = 0 local minX, maxX, minY, maxY = self.minX, self.maxX, worldEnd.bottom, worldEnd.top -- serialize chunk block data local block for y = minY, maxY do for x = minX, maxX do block = world[x][y] if lastID == block.id then multi = multi + 1 else if multi == 1 then worldString = worldString..tostring(lastID).."," else worldString = worldString..tostring(multi).."x"..tostring(lastID).."," end lastID = block.id multi = 1 end -- clean up light sources at chunk edges if unload and (x <= minX + 16 or x >= maxX - 16) and block.lightSource then editLight(x, y, block.lightSource, -1) end end end worldString = worldString..multi.."x"..lastID --[[ local char = string.char local floor = math.floor for y = minY, maxY do for x = minX, maxX do if lastID == world[x][y].id and multi < 255 then multi = multi + 1 else if (lastID > 127) then str = str .. char(multi) .. char(floor(lastID/255) + 128) .. char((lastID%255) + 1) else str = str .. char(multi) .. char(lastID + 1) end lastID = world[x][y].id multi = 1 end end end if (lastID > 127) then str = str .. char(multi) .. char(floor(lastID/255) + 128) .. char((lastID%255) + 1) else str = str .. char(multi) .. char(lastID + 1) end]] -- store mobs local mobStr = "" for i, mob in pairs(self.mobs) do mobStr = mobStr .. mob.name .. ":" .. mob.pos[1] .. ":" .. mob.pos[2] .. ":" .. mob.health[1] .. "/" end -- save chunk local varName = prefix..string.gsub(tostring(self.ID), "%-", "n") var.store(varName, worldString .. "|" .. mobStr) print("Chunk " .. self.ID .. " stored: " .. worldString:len() .. " Bytes") if unload then self:unload() end end function Chunk:registerMob(mob) table.insert(self.mobs, mob) end function Chunk:unregisterMob(mob) for i, m in pairs(self.mobs) do if m == mob then table.remove(self.mobs, i) return end end end function Chunk:unload() local myID = self.ID -- celan up world data and light map for x = self.minX, self.maxX do world[x] = nil end --clean up light map and its excess borders local minX, maxX; if (not activeChunks[myID - 1]) then minX = self.minX - 16 else minX = self.minX + 16 end if (not activeChunks[myID + 1]) then maxX = self.maxX + 16 else maxX = self.maxX - 16 end for x = minX, maxX do lightMap[x] = nil end -- destroy self activeChunks[myID] = nil collectgarbage("collect") print("Chunk "..myID.." unloaded") end function getChunkIDAt(x) return math.floor(x / chunkSize) end function getChunkAt(x) return activeChunks[math.floor(x / chunkSize)] end function deleteWorld(name) print("Deleting world: " .. name) local varlist = var.list() for i, v in pairs(varlist) do local storedVariable = v:match(name..".*") if storedVariable then math.eval("DelVar "..storedVariable) end end end ----------- OBJECTS AND MOBS ---------- !OBJECTS objList={} --contains all "dynamic"/moving Objects except mobs objTNT=class() function objTNT:init(x, y, i, fuse) self.index = i -- index in objList self.pos = {x, y} self.v = {0, 0} self.fuse = fuse -- remaining ticks until explosion end function objTNT:draw(gc, px, py) if self.fuse % 2 == 1 then gc:drawImage(objTexture["TNT bright"], px, py) else gc:drawImage(IDTexture[28], px, py) end end function objTNT:tick() -- do movement if validField(self.pos[1], self.pos[2] - 1) and world[self.pos[1]][self.pos[2]-1].canWalkThrough then self.pos[2]=self.pos[2]-1 end self.fuse=self.fuse-1 if self.fuse==0 then doExplosion(self.pos[1], self.pos[2], 16, true) objList[self.index]=nil end updateSoon(2) --updateAt(self.pos[1],self.pos[2]+1,1,2) end objFallingBlock = class() function objFallingBlock:init(x, y, i, block) self.index = i self.pos = {x,y} self.block = block end function objFallingBlock:draw(gc, px, py) self.block:draw(gc, px, py) end function objFallingBlock:tick() if validField(self.pos[1], self.pos[2] - 1) and world[self.pos[1]][self.pos[2] - 1].canWalkThrough then --fall self.pos[2] = self.pos[2] - 1 end if not world[self.pos[1]][self.pos[2] - 1].canWalkThrough then if world[self.pos[1]][self.pos[2]].solid then addItem({self.block, 1}) objList[self.index] = nil else placeBlock(self.pos[1], self.pos[2], self.block) objList[self.index] = nil end end updateSoon(2) end objArrow = class() function objArrow:init(x, y, i, vx, vy, canPickUp) self.index = i self.pos = {x, y} self.vx = math.max(math.min(vx, 1), -1) self.vy = vy self.ang = math.atan(self.vy / self.vx) self.neg = sign(self.vx) self.timeLeft = 200 --1 min. self.canPickUp = canPickUp end function objArrow:draw(gc, px, py) local dx = math.cos(self.ang or 0) * self.neg or 0 local dy = math.sin(self.ang or 0) * self.neg or 0 -- draw "feathers" gc:setPen("medium") gc:setColorRGB(200,200,200) gc:drawLine(px-dx*15,py+dy*15,px-dx*11,py+dy*11) gc:setPen("thin") -- draw stick gc:setColorRGB(200,130,40) gc:drawLine(px,py,px-dx*12,py+dy*12) -- draw head if settings.graphics.objects > 1 then local poly = {px + dx * 6, py - dy * 6, px - dy * 1.5, py - dx * 1.5, px + dy * 1.5, py + dx * 1.5} gc:setColorRGB(150,150,150) gc:fillPolygon(poly) gc:setColorRGB(180,180,180) gc:drawLine(poly[1], poly[2], poly[3], poly[4]) gc:drawLine(poly[1], poly[2], poly[5], poly[6]) else gc:setColorRGB(150,150,150) gc:fillRect(px-1,py-1,3,3) end end function objArrow:tick() self.timeLeft = self.timeLeft-1 if self.timeLeft<=0 then --despawn objList[self.index]=nil return end local damage=0 if self.vx~=0 or self.vy~=0 then --fly self.pos[1]=self.pos[1]+self.vx self.pos[2]=self.pos[2]+self.vy damage=math.sqrt(math.abs(self.vx)^2+math.abs(self.vy)^2) updateSoon(2) end local bx,by=math.floor(self.pos[1]),math.floor(self.pos[2]+1) if attackMob(bx,by,math.floor(damage*7)) then objList[self.index]=nil return elseif self.timeLeft<197 and bx==player.pos[1] and (by==player.pos[2] or by==player.pos[2]+1) then hurtPlayer(math.floor(damage*5),"arrow") objList[self.index]=nil elseif not (validField(bx) and world[bx][by].canWalkThrough) then --hit wall self.vx=0 self.vy=0 else --gravity self.vy=math.max(self.vy-0.15,-1) self.ang=math.atan(self.vy/self.vx) self.neg=sign(self.vx) end if self.canPickUp and self.vx==0 and self.vy==0 and (math.abs(self.pos[1]-(player.pos[1]+0.5))<=1.5 and math.abs(self.pos[2]-player.pos[2])<=2) then --picked up by player addItem({Item_arrow, 1}) objList[self.index]=nil updateSoon(2) end end objParticle = class() function objParticle:init(x, y, i, state) self.index = i self.pos = {x, y} self.state = state or 8 end function objParticle:draw(gc, px, py) if self.state<1 then return end local x, y local texture = objTexture["particle"][self.state] x = 8 - texture:width() / 2 y = self.state gc:drawImage(texture, px + x, py + y) end function objParticle:tick() self.state = self.state - 1 if self.state < 1 then objList[self.index] = nil end if onScreen(self.pos[1], self.pos[2]) then updateSoon(2) end end objBobber = class() function objBobber:init(x, y, i, vx, vy) self.index = i self.pos = {x, y} self.vx = math.max(math.min(vx, 1), -1) self.vy = vy self.fish = false self.damage = 0 end function objBobber:draw(gc, px, py) local offY=(self.fish and 5 or -1) gc:setColorRGB(0,0,0) local p1 if player.dir==1 then gc:drawImage(objTexture["Fishing Rod"][1],138,83) p1={138,83} --playerHand else gc:drawImage(objTexture["Fishing Rod"][2],154,83) p1={165,83} --playerHand end local p5={px,py+offY} --bobber local p3={p1[1]+(p5[1]-p1[1])*0.5, p1[2]+(p5[2]-p1[2])*0.5+8} --mid local p2={p1[1]+(p3[1]-p1[1])*0.5, p1[2]+(p3[2]-p1[2])*0.5+2} local p4={p3[1]+(p5[1]-p3[1])*0.5, p3[2]+(p5[2]-p3[2])*0.5+2} gc:drawPolyLine({p1[1],p1[2],p2[1],p2[2],p3[1],p3[2],p4[1],p4[2],p5[1],p5[2]}) gc:drawImage(objTexture["bobber"],px-2,py-1+offY) end function objBobber:tick() if self.fish then self.fish=self.fish-1 if self.fish<=0 then self.fish=false self.damage=0 invalidateScreen() end end if self.vx~=0 or self.vy~=0 then --fly self.pos[1]=self.pos[1]+self.vx self.pos[2]=self.pos[2]+self.vy updateSoon(2) end local bx,by=math.floor(self.pos[1]),math.floor(self.pos[2]+1) if not inRect({bx,by},getVisibleRange()) or inventory[selSlot][1]~=Item_fishing_rod then --despawn objList[self.index]=nil bobberID=nil return end if not validField(bx) or not world[bx][by].canWalkThrough then --hit block self.vx=0 self.vy=0 self.damage=2 elseif world[bx][by].waterLevel > 0 then self.vy=math.min(self.vy+0.3,1) self.vy=self.vy*0.4 self.vx=self.vx*0.7 else --gravity self.vy=self.vy-0.15 self.vx=self.vx*0.9 self.vy=math.max(self.vy*0.8,-1) end if world[bx][math.floor(self.pos[2]+0.5)].waterLevel > 0 and math.random(75)==42 then --in/above water self.fish=3 self.damage=1 print("fish!") invalidateScreen() end end objFireball = class() function objFireball:init(x, y, i, dirV) self.index = i self.pos = {x, y} self.dirV = dirV function objFireball:tick() local nx, ny = self.pos[1] + self.dirV[1], self.pos[2] + self.dirV[2] local bx, by = math.floor(nx), math.ceil(ny) if not world[bx][by].canWalkThrough or (bx==player.pos[1] and inRange(by,player.pos[2],player.pos[2]+1)) or attackMob(bx,by,10) then doExplosion(math.floor(self.pos[1]),math.floor(self.pos[2]),9,true) objList[self.index]=nil elseif not validField(nx,ny) then objList[self.index]=nil else self.pos[1]=nx self.pos[2]=ny end updateSoon(2) end function self:draw(gc,px,py) gc:drawImage(objTexture["fireball"],px-6,py-6) end end --mobList = {} -- contains all mobs alive AbstractMob = class() -- abstract mob parent class -- default mob handlers; calling them in overriding handlers is highly recommended function AbstractMob:init(x, y) -- initializes important properties and registers self in chunks mobList self.pos = {x, y, 2} --posX, PosY, direction self.grounded = true self.fallen = 0 --height fallen down self.health={1, 1, false} self:register() end function AbstractMob:attacked(damage, doDrop) -- handles an attack of given damage. Returns true if the mob dies if not self.health[3] then self.health[3] = timer.getMilliSecCounter() self.health[1] = self.health[1]-damage if self.health[1] <= 0 then if doDrop then for i, item in pairs(self.drop) do addItem({item[1], math.random(item[2], item[3])}) end end self:destroy() return true end updateSoon(1) end return false end function AbstractMob:tick() self:register() end -- mob utility functions function AbstractMob:register() -- registers self in associated chunk and unregisters from previous chunk local nextChunk = getChunkAt(self.pos[1]) if nextChunk and (nextChunk.ID ~= self.chunkID) then if self.chunkID and activeChunks[self.chunkID] then activeChunks[self.chunkID]:unregisterMob(self) end nextChunk:registerMob(self) self.chunkID = nextChunk.ID end end function AbstractMob:destroy() if activeChunks[self.chunkID] then activeChunks[self.chunkID]:unregisterMob(self) else print("FATAL ERROR: Mob at " .. self.pos[1] .. " despawned, but chunk " .. self.chunkID .. " is missing!") end end Mob = {} Mob.sheep = class(AbstractMob) function Mob.sheep:init(x, y) AbstractMob.init(self, x, y) self.name="sheep" self.texture="sheep" self.pos={x,y,2} --posX, PosY, direction self.health={8,40,false} --health, breath, invincilble after attacked shield timer self.mType="passive" self.size={0,0} --{width-1, height-1} (its easier to process this way) self.drop={{Block_wool,1,3}} --{{itemID,min,max},{item2},..} end Mob.chicken = class(AbstractMob) function Mob.chicken:init(x, y) AbstractMob.init(self, x, y) self.name="chicken" self.texture="chicken" self.health={4,40,false} --health, breath, invincilble after attacked shield timer self.mType="passive" self.size={0,0} self.drop={{Item_meat,1,1},{Item_feather,0,1}} end Mob.pig = class(AbstractMob) function Mob.pig:init(x, y) AbstractMob.init(self, x, y) self.name="pig" self.texture="pig" self.health={10,40,false} --health, breath, invincilble after attacked shield timer self.mType="passive" self.size={0,0} self.drop={{Item_meat,1,3}} end Mob.cow = class(AbstractMob) function Mob.cow:init(x, y) AbstractMob.init(self, x, y) self.name="cow" self.texture="cow" self.pos={x,y,2} --posX, PosY, direction self.health={10,40,false} --health, breath, invincilble after attacked shield timer self.mType="passive" self.size={0,0} self.drop={{Item_meat,1,3},{Item_leather,0,2}} end Mob.skeleton = class(AbstractMob) function Mob.skeleton:init(x, y) AbstractMob.init(self, x, y) self.name="skeleton" self.texture="skeleton" self.pos={x,y,2} --posX, PosY, direction self.health={15,40,false} --health, breath, invincilble after attacked shield timer self.mType="aggressive" self.size={0,1} self.drop={{Item_bone,0,3},{Item_arrow,0,3}} self.moveInfo={0,3} --{ticks not moved, move every ... ticks} self.attackInfo={0,10} --{ticks not attacked, attack every ... ticks} function self:attacked(damage, doDrop) self.moveInfo[1] = self.moveInfo[1] - 0.5 local mobDead = AbstractMob.attacked(self, damage, doDrop) if mobDead and math.random(20) == 1 and doDrop then addItem({Item_bow, math.random(Item_bow.maxHealth)}) end return mobDead end function self:tick() self.attackInfo[1]=self.attackInfo[1]+1 if not(mode==1) and math.abs(self.pos[1]-player.pos[1])<=9 and math.abs(self.pos[2]-player.pos[2])<=5 then if self.attackInfo[1]>=self.attackInfo[2] then local index=nextFree(objList) if index then local vx=math.min(math.max(((player.pos[1])-self.pos[1])/4,-1),1) local vy=math.min(math.max(((player.pos[2]+2)-self.pos[2])/4,-1),1) objList[index]=objArrow(self.pos[1]+0.5,self.pos[2]-0.5,index,vx,vy,false) end self.attackInfo[1]=0 end if player.pos[1]-self.pos[1]<0 then self.pos[3]=1 else self.pos[3]=2 end else self.attackInfo[1]=0 end end end Mob.creeper = class(AbstractMob) function Mob.creeper:init(x, y) AbstractMob.init(self, x, y) self.name="creeper" self.texture="creeper" self.pos={x,y,2} --posX, PosY, direction self.health={15,40,false} --health, breath, invincilble after attacked shield timer self.mType="aggressive" self.size={0,1} self.drop={{Item_gunpowder,0,2}} self.expInfo=0 self.moveInfo={0,2} --{ticks not moved, move every ... ticks} function self:attacked(damage, noDrop) self.moveInfo[1] = self.moveInfo[1] - 0.5 return AbstractMob.attacked(self, damage, noDrop) end function self:tick() local dist = math.sqrt((math.abs(self.pos[1]-player.pos[1])+math.abs(self.pos[2]-1-player.pos[2]))^2) if mode~=1 then if self.expInfo>0 then --started charging if dist<=3 then--math.abs(self.pos[1]-player.pos[1])<=3 and math.abs(self.pos[2]-player.pos[2])<=3 then --in explosion radius self.expInfo=self.expInfo+1 if self.expInfo%2==1 then self.texture="creeper bright" else self.texture="creeper" end else --escaped explosion radius self.expInfo=0 self.texture="creeper" end updateSoon(1) elseif math.abs(self.pos[1]-player.pos[1])<=1 and math.abs(self.pos[2]-player.pos[2])<=1 then --in 1 block radius==> start charging! self.expInfo=self.expInfo+1 self.texture="creeper bright" updateSoon(1) end if self.expInfo>5 then --EXPLODE!!! local x,y=self.pos[1],self.pos[2]-1 --mobList[self.ID] = nil self:destroy() doExplosion(x,y,15,true) return end end if worldTime>5000 and worldTime<19000 and self.pos[2]>sunTop[self.pos[1]] and dist>=7 and math.random(50)==7 then --despawn! --mobList[self.ID]=nil self:destroy() end end end Mob.ghast = class(AbstractMob) function Mob.ghast:init(x, y) AbstractMob.init(self, x, y) self.name="ghast" self.texture="ghast" self.pos={x,y,2} --posX, PosY, direction self.health={10,40,false} --health, breath, invincilble after attacked shield timer self.mType="aggressive" self.canFly=true self.nether=true self.size={2,2} self.drop={} self.moveInfo={0,2} --{ticks not moved, move every ... ticks} self.attackInfo={0,30} --{ticks not attacked, attack every ... ticks} function self:move() self.moveInfo[1]=self.moveInfo[1]+1 if self.moveInfo[1]>self.moveInfo[2] then local dx,dy=self.pos[1]-player.pos[1]+1,self.pos[2]-player.pos[2]-1 local mx,my=0,0 if math.abs(dx)>20 or math.abs(dy)>15 then mx=math.random(-1,1) my=math.random(-1,1) else if inRange(dx,-8,8) then mx=sign(dx) else mx=sign(dx)*-1 end if inRange(dy,0,5) then my=math.random(-1,1) else my=sign(dy)*-1 end end if dx<0 then self.pos[3]=2 else self.pos[3]=1 end local moveOkX=true local x = (mx==-1 and self.pos[1]-1 or self.pos[1]+3) if mx~=0 then for y=self.pos[2]-2, self.pos[2] do if not world[x][y].canWalkThrough then moveOkX=false break end end end local moveOkY=true local y = (my==-1 and self.pos[2]-3 or self.pos[2]+1) local minX = self.pos[1]-(moveOkX and mx==-1 and 1 or 0) local maxX = self.pos[1]+2+(moveOkX and mx==1 and 1 or 0) if my~=0 then for x=minX, maxX do if not world[x][y].canWalkThrough then moveOkY=false break end end end if moveOkX then self.pos[1]=self.pos[1]+mx end if moveOkY then self.pos[2]=self.pos[2]+my end self.moveInfo[1]=0 end end function self:tick() self.attackInfo[1]=self.attackInfo[1]+1 if not(mode==1) and math.abs(self.pos[1]-player.pos[1]+1)<=15 and math.abs(self.pos[2]-player.pos[2]+1)<=10 then if self.attackInfo[1]>=self.attackInfo[2] then local index=nextFree(objList) if index then local start={self.pos[1]+1.5,self.pos[2]-1.5} local dirV={player.pos[1]+0.5-start[1],player.pos[2]+0.5-start[2]} local l=math.sqrt(dirV[1]^2+dirV[2]^2) dirV={dirV[1]/l,dirV[2]/l} objList[index]=objFireball(start[1]+dirV[1]*1.5,start[2]+dirV[2]*1.5,index,dirV) end self.attackInfo[1]=0 end if player.pos[1]-self.pos[1]<0 then self.pos[3]=1 else self.pos[3]=2 end else self.attackInfo[1]=0 end end end Mob.zombie = class(AbstractMob) function Mob.zombie:init(x, y) AbstractMob.init(self, x, y) self.name="zombie" self.texture="zombie" self.pos={x,y,2} --posX, PosY, direction self.health={15,40,false} --health, breath, invincilble after attacked shield timer self.mType="aggressive" self.size={0,1} self.drop={{Item_feather,0,1},{Item_string,0,1}} self.moveInfo={0,2} --{ticks not moved, move every ... ticks} self.attackInfo={0,3} --{ticks not attacked, attack every ... ticks} function self:attacked(damage,doDrop) self.moveInfo[1] = self.moveInfo[1] - 0.5 return AbstractMob.attacked(self, damage, doDrop) end function self:tick() self.attackInfo[1]=self.attackInfo[1]+1 if not(mode==1 or debug) and self.attackInfo[1]>=self.attackInfo[2] and inRange(self.pos[1]-player.pos[1],-1,1) and self.pos[2]-player.pos[2]==1 then hurtPlayer(4,"zombie") self.attackInfo[1]=0 updateSoon(3) end end end ---------- BASIC GAME FUNCTIONS ---------- !FUNCTIONS ----- basic game actions ----- function placeBlock(x, y, block, noUpdate) assert(type(block) ~= "number", "invalid block format: number") assert(block ~= nil, "invalid block format: nil - use destroyBlock instead!") local placedBlock = block if validField(x,y) and placedBlock then local oldBlock = world[x][y] if placedBlock.waterLevel > 0 then if oldBlock == Block_lava_source then placedBlock = Block_obsidian elseif oldBlock.lavaLevel > 0 then placedBlock = Block_cobblestone end elseif placedBlock.lavaLevel > 0 then if oldBlock == Block_water_source then placedBlock = Block_stone elseif oldBlock.waterLevel > 0 then placedBlock = Block_cobblestone end end world[x][y] = placedBlock if not getmetatable(world).bufferInUse then if oldBlock and oldBlock.lightSource then editLight(x, y, oldBlock.lightSource, -1) end if placedBlock.lightSource then editLight(x, y, placedBlock.lightSource, 1) end updateSunTop(x) end if block.alwaysUpdate then alwaysUpdate[x..","..y]=true end if not noUpdate then updateBlock(x, y) for i = 1, 4 do updateBlock(getNeighbor(i, x, y)) end updateSoon(2) end return true else return false end end function Block_crafting_table:destroyed(x, y) if advCraftTable and advCraftTable[1] == x and advCraftTable[2] == y then enableAdvancedCrafting(false) end end function Block_wooden_door_open:destroyed(x, y) if world[x][y - 1] == Block_wooden_door_open then destroyBlock(x, y - 1) end end function Block_wooden_door_closed:destroyed(x, y) if world[x][y - 1] == Block_wooden_door_closed then destroyBlock(x, y - 1) end end function destroyBlock(x, y, doDrop, noUpdate) if validField(x, y) then local block = world[x][y] world[x][y] = nil --world's metatable can handle that if block then if doDrop then for i, drop in pairs(block.itemDrops) do if not drop[3] or math.random(100) <= drop[3] * 100 then addItem({IDList[drop[1]], drop[2]}) elseif drop[4] then addItem({IDList[drop[4]], drop[2]}) end end end if not getmetatable(world).bufferInUse then if block.lightSource then --remove old light editLight(x, y, block.lightSource, -1) end updateSunTop(x) end end if block.destroyed then block:destroyed(x, y, doDrop) end if block.alwaysUpdate then alwaysUpdate[x..","..y]=nil end if not noUpdate then for i=1,4 do updateBlock(getNeighbor(i,x,y)) end checkGrounded() end return true else return false end end function growTree(tx,ty) for i=1,5 do if world[tx][ty+i].solid then return false end end world[tx][ty] = Block_trunk_wood world[tx][ty+1] = Block_trunk_wood world[tx][ty+2] = Block_trunk_wood world[tx][ty+3] = Block_leaves world[tx][ty+4] = Block_leaves if not world[tx-2][ty+2].solid then world[tx-2][ty+2] = Block_leaves end if not world[tx-1][ty+2].solid then world[tx-1][ty+2] = Block_leaves end if not world[tx-1][ty+3].solid then world[tx-1][ty+3] = Block_leaves end if not world[tx+1][ty+2].solid then world[tx+1][ty+2] = Block_leaves end if not world[tx+2][ty+2].solid then world[tx+2][ty+2] = Block_leaves end if not world[tx+1][ty+3].solid then world[tx+1][ty+3] = Block_leaves end return true end function createDungeon(dx, dy) for x = dx - 2, dx + 2 do --floor placeBlock(x,dy-1,Block_cobblestone,true) end for y=dy-1,dy+3 do --left wall if world[dx-3][y]~=0 then placeBlock(dx-3,y,Block_cobblestone,true) end end for y=dy-1,dy+3 do --right wall if world[dx+3][y]~=0 then placeBlock(dx+3,y,Block_cobblestone,true) end end for x=dx-2,dx+2 do --empty room for y=dy,dy+3 do destroyBlock(x,y,false,true) end end world[dx][dy]=IDList[320+math.random(0,1)] --spawner for i = 1, 2 do --chests local x = math.random(-2,2) if not world[dx+x][dy].solid then world[dx+x][dy] = Block_dungeon_chest; --[[local newChest = Block_chest:createInstance() if newChest then world[dx+x][dy] = newChest for ii = 1, 27 do local r = math.random(1000) if r<20 then newChest.content[ii]={Item_apple, math.random(4)} elseif r<40 then newChest.content[ii]={Item_wheat, math.random(4)} elseif r<60 then newChest.content[ii]={Item_bread, math.random(4)} elseif r<80 then newChest.content[ii]={Item_gunpowder, math.random(4)} elseif r<100 then newChest.content[ii]={Item_string, math.random(4)} elseif r<120 then newChest.content[ii]={Item_iron_ingot, math.random(4)} elseif r<140 then newChest.content[ii]={Item_bucket, math.random(4)} elseif r<160 then newChest.content[ii]={Item_stick, math.random(4)} elseif r<180 then newChest.content[ii]={Item_seeds, math.random(4)} elseif r<200 then newChest.content[ii]={Item_flint, math.random(4)} elseif r<220 then newChest.content[ii]={Item_arrow, math.random(4)} elseif r==999 then --consolation prize ;) newChest.content[ii]={Item_diamond_hoe, 1400} elseif r==1000 then --jackpot newChest.content[ii]={Item_diamond, math.random(5,15)} print("Jackpot!") end end end]] end end end function igniteTNT(x, y, fuse) if world[x][y] ~= Block_tnt then return end destroyBlock(x, y, false) local index = nextFree(objList) if not fuse then fuse = 17 end objList[index] = objTNT(x, y, index, fuse) end function doExplosion(x, y, stren, doDrop) local floor, sin, cos, random, max = math.floor, math.sin, math.cos, math.random, math.max local updateMap={} local mobMap={} for ic, chunk in pairs(activeChunks) do for i, mob in pairs(chunk.mobs) do local mobX, mobY = mob.pos[1], mob.pos[2] if mob.name == "ghast" then mobX = mobX + 1; mobY = mobY + 1 end if not mobMap[mobX] then mobMap[mobX]={} end if not mobMap[mobX][mobY] then mobMap[mobX][mobY] = {} end table.insert(mobMap[mobX][mobY], mob) end end local expMap={} local playerDamage=false local tau=(2*math.pi) local portions=32 for rayNo=1, portions do local ang=(tau/portions)*rayNo local dx=cos(ang) local dy=sin(ang) local force = stren for w=0, 15 do local bx, by = floor(x+w*dx+0.5), floor(y+w*dy+0.5) if validField(bx, by) then force=force-(world[bx][by].hardness+0.5) if mobMap[bx] and mobMap[bx][by] then for i, mob in pairs(mobMap[bx][by]) do if mob:attacked(floor(force)*2, doDrop) then mobMap[bx][by][i] = nil end end end if not playerDamage and mode~=1 and not debug and bx==player.pos[1] and by==player.pos[2] then hurtPlayer(floor(force)*2,"explosion") playerDamage=true end if force > 0 and world[bx][by].waterLevel == 0 and world[bx][by].lavaLevel == 0 then if expMap[bx] then expMap[bx][by] = true else expMap[bx]={[by]=true} end else break end force=(force)*0.8 end end end for bx,column in pairs(expMap) do for by,force in pairs(column) do if world[bx][by] == Block_tnt then igniteTNT(bx,by,7+random(-2,2)) elseif world[bx][by]~=0 then destroyBlock(bx,by,(doDrop and random(4)==1),true) for i=1,4 do local ux,uy=getNeighbor(i,bx,by) if not updateMap[ux] then updateMap[ux]={[uy]=true} else updateMap[ux][uy]=true end end end if settings.graphics.objects > 1 then local index = nextFree(objList,0,150) if index then local dist=floor(math.sqrt(math.abs(x-bx)^2+math.abs(y-by)^2)) if dist<6 then objList[index]=objParticle(bx,by,index,8-dist) end end end end updateSunTop(bx) end for bx, column in pairs(updateMap) do for by, bool in pairs(column) do updateBlock(bx,by) end end invalidateScreen() end function addItem(stack) local item = stack[1] if item == nil then return end if type(item) == "number" then item = IDList[item] end local meta = stack[2] if item == nil or meta == 0 or meta == nil then return end local done = false if item.type == "block" or item.stackable then if not done then for ii=1, 36 do if not done and inventory[ii][1]==item and inventory[ii][2]<64 then inventory[ii][2]=inventory[ii][2]+meta if inventory[ii][2]>64 then inventory[ii][2]=64 meta=inventory[ii][2]%64 else meta=0 done=true break end --[[ if inventory[ii][2]+item[2]<=64 then inventory[ii][2]=inventory[ii][2]+meta done=true else meta=(inventory[ii][2]+meta)%64 inventory[ii][2]=64 if meta==0 then done=true end end]] end end end end if not done then for ii=1, 36 do if not done and inventory[ii][1]==nil then inventory[ii]={item, meta} done=true break end end end if not done then discardItem({item,meta}) end end function discardItem(stack) local item, meta = stack[1], stack[2] if item.type == "block" or item.stackable then for i = 1,3 do if trash[i][1] == item and trash[i][2]<64 then trash[i][2]=trash[i][2]+meta if trash[i][2]>64 then meta=trash[i][2]%64 trash[i][2]=64 else return end end end end if trash[1][1]~=nil then if trash[2][1]==nil then trash[2]=copy(trash[1]) else flushTrash() end end trash[1]={item,meta} end function flushTrash() trash[3]=copy(trash[2]) trash[2]=copy(trash[1]) trash[1]={nil,0} end function spawnMob(spawnType, posX, posY, noMessage) if settings.mobspawn == "None" then return end local spawnedMob if spawnType == "animal" then if settings.mobspawn == "Monsters" then return end local r = math.random(4) if r == 1 then spawnedMob = Mob.sheep(posX, posY + 1) elseif r == 2 then spawnedMob = Mob.pig(posX, posY + 1) elseif r == 3 then spawnedMob = Mob.chicken(posX, posY + 1) else spawnedMob = Mob.cow(posX, posY + 1) end elseif spawnType == "monster" then if settings.mobspawn == "Animals" then return end local r = math.random(4) if r == 4 then spawnedMob = Mob.creeper(posX, posY + 1) elseif r == 3 then spawnedMob = Mob.skeleton(posX, posY + 1) else spawnedMob = Mob.zombie(posX, posY + 1) end elseif Mob[spawnType] then spawnedMob = Mob[spawnType](posX, posY + 1) else print("invalid spawnType: ", spawnType) return end if not noMessage then print("spawn "..spawnType.." "..spawnedMob.name.." at: "..posX..", "..posY) end end function respawnAnimal(spawnType) local random, abs = math.random, math.abs local minX, maxX = getChunkAt(player.pos[1] - chunkSize).minX, getChunkAt(player.pos[2] + chunkSize).maxX local success = false local x for i = 0, 30 do x = random(minX, maxX) if math.abs(x - player.pos[1]) > 10 and world[x][sunTop[x]] == Block_grass then spawnMob("animal", x, sunTop[x]) success = true print("Yes") break end end if not success then spawnMob("animal", x, sunTop[x]) print("no") end end function attackMob(bx, by, damage) local selItem = inventory[selSlot][1] for ic, chunk in pairs(activeChunks) do for i, mob in pairs(chunk.mobs) do if inRect({bx,by},{mob.pos[1],mob.pos[2]-mob.size[2],mob.size[1],mob.size[2]}) then --if bx==mob.pos[1] and inRange(by,mob.pos[2]-mob.height+1,mob.pos[2]) then --if inRect({bx,by},{mob.pos[1],mob.pos[2],0,mob.height-1}) then local died = mob:attacked(damage, true) if died and mob.mType == "passive" and mode == 0 then respawnAnimal() end return true end end end end function spawnPlayer() if spawnBed then -- Prepare chunks for teleportation player.pos[1] = spawnBed[1] loadChunks() if world[spawnBed[1]][spawnBed[2]] == Block_bed then -- search for unobstructed spawnpoint for x = -1, 1 do for y = -1, 1 do local cx, cy = spawnBed[1] + x, spawnBed[2] + y if not world[cx][cy - 1].canWalkThrough and world[cx][cy].canWalkThrough and world[cx][cy + 1].canWalkThrough then player.pos[1] = cx player.pos[2] = cy return end end end HUDmessage = {"Your home bed was obstructed", "3", 255, 0, 0} spawnBed = nil else HUDmessage = {"Your home bed was missing", "3", 255, 0, 0} spawnBed = nil end end -- Spawn in the middle of chunk 0 player.pos[1] = math.floor(chunkSize / 2) -- Prepare chunks for teleportation loadChunks() -- find suitable spawnpoint local nextgood = true local y = worldEnd.top - 1 while nextgood == true do player.pos[2] = y y = y - 1 nextgood = (world[player.pos[1]][y] == Block_air) end end function hurtPlayer(damage,cause) if cause then deathcause=cause end if mode==0 and not debug then local defence=getDefenceP() if defence>0 then local absorbed=math.floor(damage*0.04*defence+0.5) player.health=player.health-(damage-absorbed) for i=37,40 do if inventory[i][1]~=nil then inventory[i][2]=inventory[i][2]-absorbed if inventory[i][2]<=0 then inventory[i]={0,0} end end end print("absorbed: "..absorbed) else player.health=player.health-damage end if player.health<=0 then die() end end end function die() setScreen(gameMain) addScreen(gameDead) timer.stop() if mode==0 then for i=1, 40 do if math.random(3)==1 then inventory[i]={nil,0} end end end trash={{nil,0},{nil,0},{nil,0}} invalidateScreen() end ------ basic checks ----- function validField(x, y) if x then return world[x] and true end if y and (y <= worldEnd.bottom or y > worldEnd.top) then return false end -- else return true end function checkForEmptySlots() for i=1,40 do if inventory[i][2]<=0 then inventory[i]={nil,0} end end end function setSelection(x, y) local max, min = math.max, math.min local nextX, nextY local range if mode == 1 then range = 7 elseif inventory[selSlot][1] and inventory[selSlot][1].itemType == "sword" then range = 3 else range = 4 end if validField(x) then nextX = min(max(x, player.pos[1] - range), player.pos[1] + range) else nextX = selBlock[1] end if validField(nil, y) then nextY = min(max(y, player.pos[2] + 1 - range), player.pos[2] + 1 + range) else nextY = selBlock[2] end if nextX~=selBlock[1] or nextY~=selBlock[2] then if settings.graphics.updating or worldTime%50==0 then invalidateScreen() else --invalidateScreen((selBlock[1]-player.pos[1]+9)*16,(6-selBlock[2]+player.pos[2])*16,16,16) --invalidateScreen((nselBlock[1]-player.pos[1]+9)*16,(6-nselBlock[2]+player.pos[2])*16,16,16) local x = (math.min(selBlock[1], nextX)-player.pos[1]+9)*16 local w = (math.max(selBlock[1], nextY)-player.pos[1]+10)*16-x local y = (6-(math.max(selBlock[2], nextX)-player.pos[2]))*16 local h = (7-(math.min(selBlock[2], nextY)-player.pos[2]))*16-y invalidateScreen(x,y,w,h) end selBlock={nextX,nextY} end end function checkGrounded() local below = world[player.pos[1]][player.pos[2]-1] --Block1=world[0][0] if not below.canWalkThrough or below == Block_ladder or below == Block_leaves or world[player.pos[1]][player.pos[2]] == Block_ladder then player.falltimer = 0 player.grounded = true if mode==0 and player.fallspeed<0 then hurtPlayer(math.abs(player.fallspeed),"falling") end player.fallspeed=2 if not debug then fly=false end else player.grounded=false end end function getDefenceP() local defence = 0 for i=37, 40 do if inventory[i][1] and inventory[i][1].armor then defence = defence + inventory[i][1].armor end end return defence end ----- light related functions ----- function editLight(lx, ly, range, str) -- str says if light is added (str=1) or removed (str=-1) local abs = math.abs local dx, lightMapColumn for by = math.max(ly - range, worldEnd.bottom), math.min(ly + range, worldEnd.top) do dx = range - abs(by - ly) for bx = lx - dx, lx + dx do lightMapColumn = lightMap[bx] if (lightMapColumn) then lightMapColumn[by] = lightMapColumn[by] + str end end end --[[ local bx, h for dx = -range, range do bx = lx + dx if lightMap[bx] then h = range - abs(dx) for by = max(ly - h, worldEnd.bottom), min(ly + h, worldEnd.top) do lightMap[bx][by] = lightMap[bx][by] + str end end end]] end function updateSunTop(sx, sy) sy = sy or worldEnd.top while sy >= worldEnd.bottom and world[sx][sy].transparent do sy=sy-1 end sunTop[sx]=sy end ------ gui related functions ----- function onScreen(blockX, blockY) return inRange(blockX, player.pos[1] - 9, player.pos[1] + 9) and inRange(blockY, player.pos[2] - 6, player.pos[2] + 6) end function updateAt(x,y,w,h) w=w or 1; h=h or 1 local screenRect=getVisibleRange() if x<=screenRect[1]+screenRect[3] and screenRect[1]<=x+w and y<=screenRect[2]+screenRect[4] and screenRect[2]<=y+h then local px, py = convertPos(x,y) invalidateScreen(px*16, py*16, w*16, h*16) end end function getVisibleRange() return {player.pos[1]-9,player.pos[2]-6,19,12} end function updateSoon(time) if not updateIn or updateIn>time then updateIn=time end end function invalidateScreen(x,y,w,h) if updateFrame==false then return end --full frame update already caused if HANDHELD and x and y and w and h then if updateFrame then updateFrame=getFrame(updateFrame,{x,y,w,h}) else updateFrame={x,y,w,h} end platform.window:invalidate(x,y,w,h) else --full frame update updateFrame=false platform.window:invalidate() end end function hideCursor() --if not HANDHELD then return end cursor.hide() mouseVisible=false end function resumeGame() skyVisible=true timer.start(0.1) setScreen(gameMain) end function updateSaveInfo() for i = 0, 4 do saveInfo[i] = var.recall("save" .. tostring(i) .. ".h") if saveInfo[i] and saveInfo[i] ~= "" then saveInfo[i] = saveInfo[i]:split(":") end end end function restoreSettings() --settings.fancy=(var.recall("setfancy") or tostring(platform.isColorDisplay()))=="true" settings.indicators=(var.recall("setindic") or tostring(not platform.isColorDisplay()))=="true" settings.mobspawn=var.recall("setmobspawn") or "All" settings.showhelp=(var.recall("setshowhelp") or "true")=="true" settings.controls=tonumber(var.recall("setcontrols") or 1) settings.saveWhileSleep=var.recall("setsws")=="true" local fancy = platform.isColorDisplay() settings.graphics.shadows = tonumber(var.recall("setshadows") or fancy and "2" or "1") settings.graphics.gui = tonumber(var.recall("setgui") or fancy and "2" or "1") settings.graphics.clouds = tonumber(var.recall("setclouds") or fancy and "2" or "1") settings.graphics.objects = tonumber(var.recall("setobjects") or fancy and "2" or "1") settings.graphics.updating = tonumber(var.recall("setupdating") or fancy and "2" or "1") end function makeSeed(input) if not input or not tostring(input) or input == "" then return math.random(math.abs(timer.getMilliSecCounter())) else input = tostring(input) local s = 0 for i = 1, input:len() do s = s + string.byte(string.sub(input, i, i)) end return s end end ---------- CRAFTING ---------- !CRAFT --[[ function preCraft(ingredients,product) --create 'recipe' craftItemInfo={} --check how much of ingredients are available for i,ingredient in pairs(ingredients) do craftItemInfo[i]={ingredient[1],ingredient[2],0} end craftProduct=product checkCraft() addScreen(gameCraft) invalidateScreen() end]] function countAvailableItems(item) local amount = 0 for slot = 1, 36 do if inventory[slot][1] == item then amount = amount + inventory[slot][2] --add amount end end return amount end --[[ function checkCraft() for i,ingredient in pairs(craftItemInfo) do craftItemInfo[i][3]=0 for ii=1,36 do if inventory[ii][1]==ingredient[1] then craftItemInfo[i][3]=craftItemInfo[i][3]+inventory[ii][2] --add amount end end end craftOk=true for i, info in pairs(craftItemInfo) do if info[2]>info[3] then craftOk=false end end end function craft(recipe) for i, ingredient in pairs(recipe.ingredients) do needed=ingredient[2] for ii=1,36 do if inventory[ii][1]==ingredient[1] then while needed>0 and inventory[ii][2]>0 do inventory[ii][2]=inventory[ii][2]-1 needed=needed-1 end end end end checkForEmptySlots() addItem(craftProduct) end]] function setMenuState(state) local recipe for ic, category in pairs(craftingMenuStructure) do for ii, item in ipairs(category) do recipe = recipeList[item] if state == "none" then toolpalette.enable(category.name, item, false) elseif state == "advanced" then toolpalette.enable(category.name, item, true) elseif state == "normal" then if recipe.requiresCraftingTable then toolpalette.enable(category.name, item, false) else toolpalette.enable(category.name, item, true) end end end end end function enableAdvancedCrafting(state, noMessage) if state then if not noMessage then HUDmessage = {"Advanced Crafting enabled!", 3, 50, 255, 50} end setMenuState("advanced") else if not noMessage then HUDmessage = {"Advanced Crafting disabled!", 2, 255, 50, 50} end advCraftTable = nil setMenuState("normal") end end ---------- GAME CREATION --------- !CREATE function initialStuff(new) for i=1, 40 do inventory[i] = {nil,0} end allowSwitch=(mode==1) --inventory[1]={429,1} selSlot = 1 player.dir=2 player.grounded=true player.falltimer=0 player.fallspeed=2 player.health=20 player.breath=50 trash={{nil,0},{nil,0},{nil,0}} nextFlushTime=nil if player.pos[1]~=nil then selBlock={player.pos[1]+1, player.pos[2]+1} else selBlock={0,0} end helptimer=0 advCraftTable=nil breakBlock={} ovenList={} chestList={} --mobList={} objList={} bobberID=nil --Initial Matrix --if new then spawnBed=nil worldTime=6500 --6500 --end worldEnd = {bottom = -100, top = 50, left={v=0,a=0,height=0,nlv=0,nla=0,nhv=0,nha=0,nhigh=-65,nlow=-85},right={v=0,a=0,height=0,nlv=0,nla=0,nhv=0,nha=0,nhigh=-65,nlow=-85}} world={} lightMap={} alwaysUpdate={} sunTop={} --[[ local worldMeta = {__index = function() return Block_air end} local lightMeta = {__index = function() return 0 end} for x=worldSize[1]-1, worldSize[2]+1 do world[x]={} lightMap[x]={} setmetatable(world[x], worldMeta) setmetatable(lightMap[x], lightMeta) end ]] setmetatable(world, {}) end function Chunk:generate() --initilaize world self:initWorld() self:initLightMap() -- set seed math.randomseed(worldSeed) local floor, max, min, random, abs, ceil, editLight = math.floor, math.max, math.min, math.random, math.abs, math.ceil, editLight local minX, maxX = self.minX, self.maxX local genDir = sign(maxX) -- generation direction: -1 = to the left, 1 = to the right local worldHeight = {} --exact surface height local V--=0 local A--=random(-20, 20) --worldHeight[minX - 1] = random(-5, 30) if self.ID == 0 then --first chunk worldEnd.right.v = 0 worldEnd.right.a = random(-20, 20) worldEnd.right.height = random(-5, 30) worldEnd.left.v = -worldEnd.right.v worldEnd.left.a = -worldEnd.right.a worldEnd.left.height = worldEnd.right.height end local start_x, end_x, step_x if genDir > 0 then start_x, end_x, step_x = minX, maxX, 1 V = worldEnd.right.v A = worldEnd.right.a worldHeight[minX-1] = worldEnd.right.height else start_x, end_x, step_x = maxX, minX, -1 V = worldEnd.left.v A = worldEnd.left.a worldHeight[maxX+1] = worldEnd.left.height end for x = start_x, end_x, step_x do worldHeight[x] = worldHeight[x-genDir]+V/100 local surface = floor(worldHeight[x]+0.5) -- generate main chunk of stone and dirt for y=-49, max(surface, 0) do if y==surface then if y<=1 then world[x][y]=Block_sand else world[x][y]=Block_grass end elseif y<1 and y>surface then world[x][y] = Block_water_source elseif ysurface-4 then if surface<1 and y>surface-2 then world[x][y]=Block_sand else world[x][y]=Block_dirt end else world[x][y]=Block_stone end end -- determine next "acceleration" if x%5==0 or (worldHeight[x-genDir]>-1 and worldHeight[x]<=-1) then if worldHeight[x]>=25 then --V=V*0.9 if (V>0 and A>0) or worldHeight[x]>=40 then V=min(V,200) A=-20 elseif V>200 then A=random(-20,-15) elseif V>0 then A=random(-20,-5) else A=random(-5,5) end elseif worldHeight[x]<0 then V=max(V/2,-100) if A>5 or worldHeight[x]>-5 then A=random(-5, 20) else A=random(5, 20) end elseif worldHeight[x]<5 then A=random(-5,10) A=random(-10, 20)*sign(-V)-1 end end V=V+A V=min(V,300) V=max(V,-300) end if genDir > 0 then worldEnd.right.v = V worldEnd.right.a = A worldEnd.right.height = worldHeight[maxX] else worldEnd.left.v = V worldEnd.left.a = A worldEnd.left.height = worldHeight[minX] end --place ores for x=minX, maxX, 5 do for y=-49, worldEnd.top, 3 do if world[x][y]==Block_stone then if random(25)==1 then genLode(Block_coal_ore,x,y,1.5,5,Block_stone) --coal ore elseif y<0 and random(40)==1 then genLode(Block_iron_ore,x,y,1.5,3,Block_stone) --iron ore elseif y<-25 and random(60)==1 then genLode(Block_gold_ore,x,y,1.5,2,Block_stone) --gold ore elseif y<-37 and random(80)==1 then genLode(Block_diamond_ore,x,y,1.5,2,Block_stone) --diamond ore elseif random(40)==1 then if random(3)==1 then genLode(Block_gravel,x,y,2,20,Block_stone) --gravel cave else genLode(Block_dirt,x,y,2,20,Block_stone) end --dirt cave end end end end --caves for i = 1, math.ceil(self.size/15) do local dx = random(2, self.size - 10) local x = (genDir > 0 and minX or maxX) + dx*genDir local y = random(-45, worldHeight[x] - 15) local l = (self.size + dx) - random(0, 10) genCave(x, y, 2, l, x > 0 and math.pi or 0) end --genLode(Block_air,random(minX+3,maxX-3),-47,2,50) --makes sure that lava exists in overworld! --final stuff local diamondOres=0 local water=0 local ugly=0 local grass=0 for x=minX + 1, maxX - 1 do for y=-49, worldEnd.top do if world[x][y]==Block_water_source then for i=2,4 do local wx,wy = getNeighbor(i,x,y) if world[wx][wy]==Block_air then world[wx][wy]=Block_dirt end end elseif y<-45 and y>-49 and world[x][y] == Block_air then --place Lava world[x][y] = Block_lava_source editLight(x,y,Block_lava_source.lightSource,1) elseif world[x][y] == Block_grass and x>minX+2 and x 0 then lv = worldEnd.right.nlv la = worldEnd.right.nla hv = worldEnd.right.nhv ha = worldEnd.right.nha high = worldEnd.right.nhigh low = worldEnd.right.nlow else lv = worldEnd.left.nlv la = worldEnd.left.nla hv = worldEnd.left.nhv ha = worldEnd.left.nha high = worldEnd.left.nhigh low = worldEnd.left.nlow end for x = start_x, end_x, step_x do for y=worldEnd.bottom,-52 do if y==ceil(high) and (low < -90 and random(20)==1 or random(40)==1) then world[x][y]=Block_lava_source editLight(x,y,Block_lava_source.lightSource,1) local ly=y-1 while world[x][ly]==Block_air and ly > worldEnd.bottom do world[x][ly]=Block_flowing_lava_4 editLight(x,ly,8,1) ly=ly-1 end elseif y>high or y -90 and low + lv/100 <= -90 then lv = lv / 2 end if x%5==0 then if high>-60 then hv=min(hv,100) if hv>100 or high>-55 then ha=random(-15,-10) else ha=random(-20,0) end elseif high+hv/5-80 then lv=min(lv,100) la=random(-25,-10) elseif abs(lv) < 50 and random(2) == 1 then la = random(min(-5*sign(lv), 0), max(-5*sign(lv), 0)) else la=random(-20,20) end end end if genDir > 0 then worldEnd.right.nlv = lv worldEnd.right.nla = la worldEnd.right.nhv = hv worldEnd.right.nha = ha worldEnd.right.nhigh = high worldEnd.right.nlow = low else worldEnd.left.nlv = lv worldEnd.left.nla = la worldEnd.left.nhv = hv worldEnd.left.nha = ha worldEnd.left.nhigh = high worldEnd.left.nlow = low end --draw nethercaves for i = 1, floor(self.size / 25) do local x = minX+i*20 local y = random(-85, -55) local tries=0 while world[x][y]~=Block_netherrack and tries<20 do y=random(-85, -55) tries=tries+1 end if world[x][y]==Block_netherrack then genCave(x, y, 1.5, random(30, 50), x > 0 and math.pi or 0) end end --draw obsidian for x=minX,maxX do for y=-51,-49 do world[x][y]=Block_obsidian end end --draw Bedrock for x = minX, maxX do world[x][worldEnd.bottom]=Block_bedrock end for x = minX, maxX do updateSunTop(x) end print("Chunk "..self.ID.." generated") end function genCave(SX, SY, width, length, angle) --math localization local floor, sin, cos, random = math.floor, math.sin, math.cos, math.random local A = angle or random(628)/100 --angle local VA = random(-15,15) --rate of change of angle local intX, intY for steps = 1, length do intX, intY = floor(SX), floor(SY) if not world[intX] or world[intX][intY]==Block_obsidian or world[intX][intY]==Block_bedrock then return end --set material in range "width" for x = intX, floor(SX + width) do for y = intY, floor(SY + width) do if world[x] and world[x][y]~=Block_obsidian and world[x][y]~=Block_bedrock and world[x][y].solid then world[x][y] = Block_air if y < -45 and y > -50 then world[x][y]=Block_lava_source editLight(x, y, 8, 1) end end end if sunTop[x] and sunTop[x] <= SY + 2 then updateSunTop(x, sunTop[x]) end end SX = SX + cos(A) SY = SY + sin(A) A = A + VA / 100 if (steps % 8) == 0 then --set new rate of change of angle every 8 blocks if sin(A) > 0.7 then --too steep upwards VA = -15 * sign(cos(A)) elseif sin(A) < -0.7 then --too steep downwards VA = 15 * sign(cos(A)) else VA = random(-15,15) end end end end function genLode(material, SX, SY, width, length, validMat, angle) --math localization local floor, sin, cos, random = math.floor, math.sin, math.cos, math.random local A = angle or random(628)/100 --angle local VA = random(-15, 15) --rate of change of angle for steps = 1, length do --set material in range "width" for x = floor(SX), floor(SX + width) do for y = floor(SY), floor(SY + width) do if world[x] and world[x][y]~=Block_obsidian and world[x][y]~=Block_bedrock and (not validMat or world[x][y]==validMat) then world[x][y]=material end end end SX = SX + cos(A) SY = SY + sin(A) A = A + VA / 100 if (steps % 8) == 0 then --set new rate of change of angle every 8 blocks if sin(A) > 0.7 then --too steep upwards VA = -15 * sign(cos(A)) elseif sin(A) < -0.7 then --too steep downwards VA = 15 * sign(cos(A)) else VA = random(-15,15) end end end end --[[ function drawBorders() for y = worldEnd.bottom, worldEnd.top do world[worldSize[1]-1][y]=Block_bedrock end for y = worldEnd.bottom, worldEnd.top do world[worldSize[2]+1][y]=Block_bedrock end end]] --------- SAVING AND LOADING --------- !SAVE function serializeStack(stack) local idStr = tostring(stack and stack[1] and stack[1].id or 0) or "0" local numberStr = tostring(stack and stack[2] or 0) or "0" return idStr..","..numberStr end function generateSaveString() local function compressItemList(list, size) local str = "" local item, id local multi, lastId = 0, 0 local compressable = false -- empty slot or a 64 stack of a block for i = 1, size do item = list[i] if item and item[1] and item[1].id then id = item[1].id compressable = item[1].stackable and (item[2] == 64) else id = 0 compressable = true end if compressable and id == lastId then multi = multi + 1 else if multi > 0 then str = str .. multi .. "x" .. lastId .. ";" multi = 0 end if compressable then multi = 1 else str = str .. id .. "," .. item[2] .. ";" end end lastId = id end if multi > 0 then str = str .. multi .. "x" .. lastId .. ";" multi = 0 end return str end -- Header local saveString1 = "JMC2D:" .. VERSION .. ":" .. worldName .. ":" .. tostring(mode) .. ":" .. tostring(allowSwitch) .. ":" .. tostring(worldSeed) -- World Data local worldDataStr = player.pos[1] .. "," .. player.pos[2] .. "," .. tostring(player.health) .. "," ..worldTime if spawnBed then worldDataStr = worldDataStr .. "," .. spawnBed[1] .. "_" .. spawnBed[2] end -- World End Data worldEndStr = "" local sides = {"left", "right"} local fields = {"v", "a", "height", "nlv", "nla", "nhv", "nha", "nhigh", "nlow"} for i, side in ipairs(sides) do for j, field in ipairs(fields) do worldEndStr = worldEndStr .. worldEnd[side][field] .. "," end end -- Inventory local inventoryStr = compressItemList(inventory, 40) -- Furnace Data local furnaceStr = "" --ID1:item1;item2;item3;4;5;6/ID2:... for id = 101, 199 do local furnace = IDList[id] if furnace then furnaceStr = furnaceStr..id ..":"..serializeStack(furnace.content.inputStack) ..";"..serializeStack(furnace.content.fuelStack) ..";"..serializeStack(furnace.content.outputStack) ..";"..furnace.heat ..";"..furnace.maxHeat ..";"..furnace.progress .."/" end end -- Chest Data local chestStr = "" for id = 201, 299 do local chest = IDList[id] if chest then chestStr = chestStr .. id .. ":" chestStr = chestStr .. compressItemList(chest.content, 27) chestStr = chestStr .. "/" end end --[[ Mobs local mobStr = "" for i, mob in pairs(mobList) do mobStr = mobStr..mob.name..":"..mob.pos[1]..":"..mob.pos[2]..":"..mob.health[1].."/" end]] local saveString2 = worldDataStr.."|"..worldEndStr.."|"..inventoryStr.."|"..furnaceStr.."|"..chestStr --.."|"..mobStr return saveString1, saveString2 end function loadGame(head, body) local function createUnknownBlock(id) local newUnknown = Block(id, "Unknown ID", true, true, 0.1, 0, true, {{id, 1}}, true) if not IDTexture[id] then IDTexture[id] = specialTexture["Unknown block"] end return newUnknown end local function byID(id) if id == 0 or id == nil then return nil else return IDList[id] or createUnknownBlock(id) end end local function unzipItemList(sourceList, targetList) local slotNumber = 1 for i, item in ipairs(sourceList) do if item then local n1, op, n2 = item:match("(%d+)(.)(%d+)") n1 = n1 and tonumber(n1) n2 = n2 and tonumber(n2) if n1 and op and n2 then if op == "," then targetList[slotNumber] = {byID(n1), n2} slotNumber = slotNumber + 1 elseif op == "x" then if n2 == 0 then for j = 1, n1 do targetList[slotNumber] = {nil, 0} slotNumber = slotNumber + 1 end else for j = 1, n1 do targetList[slotNumber] = {byID(n2), 64} slotNumber = slotNumber + 1 end end end end end end end local floor = math.floor if head==nil or head=="" or body==nil or body=="" then body=head head="" --[[ setScreen(menuSelect) addScreen(message,{"Loading Fail", "Important parts of this save are missing!"}) return false]] end local loadStatus local status, err = pcall(function () local ms = timer.getMilliSecCounter time={} time["initial"]=ms() initialStuff(false) time["initial"]=ms()-time["initial"] time["head"]=ms() worldName = head:split(":")[3] if not worldName or worldName=="" then worldName="Imported" end mode = tonumber(head:split(":")[4]) or 0 allowSwitch = (head:split(":")[5]=="true") worldSeed = tonumber(head:split(":")[6]) local bodyArr = body:split("|") local worldDataStr = bodyArr[1] --player.pos[1]..","..player.pos[2]..","..player.health..","..mode..","..worldTime player.pos[1] = tonumber(worldDataStr:split(",")[1]) or 0 player.pos[2] = tonumber(worldDataStr:split(",")[2]) or 50 player.health=tonumber(worldDataStr:split(",")[3]) or 20 worldTime=tonumber(worldDataStr:split(",")[4]) or 6000 local spawnBedStr=(worldDataStr:split(",")[5]) --print(spawnBedStr) if spawnBedStr and spawnBedStr~="" and #spawnBedStr:split("_")>=2 then spawnBed={tonumber(spawnBedStr:split("_")[1]),tonumber(spawnBedStr:split("_")[2])} end -- World End Data local worldEndStr = bodyArr[2] local worldEndArr = worldEndStr:split(",") local sides = {"left", "right"} local fields = {"v", "a", "height", "nlv", "nla", "nhv", "nha", "nhigh", "nlow"} local f = 1 for i, side in ipairs(sides) do for j, field in ipairs(fields) do worldEnd[side][field] = tonumber(worldEndArr[f]) f = f + 1 end end -- Inventory local inventArr = bodyArr[3]:split(";") unzipItemList(inventArr, inventory) time["head"]=ms()-time["head"] time["lists"]=ms() local furnaceListArr = bodyArr[4]:split("/") if #furnaceListArr > 1 then for i, furnaceStr in pairs(furnaceListArr) do if furnaceStr ~= "" then local furnaceArr = furnaceStr:split(":") local furnaceID = tonumber(furnaceArr[1]) if furnaceID then local furnace = Block_furnace:createInstance(furnaceID) furnaceArr = furnaceArr[2]:split(";") furnace.content.inputStack = {byID(tonumber(furnaceArr[1]:split(",")[1])), tonumber(furnaceArr[1]:split(",")[2]) or 0} furnace.content.fuelStack = {byID(tonumber(furnaceArr[2]:split(",")[1])), tonumber(furnaceArr[2]:split(",")[2]) or 0} furnace.content.outputStack = {byID(tonumber(furnaceArr[3]:split(",")[1])), tonumber(furnaceArr[3]:split(",")[2]) or 0} furnace.heat = tonumber(furnaceArr[4]) or 0 furnace.maxHeat = tonumber(furnaceArr[5]) or 0 furnace.progress = tonumber(furnaceArr[6]) or 0 end end end end local chestListArr = bodyArr[5]:split("/") if #chestListArr > 1 then for i, chest in pairs(chestListArr) do if chest ~= "" then local chestArr = chest:split(":") local chestID = tonumber(chestArr[1]) if chestID then local chest = Block_chest:createInstance(chestID) chestArr = chestArr[2]:split(";") unzipItemList(chestArr, chest.content) --[[ for slot = 1, 27 do local stackStr = chestArr[slot] if stackStr == "0" then chest.content[slot] = {nil, 0} else local stack = stackStr:split(",") chest.content[slot] = {byID(tonumber(stack[1])), tonumber(stack[2]) or 0} end end]] end end end end time["lists"]=ms()-time["lists"] --[[ drawBorders() time["world"]=ms()-time["world"] time["sunTop"]=ms() for x=worldSize[1], worldSize[2] do updateSunTop(x) end time["sunTop"]=ms()-time["sunTop"] ]] time["mobs"]=ms() --[[ mobList={} local mobListArr=bodyArr[5]:split("/") if #mobListArr>1 then for i, mob in pairs(mobListArr) do if mob~="" then local mobArr=mob:split(":") local mobClass=Mob[mobArr[1] ] if mobClass then mobList[i]=mobClass(tonumber(mobArr[2]),tonumber(mobArr[3]),i) mobList[i].health[1]=tonumber(mobArr[4]) end end end end]] time["mobs"]=ms()-time["mobs"] for n,t in pairs(time) do print(n..": "..t.."ms") end end) if not status then print(err) setScreen(menuSelect) local errLine=err:split("]")[2]:split(":")[2] if errLine==nil or tostring(tonumber(errLine))~=errLine then errLine="???" end if compatMode then addScreen(message,{"Error","There was an error while loading","Error in line: "..errLine,"","Your input seems to be completely","incompatible.","","Press [Y] to play anyways","(game may crash!)"}) function message:actionY() resumeGame() end else addScreen(message,{"Error","There was an error while loading","Error in line: "..errLine,"You can send this information to","jens.software@gmail.com","","Press [Y] to play anyways (game may crash)"}) function message:actionY() resumeGame() end end return false else resumeGame() end end function saveInSlot(slotNr, returnScreen, unload) local function action() local head, body local status, err = pcall(function () head, body = generateSaveString() end) if status then if head then var.store("save"..tostring(slotNr)..".h",head) var.store("save"..tostring(slotNr)..".b",body) for i, chunk in pairs(activeChunks) do chunk:store("save"..tostring(slotNr)..".c", unload) end document.markChanged() setScreen(returnScreen) else setScreen(returnScreen) addScreen(message,{"Error","There was an Error while saving :(","Unexpected error: Header string missing!","You can send this information to","jens.software@gmail.com","","But your old saves are save! :D"}) end else print(err) setScreen(returnScreen) addScreen(message,{"Error","There was an Error while saving :(","Error in line: "..err:split("]")[2]:split(":")[2],"You can send this information to","jens.software@gmail.com","","But your old saves are save! :D"}) end invalidateScreen() end setScreen(waitScreen,"Saving...",action) end function loadFromSlot(slotNr) if saveInfo[slotNr]==nil then return end local function action() loadGame(var.recall("save"..tostring(slotNr)..".h"),var.recall("save"..tostring(slotNr)..".b")) loadChunks() --[[ local playerChunkID = math.floor(player.pos[1] / chunkSize) for ID = -1, 1 do local loadingChunk = Chunk(playerChunkID + ID, chunkSize) if not loadingChunk:load("save"..currentSaveSlot..".c") then loadingChunk:generate() end end]] end setScreen(waitScreen, "Loading...", action) end function loadChunks() -- loads nearby chunks, unloads and stores chunks far away local playerChunk = math.floor(player.pos[1] / chunkSize) for ID, chunk in pairs(activeChunks) do if math.abs(playerChunk - ID) > 2 then chunk:store("save"..currentSaveSlot..".c", true) end end for ID = playerChunk - 1, playerChunk + 1 do if not activeChunks[ID] then local loadingChunk = Chunk(ID, chunkSize) if not loadingChunk:load("save"..currentSaveSlot..".c") then loadingChunk:generate() end end end end --------------------------------- --------- STATIC EVENTS --------- !EVENTS --------------------------------- function on.paint(gc,...) delay[2]=timer.getMilliSecCounter() for i=1, #screens do local screen=screens[i] if screen and screen.paint then screens[i]:paint(gc,...) end end if not loadingScreen.active then gc:setFont("sansserif", "r", 7) local infoStr="MC2D (chalex) "..VERSION if gameMain.active then gc:setColorRGB(0,200,0) gc:drawString(infoStr, 0, WH+2, "bottom") else gc:setColorRGB(255,255,255) gc:drawString(infoStr, WW-gc:getStringWidth(infoStr)-1, WH+1, "bottom") end end if not updateFrame then updateIn=10 end updateFrame=nil end function on.timer(...) --all layers! for i=1, #screens do local screen=screens[i] if screen and screen.timer then screens[i]:timer(...) end end end function on.mouseMove(x,y) mouseVisible=true mouseX=x mouseY=y if screens[#screens].mouseMove then screens[#screens]:mouseMove(x,y) end end function on.rightMouseDown() if on.grabDown then on.grabDown() end end function on.deactivate() if gameMain.active then setScreen(gameMain) addScreen(gameMenu) timer.stop() end end function on.enterKey() if mouseVisible and gameMain.active then cursor.show() end --else mouse would hide itself if screens[#screens].enterKey then screens[#screens]:enterKey() elseif on.mouseDown then on.mouseDown() end end function on.destroy() local helpInfoStr="" for i, h in pairs(help) do if h.p then helpInfoStr=helpInfoStr..i.."|" end end if helpInfoStr~="" then var.store("helpinfo",helpInfoStr) end end function on.help() addScreen(message,{"Helpful Help!", "Move and jump with arrow keys!", "Select block with touch- or numpad!", "Press [enter] to place and break blocks!", "Use a block or item with [(-)] (left to [enter])!", "Select Item with [+] and [-] or [w] and [,]!", "Open your inventory with [ctrl]+[menu] or [i]!", "Craft stuff with the [menu] key!"}, {"Helpful Help!", "Change gamemode with [M]!", "Press [F] to toggle flying in creative mode!", "[+] and [-] have various features in the", "inventory. Press [(-)] on a item in the", "inventory to get a stack of it!", "Press [del] on an item to throw it", "into the trash."} ) end var.monitor("console") function on.varChange(varlist) for i, n in pairs(varlist) do if n=="console" then local command = var.recall(n) if not command or command == "" then return 1 else local chunk, err = loadstring(command) if chunk then print(pcall(chunk)) return -3 --to keep the variable clean else print(err) return -2 end end end end end -------------------------------------------- --------- BASIC CONTROLLED ACTIONS --------- !CONTROLS -------------------------------------------- function decMeta(stack) -- decrease meta info (health or amount) stack[2]=stack[2]-1 if stack[2]<=0 then stack[1]=nil; stack[2]=0 end end function tryToEat() local selItem = inventory[selSlot][1] if not selItem then return false end if mode==0 and selItem.itemType == 10 and player.health < 20 then --eat player.health = math.min(player.health + selItem.heal, 20) decMeta(inventory[selSlot]) checkForEmptySlots() invalidateScreen() return true else return false end end function tryToAttackMob() local selItem = inventory[selSlot][1] or Block_air local damage = 0.5 if selItem and selItem.attackDamage then damage = selItem.attackDamage end if attackMob(selBlock[1], selBlock[2], damage) then if selItem.type == "item" and not selItem.stackable then --damage to item decMeta(inventory[selSlot]) checkForEmptySlots() end invalidateScreen() return true else return false end end do -- initialize place handlers local function placeStairs(x, y, right, left) if not world[x][y].solid then local placeLeft = xor(selBlock[1]<=player.pos[1],selBlock[2]= selBlock.toolLevel if breakBlock[3] < 10 then --not enough damage yet local toolEffic = 0.5 if requiredTool then --selSlot is right tool toolEffic = selItem.minespeed end print(requiredTool, toolEffic) breakBlock[3] = breakBlock[3] + toolEffic / selBlock.hardness * 10 local screenPos={convertPos(breakBlock[1],breakBlock[2])} invalidateScreen(screenPos[1]*16,screenPos[2]*16,16,16) end if breakBlock[3] >= 10 then --block broken!!!11einself local damage = 0 if selItem and selItem.type == "item" then --selSlot is Item if requiredTool then doDrop = true damage = 1 else damage = 2 end if not selItem.stackable then --Item has health decMeta(inventory[selSlot]) end end if selBlock.dropAlways then --block drops anyways doDrop = true end blockBroken = true end end if blockBroken or mode == 1 then destroyBlock(x, y, doDrop) breakBlock = {nil} moved = true invalidateScreen() end end do -- initialize use handlers local function useHoe(hoe, x, y, hoeStack) if world[x][y + 1].canWalkThrough and (world[x][y] == Block_dirt or world[x][y] == Block_grass) then if world[x][y] == Block_grass and math.random(3) == 1 then addItem({Item_seeds, 1}) end placeBlock(x, y, Block_farmland_dry) decMeta(hoeStack) return true else return false end end Item_wooden_hoe.use = useHoe Item_stone_hoe.use = useHoe Item_iron_hoe.use = useHoe Item_diamond_hoe.use = useHoe Item_golden_hoe.use = useHoe function Block_crafting_table:use(x, y) advCraftTable = {x, y} enableAdvancedCrafting(true) return true end function Block_wooden_door_closed:use(x, y) placeBlock(x, y, Block_wooden_door_open, true) if world[x][y + 1] == Block_wooden_door_closed then placeBlock(x, y + 1, Block_wooden_door_open) end if world[x][y - 1] == Block_wooden_door_closed then placeBlock(x, y - 1, Block_wooden_door_open) end return true end function Block_wooden_door_open:use(x, y) placeBlock(x, y, Block_wooden_door_closed, true) if world[x][y + 1] == Block_wooden_door_open then placeBlock(x, y + 1, Block_wooden_door_closed) end if world[x][y - 1] == Block_wooden_door_open then placeBlock(x, y - 1, Block_wooden_door_closed) end return true end function Block_bed:use(x, y) if worldTime > 6000 and worldTime < 18000 then HUDmessage = {"You can only sleep at night!", 3, 255, 0, 0} elseif lightMap[x][y] == 0 then HUDmessage = {"Bed must be illuminated!", 3, 255, 0, 0} else worldTime = 6000 spawnBed = {x, y} if settings.saveWhileSleep then saveInSlot(currentSaveSlot, gameMain) else timer.stop() local t1 = timer.getMilliSecCounter() while timer.getMilliSecCounter() < t1 + 1000 do end --do nothing for 1 sec *professional* :P timer.start(0.1) end end return true end function Block_tnt:use(x, y) igniteTNT(x, y) return true end function Item_flint_and_steel:use(x, y, stack) if world[x][y] == Block_air then placeBlock(x, y, Block_fire) decMeta(stack) return true else return false end end function Item_bow:use(x, y, bowStack) if moved then return true end local arrowSlot = nil for i, slot in ipairs(inventory) do if slot[1] == Item_arrow then arrowSlot = i break end end if arrowSlot or mode == 1 then local index = nextFree(objList) if index then if mode == 0 then decMeta(inventory[arrowSlot]) -- remove arrow decMeta(bowStack) -- damage bow end local vx = (selBlock[1] - (player.pos[1])) / 5 local vy = (selBlock[2] - (player.pos[2] + 1)) / 5 local scale = 1.3 / math.max(math.sqrt(vx ^ 2 + vy ^ 2), 1) objList[index] = objArrow(player.pos[1] + 0.5, player.pos[2] + 0.5, index, vx * scale, vy * scale,true) moved = true return true else return false end else return false end end function Item_fishing_rod:use(x, y, stack) if moved then return true end if bobberID then local bobber = objList[bobberID] if bobber.fish then addItem({Item_fish, 1}) end if mode == 0 and bobber.damage > 0 then inventory[selSlot][2] = inventory[selSlot][2] - bobber.damage if inventory[selSlot][2] <= 0 then inventory[selSlot] = {nil, 0} end end objList[bobberID] = nil bobberID = nil return true else local index = nextFree(objList) if index then local vx = math.min(math.max((x-(player.pos[1]))/4,-1),1) local vy = math.min(math.max((y-(player.pos[2]+1))/4,-1),1) objList[index] = objBobber(player.pos[1]+0.5,player.pos[2]+0.5,index,vx,vy,true) bobberID = index moved = true end return true end end function Item_bone_meal:use(x, y, stack) if inRange(world[x][y].id, 30, 36) then world[x][y] = IDList[math.min(world[x][y].id + math.random(1,6), 37)] if mode == 0 then decMeta(inventory[selSlot]) end return true elseif world[x][y] == Block_sapling then if math.random(3) > 1 then if growTree(x, y) then updateSunTop(x) end end decMeta(inventory[selSlot]) return true else return false end end function Block_furnace:use(x, y) local newFurnace = Block_furnace:createInstance() if newFurnace then world[x][y] = newFurnace newFurnace.use(x, y) else HUDmessage = {"Too many furnaces!", 3, 255, 0, 0} end return true end function Block_chest:use(x, y) local newChest = Block_chest:createInstance() if newChest then world[x][y] = newChest newChest.use(x, y) else HUDmessage = {"Too many chests!", 3, 255, 0, 0} end return true end function Item_bucket:use(x, y, stack) if world[x][y] == Block_water_source then destroyBlock(x, y) if mode==0 then decMeta(stack) addItem({Item_water_bucket, 1}) end return true elseif world[x][y] == Block_lava_source then destroyBlock(x, y) if mode==0 then decMeta(stack) addItem({Item_lava_bucket, 1}) end return true else return false end end function Item_water_bucket:use(x, y, stack) if not world[x][y].solid then placeBlock(x, y, Block_water_source) if mode==0 then decMeta(stack) addItem({Item_bucket, 1}) end return true else return false end end function Item_lava_bucket:use(x, y, stack) if not world[x][y].solid then placeBlock(x, y, Block_lava_source) if mode==0 then decMeta(stack) addItem({Item_bucket, 1}) end return true else return false end end function Item_bucket:place(x, y) Item_bucket:use(x, y, inventory[selSlot]) end function Item_water_bucket:place(x, y) Item_water_bucket:use(x, y, inventory[selSlot]) end function Item_lava_bucket:place(x, y) Item_lava_bucket:use(x, y, inventory[selSlot]) end end function tryToUse() local x, y = selBlock[1], selBlock[2] local selBlock = world[x][y] local selItem = inventory[selSlot][1] if selItem and selItem.type == "item" and selItem.use and selItem:use(x, y, inventory[selSlot]) then invalidateScreen() return true elseif selBlock.use and selBlock:use(x, y) then invalidateScreen() return true else return false end end ------------------------------------- --------- SCREEN MANAGEMENT --------- !MANAGE ------------------------------------- screens={} function addScreen(screen,...) if screen.active then return false else table.insert(screens,screen) screen.active=true screen:onLoad(...) invalidateScreen() end end function setScreen(screen,...) for i, s in pairs(screens) do if s.onRemove then s:onRemove() end s.active=false end screens={screen} invalidateScreen() collectgarbage() if screen.active then return false else screen.active=true screen:onLoad(...) return true end end function removeScreen(screen) for i, s in pairs(screens) do if s==screen then if s.onRemove then s:onRemove() end s.active=false table.remove(screens,i) invalidateScreen() collectgarbage() return true end end return false end Screen=class() function Screen:init(option) function self:onLoad() end function self:onRemove() end if option=="gui" then function self:mouseMove(mx, my) for i, b in pairs(self.buttons) do if inRect({mx, my},{b[2],b[3],b[4],b[5]}) and i~=self.selButton then self.selButton=i invalidateScreen() return end end end end end ---------------------------- --------- !SCREENS --------- ---------------------------- loadingScreen = Screen() function loadingScreen:onLoad() self.progress=0 self.max=0 self.ang=0 self.i="initial" self.state="initial" self.max=0 --amount of textures to load self.t=0.1 worldTime=0 local model3D={{-6,-102,60,{6,116,0}},{-6,-78,60,{28,165,10}},{-6,-66,60,{0,112,22}},{-6,-54,60,{26,77,0}},{-6,-36,60,{2,111,25}},{-6,-24,60,{26,146,0}},{-6,-18,60,{0,91,0}},{-6,-12,60,{22,112,3}},{-6,6,60,{14,123,33}},{-6,12,60,{0,106,16}},{-6,24,60,{0,114,23}},{-6,30,60,{6,133,7}},{-6,54,60,{33,170,43}},{-6,72,60,{24,135,25}},{-6,78,60,{1,135,7}},{-6,90,60,{0,157,0}},{-6,96,60,{6,152,0}},{-6,102,60,{21,131,73}},{-6,-102,54,{98,42,0}},{-6,-96,54,{0,142,2}},{-6,-84,54,{0,121,28}},{-6,-78,54,{106,51,7}},{-6,-66,54,{103,47,4}},{-6,-54,54,{104,49,6}},{-6,-48,54,{27,123,46}},{-6,-36,54,{104,48,5}},{-6,-24,54,{112,57,12}},{-6,0,54,{0,120,10}},{-6,24,54,{106,51,8}},{-6,36,54,{0,132,25}},{-6,48,54,{26,132,0}},{-6,60,54,{10,111,0}},{-6,72,54,{105,48,5}},{-6,96,54,{98,40,0}},{-6,-102,48,{97,41,0}},{-6,-90,48,{53,135,50}},{-6,-78,48,{100,44,1}},{-6,-66,48,{102,45,2}},{-6,-54,48,{98,42,0}},{-6,-42,48,{6,124,6}},{-6,-36,48,{109,54,9}},{-6,-24,48,{92,36,0}},{-6,-18,48,{90,34,0}},{-6,0,48,{107,51,8}},{-6,24,48,{90,33,0}},{-6,30,48,{98,42,0}},{-6,48,48,{94,38,0}},{-6,54,48,{113,58,14}},{-6,60,48,{100,43,0}},{-6,72,48,{81,24,0}},{-6,78,48,{99,43,0}},{-6,96,48,{100,44,1}},{-6,-102,42,{98,41,0}},{-6,-78,42,{96,41,0}},{-6,-66,42,{108,108,108}},{-6,-54,42,{94,38,0}},{-6,-36,42,{101,46,2}},{-6,-24,42,{88,88,88}},{-6,0,42,{104,48,6}},{-6,24,42,{96,96,96}},{-6,36,42,{97,41,0}},{-6,48,42,{98,41,0}},{-6,60,42,{89,89,89}},{-6,72,42,{97,41,0}},{-6,96,42,{88,88,88}},{-6,-102,36,{99,99,99}},{-6,-78,36,{106,106,106}},{-6,-66,36,{88,88,88}},{-6,-54,36,{95,95,95}},{-6,-36,36,{108,108,108}},{-6,-24,36,{103,103,103}},{-6,-18,36,{83,83,83}},{-6,-12,36,{111,111,111}},{-6,6,36,{93,93,93}},{-6,12,36,{93,93,93}},{-6,24,36,{99,99,99}},{-6,36,36,{91,91,91}},{-6,48,36,{93,93,93}},{-6,60,36,{102,102,102}},{-6,72,36,{104,104,104}},{-6,96,36,{101,101,101}}, {6,-24,0,{10,150,0}},{6,-18,0,{2,131,25}},{6,6,0,{1,102,41}},{6,12,0,{38,156,9}},{6,18,0,{36,116,8}},{6,-30,-6,{34,132,8}},{6,-24,-6,{97,41,0}},{6,-18,-6,{91,36,0}},{6,-12,-6,{12,111,0}},{6,6,-6,{101,45,3}},{6,12,-6,{89,32,0}},{6,18,-6,{105,49,6}},{6,24,-6,{0,125,18}},{6,-30,-12,{97,41,0}},{6,-12,-12,{96,39,0}},{6,-6,-12,{0,111,0}},{6,6,-12,{115,61,16}},{6,24,-12,{98,41,0}},{6,30,-12,{33,131,49}},{6,-12,-18,{84,28,0}},{6,-6,-18,{98,41,0}},{6,6,-18,{90,33,0}},{6,24,-18,{104,48,5}},{6,30,-18,{97,41,0}},{6,-18,-24,{103,47,3}},{6,-12,-24,{93,36,0}},{6,6,-24,{97,41,0}},{6,24,-24,{93,37,0}},{6,30,-24,{96,40,0}},{6,-24,-30,{98,42,0}},{6,-18,-30,{95,40,0}},{6,6,-30,{98,42,0}},{6,24,-30,{103,48,5}},{6,30,-30,{103,48,4}},{6,-30,-36,{94,38,0}},{6,-24,-36,{79,79,79}},{6,6,-36,{97,97,97}},{6,12,-36,{94,94,94}},{6,18,-36,{95,39,0}},{6,24,-36,{114,58,15}},{6,-30,-42,{85,85,85}},{6,-24,-42,{90,90,90}},{6,-18,-42,{88,88,88}},{6,-12,-42,{95,95,95}},{6,-6,-42,{99,99,99}},{6,6,-42,{86,86,86}},{6,12,-42,{95,95,95}},{6,18,-42,{92,92,92}}} self.m=model3D timer.start(0.1) restoreSettings() platform.window:invalidate() end function loadingScreen:countTextures() for _, _ in pairs(IDTexture) do --count Textures self.max=self.max+1 end if HANDHELD then self.t=0.02 else self.t = math.max(math.floor(600/(self.max)),1)/100 end self.t = 0.01 end function loadingScreen:initialize() self.modlist=(var.recall("modlist") or ""):split("|") if #self.modlist>0 and self.modlist[1]~="" then self.i=0 self.state="load mods" else self.i=1 self:countTextures() self.state="load textures" end invalidateScreen() timer.start(0.1) end function loadingScreen:step() local waitTime=self.t if self.state=="load mods" then --load mod i*-1 local function throwErr(errMsg,errMod) print(errMsg) if message.active then for i,l in ipairs(message.text) do if not l or l=="" then message.text[i]=errMod; break end end else addScreen(message,{"Error!","The following mod(s) are not loadable","and will not be applied to the game:",errMod}) end end local modName=self.modlist[#self.modlist-self.i] if modName and modName~="" then local modStr,err=var.recall(modName.."\\content") if not modStr or err then throwErr(err,modName) else local partNo=1 local partStr="" while partStr do modStr=modStr..nl..partStr partNo=partNo+1 partStr=var.recall(modName.."\\content"..partNo) end print("mod "..modName.." loaded ("..(partNo-1).." part(s))") local mod,err=loadstring(modStr) if mod and not err then mod,err=pcall(mod) end if not mod or err then throwErr(err,modName) else print("mod "..modName.." applied") end end end self.i=self.i+1 if (#self.modlist-self.i)<=0 then self:countTextures() self.state="load textures" self.i=1 end else --load textures for ii=1,2 do self.i = createTexture(self.i) if self.i then self.progress=self.progress+1 self.ang=(self.progress/self.max)*math.pi*2 worldTime=(self.progress/self.max)*12000 if self.i=="f" then waitTime=0.4 self.state="finished" break end else timer.stop() restoreSettings() local helpArr=var.recall("helpinfo") if helpArr and helpArr~="" then helpArr=helpArr:split("|") for i, no in pairs(helpArr) do if no and tonumber(no) and help[tonumber(no)] then help[tonumber(no)].p=true end end end toolpalette.register(createCraftingMenu()) setMenuState("none") setScreen(menuTitle) return end end end timer.start(waitTime) invalidateScreen() end function loadingScreen:timer() if self.i=="initial" then self:initialize() else self:step() end end function loadingScreen:paint(gc) drawSky(gc) --3D Rendering local model=self.m local zBuffer={} local sin=math.sin(self.ang) local cos=math.cos(self.ang) for i=1,#model do local point=model[i] local x=cos*point[1]-sin*point[2] table.insert(zBuffer,{x,i}) end table.sort(zBuffer, function(a,b) return a[1]5 then self.selButton=self.selButton-1 elseif self.selButton>1 then self.selButton=self.selButton-2 end elseif dir=="right" then self.selButton=(self.selButton+1)%(#self.buttons+1) elseif dir=="left" then self.selButton=(self.selButton-1)%(#self.buttons+1) elseif dir=="down" then if self.selButton<5 then self.selButton=self.selButton+2 elseif self.selButton<7 then self.selButton=self.selButton+1 end end hideCursor() invalidateScreen() end function menuSettings:charIn(chr) if chr=="h" then if self.selButton==0 then addScreen(message,{"Help: Graphics","Opens the graphics options menu."}) elseif self.selButton==1 then addScreen(message,{"Help: Spawn Mobs","This setting controls what type of mobs","should be allowed to spawn.","","You can choose between:","'All', 'Animals' only, 'Monsters' only","or forbid mobs to spawn with 'None'."}) elseif self.selButton==2 then addScreen(message,{"Help: Help","This setting controls if the helpful helptexts","should appear in the game.","","","They are really helpful!","About controls and stuff!"}) elseif self.selButton==3 then addScreen(message,{"Help: Reset Help","Press this button to reset your","progress with the helptexts in the game."}) elseif self.selButton==4 then addScreen(message,{"Help: Controls","1: Break AND place blocks with [enter]","2: Break blocks with [enter]"," Place Blocks with [(-)] (left to [enter])", "3: Same as 1 but touchpad moves cursor", " and numpad moves Steve.", "4: Same as 2 but touchpad moves cursor"," and numpad moves Steve. (recommended)"}) elseif self.selButton==5 then addScreen(message,{"Help: Save While Sleep","Turn this option on if you wish to save the","world each time you sleep in a bed."}) elseif self.selButton==6 then addScreen(message,{"Help: Ore Indicators","This option lets small letters indicate the","type of ore.","Especially useful on grayscale display","models.","","","I=Iron, G=Gold, D=Diamond"}) end end end function menuSettings:escapeKey() if self.inGame then removeScreen(self) addScreen(gameMenu) else setScreen(menuTitle) end end function menuSettings:clearKey() addScreen(message,{"Reset Settings?","Do you really want to reset all settings?","","","","","","Press [Y] to reset settings"}) function message:actionY() math.eval("DelVar setindic") math.eval("DelVar setmobspawn") math.eval("DelVar setshowhelp") math.eval("DelVar setcontrols") math.eval("DelVar setsws") restoreSettings() menuSettings:refresh() end end function menuSettings:paint(gc) if not self.inGame then for x=0,19 do for y=0,13 do gc:drawImage(IDTexture[1],x*16,y*16) end end drawReturnTip(gc) end gc:setFont("sansserif","b",12) draw3DString(gc,"Options",129,4,2) for i, b in pairs(self.buttons) do drawButton(gc,b,i==self.selButton and "sel") end if self.selButton<7 then gc:setColorRGB(255,255,255) gc:setFont("sansserif","r",7) gc:drawString("Press [H] for help!",122,WH,"bottom") end end --------------------------------------------------------------------------------------------------- menuGraphics = Screen("gui") function menuGraphics:onLoad(inGame) self.inGame = inGame self.selButton = 0 self.buttons={[0]={"shadows",20,35,WW/2-30,25,11},{"interface",WW/2+10,35,WW/2-30,25,11}, {"clouds",20,70,WW/2-30,25,11},{"objects",WW/2+10,70,WW/2-30,25,11}, {"screen updating",20,105,280,25,11}, {"Save & Exit",100,175,WW-200,25,11}} self:refresh() end function menuGraphics:refresh() self.buttons[0][1]="Shadows: "..(settings.graphics.shadows > 1 and "Fancy" or "Fast") self.buttons[1][1]="Interface: "..(settings.graphics.gui > 1 and "Fancy" or "Fast") self.buttons[2][1]="Clouds: "..(settings.graphics.clouds > 1 and "Fancy" or settings.graphics.clouds > 0 and "Fast" or "Off") self.buttons[3][1]="Objects: " .. (settings.graphics.objects > 1 and "Fancy" or "Fast" ) self.buttons[4][1]="Screen Updating: " .. (settings.graphics.updating > 1 and "Fancy" or "Fast") invalidateScreen() end function menuGraphics:mouseDown() if self.selButton==0 then settings.graphics.shadows = settings.graphics.shadows % 2 + 1 self:refresh() elseif self.selButton == 1 then settings.graphics.gui = settings.graphics.gui % 2 + 1 self:refresh() elseif self.selButton == 2 then settings.graphics.clouds = (settings.graphics.clouds + 1) % 3 self:refresh() elseif self.selButton == 3 then settings.graphics.objects = settings.graphics.objects % 2 + 1 self:refresh() elseif self.selButton == 4 then settings.graphics.updating = settings.graphics.updating % 2 + 1 self:refresh() elseif self.selButton == 5 then var.store("setshadows",tostring(settings.graphics.shadows)) var.store("setgui",tostring(settings.graphics.gui)) var.store("setclouds",tostring(settings.graphics.clouds)) var.store("setobjects",tostring(settings.graphics.objects)) var.store("setupdating",tostring(settings.graphics.updating)) document.markChanged() if self.inGame then removeScreen(self) addScreen(menuSettings, true) else setScreen(menuSettings, false) end end end function menuGraphics:arrowKey(dir) if dir=="up" then if self.selButton>3 then self.selButton=self.selButton-1 elseif self.selButton>1 then self.selButton=self.selButton-2 end elseif dir=="right" then self.selButton=(self.selButton+1)%(#self.buttons+1) elseif dir=="left" then self.selButton=(self.selButton-1)%(#self.buttons+1) elseif dir=="down" then if self.selButton<3 then self.selButton=self.selButton+2 elseif self.selButton<5 then self.selButton=self.selButton+1 end end hideCursor() invalidateScreen() end function menuGraphics:charIn(chr) if chr=="h" then if self.selButton==0 then addScreen(message,{"Help: Graphics: Shadows","This setting controls the quality of","the shadows in the game.","","Fast: Is faster but might cause flickering","","Fancy: Looks better but is slower"}) elseif self.selButton==1 then addScreen(message,{"Help: Graphics: Interface","This setting controls the quality of","the graphical user interface.","(Stuff like the inventory screen,","item bar and such)"}) elseif self.selButton==2 then addScreen(message,{"Help: Graphics: Clouds","This setting controls the quality of","the clouds in the sky.","","Off: No clouds.","Fast: Some lame 2D clouds","Fancy: Super awesome 3D shaded clouds!"}) elseif self.selButton==3 then addScreen(message,{"Help: Graphics: Objects","This setting controls the quality of","various objcets and particles in the game."}) elseif self.selButton==4 then addScreen(message,{"Help: Graphics: Screen Updating","This setting controls how the","screen should get updated.","","Fast: Only update parts that changed."," This might cause graphical glitches.","Fancy: Always update whole screen."}) end end end function menuGraphics:escapeKey() if self.inGame then removeScreen(self) addScreen(menuSettings, true) else setScreen(menuSettings, false) end end function menuGraphics:clearKey() addScreen(message,{"Reset Graphics Settings?","Do you really want to reset","all graphics settings?","","","","","Press [Y] to reset graphics settings"}) function message:actionY() math.eval("DelVar setshadows") math.eval("DelVar setgui") math.eval("DelVar setclouds") math.eval("DelVar setobjects") math.eval("DelVar setupdating") restoreSettings() menuGraphics:refresh() end end function menuGraphics:paint(gc) if not self.inGame then for x=0,19 do for y=0,13 do gc:drawImage(IDTexture[1],x*16,y*16) end end drawReturnTip(gc) end gc:setFont("sansserif","b",12) draw3DString(gc,"Graphics",123,4,2) for i, b in pairs(self.buttons) do drawButton(gc,b,i==self.selButton and "sel") end if self.selButton<5 then gc:setColorRGB(255,255,255) gc:setFont("sansserif","r",7) gc:drawString("Press [H] for help!",122,WH,"bottom") end end --------------------------------------------------------------------------------------------------- --[[["Testmod"]={"Das ist eine tolle Beschreibung!","JENS!","0.0.0.1","nein"}, ["Testmod2"]={"Das ist keine tolle Beschreibung!","Autor2","0.0.0.2","0.13.2"}, ["Testmod3"]={"Trölölö","Autor3","0.0.0.3","0.13.3"}, ["Testmod4"]={"nicht","Autor4","0.0.0.4","0.13.4"}, ["Testmod5"]={"Was war da denn los?","Autor5","0.0.0.5","0.13.5"}, ["Testmod6"]={"Hi Björn!","Autor6","0.0.0.6","0.13.6"}]] menuMods=Screen("gui") function menuMods:onLoad() self.modInfo={} self.modlist=var.recall("modlist") or "" self.modlist=self.modlist:split("|") if self.modlist[#self.modlist]=="" then table.remove(self.modlist,#self.modlist) end self:refreshModInfo() self.selMod=1 self.scroll=1 self.selButton=1 self.buttons={{"Add Mod",199,20,WW-206,20,11},{"Move Up [+]",204,WH-66,WW-216,15,9},{"Move Down [-]",204,WH-48,WW-216,15,9},{"Remove [del]",204,WH-30,WW-216,15,9}} self.changed=false end function menuMods:refreshModInfo() local errorMods={} for i, mod in pairs(self.modlist) do self.modInfo[mod]={"","?","?","?"} if var.recall(mod.."\\content") then self.modInfo[mod][1]=var.recall(mod.."\\description") or "" self.modInfo[mod][2]=var.recall(mod.."\\author") or "?" self.modInfo[mod][3]=var.recall(mod.."\\version") or "?" self.modInfo[mod][4]=var.recall(mod.."\\compatversions") or "?" else table.insert(errorMods,mod) end end if #errorMods>0 then local messageText={"Error: Mod(s) not found!","The following "..#errorMods.." mod(s) are not loadable:"} for i=3,7 do messageText[i]=errorMods[i-2] or "" end if #errorMods>5 then messageText[7]="("..(#errorMods-4).."more)" end messageText[8]="Press [Y] to remove them from the list" addScreen(message,messageText) function message:actionY() for _, errormod in pairs(errorMods) do for i, mod in pairs(menuMods.modlist) do if errormod==mod then table.remove(menuMods.modlist,i) end end end menuMods:saveModlist() end end end function menuMods:mouseDown() if mouseVisible and inRange(mouseX,0,195) then if mouseY<10 and self.scroll>1 then self.scroll=self.scroll-1 elseif mouseY>WH-10 and self.scroll<#self.modlist-3 then self.scroll=self.scroll+1 elseif inRange(mouseY,10,WH-10) then local nselMod=math.floor((mouseY-10)/48)+self.scroll if self.modlist[nselMod] then self.selMod=nselMod end self.selButton=0 end elseif self.selButton==1 then addScreen(menuAddMod,self.modlist) elseif #self.modlist>0 then if self.selButton==2 then self:charIn("+") elseif self.selButton==3 then self:charIn("-") elseif self.selButton==4 then self:backspaceKey() end end invalidateScreen() end function menuMods:backspaceKey() if #self.modlist>0 then addScreen(message,{"Remove Mod?","Do you really want to remove the mod","'"..self.modlist[self.selMod].."'?","","You can still add it again...","","","Press [Y] to remove selected mod"}) function message:actionY() table.remove(menuMods.modlist,menuMods.selMod) menuMods:saveModlist() if #menuMods.modlist>0 then menuMods.selMod=math.min(menuMods.selMod,#menuMods.modlist) menuMods:adjustScroll() else menuMods.selButton=1 end menuMods.changed=true invalidateScreen() end end end function menuMods:saveModlist() var.store("modlist",table.concat(self.modlist,"|")) end function menuMods:charIn(chr) if chr=="h" then addScreen(message,{"Help: Modifications","On this screen, you can add modifications","and edit their load order. To install a mod,","place the file into the 'MyLib' folder and","refresh libraries ([doc]=>6). Then click","'Add Mod' and enter the filename. The higher","a mod is on the list, the later it gets loaded","and eventually overwrites mods below."},{"Warning: Modifications","Mods are able to (temporary) change the","whole game code!","Don't blame me, if a mod messes up your","game! But if it does, and you aren't even","able to get back to the setup screen, press","[ctrl]+[doc] => 1, enter 'DelVar modlist'","and restart the game!"}) return end if #self.modlist==0 then return end if chr=="+" and self.selMod>1 then local mod=self.modlist[self.selMod] table.remove(self.modlist,self.selMod) table.insert(self.modlist,self.selMod-1,mod) self.selMod=self.selMod-1 elseif chr=="-" and self.selMod<#self.modlist then local mod=self.modlist[self.selMod] table.remove(self.modlist,self.selMod) table.insert(self.modlist,self.selMod+1,mod) self.selMod=self.selMod+1 else return end self:adjustScroll() self:saveModlist() self.changed=true invalidateScreen() end function menuMods:adjustScroll() self.scroll=math.max(math.max(math.min(self.scroll,self.selMod),math.min(self.selMod-3,#self.modlist-3)),1) end function menuMods:arrowKey(dir) if self.selButton==0 then if dir=="up" and self.selMod>1 then self.selMod=self.selMod-1 elseif dir=="down" and self.selMod<#self.modlist then self.selMod=self.selMod+1 elseif dir=="right" then self.selButton=1 end self:adjustScroll() elseif #self.modlist>=1 then if dir=="left" then self.selButton=0 elseif dir=="up" then self.selButton=math.max(self.selButton-1,1) elseif dir=="down" then self.selButton=math.min(self.selButton+1,4) end else self.selButton=1 end hideCursor() invalidateScreen() end function menuMods:escapeKey() setScreen(menuTitle) if self.changed then addScreen(message,{"Info","You changed your modification setup.","To make your changes effective,","you have to restart the game!"}) end end function menuMods:paint(gc) drawBackground(gc,"no") gc:setFont("sansserif","b",12) draw3DString(gc,"Modifications",205,-2) for x=0, 11 do for y=0, 11 do gc:drawImage(shadowTexture[2],x*16,y*16+10) end end gc:setColorRGB(0,0,0) gc:drawRect(-1,9,193,193) gc:setPen("medium") gc:drawRect(200,46,WW-208,155) if #self.modlist>=1 then gc:setFont("sansserif","r",7) draw3DString(gc,"author:",205,48) draw3DString(gc,"version:",205,78) draw3DString(gc,"compatible versions:",205,108) gc:setFont("sansserif","b",9) draw3DString(gc,self.modInfo[self.modlist[self.selMod]][2],205,58) draw3DString(gc,self.modInfo[self.modlist[self.selMod]][3],205,88) draw3DString(gc,self.modInfo[self.modlist[self.selMod]][4],205,118) for i=0, 3 do local no=self.scroll+i local mod=self.modlist[no] if mod and mod~="" then gc:setFont("sansserif","b",9) draw3DString(gc,mod,6,i*48+10) gc:setFont("sansserif","r",9) local desc=self.modInfo[mod][1]:split(string.char(10)) if desc[1] then draw3DString(gc,desc[1],6,i*48+23,1,200,200,200) end if desc[2] then draw3DString(gc,desc[2],6,i*48+37,1,200,200,200) end if no==self.selMod then if self.selButton==0 then gc:setColorRGB(170,170,255) else gc:setColorRGB(0,0,0) end gc:drawRect(1,i*48+11,189,45) end end end gc:setPen() gc:setFont("sansserif","r",7) gc:setColorRGB(0,0,0) if self.scroll>1 then gc:drawString("▲",95,-2,"top") end if #self.modlist>self.scroll+3 then gc:drawString("▼",95,WH,"bottom") end end gc:setPen() drawButton(gc,self.buttons[1],self.selButton==1 and "sel") for i=2,4 do drawButton(gc,self.buttons[i],(#self.modlist==0 and "dis") or (i==self.selButton and "sel")) end gc:setColorRGB(255,255,255) gc:setFont("sansserif","r",7) gc:drawString("Press [H] for help!",135,WH+1,"bottom") drawReturnTip(gc) end --------------------------------------------------------------------------------------------------- menuAddMod=Screen("gui") function menuAddMod:onLoad(modlist) self.modlist=modlist self.cursor=true self.fileName="" self.buttons={[0]={"Cancel",55,120,80,17},{"Add",WW-135,120,80,17}} self.selButton=1 timer.start(0.6) end function menuAddMod:mouseDown() local function loadMod(mod) table.insert(self.modlist,mod) menuMods:refreshModInfo() removeScreen(self) menuMods.selMod=#menuMods.modlist menuMods:adjustScroll() menuMods:saveModlist() menuMods.changed=true end if self.selButton==0 then removeScreen(self) elseif self.selButton==1 and self.fileName~="" then if self.fileName:sub(self.fileName:len()-3,self.fileName:len())==".tns" then self.fileName=self.fileName:sub(1,self.fileName:len()-4) end local _, err = var.recall(self.fileName.."\\content") if err then print(text, err) addScreen(message,{"Error adding modification!","There was an error!","","Check if the file '"..self.fileName..".tns'","is in the folder 'MyLib' and contains the","variable 'content'!"}) else for i,mod in pairs(self.modlist) do if mod==self.fileName then addScreen(message,{"Modification Already Added!","The modification '"..self.fileName.."'","is already added!","","Do you want to reload it?","","","Press [Y] to reload"}) function message:actionY() menuAddMod.modlist[i]=nil loadMod(mod) end return end end loadMod(self.fileName) end end end function menuAddMod:escapeKey() removeScreen(self) end function menuAddMod:arrowKey() self.selButton=(self.selButton+1)%2 invalidateScreen(50,70,WW-100,WH-140) end function menuAddMod:timer() self.cursor=not self.cursor invalidateScreen(50,70,WW-100,WH-140) end function menuAddMod:charIn(key) if key~=" " and self.fileName:len()<20 then self.fileName=self.fileName..key invalidateScreen(50,70,WW-100,WH-140) end end function menuAddMod:backspaceKey() if self.fileName~="" then self.fileName=self.fileName:sub(1,self.fileName:len()-1) invalidateScreen(50,70,WW-100,WH-140) end end function menuAddMod:paint(gc) draw3DFrame(gc,50,70,WW-100,WH-140) gc:setFont("sansserif","b",12) draw3DString(gc,"Add Modifaction File:",57,72,1) gc:setColorRGB(255,255,255) gc:drawRect(55,95,WW-110,21) gc:setColorRGB(30,30,30) gc:fillRect(56,96,WW-111,20) gc:setFont("sansserif","r",11) gc:setColorRGB(255,255,255) local s=self.fileName if self.cursor then s=s.."_" end gc:drawString(s,60,94,"top") drawButton(gc,self.buttons[0],self.selButton==0 and "sel") drawButton(gc,self.buttons[1],(self.fileName=="" and "dis") or (self.selButton==1 and "sel")) end function menuAddMod:onRemove() timer.stop() end --------------------------------------------------------------------------------------------------- menuSelect=Screen() function menuSelect:onLoad(option) cursor.set("hollow pointer") --self.option=option self.selSave=0 updateSaveInfo() end function menuSelect:arrowKey(dir) if dir=="up" then self.selSave=(self.selSave-1)%5 elseif dir=="down" then self.selSave=(self.selSave+1)%5 end hideCursor() invalidateScreen() end function menuSelect:mouseMove(x,y) local nselSave=math.floor((y-25)/35) if self.selSave~=nselSave and inRange(nselSave,0,4) then self.selSave=nselSave invalidateScreen() end end function menuSelect:mouseDown() currentSaveSlot=self.selSave if not saveInfo[self.selSave] then setScreen(menuNew,true) else setScreen(menuDetail) end end function menuSelect:escapeKey() setScreen(menuTitle) end function menuSelect:paint(gc) drawBackground(gc,"no") gc:setFont("sansserif","b",12) draw3DString(gc,"Select World",WW/2-gc:getStringWidth("Select World")/2,0,2) for i=0,4 do local posY=i*35+25 if saveInfo[i]~=nil and saveInfo[i]~="" then drawButton(gc,{"",30,posY,WW-60,35},i==self.selSave and "sel") gc:setFont("sansserif","b",9) gc:setColorRGB(30,30,30) local tx = WW/2-gc:getStringWidth(saveInfo[i][3])/2 gc:drawString(saveInfo[i][3],tx+1,posY+2,"top") if i==self.selSave then gc:setColorRGB(255,255,160) else gc:setColorRGB(255,255,255) end gc:drawString(saveInfo[i][3],tx,posY+1,"top") local infoText="" if saveInfo[i][4]=="1" then infoText="Creative" else infoText="Survival" end if saveInfo[i][5]=="true" then infoText=infoText..", Switch Enabled" end local tx2 = WW/2-gc:getStringWidth(infoText)/2 gc:setColorRGB(50,50,50) gc:drawString(infoText,tx2,posY+15,"top") else drawButton(gc,{"Create New World",30,posY,WW-60,35,12,"b"},i==self.selSave and "sel") end end drawReturnTip(gc) end --------------------------------------------------------------------------------------------------- menuDetail=Screen("gui") function menuDetail:onLoad() self.selButton=0 self.info=saveInfo[currentSaveSlot] self.buttons={[0]={"Load",20,135,WW-40,30,12,"b"},{"Cancel",20,175,58,20},{"Rename",93,175,58,20},{"Delete",167,175,58,20},{"Export",240,175,58,20}} end function menuDetail:arrowKey(dir) if dir=="up" then self.selButton=0 elseif dir=="down" then self.selButton=1 elseif dir=="left" then self.selButton=math.max(self.selButton-1,1) elseif dir=="right" then self.selButton=math.min(self.selButton+1,4) end hideCursor() invalidateScreen() end function menuDetail:mouseDown() if self.selButton==0 then loadFromSlot(currentSaveSlot) elseif self.selButton==1 then setScreen(menuSelect) elseif self.selButton==2 then setScreen(menuEditText,"rename") elseif self.selButton==3 then addScreen(message,{"WARNING!","You are about to delete world:","'"..self.info[3].."'","If you delete it, it will be lost at least","FOREVER!","Do you want to delete it anyways?!","","Press [Y] to delete this world"}) function message:actionY() deleteWorld("save"..tostring(currentSaveSlot)) setScreen(menuSelect) end elseif self.selButton==4 then local exportStr local status, err = pcall( function () exportStr=var.recall("save"..tostring(currentSaveSlot)..".h")..string.char(10)..var.recall("save"..tostring(currentSaveSlot)..".b") end) if status and exportStr and exportStr~="" then clipboard.addText(exportStr) addScreen(message,{"Success!","The world '"..self.info[3].."'","was successfully exported to the clipboard!","","Don't paste it to a notepad or similar","or your calculator will crash! ;)"}) else if err then print(err) end addScreen(message,{"FATAL ERROR!","Something went horribly wrong!","Exporting was not successful!"}) end end end function menuDetail:escapeKey() setScreen(menuSelect) end function menuDetail:paint(gc) drawBackground(gc) local modeString = (self.info[4]=="1" and "Creative" or "Survival") if self.info[5]=="true" then modeString=modeString..", Switch Allowed" end gc:setFont("sansserif","r",9) draw3DString(gc,"Worldname:",130,46) draw3DString(gc,"Mode:",145,94) gc:setFont("sansserif","b",12) local txName=WW/2-gc:getStringWidth(self.info[3])/2 draw3DString(gc,self.info[3],txName,60,2) gc:setFont("sansserif","b",11) local txMode=WW/2-gc:getStringWidth(modeString)/2 draw3DString(gc,modeString,txMode,108,2) for i,b in pairs(self.buttons) do drawButton(gc,b,i==self.selButton and "sel") end drawReturnTip(gc) end function menuDetail:escapeKey() setScreen(menuSelect) end --------------------------------------------------------------------------------------------------- menuEditText=Screen("gui") function menuEditText:onLoad(option) self.option=option self.selButton=1 if option=="rename" then self.val=saveInfo[currentSaveSlot][3] elseif option=="seed" then self.val=menuNew.seed end self.cursor=true self.buttons={[0]={"Cancel",20,130,125,25,11},{"Done",WW-145,130,125,25,11}} timer.start(0.6) end function menuEditText:timer() self.cursor=not self.cursor invalidateScreen() end function menuEditText:arrowKey(dir) self.selButton=(self.selButton+1)%2 hideCursor() invalidateScreen() end function menuEditText:mouseDown() if self.selButton==0 then if self.option=="seed" then setScreen(menuNew) else setScreen(menuDetail) end elseif self.selButton==1 then if self.option=="seed" then setScreen(menuNew) menuNew.seed=self.val elseif self.val~="" then var.store("save"..tostring(currentSaveSlot)..".h","JMC2D:"..VERSION..":"..self.val..":"..saveInfo[currentSaveSlot][4]..":"..saveInfo[currentSaveSlot][5]) updateSaveInfo() setScreen(menuDetail) end end end function menuEditText:escapeKey() if self.option=="seed" then setScreen(menuNew) else setScreen(menuDetail) end end function menuEditText:charIn(key) if key~=":" and key~=nl and self.val:len()<20 then self.val=self.val..key invalidateScreen() end end function menuEditText:backspaceKey() if self.val~="" then self.val=self.val:sub(1,self.val:len()-1) invalidateScreen() end end function menuEditText:onRemove() timer.stop() end function menuEditText:paint(gc) drawBackground(gc) gc:setFont("sansserif","b",10) if self.option=="rename" then draw3DString(gc,"Rename world:",20,50) draw3DString(gc,saveInfo[currentSaveSlot][3],20,70) else draw3DString(gc,"Same seed makes the generator produce the",20,50) draw3DString(gc,"same world on same game version",20,70) draw3DString(gc,"Leave blank for randomness!",20,170) end gc:setColorRGB(255,255,255) gc:drawRect(20,99,WW-40,21) gc:setColorRGB(30,30,30) gc:fillRect(21,100,WW-41,20) gc:setFont("sansserif","r",11) gc:setColorRGB(255,255,255) local v=self.val if self.cursor then v=v.."_" end gc:drawString(v,25,98,"top") drawButton(gc,self.buttons[0],self.selButton==0 and "sel") drawButton(gc,self.buttons[1],((self.option=="rename" and self.val=="") and "dis") or (self.selButton==1 and "sel")) drawReturnTip(gc) end --------------------------------------------------------------------------------------------------- menuNew=Screen("gui") function menuNew:onLoad(reset) if reset then self.seed = "" worldName = "New World " .. tostring(currentSaveSlot + 1) --worldSize = {-100, 100, -100, 50} mode = 0 self.buttons = {[0] = {"Survival", WW / 2 - 35, 100, 70, 20}, {"Change", WW - 90, 135, 70, 20}, {"Cancel", 20, 170, 70, 20}, {"Import", WW / 2 - 35, 170, 70, 20}, {"Go!!!", WW - 90, 170, 70, 20} } self.selButton = 0 end cursor.set("hollow pointer") self.cursor = true timer.start(0.6) end function menuNew:timer() self.cursor = not self.cursor invalidateScreen() end function menuNew:mouseDown() if self.selButton == 0 then --Mode Button if mode == 0 then mode = 1 allowSwitch = true self.buttons[0][1] = "Creative" else mode = 0 allowSwitch = false self.buttons[0][1] = "Survival" end invalidateScreen() elseif self.selButton == 1 then --Worldseed Button setScreen(menuEditText,"seed") elseif self.selButton == 2 then --Cancel Button setScreen(menuSelect) elseif self.selButton == 3 then --Import Button setScreen(menuImport) elseif self.selButton == 4 and worldName ~= "" then --GO Button worldSeed = makeSeed(self.seed) local info = "Generating..." local function action() initialStuff(true) deleteWorld("save" .. currentSaveSlot) Chunk(0, chunkSize):generate() Chunk(1, chunkSize):generate() Chunk(-1, chunkSize):generate() Chunk(-2, chunkSize):generate() --generateWorld() --drawBorders() --for x=worldSize[1], worldSize[2] do -- updateSunTop(x) --end spawnPlayer() resumeGame() if HANDHELD==false then addScreen(message,{"Emulator detected!", "Lighting is broken for some reason on", "emulator. I have no idea how to fix it but if","you press [Y] you will get a super light","source that ''fixes'' everything (by removing","all darkness)."}) function message:actionY() addItem({IDList[49], 1}) addScreen(message,{"Super light source added to inventory!", "Place the hamster somewhere well...","","...it cannot be broken once placed!","",""}) end end end setScreen(waitScreen, info, action) end end function menuNew:arrowKey(dir) if dir == "right" or dir == "down" then if self.selButton == 1 then self.selButton = 4 else self.selButton = self.selButton + 1 end elseif dir == "left" or dir == "up" then if dir=="up" and self.selButton > 1 then self.selButton = 1 else self.selButton = self.selButton - 1 end end self.selButton = self.selButton % 5 hideCursor() invalidateScreen() end function menuNew:charIn(key) if key~=":" and key~=nl and worldName:len()<20 then worldName=worldName..key invalidateScreen() end end function menuNew:backspaceKey() if worldName~="" then worldName=worldName:sub(1,worldName:len()-1) invalidateScreen() end end function menuNew:escapeKey() setScreen(menuSelect) end function menuNew:paint(gc) drawBackground(gc) gc:setFont("sansserif", "b", 12) draw3DString(gc, "New Game", 118, 40, 2) draw3DString(gc, "Name:", 20, 70, 1) draw3DString(gc, "Gamemode:", 20, 100, 1) local seedStrX = draw3DString(gc, "Seed:", 20, 135, 1) + 10 gc:setColorRGB(255, 255, 255) gc:drawRect(79, 69, WW - 99, 21) gc:setColorRGB(50, 50, 50) gc:fillRect(80, 70, WW - 100, 20) gc:setFont("sansserif", "r", 11) gc:setColorRGB(255, 255, 255) local wn = worldName if self.cursor then wn = wn .. "_" end gc:drawString(wn, 85, 68, "top") for i, b in pairs(self.buttons) do if i == 5 and worldName == "" then drawButton(gc, b, "dis") else drawButton(gc, b, i == self.selButton and "sel") end end gc:setColorRGB(255, 255, 255) if (self.seed and self.seed ~= "" and self.seed ~= 0) then gc:setFont("sansserif", "r", 11) draw3DString(gc, self.seed, seedStrX, 135, 1) else gc:setFont("sansserif", "i", 11) draw3DString(gc, "Random", seedStrX, 135, 1) end drawReturnTip(gc) end function menuNew:onRemove() timer.stop() end --------------------------------------------------------------------------------------------------- menuImport=Screen() function menuImport:onLoad() toolpalette.enablePaste(true) end function menuImport:escapeKey() setScreen(menuNew) end function menuImport:paste() local input=clipboard.getText() local validInput=true input=input:split(string.char(10)) if #input~=2 then validInput=false end local head=input[1] local body=input[2] if head:split(":")[1]~="JMC2D" then validInput=false end if head:split(":")[2]~=VERSION then validInput=false end if validInput then setScreen(waitScreen,"Importing...",function () loadGame(head,body) end) else addScreen(message,{"Compatibility Difficulties","Your input seems to be corrupt or from","an other version.","There'll may be some difficulties.","Dou you want to load it anyways?","","Load with [Y]"}) function message:actionY() setScreen(waitScreen,"Importing...",function () loadGame(head,body,true) end) end end end function menuImport:paint(gc) drawBackground(gc) gc:setFont("sansserif","b",12) gc:setColorRGB(50,50,50) gc:drawString("Import Game",108,53,"top") --gc:drawString("Paste (ctrl+V) to load copied game!",28,103,"top") gc:setColorRGB(255,255,255) gc:drawString("Import Game",105,50,"top") gc:drawString("Paste (ctrl+V) to load copied game!",25,110,"top") gc:setFont("sansserif","b",10) gc:drawString("press [esc] to return to main menu",10,WH-30,"top") drawReturnTip(gc) end --------------------------------------------------------------------------------------------------- message=Screen() function message:onLoad(...) self.pages={...} self.page=1 function self:actionY() end function self:actionN() end end function message:arrowKey(dir) if (dir=="up" or dir=="left") and self.page>1 then self.page=self.page-1 invalidateScreen() elseif (dir=="down" or dir=="right") and self.page<#self.pages then self.page=self.page+1 invalidateScreen() end end function message:escapeKey() removeScreen(self) end function message:mouseDown() removeScreen(self) end function message:charIn(chr) if chr=="y" then self:actionY() removeScreen(self) end end function message:paint(gc) --gc:setColorRGB(0,0,0) --gc:drawRect(24,24,WW-49,WH-49) --gc:setColorRGB(240,240,170) --gc:fillRect(25,25,WW-50,WH-50) --gc:setColorRGB(0,0,0) draw3DFrame(gc,25,25,WW-50,WH-50,{240,240,170}) gc:drawLine(25,60,WW-25,60) gc:setFont("sansserif","b",11) local headline=self.pages[self.page][1] if #self.pages>1 then headline=headline.." ("..self.page.."/"..#self.pages..")" end gc:drawString(headline,40,32,"top") gc:setFont("sansserif","r",10) for l=0,6 do local line=self.pages[self.page][l+2] or "" gc:drawString(line, 33, 62+l*17, "top") end gc:setFont("sansserif","r",9) if self.page>1 then draw3DString(gc,"◀",15,WH/2-5,1,200,200,200) end if self.page<#self.pages then draw3DString(gc,"▶",WW-24,WH/2-5,1,200,200,200) end end --------------------------------------------------------------------------------------------------- waitScreen=Screen() function waitScreen:onLoad(info,action) self.info=info self.action=action timer.start(0.05) end function waitScreen:timer() timer.stop() self.action() end function waitScreen:enterKey() self.action() end function waitScreen:paint(gc) drawBackground(gc) gc:setFont("sansserif","b",24) local posX=WW/2-gc:getStringWidth(self.info)/2 gc:setColorRGB(50,50,50) gc:drawString(self.info,posX+1,71,"top") gc:setColorRGB(255,255,200) gc:drawString(self.info,posX-1,69,"top") gc:setFont("sansserif", "b", 12) gc:setColorRGB(255,255,255) gc:drawString("This may take a while...",60,120,"top") gc:setFont("sansserif", "r", 7) gc:drawString("Stop this by holding [on] for a few seconds (the game will crash)",21,175,"top") gc:drawString("If nothing seems to happen press [enter] and restart the game!",25,185,"top") end --------------------------------------------------------------------------------------------------- gameMain=Screen() function gameMain:onLoad() timer.start(0.1) setMenuState("normal") end function gameMain:arrowKey(dir) if settings.controls==1 or settings.controls==2 then if moved and not debug then return end local BlockHUL=world[player.pos[1]-1][player.pos[2]+2] local BlockHU=world[player.pos[1]][player.pos[2]+2] local BlockHUR=world[player.pos[1]+1][player.pos[2]+2] local BlockHL=world[player.pos[1]-1][player.pos[2]+1] local BlockH=world[player.pos[1]][player.pos[2]+1] local BlockHR=world[player.pos[1]+1][player.pos[2]+1] local BlockFL=world[player.pos[1]-1][player.pos[2]] local BlockF=world[player.pos[1]][player.pos[2]] local BlockFR=world[player.pos[1]+1][player.pos[2]] local BlockFDL=world[player.pos[1]-1][player.pos[2]-1] local BlockFD=world[player.pos[1]][player.pos[2]-1] local BlockFDR=world[player.pos[1]+1][player.pos[2]-1] if dir=="up" then --Block1=world[player.pos[1]][player.pos[2]+2] if BlockHU.canWalkThrough or debug then if player.grounded or fly or BlockF.waterLevel > 0 then player.pos[2]=player.pos[2]+1 player.grounded=false setSelection(selBlock[1], selBlock[2]+1) moved=true elseif mode==1 or debug then fly=true player.fallspeed=2 return on.arrowKey("up") end end elseif dir=="down" then if ((BlockF == Block_ladder or fly) and BlockFD.canWalkThrough) or BlockFD==Block_ladder or debug then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1], selBlock[2]-1) moved=true end elseif dir=="right" then player.dir=2 if inRange(BlockFR.id,43,44) and not debug then if BlockHR.canWalkThrough and BlockHU.canWalkThrough and BlockHUR.canWalkThrough then player.pos[1]=player.pos[1]+1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]+1, selBlock[2]+1) moved=true end elseif (BlockFR.canWalkThrough and BlockHR.canWalkThrough) or debug then player.pos[1]=player.pos[1]+1 if inRange(BlockFD.id,45,46) and BlockFDR.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]+1, selBlock[2]-1) else setSelection(selBlock[1]+1, selBlock[2]) end moved=true end elseif dir=="left" then player.dir = 1 if inRange(BlockFL.id,45,46) and not debug then if BlockHL.canWalkThrough and BlockHU.canWalkThrough and BlockHUL.canWalkThrough then player.pos[1]=player.pos[1]-1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]-1, selBlock[2]+1) moved=true end elseif (BlockFL.canWalkThrough and BlockHL.canWalkThrough) or debug then player.pos[1]=player.pos[1]-1 if inRange(BlockFD.id,43,44) and BlockFDL.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]-1, selBlock[2]-1) else setSelection(selBlock[1]-1, selBlock[2]) end moved=true end end if moved then if advCraftTable~=nil then enableAdvancedCrafting(false) end checkGrounded() invalidateScreen() end elseif settings.controls==3 or settings.controls==4 then local nx, ny = 0, 0 if dir=="down" then ny=-1 elseif dir=="left" then nx=-1 elseif dir=="right" then nx=1 elseif dir=="up" then ny=1 end setSelection(selBlock[1]+nx, selBlock[2]+ny) hideCursor() return end end function gameMain:mouseMove(x,y) cursor.set("crosshair") setSelection(player.pos[1]+ math.floor((x)/16) - 9, player.pos[2] + math.floor((WH-y-5)/16) - 6) end function gameMain:mouseDown() --clicked mouse local function updateOnMouse() updateBlock(selBlock[1],selBlock[2]) updateBlock(selBlock[1]-1,selBlock[2]) updateBlock(selBlock[1]+1,selBlock[2]) updateBlock(selBlock[1],selBlock[2]-1) updateBlock(selBlock[1],selBlock[2]+1) end local selItem = inventory[selSlot][1] local x, y = selBlock[1], selBlock[2] if mouseVisible and mouseY>WH-27 and mouseX>=69 and mouseX<=250 then --click on ItemBar selSlot=math.max(math.min(math.floor((mouseX-70)/20)+1,9),1) invalidateScreen() elseif tryToAttackMob() then return elseif x==player.pos[1] and inRange(y-player.pos[2],0,1) then --click on Player tryToEat() elseif settings.controls==1 and tryToPlaceBlock() then elseif settings.controls==3 and tryToPlaceBlock() then else print("elseclick") tryToBreakBlock() end end function gameMain:grabDown() --ctrl click if tryToUse() then elseif settings.controls==2 and not (selBlock[1]==player.pos[1] and inRange(selBlock[2]-player.pos[2],0,1)) and tryToPlaceBlock() then elseif settings.controls==4 and not (selBlock[1]==player.pos[1] and inRange(selBlock[2]-player.pos[2],0,1)) and tryToPlaceBlock() then else tryToEat() end end function gameMain:escapeKey() addScreen(gameMenu) end function gameMain:contextMenu() if mode==0 then addScreen(gameInventory) else addScreen(gameInventoryC) end end function gameMain:charIn(key) --keys print(lightMap[player.pos[1]][player.pos[2]+1]) local itemchange=false if settings.controls==3 or settings.controls==4 then if moved and not debug then return end local BlockHUL=world[player.pos[1]-1][player.pos[2]+2] local BlockHU=world[player.pos[1]][player.pos[2]+2] local BlockHUR=world[player.pos[1]+1][player.pos[2]+2] local BlockHL=world[player.pos[1]-1][player.pos[2]+1] local BlockH=world[player.pos[1]][player.pos[2]+1] local BlockHR=world[player.pos[1]+1][player.pos[2]+1] local BlockFL=world[player.pos[1]-1][player.pos[2]] local BlockF=world[player.pos[1]][player.pos[2]] local BlockFR=world[player.pos[1]+1][player.pos[2]] local BlockFDL=world[player.pos[1]-1][player.pos[2]-1] local BlockFD=world[player.pos[1]][player.pos[2]-1] local BlockFDR=world[player.pos[1]+1][player.pos[2]-1] if key=="8" or key=="w" or key==" " then --Block1=world[player.pos[1]][player.pos[2]+2] if BlockHU.canWalkThrough or debug then if player.grounded or fly or BlockF.waterLevel > 0 then player.pos[2]=player.pos[2]+1 player.grounded=false setSelection(selBlock[1], selBlock[2]+1) moved=true elseif mode==1 or debug then fly=true player.fallspeed=2 return on.charIn("up") or on.charIn("w")or on.charIn(" ") end end elseif key=="2" or key=="s" then if ((BlockF == Block_ladder or fly) and BlockFD.canWalkThrough) or BlockFD==Block_ladder or debug then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1], selBlock[2]-1) moved=true end elseif key=="6" or key=="d" or key=="3" then player.dir=2 if key=="3" then if ((BlockF == Block_ladder or fly) and BlockFD.canWalkThrough) or BlockFD==Block_ladder or debug then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1], selBlock[2]-1) moved=true end end if inRange(BlockFR.id,43,44) and not debug then if BlockHR.canWalkThrough and BlockHU.canWalkThrough and BlockHUR.canWalkThrough then player.pos[1]=player.pos[1]+1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]+1, selBlock[2]+1) moved=true end elseif (BlockFR.canWalkThrough and BlockHR.canWalkThrough) or debug then player.pos[1]=player.pos[1]+1 if inRange(BlockFD.id,45,46) and BlockFDR.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]+1, selBlock[2]-1) else setSelection(selBlock[1]+1, selBlock[2]) end moved=true end elseif key=="4" or key=="a" or key=="1" then player.dir = 1 if key=="1" then if ((BlockF == Block_ladder or fly) and BlockFD.canWalkThrough) or BlockFD==Block_ladder or debug then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1], selBlock[2]-1) moved=true end end if inRange(BlockFL.id,45,46) and not debug then if BlockHL.canWalkThrough and BlockHU.canWalkThrough and BlockHUL.canWalkThrough then player.pos[1]=player.pos[1]-1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]-1, selBlock[2]+1) moved=true end elseif (BlockFL.canWalkThrough and BlockHL.canWalkThrough) or debug then player.pos[1]=player.pos[1]-1 if inRange(BlockFD.id,43,44) and BlockFDL.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]-1, selBlock[2]-1) else setSelection(selBlock[1]-1, selBlock[2]) end moved=true end elseif key=="7" then --Block1=world[player.pos[1]][player.pos[2]+2] if BlockHU.canWalkThrough or debug then if player.grounded or fly or BlockF.waterLevel > 0 then player.pos[2]=player.pos[2]+1 player.grounded=false setSelection(selBlock[1], selBlock[2]+1) moved=true elseif mode==1 or debug then fly=true player.fallspeed=2 return on.charIn("7") end player.dir = 1 if inRange(BlockFL.id,45,46) and not debug then if BlockHL.canWalkThrough and BlockHU.canWalkThrough and BlockHUL.canWalkThrough then player.pos[1]=player.pos[1]-1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]-1, selBlock[2]+1) moved=true end elseif (BlockFL.canWalkThrough and BlockHL.canWalkThrough) or debug then player.pos[1]=player.pos[1]-1 if inRange(BlockFD.id,43,44) and BlockFDL.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]-1, selBlock[2]-1) else setSelection(selBlock[1]-1, selBlock[2]) end moved=true end end elseif key=="9" then --Block1=world[player.pos[1]][player.pos[2]+2] if BlockHU.canWalkThrough or debug then if player.grounded or fly or BlockF.waterLevel > 0 then player.pos[2]=player.pos[2]+1 player.grounded=false setSelection(selBlock[1], selBlock[2]+1) moved=true elseif mode==1 or debug then fly=true player.fallspeed=2 return on.charIn("9") end player.dir=2 if inRange(BlockFR.id,43,44) and not debug then if BlockHR.canWalkThrough and BlockHU.canWalkThrough and BlockHUR.canWalkThrough then player.pos[1]=player.pos[1]+1 player.pos[2]=player.pos[2]+1 setSelection(selBlock[1]+1, selBlock[2]+1) moved=true end elseif (BlockFR.canWalkThrough and BlockHR.canWalkThrough) or debug then player.pos[1]=player.pos[1]+1 if inRange(BlockFD.id,45,46) and BlockFDR.canWalkThrough then player.pos[2]=player.pos[2]-1 setSelection(selBlock[1]+1, selBlock[2]-1) else setSelection(selBlock[1]+1, selBlock[2]) end moved=true end end end if moved then if advCraftTable~=nil then enableAdvancedCrafting(false) end checkGrounded() invalidateScreen() end elseif settings.controls==1 or settings.controls==2 then if tostring(tonumber(key))==key and tonumber(key)~=0 then local nx, ny = 0, 0 if key=="1" then nx=-1; ny=-1 elseif key=="2" then ny=-1 elseif key=="3" then nx=1; ny=-1 elseif key=="4" then nx=-1 elseif key=="5" then on.mouseDown() elseif key=="6" then nx=1 elseif key=="7" then nx=-1; ny=1 elseif key=="8" then ny=1 elseif key=="9" then nx=1; ny=1 end setSelection(selBlock[1]+nx, selBlock[2]+ny) hideCursor() return end end if key=="+" then selSlot=selSlot-1 if selSlot<1 then selSlot=9 end itemchange=true elseif key=="-" or key=="," then selSlot=selSlot+1 if selSlot>9 then selSlot=1 end itemchange=true elseif key=="b" and debug then local index=nextFree(objList) if index then objList[index]=objArrow(player.pos[1],player.pos[2]+1,index,0.5,1) end elseif key=="c" then settings.controls=settings.controls%4+1 HUDmessage={"Switched controls to "..settings.controls,3,255,255,0} elseif key=="g" then collectgarbage("collect") elseif key=="z" and debug then worldTime = 12000 elseif key=="u" and debug then debug = false fly = false HUDmessage={"debug-mode deactivated",2,255,0,0} elseif key=="v" and jens==1 then jens=2 elseif key=="f" and (mode==1 or debug) then fly=not fly elseif key=="i" or key=="e" then if mode==0 then addScreen(gameInventory) else addScreen(gameInventoryC) end elseif key=="j" then jens=1 elseif key=="n" then if jens==2 then jens=3 elseif debug then worldTime = 0 end elseif key=="m" then if allowSwitch or debug then local modestr if mode==0 then mode=1 modestr="CREATIVE" else mode=0 fly = false modestr="SURVIVAL" end HUDmessage={"Gamemode changed to "..modestr,3,255,255,200} else HUDmessage={"Mode switch is not allowed!",2,255,0,0} end elseif key=="o" and debug then spawnMob("monster",player.pos[1],player.pos[2]) invalidateScreen() elseif key=="k" then if jens==3 then debug=true fly=true jens=0 HUDmessage={"debug-mode activated",2,100,230,0} elseif debug then worldTime = (worldTime + 1000) % 24000 end elseif key=="x" and debug then doExplosion(player.pos[1],player.pos[2],16,true) elseif key=="−" then --key [(-)] on.grabDown() end --cursor.show() if itemchange and inventory[selSlot][1] ~= nil then breakBlock={0,0,0} selItem = inventory[selSlot][1] if selItem then HUDmessage={selItem.name, 1, 255, 255, 255} end end invalidateScreen() end function gameMain:timer() delay[1] = timer.getMilliSecCounter() worldTime = (worldTime + 5) % 24000 -- gui update if worldTime%50==0 then --every 50 ^= 10 Ticks ^= 1 Second -- HUDmessage update if HUDmessage[2]~="X" then HUDmessage[2]=HUDmessage[2]-1 if HUDmessage[2] <=0 then HUDmessage={"","X",0,0,0} end end -- trash slots update if trash[1][1] or trash[2][1] or trash[3][1] then nextFlushTime=(nextFlushTime or 100)-1 if nextFlushTime<=0 then flushTrash() nextFlushTime=nil if gameInventory.active then updateSoon(1) end end else nextFlushTime=nil end -- check if rare space in inventory if mode == 0 then local emptySlots = 0 for i = 1, 36 do if inventory[i][1] == nil then emptySlots = emptySlots + 1 end end rareSpaceWarning = (emptySlots < 2) end end -- tutorial help tips update if settings.showhelp and helptimer<=0 then for i=1, #help do if not help[i].p and help[i].f() then HUDmessage={help[i].t,10,230,255,100} help[i].p=true helptimer=100 invalidateScreen() break end end else helptimer=helptimer-1 end moved = false checkGrounded() if player.health<=0 then die() end --falling if not (player.grounded or fly) then --not grounded and not flying if world[player.pos[1]][player.pos[2]].waterLevel > 0 then --in water ==> Fallspeed=4 player.fallspeed = 4 else player.fallspeed = math.min(player.fallspeed, 2) end if player.falltimer > player.fallspeed then --fall down player.pos[2] = player.pos[2] - 1 setSelection(selBlock[1], selBlock[2] - 1) player.falltimer = 0 checkGrounded() if advCraftTable then enableAdvancedCrafting(false) end local groundBlock = world[player.pos[1]][player.pos[2] - 1] if (groundBlock == Block_farmland_dry or groundBlock == Block_farmland_wet) and math.random(2) == 1 then placeBlock(player.pos[1], player.pos[2] - 1, Block_dirt) end invalidateScreen() if player.fallspeed < 4 then player.fallspeed = player.fallspeed - 1 end else player.falltimer = player.falltimer + 1 end end -- check if sky is visible skyVisible = false for x = player.pos[1] - 9, player.pos[1] + 10 do if validField(x) and sunTop[x] < player.pos[2] + 6 then skyVisible = true break end end -- tick update local tickUpdate = false if worldTime % 15 == 0 then --every 15 ^= 3 Ticks ^= 0.3 Seconds tickUpdate = true end if tickUpdate then furnaceUpdate() lavaUpdate = (lavaUpdate + 1) % 4 if mode == 0 and not debug then --check player damage factors local feetBlock = world[player.pos[1]][player.pos[2]] local headBlock = world[player.pos[1]][player.pos[2] + 1] if not headBlock.canWalkThrough then --check if head in solid block or in void hurtPlayer(1, "suffocation") invalidateScreen() elseif player.pos[2] 5 then --check if head in water player.breath = player.breath - 1 if player.breath < 0 and player.breath % 5 == 0 then hurtPlayer(2, "drowning") end updateSoon(2) else --refresh breath player.breath = 50 end if feetBlock.lavaLevel + headBlock.lavaLevel > 0 then --check if player in lava hurtPlayer(1, "lava") updateSoon(2) end if feetBlock == Block_fire or headBlock == Block_fire and worldTime % 10 == 0 then hurtPlayer(1, "fire") updateSoon(2) end end -- most important update call updateVisibleRange() --object update for i, obj in pairs(objList) do obj:tick() end --mob spawning if worldTime % 100 == 0 then --every 100 ^= 20 Ticks ^= 2 Seconds checkMobSpawn() end mobUpdate() collectgarbage() end loadChunks() -- screen updating if updateIn then --Intelligent frame updates! updateIn = updateIn - 1 if updateIn <= 0 then invalidateScreen() end end if mouseVisible then cursor.show() end delay[1] = timer.getMilliSecCounter() - delay[1] end function gameMain:paint(gc) if skyVisible then drawSky(gc) else local _, pyNether = convertPos(0,-50) pyNether = pyNether*16 if pyNether < WH then--player.pos[2]<-50 then --in nether if settings.graphics.gui > 1 then gc:setColorRGB(150+math.sin(worldTime/400*math.pi)*10,30,30) else gc:setColorRGB(150,30,30) end gc:fillRect(0,math.max(0, pyNether),WW, WH) end if pyNether > 0 then if lightMap[player.pos[1]][player.pos[2]+1]==0 then gc:setColorRGB(100,100,110) else gc:setColorRGB(170,170,180) end gc:fillRect(0,0,WW, math.min(pyNether, WH)) end end local nrx,nry,nrw,nrh --no render rect coordinates if gameChest.active or gameInventory.active or gameFurnace.active then nrx,nry,nrw,nrh=-5,-4,11,8 end drawWorld(gc,nrx,nry,nrw,nrh) drawMobs(gc) --draw objects (or let them draw themselves) for i, obj in pairs(objList) do local px, py = convertPos(obj.pos[1],obj.pos[2]) px=px*16; py=py*16 if inRect({px,py},{0,0,318,207}) then obj:draw(gc,px,py) end end -- black Box at Bottom gc:setColorRGB(0,0,0) gc:fillRect(0, WH-4, WW, 4) if #screens>1 then drawItemBar(gc) for y=0,12 do for x=0,19 do gc:drawImage(shadowTexture[2], x*16, y*16) end end else drawShadows(gc,nrx,nry,nrw,nrh) drawItemBar(gc) end delay[2]=timer.getMilliSecCounter()-delay[2] --debug Info if debug then gc:setFont("sansserif", "r", 7) gc:setColorRGB(0,0,0) local mem = math.floor(collectgarbage("count")) gc:drawString("X: "..player.pos[1].." Y: "..player.pos[2].." T: "..worldTime.." "..mem.."KB Tick: "..delay[1].."ms Paint: "..delay[2].."ms Chngs: "..delay[3], 1, -1, "top") gc:setColorRGB(255,255,255) gc:drawString("X: "..player.pos[1].." Y: "..player.pos[2].." T: "..worldTime.." "..mem.."KB Tick: "..delay[1].."ms Paint: "..delay[2].."ms Chngs: "..delay[3], 0, -2, "top") end --HUD Message gc:setColorRGB(50,50,50) gc:setFont("sansserif", "b", 10) local xpos=WW/2-gc:getStringWidth(HUDmessage[1])/2 gc:drawString(HUDmessage[1], xpos+1, 31) gc:setColorRGB(HUDmessage[3],HUDmessage[4],HUDmessage[5]) gc:drawString(HUDmessage[1], xpos, 30) end --------------------------------------------------------------------------------------------------- Slots=class() -- don't even try to understand that - I don't either function Slots:init() self.s={} for x=0,17 do self.s[x]={} end self.offset={0,0} self.sel=nil self.grabItem=nil self.lastDIPos={0,0} end function Slots:bindEvents(object) local slotInstance = self function object:mouseMove(...) slotInstance:mouseMove(...) end function object:arrowKey(...) slotInstance:arrowKey(...) end function object:mouseDown(...) slotInstance:mouseDown(...) end function object:charIn(...) slotInstance:charIn(...) end function object:backspaceKey(...) slotInstance:backspaceKey(...) end end function Slots:mouseMove(x,y) if self.grabItem then cursor.set("drag grab") invalidateScreen(self.lastDIPos[1]-16,self.lastDIPos[2]-16,32,32) invalidateScreen(x-16,y-16,32,32) else cursor.set("hollow pointer") end local nselX=math.floor((x-self.offset[1])/18) local nselY=math.floor((y-self.offset[2])/18) if self.s[nselX] and self.s[nselX][nselY] then if not self.sel or nselX~=self.sel[1] or nselY~=self.sel[2] then if self.sel then invalidateScreen(self.sel[1]*18+self.offset[1],self.sel[2]*18+self.offset[2],18,18) end self.sel={nselX,nselY} invalidateScreen(self.sel[1]*18+self.offset[1],self.sel[2]*18+self.offset[2],18,18) end else if self.sel then invalidateScreen(self.sel[1]*18+self.offset[1],self.sel[2]*18+self.offset[2],18,18) end self.sel=nil end end function Slots:mouseDown() if not self.sel then if self.grabItem then discardItem(self.grabItem) self.grabItem=nil end cursor.set("hollow pointer") else local list = self.s[self.sel[1]][self.sel[2]][1] local index = self.s[self.sel[1]][self.sel[2]][2] if not self.grabItem then if list[index][1] ~= nil then self.grabItem = {list[index][1], list[index][2]} list[index]={nil,0} cursor.set("drag grab") end elseif self.grabItem[1]==list[index][1] then while self.grabItem[2]>0 and list[index][2]<64 do self.grabItem[2]=self.grabItem[2]-1 list[index][2]=list[index][2]+1 end if self.grabItem[2]<=0 then self.grabItem=nil cursor.set("hollow pointer") end elseif list[index][1]==nil then list[index] = {self.grabItem[1], self.grabItem[2]} self.grabItem=nil cursor.set("hollow pointer") else local buffer=self.grabItem self.grabItem=list[index] list[index]=buffer end end invalidateScreen() end function Slots:arrowKey(dir) if not self.sel then for x=0, 15 do for y = 0, 10 do if self.s[x][y] then self.sel={x,y} break end end if self.sel then break end end end if dir=="left" then for x=self.sel[1]-1, 0, -1 do if self.s[x][self.sel[2]] then self.sel[1]=x break end end elseif dir=="right" then for x=self.sel[1]+1, 15, 1 do if self.s[x][self.sel[2]] then self.sel[1]=x break end end elseif dir=="up" then for y=self.sel[2]-1, 0, -1 do if self.s[self.sel[1]][y] then self.sel[2]=y break end end elseif dir=="down" then for y = self.sel[2]+1, 10, 1 do if self.s[self.sel[1]][y] then self.sel[2]=y break end end end hideCursor() invalidateScreen() end function Slots:charIn(key) if not self.sel then return end if self.grabItem and not self.grabItem[1].stackable then return end --grabbed Item not stackable local list=self.s[self.sel[1]][self.sel[2]][1] local index=self.s[self.sel[1]][self.sel[2]][2] if list[index] and list[index][1] and not list[index][1].stackable then return end --item in selected slot not stackable if key=="+" or key=="w" then if self.grabItem and self.grabItem[1] == list[index][1] and self.grabItem[2]<64 then self.grabItem[2] = self.grabItem[2] + 1 list[index][2] = list[index][2] - 1 if list[index][2] <= 0 then list[index] = {nil, 0} end elseif not self.grabItem and list[index][1]~=nil then self.grabItem={list[index][1],math.floor(list[index][2]/2+0.5)} list[index][2]=list[index][2]-self.grabItem[2] if list[index][2]<=0 then list[index]={nil,0} end cursor.set("drag grab") end elseif key=="-" or key=="," then if self.grabItem and (list[index][1]==nil or list[index][1]==self.grabItem[1]) and list[index][2]<64 then if list[index][1]==nil then list[index][1]=self.grabItem[1] end self.grabItem[2]=self.grabItem[2]-1 list[index][2]=list[index][2]+1 if self.grabItem[2]<=0 then self.grabItem=nil cursor.set("hollow pointer") end end end invalidateScreen() end function Slots:backspaceKey() if self.grabItem then discardItem(self.grabItem) self.grabItem=nil elseif self.sel and self.sel then local list=self.s[self.sel[1]][self.sel[2]][1] local index=self.s[self.sel[1]][self.sel[2]][2] if list[index][2]~=0 then discardItem(list[index]) list[index]={nil,0} end end end function Slots:paint(gc) for x=0,15 do for y=0, 10 do if self.s[x][y] then local posX=x*18+self.offset[1] local posY=y*18+self.offset[2] gc:setColorRGB(50,50,50) --draw Slot gc:drawRect(posX,posY,16,16) gc:setColorRGB(255,255,255) gc:drawRect(posX+1,posY+1,16,16) gc:setColorRGB(140,140,140) gc:fillRect(posX+1,posY+1,16,16) -- ,-------------, Item containing List local item=self.s[x][y][1][self.s[x][y][2]] -- '---------------' Index of Item in List drawItem(gc,item,posX+1,posY+1) if self.sel and x==self.sel[1] and y==self.sel[2] then gc:setColorRGB(150,150,150) gc:drawRect(posX,posY,17,17) end end end end if self.grabItem then if mouseVisible then self.lastDIPos={mouseX-8,mouseY-5} drawItem(gc, self.grabItem, mouseX-8, mouseY-5) else local posX, posY if self.sel then posX = self.sel[1]*18+self.offset[1]+5 posY = self.sel[2]*18+self.offset[2]-5 else posX, posY = WW/2-8, 5 end drawItem(gc,self.grabItem, posX+1, posY+1) gc:drawImage(guiTexture[27], posX+8, posY) end end end --------------------------------------------------------------------------------------------------- gameInventory=Screen() function gameInventory:onLoad() self.slots=Slots() for i=0,26 do local ii = i + 9 self.slots.s[ii%9+4][math.floor(ii/9)+4]={inventory,ii+1} end for i=1,9 do self.slots.s[i+3][9]={inventory,i} end self.slots.s[14][5]={trash,1} self.slots.s[14][6]={trash,2} self.slots.s[14][7]={trash,3} self.slots.s[2][5]={inventory,37} self.slots.s[2][6]={inventory,38} self.slots.s[2][7]={inventory,39} self.slots.s[2][8]={inventory,40} self.slots.offset={6,-16} if not mouseVisible then self.slots.sel={selSlot+3,9} end self.slots:bindEvents(self) local oldSlotMouseDown=self.slots.mouseDown function gameInventory.slots:mouseDown() if self.sel and self.sel[1] == 2 and self.grabItem then -- armor slot local part = self.sel[2] - 4 if self.grabItem[1].armorPart == part then oldSlotMouseDown(gameInventory.slots) end else oldSlotMouseDown(gameInventory.slots) end end end function gameInventory:escapeKey() removeScreen(self) end function gameInventory:charIn(chr) if chr=="i" then removeScreen(self) end end function gameInventory:paint(gc) local afx,afy,afw,afh = 38,51,25,100 --armorFramePosX, ..PosY, ..Width, ..Height draw3DFrame(gc,afx,afy,afw,afh,{80,80,180}) gc:setFont("sansserif","r",7) if HANDHELD then gc:setColorRGB(0,0,100) else gc:setColorRGB(30,30,130) end gc:drawString("AR-",afx+4,afy+1,"top") gc:drawString("MOR",afx+2,afy+10,"top") draw3DFrame(gc,63,30,WW-127,144) gc:setColorRGB(50,50,50) gc:setFont("sansserif", "b", 10) gc:drawString("Inventory", 130, 33, "top") gc:setFont("sansserif", "r", 7) gc:drawString("Press [menu] to craft!", 113, 55, "top") local tfx,tfy,tfw,tfh = WW-64,51,25,100 --trashFramePosX, ..PosY, ..Width, ..Height draw3DFrame(gc,tfx,tfy,tfw,tfh,{150,50,50}) gc:setFont("sansserif","b",11) if HANDHELD then gc:setColorRGB(70,0,0) else gc:setColorRGB(100,0,0) end gc:drawString("▾",tfx+8,tfy+70,"top") if nextFlushTime then local timeStrPX=tfx+tfw/2-gc:getStringWidth(tostring(nextFlushTime))/2+1 gc:drawString(nextFlushTime,timeStrPX,tfy+1,"top") else gc:setFont("sansserif","r",7) gc:drawString("TR-",tfx+4,tfy+1,"top") gc:drawString("ASH",tfx+3,tfy+10,"top") end gc:drawImage(guiTexture[25],tfx+6,tfy+84) self.slots:paint(gc) end function gameInventory:onRemove() if self.slots.grabItem then addItem(self.slots.grabItem) end end --------------------------------------------------------------------------------------------------- creativeInv={[1]={{1,1},{2,1},{11,1},{12,1},{7,1},{3,1},{6,1},{5,1},{4,1}, {8,1},{10,1},{13,1},{14,1},{15,1},{21,1},{100,1},{200,1},{28,1}, {26,1},{16,1},{17,1},{19,1},{20,1},{29,1},{43,1},{44,1},{42,1}, {320,1},{321,1},{40,1},nil,nil,nil,nil,nil,{49,1} }, [2]={{51,1},{52,1},{53,1},{54,1},{55,1},{56,1},{57,1},{58,1},{59,1}, {60,1},{81,1},{82,1},{83,1},{84,1},{85,1},{93,1},{94,1},{95,1}, {96,1},{97,1},{405,1},{406,1},{401,1},{402,1},{403,1},{99,1} }, [3]={{61,60},{62,132},{63,251},{64,1562},{65,33},{86,60},{87,132},{88,251},{89,1562}, {66,60},{67,132},{68,251},{69,1562},{70,33},nil,nil,nil,{90,33}, {71,60},{72,132},{73,251},{74,1562},{75,33},{92,385},{91,65},nil,nil, {76,60},{77,132},{78,251},{79,1562},{80,33},{93,1},{401,1},{98,65} }, [4]={{410,1},{415,1},{420,1},{425,1},nil,{429,1},{430,1},{431,1},{436,1}, {411,1},{416,1},{421,1},{426,1},nil,{432,1},{433,1},{434,1},{435,1}, {412,1},{417,1},{422,1},{427,1},nil,nil,nil,nil,nil, {413,1},{418,1},{423,1},{428,1} } } for page, content in pairs(creativeInv) do for i, stack in pairs(content) do if IDList[stack[1]] then stack[1] = IDList[stack[1]] if not stack[1].stackable then stack[2] = stack[1].maxHealth end else creativeInv[page][i] = nil end end end --for n, item in pairs(creativeInv[4]) do if itemID[item[1]] and not itemID[item[1]][2] then item[2]=itemID[item[1]][5] end end --insert health emptySlot={{nil, 0}} gameInventoryC=Screen() function gameInventoryC:onLoad() self.slots=Slots() self.page=1 --0=Survival Inventory; 1=blocks; 2=items; 3=tools; 4=search self.searchStr="" self.searchRes={} self:initialCISlots() for i=1,9 do self.slots.s[i+3][9]={inventory,i} end self.slots.offset={6,-6} if not mouseVisible then self.slots.sel={selSlot+3,9} end self.slots:bindEvents(self) local oldSlotMouseDown=gameInventoryC.slots.mouseDown function gameInventoryC.slots:mouseDown() if gameInventoryC.page==0 then oldSlotMouseDown(gameInventoryC.slots) return end if not self.sel then if self.grabItem then self.grabItem=nil end cursor.set("hollow pointer") elseif inRange(self.sel[1],4,12) and inRange(self.sel[2],4,7) then --creative Inventory Item List local list=self.s[self.sel[1]][self.sel[2]][1] local index=self.s[self.sel[1]][self.sel[2]][2] if self.grabItem then if self.grabItem[1] == list[index][1] and list[index][1].stackable and self.grabItem[2]<64 then self.grabItem[2]=self.grabItem[2]+1 else self.grabItem=nil cursor.set("hollow pointer") end elseif list[index][1] then self.grabItem={list[index][1], list[index][2]} cursor.set("drag grab") end else oldSlotMouseDown(gameInventoryC.slots) end invalidateScreen() end function self:mouseDown(mx,my) if mouseVisible and inRect({mx,my},{100,41,119,20}) then self.page=math.floor((mx-100)/20) self:initialCISlots() invalidateScreen() else gameInventoryC.slots:mouseDown() end end function self:charIn(chr) local upperPartSel = (self.slots.sel and inRange(self.slots.sel[1],4,12) and inRange(self.slots.sel[2],4,7)) --slot in upper part selected? if chr=="−" then self:grabDown() elseif self.page==5 then chr=string.gsub(chr,"%p","") -- if self.searchStr:len()<15 then self.searchStr=self.searchStr..chr self:search() invalidateScreen() end elseif chr=="i" then removeScreen(self) elseif self.page==0 or not upperPartSel then self.slots:charIn(chr) end end function self:backspaceKey() if self.page==5 then local len=self.searchStr:len() if len>0 then self.searchStr=self.searchStr:sub(1,len-1) self:search() invalidateScreen() end else self.slots:backspaceKey() end end end function gameInventoryC:initialCISlots() local Mfloor=math.floor if self.page==0 then for i=0,9 do self.slots.s[i+4][4]=nil end for i=10,36 do local ii=i-10 self.slots.s[ii%9+4][Mfloor(ii/9)+5]={inventory,i} end if self.slots.sel and self.slots.sel[2]<5 then self.slots.sel[2]=5 end elseif self.page==5 then for i=0,9 do self.slots.s[i+4][4]=nil end for i=10,36 do local ii=i-10 self.slots.s[ii%9+4][Mfloor(ii/9)+5]={emptySlot,1} end if self.slots.sel and self.slots.sel[2]<5 then self.slots.sel[2]=5 end else for i=1,36 do local ii=i-1 if creativeInv[self.page][i] then self.slots.s[ii%9+4][Mfloor(ii/9)+4]={creativeInv[self.page],i} else self.slots.s[ii%9+4][Mfloor(ii/9)+4]={emptySlot,1} end end end self.searchStr="" self.searchRes={} end function gameInventoryC:search() local Mfloor=math.floor local lower=string.lower local searchStr = lower(self.searchStr) local resNo=0 for page, content in pairs(creativeInv) do for pos, item in pairs(content) do local name = item[1].name if string.find(lower(name),searchStr) then self.slots.s[resNo%9+4][Mfloor(resNo/9)+5]={creativeInv[page],pos} resNo=resNo+1 end if resNo>26 then break end end if resNo>26 then break end end for i=resNo,26 do self.slots.s[i%9+4][Mfloor(i/9)+5]={emptySlot,1} end end function gameInventoryC:grabDown() if self.page==0 or not self.slots.sel then return end if inRange(self.slots.sel[1],4,12) and inRange(self.slots.sel[2],4,7) then local list=self.slots.s[self.slots.sel[1]][self.slots.sel[2]][1] local index=self.slots.s[self.slots.sel[1]][self.slots.sel[2]][2] if list[index][1].stackable then self.slots.grabItem={list[index][1],64} cursor.set("drag grab") invalidateScreen() end end end function gameInventoryC:escapeKey() removeScreen(self) end function gameInventoryC:tabKey() self.page=(self.page+1)%6 self:initialCISlots() invalidateScreen() end function gameInventoryC:backtabKey() self.page=(self.page-1)%6 self:initialCISlots() invalidateScreen() end function gameInventoryC:paint(gc) draw3DFrame(gc,63,20,WW-127,164) gc:setColorRGB(50,50,50) gc:setFont("sansserif", "b", 10) gc:drawString("Inventory", 130, 20, "top") if self.page==0 then gc:drawString("Survival Inventory",102,63,"top") elseif self.page==5 then gc:setFont("sansserif", "b", 9) gc:drawString("Search:",81,65,"top") local posX, posY = 132, 67 gc:setColorRGB(50,50,50) --draw Slot gc:drawRect(posX,posY,106,12) gc:setColorRGB(255,255,255) gc:drawRect(posX+1,posY+1,106,12) gc:setColorRGB(140,140,140) gc:fillRect(posX+1,posY+1,106,12) gc:setColorRGB(255,255,255) gc:setFont("sansserif", "r", 9) gc:drawString(self.searchStr,posX+1,posY-3,"top") end local pageImage={[0]=IDTexture[200],IDTexture[2],IDTexture[51],IDTexture[63],IDTexture[416],IDTexture[6]} for i=0,5 do local x,y=100+i*20,41 if i==self.page then --draw3DFrame(gc,x,y,17,17,{150,150,150}) gc:setColorRGB(150,150,150) gc:fillRect(x,y,19,19) gc:setColorRGB(100,100,100) gc:drawRect(x,y,19,19) else gc:setColorRGB(75,75,75) gc:fillRect(x,y,19,19) gc:setColorRGB(25,25,25) gc:drawRect(x,y,19,19) end gc:drawImage(pageImage[i],x+2,y+2) end if not mouseVisible then gc:setColorRGB(50,50,50) gc:setFont("sansserif","r",7) gc:drawString("▶",221,45,"top") gc:drawString("◀",92,45,"top") gc:drawRect(229,46,16,10) gc:drawString("tab",232,46,"top") gc:drawRect(71,46,18,10) gc:drawString("Tab",73,46,"top") end gc:setColorRGB(150,150,150) gc:setPen("medium","smooth") gc:drawRect(73,61,171,81) gc:setPen() self.slots:paint(gc) end function gameInventoryC:onRemove() if self.slots.grabItem then addItem(self.slots.grabItem) end end --------------------------------------------------------------------------------------------------- gameChest=Screen() function gameChest:onLoad(chest) self.slots=Slots() for i=0,26 do self.slots.s[i%9+4][math.floor(i/9)+1]={chest.content, i + 1} end for i=0,26 do ii=i+9 self.slots.s[ii%9+4][math.floor(ii/9)+4]={inventory,ii+1} end for i=1,9 do self.slots.s[i+3][9]={inventory,i} end self.slots.offset={7,10} if not mouseVisible then self.slots.sel={selSlot+3,9} end self.slots:bindEvents(self) end function gameChest:escapeKey() removeScreen(self) end function gameChest:paint(gc) draw3DFrame(gc,60,10,WW-120,WH-25) gc:setColorRGB(50,50,50) gc:setFont("sansserif","r",7) gc:drawString("Chest",77,15,"top") gc:drawString("Inventory",77,86,"top") self.slots:paint(gc) end function gameChest:onRemove() if self.slots.grabItem then addItem(self.slots.grabItem) end end --------------------------------------------------------------------------------------------------- gameFurnace=Screen() function gameFurnace:onLoad(furnace) self.slots=Slots() self.slots.s[6][1]={furnace.content, "inputStack"} self.slots.s[6][3]={furnace.content, "fuelStack"} self.slots.s[9][2]={furnace.content, "outputStack"} for i=0,26 do ii=i+9 self.slots.s[ii%9+4][math.floor(ii/9)+4]={inventory,ii+1} end for i=1,9 do self.slots.s[i+3][9]={inventory,i} end self.slots.offset={7,10} if not mouseVisible then self.slots.sel={selSlot+3,9} end self.slots:bindEvents(self) self.furnace = furnace end function gameFurnace:timer() updateSoon(1) end function gameFurnace:escapeKey() removeScreen(self) end function gameFurnace:paint(gc) draw3DFrame(gc,60,10,WW-120,WH-25) gc:setFont("sansserif","r",7) gc:drawString("Furnace",78,15,"top") gc:drawString("Inventory",78,85,"top") local fireX=117 local fireY=49 gc:drawImage(guiTexture[24], fireX, fireY) local fireHeight = math.floor((self.furnace.heat / self.furnace.maxHeat) * 14 + 1) gc:clipRect("set", fireX, fireY + 13 - fireHeight, 13, fireHeight) gc:drawImage(guiTexture[25], fireX, fireY) gc:clipRect("reset") local arrPosX=140 local arrPosY=47 gc:drawImage(guiTexture[23],arrPosX,arrPosY) gc:setColorRGB(139, 139, 139) --gc:fillRect(130,36, 22, 15) if self.furnace.progress < 22 then gc:fillRect(arrPosX+self.furnace.progress,arrPosY, 22-self.furnace.progress, 15) end gc:drawImage(guiTexture[22],arrPosX,arrPosY) self.slots:paint(gc) end function gameFurnace:onRemove() if self.slots.grabItem then addItem(self.slots.grabItem) end end --------------------------------------------------------------------------------------------------- gameCraft = Screen() function gameCraft:onLoad(recipe) self.recipe = recipe self.available = {} self.canCraft = false self:checkCrafting() timer.start(0.1) end function gameCraft:checkCrafting() self.canCraft = true self.available = {} for i, item in pairs(self.recipe.ingredients) do self.available[i] = countAvailableItems(item[1]) if self.available[i] < self.recipe.ingredients[i][2] then self.canCraft = false end end end function gameCraft:setRecipe(recipe) self.recipe = recipe self:checkCrafting() invalidateScreen() end function gameCraft:mouseDown() if self.canCraft then self.recipe:craft() self:checkCrafting() invalidateScreen() end end function gameCraft:escapeKey() removeScreen(self) timer.start(0.1) end function gameCraft:paint(gc) draw3DFrame(gc, 60, 40, WW - 120, WH - 80) gc:setColorRGB(0, 0, 0) gc:drawLine(60, 63, WW - 60, 63) gc:setFont("sansserif", "r", 11) gc:drawString("Crafting", 130, 40, "top") gc:setFont("sansserif", "r", 9) local ingredients = self.recipe.ingredients local posY = 93 - #ingredients * 9 for i, item in pairs(ingredients) do if ingredients[i][1].drawAsItem then ingredients[i][1]:drawAsItem(gc, 67, posY + i * 18) else Item.draw(ingredients[i][1], gc, 67, posY + i * 18) end if ingredients[i][2] > self.available[i] then --not enough to craft gc:setColorRGB(150, 35, 0) else gc:setColorRGB(0, 0, 0) end gc:drawString("x "..self.available[i].."/"..ingredients[i][2], 87, posY + i * 18, "top") end gc:setColorRGB(0, 0, 0) local productName = self.recipe.product[1].name gc:drawString(productName, 200 - gc:getStringWidth(productName) / 2, 90) gc:drawString("Press [esc] to cancel!", 135, 153, "top") if self.canCraft then gc:drawImage(guiTexture[6], 135, 105) gc:setColorRGB(0, 100, 0) gc:drawString("Press [enter] to craft!", 135, 135, "top") else gc:drawImage(guiTexture[7], 135, 105) end drawItem(gc, self.recipe.product, 184, 95, true) end --------------------------------------------------------------------------------------------------- gameMenu=Screen() function gameMenu:onLoad() timer.stop() cursor.set("hollow pointer") self.selButton=0 self.buttons={[0]="Back to Game","Options...","Save","Save and Quit to Title","Quit without Saving"} end function gameMenu:escapeKey() timer.start(0.1) removeScreen(self) end function gameMenu:mouseMove(x,y) local nselButton=math.floor((y-45)/30) if inRange(nselButton,0,4) and nselButton~=self.selButton then self.selButton=nselButton invalidateScreen() end end function gameMenu:arrowKey(dir) if dir=="up" or dir=="left" then self.selButton=self.selButton-1 else self.selButton=self.selButton+1 end self.selButton=self.selButton%5 invalidateScreen() end function gameMenu:mouseDown() if self.selButton==0 then self:escapeKey() elseif self.selButton==1 then removeScreen(self) addScreen(menuSettings,true) elseif self.selButton==2 then saveInSlot(currentSaveSlot, gameMain) elseif self.selButton==3 then saveInSlot(currentSaveSlot, menuTitle, true) setMenuState("none") elseif self.selButton==4 then addScreen(message,{"Are you sure?","If you quit without saving, every change","since the last time you saved will be lost!","","","Do you really want to quit without saving?","","Press [Y] to quit without saving"}) function message:actionY() for i, chunk in pairs(activeChunks) do chunk:unload() end setScreen(menuTitle) setMenuState("none") end end invalidateScreen() end function gameMenu:paint(gc) gc:setFont("sansserif","b",12) draw3DString(gc," MINECRAFT2D",82,2) gc:setFont("sansserif","b",10) draw3DString(gc,"game menu",125,25) for i,n in pairs(self.buttons) do drawButton(gc,{n,60,50+i*30,WW-120,20,10},i==self.selButton and "sel") end end --------------------------------------------------------------------------------------------------- gameDead=Screen() function gameDead:onLoad() end function gameDead:mouseDown() player.health=20 spawnPlayer() resumeGame() end function gameDead:escapeKey() self:mouseDown() end function gameDead:paint(gc) gc:setFont("sansserif", "b", 24) if platform.isColorDisplay() then gc:setColorRGB(240, 0, 0) else gc:setColorRGB(0, 0, 0) end gc:drawString("You Died!", 85, 50, "top") gc:setFont("sansserif", "b", 12) local deathstr="You were killed by: "..deathcause gc:drawString(deathstr, WW/2-gc:getStringWidth(deathstr)/2, 100, "top") gc:setFont("sansserif", "b", 9) gc:drawString("Press enter to respawn",95,157,"top") end -------------------------------------- --------- UPDATING FUNCTIONS --------- !UPDATE -------------------------------------- function Block_grass:update(x, y) if not world[x][y + 1].canWalkThrough then placeBlock(x, y, Block_dirt, true) end end function Block_water_source:update(x, y) -- water source spread if not world[x - 1][y].waterproof and world[x - 1][y].waterLevel < 7 then placeBlock(x - 1, y, Block_flowing_water_7, true) end if not world[x + 1][y].waterproof and world[x + 1][y].waterLevel < 7 then placeBlock(x + 1, y, Block_flowing_water_7, true) end if not world[x][y - 1].waterproof and world[x][y - 1].waterLevel < 8 then placeBlock(x, y - 1, Block_flowing_water_8, true) end end function Block_lava_source:update(x, y) -- lava source spread if not world[x - 1][y].waterproof and world[x - 1][y].lavaLevel < 3 then placeBlock(x - 1, y, Block_flowing_lava_3, true) end if not world[x + 1][y].waterproof and world[x + 1][y].lavaLevel < 3 then placeBlock(x + 1, y, Block_flowing_lava_3, true) end if not world[x][y - 1].waterproof and world[x][y - 1].lavaLevel < 4 then placeBlock(x, y - 1, Block_flowing_lava_4, true) end end function Block_rose:update(x, y) -- flower checks for dirt ground if not (world[x][y - 1] == Block_dirt or world[x][y - 1] == Block_grass) then destroyBlock(x, y, true) invalidateScreen() end end function Block_torch:update(x, y) -- torch checks for solid neighbor if world[x][y - 1].canWalkThrough and world[x - 1][y].canWalkThrough and world[x + 1][y].canWalkThrough then destroyBlock(x, y, true) invalidateScreen() end end function Block_wooden_door_closed:update(x, y) -- closed door bottom if world[x][y - 1] == Block_wooden_door_closed then return elseif world[x][y - 1].canWalkThrough then destroyBlock(x, y) end end function Block_wooden_door_open:update(x, y) -- closed door top if world[x][y - 1] == Block_wooden_door_open then return elseif world[x][y - 1].canWalkThrough then destroyBlock(x, y) end end function Block_fire:update(x, y) -- fire valid position check local valid = world[x - 1][y].flammable or world[x][y + 1].flammable or world[x + 1][y].flammable if not (valid or world[x][y - 1].solid) then destroyBlock(x, y) end end function Block_crop_0.update(block, x, y) -- crops valid position check if not (world[x][y - 1] == Block_farmland_dry or world[x][y - 1] == Block_farmland_wet) then destroyBlock(x, y) end end Block_crop_1.update = Block_crop_0.update Block_crop_2.update = Block_crop_0.update Block_crop_3.update = Block_crop_0.update Block_crop_4.update = Block_crop_0.update Block_crop_5.update = Block_crop_0.update Block_crop_6.update = Block_crop_0.update Block_wheat.update = Block_crop_0.update Block_farmland_dry.update = function(block, x, y) if not world[x][y + 1].canWalkThrough then placeBlock(x, y, Block_dirt) end end Block_farmland_wet.update = Block_farmland_dry.update function updateBlock(bx, by) -- only triggered by any player actions or updates nearby if not validField(bx, by) then return end local block = world[bx][by] if block.update then block:update(bx, by) end end do -- initialize tickUpdater local function placeRandomFire(x, y) local fx, fy = x + math.random(-2,2), y + math.random(-2, 4) if validField(fx, fy) and world[fx][fy] == Block_air then for i = 1, 4 do local nx, ny = getNeighbor(i, fx, fy) local flammable = world[nx][ny].flammable if flammable and flammable ~= "netherrack" then placeBlock(fx, fy, Block_fire) break end end end end Block_flowing_water_1.bufferedTickUpdate = function(block, x, y) local above, left, right, below = world[x][y + 1], world[x - 1][y], world[x + 1][y], world[x][y - 1] local thisWaterLevel = block.waterLevel -- lava below if below == Block_lava_source then placeBlock(x, y - 1, Block_obsidian) elseif world[x][y - 1].lavaLevel > 0 then placeBlock(x, y - 1, Block_cobblestone) end -- check for source height and adjust if left == Block_water_source and right == Block_water_source then placeBlock(x, y, Block_water_source) elseif above.waterLevel > 0 then if thisWaterLevel < 8 then placeBlock(x, y, Block_flowing_water_8) end else local highest = math.max(left.waterLevel, right.waterLevel) if highest <= 1 then destroyBlock(x, y) elseif highest ~= thisWaterLevel + 1 then placeBlock(x, y, IDList[300 + highest - 1]) end end -- do spread if not below.waterproof then if below.waterLevel < 8 then destroyBlock(x, y - 1, true) placeBlock(x, y - 1, Block_flowing_water_8, true) end elseif thisWaterLevel > 1 then if not left.waterproof and left.waterLevel < thisWaterLevel - 1 then destroyBlock(x - 1, y, true) placeBlock(x - 1, y, IDList[block.id - 1], true) end if not right.waterproof and right.waterLevel < thisWaterLevel - 1 then destroyBlock(x + 1, y, true) placeBlock(x + 1, y, IDList[block.id - 1], true) end end end Block_flowing_water_2.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_3.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_4.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_5.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_6.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_7.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_water_8.bufferedTickUpdate = Block_flowing_water_1.bufferedTickUpdate Block_flowing_lava_1.bufferedTickUpdate = function(block, x, y) if not lavaUpdate == 1 then return end local above, left, right, below = world[x][y + 1], world[x - 1][y], world[x + 1][y], world[x][y - 1] if world[x][y - 1] == Block_water_source then placeBlock(x, y - 1, Block_stone) elseif world[x][y - 1].waterLevel > 0 then placeBlock(x, y - 1, Block_cobblestone) --updateSoon(2) end -- check for source height and adjust if above.lavaLevel > 0 then if block.lavaLevel < 4 then placeBlock(x, y, Block_flowing_lava_4) end else local highest = math.max(left.lavaLevel, right.lavaLevel) if highest <= 1 then destroyBlock(x, y) elseif highest ~= block.lavaLevel + 1 then placeBlock(x, y, IDList[310 + highest - 1]) end end -- do spread if not below.waterproof then if below.lavaLevel < 4 then destroyBlock(x, y - 1, true, true) placeBlock(x, y - 1, Block_flowing_lava_4, true) end elseif block.lavaLevel > 1 then if not left.waterproof and left.lavaLevel < block.lavaLevel - 1 then destroyBlock(x - 1, y, true, true) placeBlock(x - 1, y, IDList[block.id - 1], true) end if not right.waterproof and right.lavaLevel < block.lavaLevel - 1 then destroyBlock(x + 1, y, true, true) placeBlock(x + 1, y, IDList[block.id - 1], true) end end if math.random(30)==13 then placeRandomFire(x, y) end end Block_flowing_lava_2.bufferedTickUpdate = Block_flowing_lava_1.bufferedTickUpdate Block_flowing_lava_3.bufferedTickUpdate = Block_flowing_lava_1.bufferedTickUpdate Block_flowing_lava_4.bufferedTickUpdate = Block_flowing_lava_1.bufferedTickUpdate function Block_dirt:tickUpdate(x, y) -- grass may grow... if y == sunTop[x] and world[x][y+1].waterLevel == 0 and math.random(50) == 10 then placeBlock(x, y, Block_grass) updateSoon(2) end end function Block_grass:tickUpdate(x, y) --grass may die! if (y < sunTop[x] or not world[x][y + 1].canWalkThrough) and math.random(50) == 10 then placeBlock(x, y, Block_dirt) updateSoon(2) end end function Block_leaves.tickUpdate(block, x, y) -- leaves may die! if (math.random(50) == 10) then local stayAlive = false local searchBlock for dy = -2, 2 do for dx = -2, 2 do if validField(x + dx, y + dy) then searchBlock = world[x + dx][y + dy] if (searchBlock == Block_wood or searchBlock == Block_trunk_wood) then stayAlive = true return end end end end if (not stayAlive) then destroyBlock(x, y, true) end end end function Block_sand.tickUpdate(block, x, y) --sand and gravel shall fall! if not world[x][y - 1].solid then local index = nextFree(objList, 0, 300) destroyBlock(x, y, false) if index then objList[index] = objFallingBlock(x, y, index, block) end end end Block_gravel.tickUpdate = Block_sand.tickUpdate function Block_sapling:tickUpdate(x, y) --sapling if world[x][y - 1] == Block_dirt or world[x][y - 1] == Block_grass then if math.random(1500) == 42 then if not growTree(x, y) then --not enough space destroyBlock(x, y, true) end end else --not on dirt block destroyBlock(x, y, true) updateSoon(2) end end function Block_torch:tickUpdate(x, y) if settings.graphics.objects > 1 and math.random(50) == 42 then --fancy torch particles local index = nextFree(objList, 0, 150) if index then objList[index] = objParticle(x, y, index, 4) end end end function Block_lava_source:tickUpdate(x, y) if math.random(30) == 13 then --random lava fire placeRandomFire(x, y) end end function Block_fire:tickUpdate(x, y) -- fire spread if math.random(8) == 1 then --fastness control (lower=faster) --particle if settings.graphics.objects > 1 then local index = nextFree(objList, 0, 150) if index then objList[index] = objParticle(x, y, index, 3) end end -- extinguish and block burning local extinguished = true if world[x][y - 1] == Block_netherrack then extinguished = false else for n = 1, 4 do local nx, ny = getNeighbor(n, x, y) local flammable = world[nx][ny].flammable if world[nx][ny] == Block_TNT then igniteTNT(nx, ny) elseif flammable and flammable ~= "netherrack" then if math.random(flammable) == 1 then --different material control (higher=worse flammableable) destroyBlock(nx, ny, false) elseif -math.random(5) > 1 then --control of self-extinguish (higher=less) extinguished = false end end end end -- spread for dx = -1, 1 do for dy = -1, 2 do if dx ~= 0 or dy ~= 0 then for n = 1, 4 do local nx, ny = getNeighbor(n, x + dx, y + dy) if validField(nx, ny) and world[x + dx][y + dy] == Block_air then local flammable = world[nx][ny].flammable if flammable and flammable ~= "netherrack" and math.random(2) == 1 then --spreading control (lower=more) placeBlock(x + dx, y + dy, Block_fire) end end end end end end if extinguished then destroyBlock(x, y) updateSoon(2) end end end Block_crop_0.tickUpdate = function(block, x, y) local growProbability if world[x][y - 1] == Block_farmland_wet then growProbability = 200 elseif world[x][y - 1] == Block_farmland_dry then growProbability = 100 else destroyBlock(x, y) return end if (y < sunTop[x] or worldTime < 5000 or worldTime > 19000) and lightMap[x][y]==0 then --no light! growProbability = growProbability * 3 end if math.random(growProbability) == 1 then placeBlock(x, y, IDList[block.id + 1]) updateSoon(2) end end Block_crop_1.tickUpdate = Block_crop_0.tickUpdate Block_crop_2.tickUpdate = Block_crop_0.tickUpdate Block_crop_3.tickUpdate = Block_crop_0.tickUpdate Block_crop_4.tickUpdate = Block_crop_0.tickUpdate Block_crop_5.tickUpdate = Block_crop_0.tickUpdate Block_crop_6.tickUpdate = Block_crop_0.tickUpdate function Block_farmland_dry:tickUpdate(x, y) -- dry farmland if math.random(50) == 12 then local waterSource = false --check for water for dx = -4, 4 do if validField(x + dx) and world[x + dx][y].waterLevel > 0 then waterSource = true break end end if waterSource then --water ==> wet land placeBlock(x, y, Block_farmland_wet) updateSoon(3) else --no water ==> dirt placeBlock(x, y, Block_dirt) updateSoon(3) end end end function Block_farmland_wet:tickUpdate(x, y) -- wet farmland if math.random(100) == 13 then local waterSource = false --check for water for dx = -4, 4 do if validField(x + dx) and world[x + dx][y].waterLevel > 0 then waterSource = true break end end if not waterSource then --wet land but no water==>dry land placeBlock(x, y, Block_farmland_dry) updateSoon(3) end end end function Block_zombie_spawner.tickUpdate(block, x, y) if (settings.mobspawn == "Monsters" or settings.mobspawn == "All") and world[x][y + 1] ~= Block_torch and math.random(20) == 1 then local monsters = 0 for i, mob in pairs(activeChunks[math.floor(x / chunkSize)].mobs) do if mob.mType == "aggressive" then monsters = monsters + 1 end end if math.random(10) <= 10 - monsters then for dx = -2, 2 do for dy = -2, 2 do if not world[x + dx][y + dy - 1].canWalkThrough and world[x + dx][y + dy].canWalkThrough and world[x + dx][y + dy + 1].canWalkThrough then --print("spawner in action") if block == Block_zombie_spawner then spawnMob("zombie", x + dx, y + dy) elseif block == Block_skeleton_spawner then spawnMob("skeleton", x + dx, y + dy) end return end end end end end end Block_skeleton_spawner.tickUpdate = Block_zombie_spawner.tickUpdate end function updateVisibleRange() --happenes every 0.3 seconds local function update(x, y) local block = world[x][y] if block.tickUpdate then block:tickUpdate(x, y) end end for y = player.pos[2] - 6, player.pos[2] + 6 do for x = player.pos[1] - 9,player.pos[1] + 10 do if validField(x) then update(x, y) end end end for str, bool in pairs(alwaysUpdate) do if bool then local pos=str:split(",") pos={tonumber(pos[1]),tonumber(pos[2])} if not world[pos[1]] then alwaysUpdate[str] = nil elseif not (inRange(pos[1],player.pos[1]-9,player.pos[1]+10) and inRange(pos[2],player.pos[2]-6,player.pos[2]+6)) then --not on screen update(pos[1],pos[2]) end else print("epic fail") end end doBufferedUpdate() end function doBufferedUpdate() local oldWorld = world -- create array which saves all changes done during tick-update local worldChanges = {} local wrote = 0 -- create distributor: read from oldWorld, write into worldChanges (complicated stuff!) local worldIOdistributor = setmetatable({}, { __index = function(distributor, x) -- create new distributor column rawset(distributor, x, setmetatable({}, { __index = oldWorld[x], -- read from oldWorld __newindex = function(tbl, y, id) -- write to worldCHanges if not worldChanges[x] then worldChanges[x] = {} end worldChanges[x][y] = (id or Block_air) wrote = wrote + 1 end, })) return distributor[x] end, bufferInUse = true, -- flag; access like this: getmetatable(world).bufferInUse }) -- replace world world = worldIOdistributor local block for y = player.pos[2] - 6, player.pos[2] + 6 do for x = player.pos[1] - 9,player.pos[1] + 10 do if validField(x) then block = world[x][y] if block.bufferedTickUpdate then block:bufferedTickUpdate(x, y) end end end end -- apply changes world = oldWorld local updateSun for x, row in pairs(worldChanges) do updateSun = false for y, block in pairs(row) do -- apply light changes if world[x][y].lightSource then editLight(x, y, world[x][y].lightSource, -1) end if block.lightSource then editLight(x, y, block.lightSource, 1) end if y >= sunTop[x] then updateSun = true end -- apply block changes if block == Block_air then world[x][y] = nil else world[x][y] = block end end if updateSun then local sy = worldEnd.top while sy >= worldEnd.bottom and world[x][sy].transparent do sy = sy - 1 end sunTop[x] = sy end end worldChanges = nil oldWorld = nil delay[3] = wrote -- store debug information end function furnaceUpdate() for i = 101, 199 do local furnace = IDList[i] if furnace then -- do burning if furnace.heat > 0 then furnace.heat = furnace.heat - 1 if furnace.heat <= 0 then furnace.maxHeat = 1 end end local product = furnace.content.inputStack[1] and IDList[furnace.content.inputStack[1].furnaceProduct] local canProgress = false if furnace.content.outputStack[2] == 0 then canProgress = true --product slot is empty elseif furnace.content.outputStack[1] == product and furnace.content.outputStack[2] < 64 then --product slot has right items and is not full canProgress = true end if canProgress and product then -- refill heat local fuelItem = furnace.content.fuelStack[1] if furnace.heat <= 0 and fuelItem and fuelItem.fuel then furnace.heat = fuelItem.fuel furnace.maxHeat = fuelItem.fuel decMeta(furnace.content.fuelStack) end -- do progress if furnace.heat > 0 then furnace.progress = furnace.progress + 1 if furnace.progress > 22 then furnace.progress = 0 if furnace.content.outputStack[1] == product then furnace.content.outputStack[2] = furnace.content.outputStack[2] + 1 else furnace.content.outputStack = {product, 1} end decMeta(furnace.content.inputStack) end else furnace.progress = 0 end else furnace.progress = 0 end end end end function mobUpdate() local abs = math.abs local now = timer.getMilliSecCounter() for ic, chunk in pairs(activeChunks) do for i, mob in pairs(chunk.mobs) do if abs(mob.pos[1] - player.pos[1]) <= 40 and abs(mob.pos[2] - player.pos[2]) <= 30 then local visible = (abs(mob.pos[1] - player.pos[1]) <= 10) and (abs(mob.pos[2] - player.pos[2]) <= 7) if mob.health[3] then if now - mob.health[3] >= 500 then mob.health[3] = false end updateSoon(2) end local dead = false --fall damage and grounded check if not mob.canFly then if not world[mob.pos[1]][mob.pos[2] - mob.size[2] - 1].canWalkThrough then mob.grounded = true local f = mob.fallen mob.fallen = 0 if f > 3 and mob.name ~= "chicken" then if mob:attacked(f - 3) == "dead" then dead = true end end elseif world[mob.pos[1]][mob.pos[2]-mob.size[2]-1].waterLevel > 0 then mob.grounded = true mob.fallen = 0 else mob.grounded = false end end if not dead then --moving if mob.move then mob:move() else local dir = 0 local distX,distY = mob.pos[1]-player.pos[1],mob.pos[2]-player.pos[2] if mob.mType=="aggressive" and (abs(distX)<=6 or (mob.name=="skeleton" and abs(distX)<=9)) and abs(distY)<=5 then mob.moveInfo[1]=mob.moveInfo[1]+1 if mob.moveInfo[1]>=mob.moveInfo[2] then if distX<0 then dir=2 elseif distX>0 then dir=1 end if mob.name=="skeleton" then if abs(distX)==2 then dir=0 elseif abs(distX)<2 then dir=(abs(distX)%2)+1 end end mob.moveInfo[1]=0 end else dir = math.random(30) if dir==3 then dir=mob.pos[3] end end if inRange(dir,1,2) then local jump=false local nx=mob.pos[1] if dir==1 then jump = not world[mob.pos[1]-1][mob.pos[2]-mob.size[2]].canWalkThrough nx=nx-1 elseif dir==2 then jump = not world[mob.pos[1]+1][mob.pos[2]-mob.size[2]].canWalkThrough nx=nx+1 end local ny=mob.pos[2]+(jump and 1 or 0) local moveOk = true if jump then moveOk = world[mob.pos[1]][mob.pos[2]+1].canWalkThrough end if moveOk then for y=0,mob.size[2] do if not world[nx][ny-y].canWalkThrough then moveOk=false break end end end if moveOk then mob.pos={nx,ny,dir} updateSoon(2) end end end mob:tick() if mob ~= chunk.mobs[i] then dead = true end --swimming if world[mob.pos[1]][mob.pos[2]-mob.size[2]].waterLevel > 0 and world[mob.pos[1]][mob.pos[2]+1].canWalkThrough then --in water mob.pos[2]=mob.pos[2]+1 mob.fallen=0 updateSoon(3) elseif mob.name=="zombie" or mob.name=="skeleton" then --burn! if worldTime>5000 and worldTime<19000 and sunTop[mob.pos[1]]=6 then if mob:attacked(1)=="dead" then dead=true end end end end --if not dead --drowning if not dead then if world[mob.pos[1]][mob.pos[2]].waterLevel > 5 then --in water if mob.health[2]>0 then mob.health[2]=mob.health[2]-1 elseif mob:attacked(1)=="dead" then dead=true end else --not in water mob.health[2]=40 --refresh breath end end --falling if not dead and not mob.canFly then if world[mob.pos[1]][mob.pos[2]-mob.size[2]-1].canWalkThrough and not (world[mob.pos[1]][mob.pos[2]+mob.size[2]].waterLevel > 0) then --falling mob.pos[2]=mob.pos[2]-1 mob.fallen=mob.fallen+1 updateSoon(2) end end --lava and fire if not dead and not mob.nether then if world[mob.pos[1]][mob.pos[2]].lavaLevel > 0 or (mob.size[2]==1 and world[mob.pos[1]][mob.pos[2]-1].lavaLevel > 0) then mob:attacked(2) elseif world[mob.pos[1]][mob.pos[2]] == Block_fire or (mob.size[2]==1 and world[mob.pos[1]][mob.pos[2]-1]==Block_fire) then mob:attacked(1) end end end --despawn if not dead and mob.mType=="aggressive" then if (not mob.nether and (abs(mob.pos[1]-player.pos[1])>30 or abs(mob.pos[2]-player.pos[2])>20)) --overworld monster too far away or (abs(mob.pos[1]-player.pos[1])>50 or abs(mob.pos[2]-player.pos[2])>50) then --nether monster too far away print("despawn", mob.mType, mob.name) mob:destroy() end end end end end function checkMobSpawn() if settings.mobspawn == "None" then return end -- this function currently only spawns monsters if settings.mobspawn == "Animals" then return end local random = math.random --count nearby monsters local monsters = 0 for ic = getChunkIDAt(player.pos[1] - 30), getChunkIDAt(player.pos[1] + 30) do for i, mob in pairs(activeChunks[ic].mobs) do if mob.mType == "aggressive" then monsters = monsters + 1 end end end local spawnMonster = false local propMonster = 10 - monsters if player.pos[2] > -50 then if random(30) <= propMonster then spawnMonster = true end else --nether spawn stuff end --search for good spots local goodSpots = {} local isNight = (worldTime<5000 or worldTime>19000) for x = -15, 15 do local bx = player.pos[1] + x if validField(bx) then for y = -10, 10 do local by = player.pos[2] + y if ((y<-5 or y>5) or (x<-6 or x>6)) and not world[bx][by].canWalkThrough and world[bx][by+1].canWalkThrough and world[bx][by+2].canWalkThrough and (isNight or sunTop[bx]>by+3) and lightMap[bx][by+1]==0 then --solid block, 2 free blocks above, in shadow, not illuminated table.insert(goodSpots, {bx, by + 2}) end end end end --choose one if #goodSpots > 0 and random(20) <= #goodSpots then spawnMob("monster", unpack(goodSpots[random(#goodSpots)])) end end --==================================================================================================================== --VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV GRAPHIC STUFF VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV --==================================================================================================================== --VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV GRAPHIC STUFF VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV --==================================================================================================================== function convertPos(posX,posY) --block position in world grid to position on screen grid (not pixel!) return (posX-player.pos[1]+9),(6-(posY-player.pos[2])) end function drawItem(gc, stack, x, y, big) local min, floor = math.min, math.floor local item, meta = stack[1], stack[2] if not item or item == Block_air then return end if big then --texture = image.copy(texture, image.width(texture) * 2, image.height(texture) * 2) else big = false end if item.type == "item" and item.draw then item:draw(gc, x, y, big and 2 or 1) elseif item.type == "block" and item.drawAsItem then item:drawAsItem(gc, x, y, big and 2 or 1) elseif IDTexture[item.id] then if big then gc:drawImage(image.copy(IDTexture[item.id], image.width(IDTexture[item.id]) * 2, image.height(IDTexture[item.id]) * 2), x, y) else gc:drawImage(IDTexture[item.id], x, y) end end local meta = stack[2] if item.stackable then --stackable Item ==> draw number if mode == 0 or meta > 1 then if big then gc:setFont("sansserif", "r", 10) if settings.graphics.gui > 1 then gc:setColorRGB(50, 50, 50) gc:drawString(meta, x+4, y+16, "top") end gc:setColorRGB(255, 255, 255) gc:drawString(meta, x+3, y+15, "top") else gc:setFont("sansserif", "r", 7) if settings.graphics.gui > 1 then gc:setColorRGB(50, 50, 50) gc:drawString(meta, x+1, y+6+(HANDHELD and 1 or 0), "top") end gc:setColorRGB(255, 255, 255) gc:drawString(meta, x, y+5+(HANDHELD and 1 or 0), "top") end end elseif item.maxHealth and meta < item.maxHealth then --draw health bar local ratio = meta / item.maxHealth gc:setColorRGB(min(400 - ratio*400, 200), min(ratio*400, 200), 0) if big then gc:fillRect(x+2, y+28, floor(ratio*28+1), 2) else gc:fillRect(x+1, y+14, floor(ratio*14+1), 1) end end end function interpolateColor(minT, maxT, t, minR, maxR, minG, maxG, minB, maxB) -- little helper function local floor = math.floor local progress = getProgress(minT, maxT, t) local R = floor(lerp(minR, maxR, progress)) local G = floor(lerp(minG, maxG, progress)) local B = floor(lerp(minB, maxB, progress)) return R, G, B end function drawSky(gc) local R,G,B local cR, cG, cB local floor, random, max, min = math.floor, math.random, math.max, math.min local progress if worldTime >= 3500 and worldTime < 4500 then R, G, B = interpolateColor(3500, 4500, worldTime, 0, 205, 0, 80, 30, 30) cR, cG, cB = interpolateColor(3500, 4500, worldTime, 30, 255, 30, 210, 30, 70) elseif worldTime >= 4500 and worldTime < 5500 then --R, G, B = interpolateColor(4500, 5500, worldTime, 205, 255, 80, 180, 30, 100) R, G, B = interpolateColor(4500, 5500, worldTime, 205, 255, 80, 180, 30, 100) cR, cG, cB = interpolateColor(4500, 5500, worldTime, 255, 255, 210, 240, 70, 100) elseif worldTime >= 5500 and worldTime < 7500 then --R, G, B = interpolateColor(5500, 7500, worldTime, 255, 230, 180, 230, 100, 255) R, G, B = interpolateColor(5500, 7500, worldTime, 255, 220, 180, 230, 100, 255) cR, cG, cB = interpolateColor(5500, 7500, worldTime, 255, 255, 240, 255, 100, 255) elseif worldTime >= 7500 and worldTime < 16500 then R, G, B = 220, 230, 255 cR, cG, cB = 255, 255, 255 elseif worldTime >= 16500 and worldTime < 18500 then R, G, B = interpolateColor(16500, 18500, worldTime, 220, 255, 230, 180, 255, 100) cR, cG, cB = interpolateColor(16500, 18500, worldTime, 255, 255, 255, 240, 255, 100) elseif worldTime >= 18500 and worldTime < 19500 then R, G, B = interpolateColor(18500, 19500, worldTime, 255, 205, 180, 80, 100, 30) cR, cG, cB = interpolateColor(18500, 19500, worldTime, 255, 255, 240, 210, 100, 70) elseif worldTime >= 19500 and worldTime < 20500 then R, G, B = interpolateColor(19500, 20500, worldTime, 205, 0, 80, 0, 30, 30) cR, cG, cB = interpolateColor(19500, 20500, worldTime, 255, 30, 210, 30, 70, 30) elseif worldTime >= 20500 or worldTime<3500 then R, G, B = 0, 0, 30 cR, cG, cB = 30, 30, 30 end --[[ if worldTime >= 3500 and worldTime < 4500 then R=floor((worldTime-3500)/1000*205) -- 0+205=205 G=floor((worldTime-3500)/1000*80) -- 0+80=80 B=30 -- 30 --cloudCol={200,0,100} elseif worldTime >= 4500 and worldTime < 5500 then R=floor((worldTime-4500)/1000*50)+205 -- 205+50=255 G=floor((worldTime-4500)/1000*100)+80 -- 80+100=180 B=floor((worldTime-4500)/1000*70)+30 -- 30+70=100 elseif worldTime >= 5500 and worldTime < 7500 then R=floor((worldTime-5500)/2000*-25)+255 -- 255-25=220 G=floor((worldTime-5500)/2000*50)+180 -- 180+50=220 B=floor((worldTime-5500)/2000*155)+100 -- 100+155=255 elseif worldTime >= 7500 and worldTime < 16500 then R, G, B = 230, 230, 255 elseif worldTime >= 16500 and worldTime < 18500 then R=floor((worldTime-16500)/2000*25)+230 -- 230+25=255 G=floor((worldTime-16500)/2000*-50)+230 -- 230-50=180 B=floor((worldTime-16500)/2000*-155)+255 -- 255-155=100 elseif worldTime >= 18500 and worldTime < 19500 then R=floor((worldTime-18500)/1000*-50)+255 -- 255-50=205 G=floor((worldTime-18500)/1000*-100)+180 -- 180-100=80 B=floor((worldTime-18500)/1000*-70)+100 -- 100-70=30 elseif worldTime >= 19500 and worldTime<20500 then R=floor((worldTime-19500)/1000*-205)+205 -- 205-205=0 G=floor((worldTime-19500)/1000*-80)+80 -- 80-80=0 B=30 -- 30 elseif worldTime >= 20500 or worldTime<3500 then R, G, B = 0, 0, 30 --cloudCol={0,0,15} end]] gc:setColorRGB(R, G, B) gc:fillRect(0,0,WW, WH) --draw Stars local starlight=0 if worldTime<=3500 or worldTime>=20500 then starlight=200 elseif worldTime<5500 and worldTime>3500 then starlight=floor((worldTime-3500)/2000*-200)+200 elseif worldTime>18500 and worldTime<20500 then starlight=floor((worldTime-18500)/2000*200) end gc:setColorRGB(min(R+starlight,255),min(G+starlight,255),min(B+starlight,255)) if starlight>0 then for i=1, #starMap do local sl = starlight * (starMap[i][3] + random(-15, 10))/100 gc:setColorRGB(min(R+sl, 255), min(G+sl, 255), min(B+sl, 255)) gc:fillRect(starMap[i][1], starMap[i][2], 2, 2) sl = max(sl - 130, 0) if (settings.graphics.gui > 1) then gc:setColorRGB(min(R+sl, 255), min(G+sl, 255), min(B+sl, 255)) gc:fillRect(starMap[i][1], starMap[i][2]-1, 2, 1) gc:fillRect(starMap[i][1]-1, starMap[i][2], 1, 2) gc:fillRect(starMap[i][1]+2, starMap[i][2], 1, 2) gc:fillRect(starMap[i][1], starMap[i][2]+2, 2, 1) end end end --draw clouds --local cloudCol={0,0,0} --local bright=(R+G+B)/3 --cloudCol[1]=math.min(bright+(R-bright)/2+20,255) --cloudCol[2]=math.min(bright+(G-bright)/2,255) --cloudCol[3]=math.min(bright+(B-bright)/1.5,255) --cloudCol[3]=min(127-127*math.cos(B/255*math.pi),255) --cloudCol[2]=min(127-127*math.cos(G/255*math.pi),255) --cloudCol[1]=min(140-127*math.cos(R/255*math.pi),255) --cloudCol[2]=min(G*1.25,255) --cloudCol[2]=G--min((G+R)*0.55,255) --cloudCol[1]=min((G+R),255) --cloudCol[1]=min(R*1.7,255)--max(min(127+(R-127)*1.2,255),0) --cloudCol[2]=max(min(140+(G-127)*1.2,255),0) --cloudCol[3]=min(bright,255)--max(min(140+(B-127)*1.3,255),0) --if cloudCol then --gc:setColorRGB(unpack(cloudCol)) --print(unpack(cloudCol)) --gc:fillRect(0,0,50,50) end --timer.start(0.1) if worldTime>=5000 and worldTime<19000 then --draw sun local sunPosX=179/7000*worldTime - 1175/7 --(worldTime-7000)/12000*318 local sunPosY=-0.0015*(sunPosX-136)^2 gc:setColorRGB(255, 255, 100)--50) gc:fillRect(sunPosX, 10-sunPosY, 40, 40) gc:setColorRGB(255, 255, 240)--200) gc:fillRect(sunPosX+5, 15-sunPosY, 30, 30) end if worldTime<6500 or worldTime>=17500 then --draw moon local moonPosX=139/5000*((worldTime+12000)%24000) - 973/5 --((worldTime+7000)%24000-2000)/12000*318 local moonPosY=-0.0015*(moonPosX-136)^2 gc:setColorRGB(100, 100, 100) gc:fillRect(moonPosX, 10-moonPosY, 40, 40) gc:setColorRGB(200, 200, 200) gc:fillRect(moonPosX+5, 15-moonPosY, 30, 30) end local function drawCloud(t, cz, cw, ch) local refX, refY = WW/2, WH/2 local cx = floor(((t / 15) * cz - player.pos[1] * 2) % 500 - 165) --floor(((-worldTime)/15 -player.pos[1]*2) % 500 - 165) local cy = floor(lerp(refY - 105*cz, refY - 6*cz, getProgress(0, worldEnd.top, player.pos[2]))) --floor(lerp(5, 100, getProgress(0, worldEnd.top, player.pos[2]))) local top, left, right, bottom = cy, cx, cx + cw*cz, cy + ch*cz--cx+150, cy+20 local b = max(R * 0.3 + G * 0.6 + B * 0.1, 15) local bR = (b+R)/2 local bG = (b+G)/2 local bB = (b+B)/2 if worldTime > 6000 and worldTime < 7500 then bR, bG, bB = interpolateColor(6000, 7500, worldTime, bR, b+10, bG, b+10, bB, b+10) elseif worldTime >= 7500 and worldTime < 16500 then bR, bG, bB = b+10, b+10, b+10 elseif worldTime >= 16500 and worldTime < 18000 then bR, bG, bB = interpolateColor(16500, 18000, worldTime, b+10, bR, b+10, bG, b+10, bB) end --left = mouseX - 75 --right = left + 150 --top = mouseY - 12 --bottom = top + 25 --gc:setColorRGB(240, 240, 240) --gc:setColorRGB(b, b, b) gc:setColorRGB(lerp(bR, cR, 0.3), lerp(bG, cG, 0.3), lerp(bB, cB, 0.3)) gc:fillRect(left, top, right-left, bottom-top) if settings.graphics.clouds > 1 then local w = 0.15 * cz local backTop = floor(top - (top - refY) * w) local backLeft = floor(left - (left - refX) * w) local backRight = floor(right - (right - refX) * w) local backBottom = floor(bottom - (bottom - refY) * w) if backLeft < left then --local b = min(math.cos(getProgress(5000, 12000, worldTime) * math.pi / 2) * 15 + 245, 255) --local s = math.cos(getProgress(6000, 12000, worldTime) * math.pi / 2)/2+0.5 local s = min(max(((worldTime/1000)-6)^2/-60+1.067, 0), 1) --gc:setColorRGB((R+b)/2, (G+b)/2, (B+b)/2) --gc:setColorRGB(max(min(cR+s*15, 255), 0), max(min(cG+s*15, 255), 0), max(min(cB+s*15, 255), 0)) --gc:setColorRGB(max(min(b+s*cR*0.1, 255), 0), max(min(b+s*cG*0.1, 255), 0), max(min(b+s*cB*0.1, 255), 0)) gc:setColorRGB(lerp(bR, cR, s), lerp(bG, cG, s), lerp(bB, cB, s)) gc:fillPolygon({backLeft, backTop, left, top, left, bottom, backLeft, backBottom}) -- do some antialiasing if HANDHELD then gc:drawLine(backLeft, backTop, left, top) end elseif backRight > right then --local b = min(math.cos((1 - getProgress(12000, 19000, worldTime)) * math.pi / 2) * 15 + 245, 255) --local s = math.sin(getProgress(12000, 18000, worldTime) * math.pi / 2)/2+0.5 local s = min(max(((worldTime/1000)-18)^2/-60+1.067, 0), 1) --gc:setColorRGB(max(min(cR+s*15, 255), 0), max(min(cG+s*15, 255), 0), max(min(cB+s*15, 255), 0)) --gc:setColorRGB(max(min(b+s*cR*0.1, 255), 0), max(min(b+s*cG*0.1, 255), 0), max(min(b+s*cB*0.1, 255), 0)) gc:setColorRGB(lerp(bR, cR, s), lerp(bG, cG, s), lerp(bB, cB, s)) gc:fillPolygon({right, top, backRight, backTop, backRight, backBottom, right, bottom}) -- do some antialiasing if HANDHELD then gc:drawLine(right, top, backRight, backTop) end end if backTop < top then gc:setColorRGB(255, 255, 255) gc:fillPolygon({backLeft, backTop, backRight, backTop, right, top, left, top}) elseif backBottom > bottom then --gc:setColorRGB(220, 220, 220) local s = 0 if worldTime > 16000 and worldTime < 22000 then s = (math.sin(getProgress(17500, 19000, worldTime) * math.pi / 2)+1)*0.3 elseif worldTime > 2000 and worldTime < 8000 then s = (math.sin(getProgress(3500, 5000, worldTime) * math.pi / 2)+1)*0.3 end --gc:setColorRGB(max(min(cR+s*15, 255), 0), max(min(cG+s*15, 255), 0), max(min(cB+s*15, 255), 0)) --gc:setColorRGB(max(min(b+s*cR*0.1, 255), 0), max(min(b+s*cG*0.1, 255), 0), max(min(b+s*cB*0.1, 255), 0)) gc:setColorRGB(lerp(bR, cR, s), lerp(bG, cG, s), lerp(bB, cB, s)) gc:fillPolygon({left, bottom, right, bottom, backRight, backBottom, backLeft, backBottom}) -- do some antialiasing if HANDHELD then gc:drawLine(backLeft, backBottom, left, bottom) gc:drawLine(right, bottom, backRight, backBottom) end end end end if settings.graphics.clouds > 0 then --[[ drawCloud(-worldTime + 4442, 0.5, 180, 20) drawCloud(-worldTime, 0.5, 130, 20) drawCloud(-worldTime + 4442, 0.7, 130, 20) drawCloud(-worldTime + 242, 0.7, 100, 20) drawCloud(-worldTime, 1, 170, 20)]] --drawCloud(-worldTime + 12345, 1, 120, 20) drawCloud(-worldTime + 4442, 0.76, 200, 20) drawCloud(-worldTime, 0.76, 100, 20) drawCloud(-worldTime + 4442, 0.87, 150, 20) drawCloud(-worldTime + 242, 0.87, 100, 20) drawCloud(-worldTime, 1, 150, 20) end end function drawMobs(gc) local now=timer.getMilliSecCounter() for ic = getChunkIDAt(player.pos[1] - 15), getChunkIDAt(player.pos[1] + 15) do for i, mob in pairs(activeChunks[ic].mobs) do local px, py = convertPos(mob.pos[1],mob.pos[2]) if px>=-mob.size[1] and px<20+mob.size[1] and py>=-mob.size[2] and py<13+mob.size[2] then gc:drawImage(mobTexture[mob.texture][mob.pos[3]],px*16,py*16) if mob.health[3] then if now-mob.health[3]>=300 then mob.health[3]=false else for x=0,mob.size[1] do for y=0,mob.size[2] do gc:drawImage(mobTexture["damage"],(px+x)*16,(py+y)*16) end end end end end end end end function Block_flowing_water_1.draw(block, gc, px, py, bx, by) local left, right = 1, 1 if world[bx - 1][by].waterLevel > 0 then left = math.max(world[bx - 1][by].waterLevel, block.waterLevel) elseif world[bx - 1][by] ~= Block_air then left = block.waterLevel end if world[bx + 1][by].waterLevel > 0 then right = math.max(world[bx + 1][by].waterLevel, block.waterLevel) elseif world[bx + 1][by] ~= Block_air then right = block.waterLevel end gc:setColorRGB(waterRGB[1], waterRGB[2], waterRGB[3]) gc:fillPolygon({px, py + (16 - left * 2), px + 16, py + (16 - right * 2), px + 16, py + 16, px, py + 16}) end Block_flowing_water_2.draw = Block_flowing_water_1.draw Block_flowing_water_3.draw = Block_flowing_water_1.draw Block_flowing_water_4.draw = Block_flowing_water_1.draw Block_flowing_water_5.draw = Block_flowing_water_1.draw Block_flowing_water_6.draw = Block_flowing_water_1.draw Block_flowing_water_7.draw = Block_flowing_water_1.draw function Block_flowing_lava_1.draw(block, gc, px, py, bx, by) local left, right = 1, 1 if world[bx - 1][by].lavaLevel > 0 then left = math.max(world[bx - 1][by].lavaLevel, block.lavaLevel) end if world[bx + 1][by].lavaLevel > 0 then right = math.max(world[bx + 1][by].lavaLevel, block.lavaLevel) end --gc:setColorRGB(255, 150, 0) --gc:fillPolygon({px, py + (16 - left * 4), px + 16, py + (16 - right * 4), px + 16, py + 16, px, py + 16}) --local height=left*4 local slope = (right * 4 - left * 4) / 16 local floor = math.floor for dx = 0, 15 do local height = floor(left * 4 + slope * dx + 0.5) if height > 0 and height <= 16 then gc:drawImage(lavaStrip[dx][height], px + dx, py + (16 - height)) end end end Block_flowing_lava_2.draw = Block_flowing_lava_1.draw Block_flowing_lava_3.draw = Block_flowing_lava_1.draw function Block_torch:draw(gc, px, py, bx, by) if not world[bx - 1][by].canWalkThrough then gc:drawImage(specialTexture["Torch left"], px, py) --block to the left is solid elseif not world[bx + 1][by].canWalkThrough then gc:drawImage(specialTexture["Torch right"], px, py) else gc:drawImage(IDTexture[self.id], px, py) end end function Block_fire:draw(gc, px, py, bx, by) local right = world[bx + 1][by].flammable local left = world[bx - 1][by].flammable if world[bx][by - 1].flammable then gc:drawImage(IDTexture[self.id], px, py) elseif right and left then gc:drawImage(specialTexture["Fire both"], px, py) elseif right then gc:drawImage(specialTexture["Fire right"], px, py) elseif left then gc:drawImage(specialTexture["Fire left"], px, py) elseif world[bx][by + 1].flammable then gc:drawImage(specialTexture["Fire top"], px, py) else gc:drawImage(IDTexture[self.id], px, py) end end function Block_furnace:draw(gc, px, py) if self.heat and self.heat > 0 then gc:drawImage(specialTexture["Furnace burning"], px, py) else gc:drawImage(IDTexture[self.id], px, py) end end function Block_redstone_0:draw(gc, px, py, bx, by) gc:setColorRGB(200,0,0) gc:setPen("thin","dashed") gc:drawLine(px+1,py+15,px+14,py+15) if world[bx][by+1].canWalkThrough then if world[lx-1][ly+1]==350 then gc:drawLine(px,py+1,px,py+14) end if world[lx+1][ly+1]==350 then gc:drawLine(px+15,py+1,px+15,py+14) end end gc:setPen() end function Block_iron_ore:draw(gc, px, py) gc:drawImage(IDTexture[self.id], px, py) if settings.indicators then gc:setColorRGB(255,255,255) gc:setFont("serif","r",7) gc:drawString("I",px, py+6,"top") end end function Block_gold_ore:draw(gc, px, py) gc:drawImage(IDTexture[self.id], px, py) if settings.indicators then gc:setColorRGB(255,255,255) gc:setFont("serif","r",7) gc:drawString("G",px, py+6,"top") end end function Block_diamond_ore:draw(gc, px, py) gc:drawImage(IDTexture[self.id], px, py) if settings.indicators then gc:setColorRGB(255,255,255) gc:setFont("serif","r",7) gc:drawString("D",px, py+6,"top") end end function Block_wooden_door_open:draw(gc, px, py, bx, by) if world[bx][by - 1] == Block_wooden_door_open then gc:drawImage(IDTexture[23], px, py) else gc:drawImage(IDTexture[22], px, py) end end function drawWorld(gc,nrx,nry,nrw,nrh) --inner rectangle that doesn't need to be rendered local max, floor = math.max, math.floor local partialRender = platform.isDeviceModeRendering() and updateFrame --if updateFrame then print(updateFrame[1]-16,updateFrame[2]-16,updateFrame[1]+updateFrame[3],updateFrame[2]+updateFrame[4]) end --draw Blocks local selSlotID = inventory[selSlot][1] for y=-6,6 do --coordinates relative to the player local ly=player.pos[2]+y --absolute coordinates in the world local ypos=(6-y)*16 --pixel coordinates for x=-9,10 do local lx=player.pos[1]+x local xpos=(x+9)*16 if not (nrx and inRect({x,y},{nrx,nry,nrw,nrh})) and (not partialRender or inRect({xpos,ypos},{updateFrame[1]-15,updateFrame[2]-15,updateFrame[3]+15,updateFrame[4]+15})) then if validField(lx) and ly>=worldEnd.bottom and ly<=worldEnd.top and not (y==-6 and inRange(x,-4,5)) then local block = world[lx][ly] --drawBlock if block and block ~= Block_air and block.draw then block:draw(gc, xpos, ypos, lx, ly) end --drawBreakState if breakBlock[3] and lx==breakBlock[1] and ly==breakBlock[2] then gc:drawImage(guiTexture[floor(breakBlock[3])+10], xpos, ypos) end --drawSelBlockRect if lx==selBlock[1] and ly==selBlock[2] then local RGB={} local selBlock = world[selBlock[1]][selBlock[2]] local selItem = inventory[selSlot] if selItem.itemType == 10 and selBlock[1]==player.pos[1] and inRange(selBlock[2]-player.pos[2],0,1) then --eat RGB={0,255,0} elseif selBlock.use or selItem.use then --interactive RGB={0,0,255} else RGB={50,50,50} end if settings.graphics.gui > 1 then gc:setColorRGB(200,200,200) gc:drawRect(xpos, ypos, 15, 15) gc:setColorRGB(RGB[1],RGB[2],RGB[3]) gc:setPen("thin","dashed") gc:drawRect(xpos, ypos, 15, 15) gc:setPen("thin","smooth") else gc:setColorRGB(RGB[1],RGB[2],RGB[3]) gc:drawRect(xpos, ypos, 15, 15) end end end end end end --draw "Space" local spaceTop = player.pos[2]-worldEnd.bottom if 6-spaceTop > 0 then local y = (7+spaceTop)*16 gc:setColorRGB(10,10,10) gc:fillRect(0,y,318,208-y) end --draw Player local px, py = 9*16+4, WH-8*16-4 gc:drawImage(playerTexture[player.dir], px, py) --draw armor for i = 40, 37, -1 do local armorItem = inventory[i][1] if armorItem and armorItem.drawOnPlayer then armorItem:drawOnPlayer(gc, px, py, player.dir) end end end function drawShadows(gc,nrx,nry,nrw,nrh) local partialRender = platform.isDeviceModeRendering() and updateFrame local night = (worldTime<5000 or worldTime>19000) local shadowStart = nil local function drawShadow(x,y,width) gc:setColorRGB(0,0,0) for iy = y, y+14, 2 do gc:fillRect(x, iy, width, 1) end shadowStart = nil end local function addShadow(darkness, xpos, ypos) if darkness == 1 then gc:drawImage(shadowTexture[1], xpos, ypos) if shadowStart then drawShadow(shadowStart, ypos , xpos - shadowStart) end else if settings.graphics.shadows > 1 then gc:drawImage(shadowTexture[darkness], xpos, ypos) else if not shadowStart then shadowStart = xpos end end end end for y=-6,6 do local ly=player.pos[2]+y local inNether=ly<-50 local ypos=(6-y)*16 shadowStart = nil for x=-9,10 do local lx=player.pos[1]+x local xpos=(x+9)*16 if not (nrx and inRect({x,y},{nrx,nry,nrw,nrh})) and (not partialRender or inRect({xpos,ypos},{updateFrame[1]-16,updateFrame[2]-16,updateFrame[3],updateFrame[4]})) then if validField(lx) and ly>=worldEnd.bottom and ly<=worldEnd.top and not (y==-6 and inRange(x,-4,5)) and lightMap[lx][ly]==0 then if inNether and world[lx][ly] ~= Block_air then addShadow(2, xpos, ypos) elseif night and world[lx][ly] ~= Block_air then if ly > sunTop[lx] - 1 and (inRange(worldTime, 4500, 5000) or inRange(worldTime, 19000, 19500)) then addShadow(1, xpos, ypos) else addShadow(2, xpos, ypos) end elseif ly 1 then for i=1, 9 do gc:drawImage(guiTexture[1], 50+i*20, WH-25) drawItem(gc,inventory[i],52+i*20, WH-23) end else gc:setColorRGB(125,125,125) gc:fillRect(70, WH-25, 180,20) for i=1, 9 do gc:setColorRGB(90,90,70) gc:fillRect(52+i*20,WH-23,16,16) drawItem(gc,inventory[i],52+i*20, WH-23) end end if mode==0 then for i=0, 18, 2 do --health Bar if i+2<=player.health then gc:drawImage(guiTexture[4], i*4+70, WH-36) --full Heart elseif i+1==player.health then gc:drawImage(guiTexture[5], i*4+70, WH-36) --half Heart else gc:drawImage(guiTexture[3], i*4+70, WH-36) end end if rareSpaceWarning then gc:drawImage(guiTexture[21],152,WH-37) end if advCraftTable then gc:drawImage(guiTexture[26],WW-16,5) end -- armor bar local armor = 0 for slot = 37, 40 do if inventory[slot][1] and inventory[slot][1].armor then armor = armor + inventory[slot][1].armor end end if armor > 0 then for i = 0, 18, 2 do if armor - i >= 2 then gc:drawImage(guiTexture[30], 70+i*4, WH-46) elseif armor - i == 1 then gc:drawImage(guiTexture[29], 70+i*4, WH-46) else gc:drawImage(guiTexture[28], 70+i*4, WH-46) end end end if world[player.pos[1]][player.pos[2]+1].waterLevel > 5 then --BreathBar for i=1, floor(player.breath/5) do gc:drawImage(guiTexture[8], 249-i*8, WH-36) end if player.breath>0 and player.breath<50 then if player.breath%5<=1 then gc:drawImage(guiTexture[9], 241-floor(player.breath/5)*8, WH-36) else gc:drawImage(guiTexture[8], 241-floor(player.breath/5)*8, WH-36) end end end end gc:drawImage(guiTexture[2], 50+selSlot*20-1, WH-25-1) --sel Item Frame gc:setColorRGB(0,0,0) gc:drawRect(48+selSlot*20, WH-27, 23, 23) end function drawBackground(gc,cap) for x=0, 20 do --draw Background for y=0, 13 do gc:drawImage(IDTexture[1], x*16, y*16) end end if cap=="no" then return end gc:setColorRGB(50,50,50) if cap=="small" then gc:setFont("sansserif", "b", 12) gc:drawString(" MINECRAFT2D", 90, 4, "top") gc:setColorRGB(255,255,255) gc:drawString(" MINECRAFT2D", 87, 1, "top") else gc:setFont("sansserif", "b", 24) gc:drawString(" MINECRAFT2D", 20, 4, "top") gc:setColorRGB(255,255,255) gc:drawString(" MINECRAFT2D", 16, 0, "top") end end function drawButton(gc,data,option) local t,x,y,w,h,fSi,fSt=unpack(data) fSi=fSi or 10 fSt=fSt or "r" local R,G,B=120,120,120 local color=platform.isColorDisplay() if option=="sel" then if color then R,G,B=120,130,190 else R,D,B=205,205,205 end elseif option=="dis" then R,G,B=50,50,50 end gc:setColorRGB(R,G,B) gc:fillRect(x+1,y+1,w-1,h-1) if option~="dis" then gc:setColorRGB(R-50,G-50,B-50) gc:drawRect(x+1,y+1,w-2,h-2) gc:setColorRGB(R+50,G+50,B+50) gc:drawRect(x+1,y+1,w-1,h-1) end gc:setColorRGB(0,0,0) gc:drawRect(x,y,w,h) if option=="sel" and not color then gc:setPen("thin","dashed") gc:setColorRGB(127,127,127) gc:drawRect(x,y,w,h) gc:setPen() end gc:setColorRGB(50,50,50) gc:setFont("sansserif",fSt,fSi) local tx, ty = x+w/2-gc:getStringWidth(t)/2, y+h/2-1 if option~="dis" then gc:drawString(t,tx+1,ty+1,"middle") end if option=="sel" then gc:setColorRGB(255,255,160) elseif option=="dis" then gc:setColorRGB(120,120,120) else gc:setColorRGB(255,255,255) end gc:drawString(t,tx,ty,"middle") end function draw3DFrame(gc,x,y,w,h,RGB) local min, max = math.min, math.max local R,G,B = 192,192,192 if RGB then R,G,B = RGB[1],RGB[2],RGB[3] end gc:setColorRGB(R,G,B) gc:fillRect(x+1,y+1,w-1,h-1) if settings.graphics.gui > 1 then gc:setColorRGB(max(R - 50, 0), max(G - 50, 0), max(B - 50, 0)) gc:drawRect(x+1,y+1,w-2,h-2) gc:setColorRGB(min(R + 50, 255), min(G + 50, 255), min(B + 50, 255)) gc:drawRect(x+1,y+1,w-1,h-1) end gc:setColorRGB(0,0,0) gc:drawRect(x,y,w,h) if settings.graphics.gui > 1 then gc:fillRect(x+1,y+h+1,w+1,1) gc:fillRect(x+w+1,y+1,1,h+1) end end function draw3DString(gc,str,x,y,d,R,G,B) d=d or 1; R=R or 255; G=G or 255; B=B or 255 gc:setColorRGB(50,50,50) gc:drawString(str,x+d,y+d,"top") gc:setColorRGB(R,G,B) return gc:drawString(str,x,y,"top") end function drawReturnTip(gc,x,y) x=x or 0; y=y or WH+1 gc:setFont("sansserif","r",9) gc:setColorRGB(255,255,255) gc:drawString("↵ esc",x,y,"bottom") end ------------------------------------ -------- EVENT DISTRIBUTION -------- ------------------------------------ for event, handler in pairs(on) do on[event] = function(...) handler(...) end end local triggeredEvent = "paint" local eventDistributer = function (...) screens[#screens][triggeredEvent](screens[#screens], ...) end eventCatcher={} eventCatcher.__index = function (tbl, event) if screens[#screens][event] then triggeredEvent = event return eventDistributer end end setmetatable(on, eventCatcher) setScreen(loadingScreen) --I apologize for nonsense.