from math import floor from pyka3dc import * # MAP COMPRESSED DATA MAP_MAX_TOP = 0x51 MAP_WIDTH, MAP_HEIGHT = 64, 29 map_height_vals = b"\0\1\2\3\4\a\n\f\r\20\22\23\24\25\26\34\36(+-.1467:=@CFHQ" map_height_bits = 5 map_height = b'$A%$\xe0\4$%A$\xe0\b%737-0-0-0-0-0$0-0-0-0-0-737%\xe0\b!3O\xa1\5o!\x80\x030-0-0-0-0-0-0-0-0-0-0-0 7/7*!\x8a\2!\x8a\2!*7/7-0-0-0-0-0-0M\xa0\5- -!\xea\5!$\xa2\3=5;:9865421245689:;<= 0 0A*\xe0\4*!*0\xa2\3<\x82\x020"/b.\x82\1< - -!J!\xc0\4J!$\xa2\3;"\xd1\1\xae\x011.1N1"; 0 0!J" \xe6\3@J!0\xa2\3:L\x82\1\xec\1bL": - -!J" &\xa0\3&@J!-\xa2\39"n1.1n1\x8e\1QB9 0 0!J" & \xe6\2 &@J!0\xa2\38"1l.B,b\x8c\1.B8 - -!J" & &\xa0\2& &@J!-\xa2\x036".,",1,1\xac\1b.,"6 0 0!J" & & \xe4\1 & &@J!0\xa2\x035,1,B.".b,b,.,"5 - -!J" & & $?>;>?$ & &@J!-#\'#\'#\'#\'#\'#\'#4b.,.,nq.q,"4 0 0!J" & & $>a>$ & &@J!0\xa0\x032B,.,.,.,B,\xe2\x012 - $A*"`& $;!)!;$`&@*A$#"A"#$%&()+.1,",.,1,1lBlQ.1 0 0!J" & & $>a>$ & &@j0\xa0\x032".1.,.,.,N1.1.1.,"2 - -!J" & & $?>;>?$ & &@J!-\xa0\x034"1,.".b.\xc2\1.B4 0 0!J" & & $#\xa4\1 & &@J!0\xa0\x035N,",.1.1.,qL1L5 - -!J" & &\xa0\2& &@J!-\xa0\x036,.1.,1l.","1B.B6 0 0!J" & \xe6\2 &@J!0\xa0\38B,.".,."n".",1L8 - -!J" &\xa0\3&@J!-\xa0\39"1\xac\x011\xac\x011L.B9 0 0!J" \xe6\3@J!0\xa0\3: .\xa2\1.\xa2\2,": - -!J"\xc0\4J!-\xa0\3;"\xb1\4.; 0 0A*"\xc0\4*A0\xa0\3<\xc2\4!< - -!\xea\5!-\xa0\3=<;:9865421245689:;<= 0 7/7*!\x8a\2!\x8a\2!*7/7-0-0-0-0-0M\xe0\5-!3O\xa1\5o!\xc0\x020-0-0-0-0-0-0-0-0-0-0-0-0%737-0-0-0-0-0$0-0-0-0-0-737%\xa0\2&\xa0\6$A%$\xe0\4$%A$\x80\2f\x80\6 ' map_altitude_vals = b'\0\1\2\3\4\5\6\a\b\t\n\v\f\r\16\17\20\21\22\23\24\25\27\30\31\32\33\35\36\37 !"#$%&),/258;>ACD' map_altitude_bits = 6 map_altitude = b"\x9e\1[\x94\1\xc0\t\x94\1[\x9e\1\xc0\21^\xc0\6Q\xc0\6^\xc0\21e@\x91\re\xc0\22Q\x80\1Q\x80\4Q\x80\4Q\x80\1Q\xc0\23Q\xc0\v\xd1\a@R\xc0\v\x91\1\xc0\nQ\x80\1\xd0\6@ba`_^]\\[@Z@XWVBUTSR\xc0\2Q\xc0\v\x91\1\xcf\6@c\x80\3\xd2\2@R@\x92\1@R\xc0\2Q\xc0\vQ@\xce\6\xc0\1\x92\2\xc0\3\xd2\1\x80\1R\xc0\2Q\x80\1A\x80\nQ@\xcd\6@\x92\2@R@\xd2\1@\x92\2\x80\1\x92\1\xc0\2Q\x80\1B\x80\nQ@\xcc\6@R\x80\2\xd2\1@\xd2\1\x80\2\xd2\1\xc0\2Q\x80\1C\x80\nQ@\xcb\6@\x92\1@R\xc0\4\x92\2@R\xc0\2Q\x80\1D\xc0\2TVY[^ad\x80\4Q@\xca\6\x80\2\x92\4@\xd2\1@R@R\xc0\2Q\x80\1E\xc0\2Q\x80\1Q\x80\1e\x80\4Q@I@I@I@I@I@I@I@\x92\2@R@\xd2\1\xc0\1R\x80\2R\xc0\2Q\x80\1F\xc0\2N@\xee\1@f\x80\4Q\xc0\a\x92\1@R@R@R@\x92\1@\xd2\3\x80\2\xd1\1@G\xc0\2KQn@nQg\xc0\3\xd1\1\xd2\6\x80\1R@R\xc0\3\x92\1\xc0\2R\xc0\2Q\x80\1H\xc0\2H@\xee\1@h\x80\f\x92\1@R@R@R@\x92\1@R@R@R@R\xc0\2Q\x80\1I\xc0\2E\x80\1Q\x80\1i\x80\4Q\xc0\aR\x80\1\x92\b\xc0\2Q\x80\1J\xc0\2B@omlkj\x80\4Q\xc0\a\x92\1@R@R@R@R\x80\aQ\x80\1K\x80\nQ\x80\bR@R\xc0\2\x92\1@R@\xd2\2\xc0\2Q\x80\1L\x80\nQ\xc0\a\x92\1@\xd2\1@\x92\4\xc0\4Q\x80\1M\x80\nQ\xc0\aR\xc0\a\xd2\1\xc0\2Q\x80\1N\x80\nQ\x80\b\x92\b@R\xc0\2Q\x80\1O\x80\nQ\xc0\aR\xc0\bR\xc0\2\x91\1@P\xc0\t\x91\1\xc0\aQPONMLKJIHGFEDCBA\xc0\3Q\xc0\vQ\xc0\23Q\x80\1Q\x80\4Q\x80\4Q\x80\1Q\xc0\22e@\x91\re\xc0\21^\xc0\6Q\xc0\6^\xc0\4e\xc0\f\x9e\1[\x94\1\xc0\t\x94\1[\x9e\1\x80\4\xe5\1\x80\f@" map_texture_bits = 3 map_texture = b"\xa0\20\t\n@\n@\n\t\xd8\2\n\x98\1\n\xf0\6{\x88\3\vh\v\x88\3\v\b[\b\v\x88\3\v\b\vH\v\b\v\x88\3\v\b\vH\v\b\v\x88\3\v\b\vH\v\b\v0i\xf0\1\v\b\vH\v\b\v\xf0\2\n \vX\v\20\n\30l\xf0\1\v\b\vH\v\b\v\x88\3\v\b\vH\v\b\v\x88\3\v\b\vH\v\b\v\x88\3\v\b\vH\v\b\v\x88\3\v\b[\b\v\x88\3\vh\v\x88\3{\xf0\6\n\x98\1\n\xd8\2\t\n@\n@\n\t\xe8\20\r\xc8\1\b" map_height = uncompress_rle(map_height, map_height_bits) map_altitude = uncompress_rle(map_altitude, map_altitude_bits) map_texture = pack(uncompress_rle(map_texture, map_texture_bits), map_texture_bits) def getBlockVal(map, x, y, nbits): v = 0 if y>=0 and y=0 and x> nbits*i return v def getBlockHeight(x,y): return map_height_vals[getBlockVal(map_height, x, y, map_height_bits)] def getBlockBottom(x,y): return map_altitude_vals[getBlockVal(map_altitude, x, y, map_altitude_bits)] def getBlockTextureIndex(x, y): return getBlockVal(map_texture, x, y, map_texture_bits)