b.py

Created by mathieu-croslacoste

Created on September 15, 2025

22.6 KB

b from https://yaya-cout.github.io/Upsilon-Workshop/view/12e1515d-01ee-4100-bb5e-3d1d68b051e7 compressed, might work on Epsilon, but unsure.


from kandinsky import fill_rect as F,draw_string as D
from ion import keydown as K
from time import sleep as S,monotonic as M
from random import randint as R,choice as C
from micropython import const as A
W=range
F(0,0,320,222,'k')
dim=A((13,9))
cs=A(24)
oX=A(3)
oY=A(4)
palExt=A(("#00a028","#30c858","#98dc40","#107c20",(0,64,0),"#b87448","#804418","#485460","#687488","#8890a8","#605460","#185800","#a0f4d0","#189cd8","#1090c8","#682020","#281828","#a81c28","#98acb0","#787088","#c0dcc8","#403048","#d08858","k","#700000","k","#280c18","#482020","#b00c20","#583418","#783400","#703c30","#684028","#785030","#d03410","#285cc0","#805c40","#905830","#905c50","#987048","#c86c20","#b87448","#18b430","#a09078","#b89070","#d8a860","#f0d090","#f0f8f0"))
pal1=A(39)
pal2=A(31)
tilesExt=A((b"\xe0\17",
b"\x80\2\1\xe0\0\1\xa0\1\1\xe0\0\1\x80\4\1\xe0\0\1\xe0\0\1\x80\2",
b"\x80\1C@#B \3\x82\1\0\3\xa2\1\0\3!\2\1\2\1\3\xc1\1\3\xc1\1\3\xc1\1",
b"C\x80\1B#@\x82\1\3 \xa2\1\3\0\1\x82\1\3\0A\xe2\0\3\xa1\1\2\3\xc1\1\3",
b"\4\3A\3!\4#\1\xe3\0\4\xc3\1\0\4#\4C \xe4\0\3\4\0C\6\5$\0#\6\5\26% #\6\26\6\26",
b"A\3!\3\4\1\xa3\1\4\xc3\1\4C\4#\4\0#\xe4\0 $\5\6C\0\26\5\26\5\6#\0\26\6\26\6# ",
b"A\3\1C\1\xe3\0BC\x82\1#\xa2\1#!\2\1\2\1\3\xc1\1\3\xc1\1\3\xc1\1",
b"C!\3!B\x83\1\x82\1C\xa2\1#\1\x82\1#A\xe2\0\3\xa1\1\2\3\xc1\1\3",
b" H\xe0\0\bI\b \a\b\xe9\0\a\0\a()(')()\aH\tH\a\0\a\xe8\0\a\x80\2",
b"\xe0\3\1\xc0\1\v\1\xa0\1\v\xc0\1\v\0\1\x80\1\v\1\xa0\1\v\xc0\1",
b"\v\1\xe0\0\1\0\v\1+\1\0\v\0\6\v%+\5\v\6\xc5\1\6E&%\xe6\4%&",
b"\6\xc5\1\6\xc5\1\6E&%\xe6\4%&\0\6\xa5\1 \6\x85\1",
b"\x80\1\1 \1\v\1+\0\v\0\v\5\v%\v\5\v\x85\2&%&\5\x86\4%&%\6",
b"\x85\4&%&\5\x86\4%&%\6\xe5\3",
b"\xc0\5\1\xa0\1\1\v\xc0\1\v\x80\1\1\0\v\xa0\1\1\v\xc0\1\v",
b"\xc0\1\v\1\v\0\1+\1+\5+%\v\6\xc5\1\6%&E\xc6\4%\xe6\0",
b"\xc5\1\6\xc5\1\6%&E\xc6\4%\xe6\0\xa5\1\6\0\x85\1\6 ",
b"\5\xb7\1\5\xf7\r",
b"\b\xe0\0\1\0\b\a\v\1+\0\v\a('H'\xa5\1\b\aH'H\xa6\1\bG\xa8\1%&%\b",
b"\x88\1G\b\xa5\1\xe8\0'H\a\xa6\1G\x88\1\a\b%&%('('\b\a\xa5\1\a",
b"\xa0\2\v\0+@\v\5\v%\v\5\0\v\xa5\1\vE,\5\16\v\5\fN\f\16\0\v\f\16-\16\r\v\5\16\x8d\1",
b"\xe0\1K\0\v\0+E\v\5\v\xa5\2\f\16\f\5\f%\f\xae\1\f\16\x8d\1.\x8d\2",
b"\xa0\2\v \v \5\v\5+\5\v\0\xa5\1\v\0\16\5,E\v\16\fN\f\5\v\r\16-\16\f\v\0\x8d\1\16\5\v",
b"\v\f\16\x8d\1\0\v.\xed\0\v\5\f\x8d\1\v\5\16\x8d\1\0\v\f\x8d\1\0\v\16\x8d\1\v\5\f\x8d\1\0\v\f\x8d\1",
b"\xed\17",
b"\x8d\1\16\f\v\xed\0.\v\0\x8d\1\f\5\v\x8d\1\16\5\v\x8d\1\f\v\0\x8d\1\16\v\0\x8d\1\f\5\v\x8d\1\f\v\0",
b"\v\5\16\x8d\1\v\f.\xed\0\0\v\f\x8d\1\v\5\16\x8d\1\0\v\f\x8d\1\v\5\16\x8d\1\0+\16\r\f\v\r@K\0\v",
b"\xed\v\v\f-+\f\v\0K \v\0",
b"\x8d\1\16\5\v\xed\0.\f\v\x8d\1\f\v\0\x8d\1\16\5\v\x8d\1\f\v\0\x8d\1\16\5\v\r\v\f\r\16+\0\v\0K@",
b"\xcd\r\v\xad\1\v\0",
b"\x8d\1\16\v\0\xad\1\5\v\x8d\1\16%\x8d\1\16\f\5\xad\1\16\f\xcd\1\16\xed\3",
b"\0\v\16\x8d\1\v\5\f\x8d\1%\16\x8d\1\5\f\16\x8d\1\f\16\xad\1\16\xcd\5",
b"\x8f\2%&%/%&%/%&%/%&\5\20/%&%/%&%/%&%\17",
b"\22\tR\t2\21\22Q\22Q\22Q\x121)R\t2\21\22Q\22Q\22Q\x121\22\t2)2\xef\1",
b"\6%\6%\6%&\5&\5\6\xe5\1\6%\6%\6%&\5&\5\6\xe5\1\xef\1\21\22Q\x121",
b"\x90\2\xb6\x010\26\xe6\0\x160\26\xe5\0\x160\26F\20\x160\26\xe5\0\x160\26\xe6\0\x160\xb6\1\20",
b"2\23\xf2\0\x93\2\22\x134\22\x134\22\23R\x132\xf3\1\24\22\x1342\x132\23\xf2\0\23\xf0\1",
b"P*P\xf5\1\xb0\1*5*\xf5\0*\xb0\1\xf5\0*5\xf0\1\24\22\x1342\23",
b"\20\xf1\0\r\21\20\6\xb0\1\xa6\2\xb7\1\6\xf7\1\4\xb7\1D\xea\0D\xaa\1\4",
b"\4\xaa\1$\xaa\1$\xaa\1\4\20\4\xea\0\4\20\6\xb0\1\xa6\4\xad\1\6",
b"\xc7\5\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2",
b"\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2",
b"\xe7\17",
b"\xe7\1\xe2\1\xf7\t\xe3\1",
b"\x91\1\r1\xed\x011\r\x91\1\xed\1\xb1\1\r\21\xed\x011\r\x91\1\xed\1",
b"\xe2\1\xe7\r",
b"\xe7\3\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1",
b"\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1\2\xc7\1",
b'\2\16\a\16\a\16\a"\16\a\16\a\16\a"\16\1\16\a\16\a"\16\1\16\a\16\a"\16\a\16\a\16\a"\16\a\16\a\16\a"\16\a\16\a\16\a\x82\2',
b"\21\xe3\1\21\xb5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1",
b"\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\26\xb5\1\3\21\xb6\1#\xb1\1\r\3\21\x83\1",
b"\x91\1\r1-\xe3\0-\21\3\xf5\0\3\21\r\3\xf5\0\3\r\21\3\xf5\0\3\21\r\3\21#\21\3\r1\r\x91\1\xed\1",
b"\xc3\1\21\xb5\1\21\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3",
b"\xd5\1\3\xd5\1\3\xd5\1\3\xd5\1\3\xb5\1\26\3\xb6\1\21\3\xb1\1\xc3\1\21\3\r",
b"\21\xa3\1\21\3\xb5\1#\xb5\1#\21\4\3\22\3\21#\21\4\v\22\25\21#\21\4\v\22\25\21#\21\xf5\0\21#\21\xe3\0\21\3",
b"\xc1\5\5\xa1\1\5\f\x81\1\5\f\24\x81\1\5\24\f\x81\1\5\24\t\xe1\0\5\17\t\f",
b"\xe1\0\f\24\t\23\x81\1\24\f\23\x81\1\f\24\23\x81\1\f\5\23\xe1\0\17%\23\xe1\0\5\17\f\23\xe1\0\f\17\t\23\x81\1\t\f\23",
b"\xe1\0\5\17\t\f\x81\1\5\24\t\x81\1\5\24\f\x81\1\5\f\24\xa1\1\5\f\xc1\1\5\xe1\3",
b"\x81\2\17\f!\5\b\1\t\fO,\t\f\t,/\5\f4\xec\0\5\17\f\24L\5\t,\17\24,\5,\xf3\1",
b"\xf3\17",
b"\xf3\1\f\17\24,\5L\24L\5\t\f4\xec\0\5\17\f\t,/\5\f\t\fO,\t\1\17\f!\5\b\x81\2",
b"!\bE!\t\17\f\t\b\f\b\5\t\f\xe1\0\f\b\f\xa1\1\f\24\xa1\1\t\f\xa1\1\t\f\xa1\1\f\xf3\1",
b"\xe1\3\5\xc1\1\f\5\xa1\1\24\f\5\x81\1\f\24\5\x81\1\t\24\5\x81\1\f\t\17\5\xe1\0",
b"\23\t\24\f\xe1\0\23\f\24\x81\1\23\24\f\x81\1\23\5\f\x81\1\23%\17\xe1\0\23\f\17\5\xe1\0\23\t\17\f\xe1\0\23\f\t\x81\1",
b"\f\t\17\5\xe1\0\t\24\5\x81\1\f\24\5\x81\1\24\f\5\x81\1\f\5\xa1\1\5\xc1\5",
b"\xe1\17",
b"\xd3\2\17\f\5,3\f\17\f\5\t\f3\17L\5\x0f3\5\t/\5\f\23\5O,\t\23)\f%\b\1\23,\5\xe1\0",
b"\23,\5\xe1\0\23)\f%\b\1\23\5O,\t3\5\t/\5\f3\17L\5\x0f3\f\17\f\5\t\fS\17\f\5,\xf3\1",
b"\xf3\1,\5\f\17S\f\t\5\f\17\f3\17\5L\x0f3\f\5/\t\x053\t,O\5\23\1\b%\f)\23\xe1\0\5,\23",
b"\xe1\0\5,\23\1\b%\f)\23\t,O\5\23\f\5/\t\x053\17\5L\x0f3\f\t\5\f\17\f3,\5\f\17\xd3\2"))
chnkTiles=A((0,b'\a\6\a\6\a\6\a\6\a\6\a\6\a\6\a\5\4\5\4\5\4\5\4\5\4\6\a\5\0\1\x80\3\2\a\6\3\1\x80\1\1\x80\1\1\4\6\a\5\xc0\3\1\2\a\6\3\x80\1\1\x80\2\4\6\a\5\xc1\0\xc0\2\1\2\a\6\3\xc0\0\1\x80\2\1\4\6\4\5\xc0\2\1\xc0\0\2\a',0,0,
b'\6\a\6\a\6\a\6\a\n\f\t\xc0\0\4\6\a\6\a\6\a\5\v\r\n\f\t\2\a\6\a\6\a\5\2\3\0\v\r\n\4\6\a\5\4\6\3\4\5\0\2\3\v\2\a\5\xc0\0\4\5\0\2\3\4\6\3\4\6\3\0\x81\1\0\4\5\1\4\5\2\3\5\xc0\1\xc1\0\0\1\0\1\4\6\3\xc0\0\x81\1\xc0\0\x81\1\2\a\5\xc1\0\xc0\0\1\0\xc1\0\0\1',b'\0\b\x80\1\1\x80\2\4\5\b\xc0\4\16\xcc\2\22\x8c\2\17\xcd\2\23\x8d\2\20\1\2\3\xc0\0\1\0\1\xc0\0\x81\1\0\4\6\3\0\2\3\1\0\1\2\3\2\3\1\4\5\2\a\6\3\2\3\4\5\4\5\1\0\1\4\5\4\5\4\5\xc0\0\1\2\1\0\x81\2\x80\1\1\0\4',b'\0\16\f\17\r\20\4\6\a\6\a\6\a\f\17\r\20\0\2\3\4\5\4\5\4\5\r\20\xc0\0\2\a\5\0\1\xc0\0\1\xc0\0\1\xc0\0\4\6\3\0\2\3\2\3\2\0\2\3\1\2\a\6\3\4\5\4\5\4\2\a\5\1\4\5\4\5\1\0\1\xc0\0\4\6\3\xc1\0\x80\1\1\0\2\3\2\3\4\5\2\3\2\3\2\3\2\a\5\4\6\3\2\a\5\4\5\4\5\4\5\2\3',b'\6\a\6\a\6\a\6\a\6\a\6\a\6\4\5\4\5\4\5\4\5\4\5\4\6\a\1\xc0\0\1\x80\1\xc1\0\0\2\a\6\3\xc0\0\2\3\0\x81\1\0\4\6\a\5\b\0\4\6\3\2\3\xc0\0\1\4\6\1\0\b\0\4\5\4\6\3\xc1\0\2\a\3\xc1\1\0\1\4\5\1\0\4\xc6\0\3\0\2\3\xc0\0\1\2\3\0\2\a\4\5\0\4\5\1\2\3\4\5\1\4\6',
b'\4\6\3\xc0\0\xc1\1\0\x81\1\2\a\5\1\0\1\x80\1\1\x80\1\4\6\3\1\0\xc1\0\xe5\1\0\1\2\a\5\xc0\1\xe4\0#$\1\0\4\6\3\xc0\1\xc1\0\xc0\1\2\a\6\3\0\1\2\3\1\0\1\0\1\4\6\3\5\xc0\0\4\6\3\x81\1\0\2\a\5\1\x80\1\4\5\xc0\0\1\0\4\6\3\0\xc1\0\x80\2\1\0',b'\xc1\0\0\1\0\1\0\1\0\1\xc0\0\2\0\1\x80\1\xc1\0\2\3\xc1\0\0\4\1\2\3\xc1\0\0\1\4\6\3\x80\1\1\4\5\0\xc1\1\4\5\x80\1\1\x80\1\x81\1\0\xc1\0\0\xc1\0\xc0\0\xa2\2\xc1\1\xc0\0\xc1\0! \xa1\1\xc0\1\1\0\x81\1\xc0\0\x81\1\x80\1\xc1\0\xc0\0\1\0\1\xc0\0\xc1\0\xc0\0\24\25',b'\a\6\a\6\3\2\3\0\2\3\2\a\6\5\4\5\4\5\4\5\2\a\5\4\5\4\0\1\xc0\0\xc1\0\0\4\6\3\0\1\2\0\1\24\25\26\0\xc1\0\4\6\3\0\4\0\24\37\30\36\25\26\1\0\4\5\xc1\0\0\27\xd8\1\36\26\1\xc0\1\1\27\x98\2\36\xd5\0\26\0\2\0\27\xd8\3\31\1\4\25\37\xd8\3\31\0\2',b'\3\b\0\2\3\1\4\6\3\b\0\2\a\5\1\0\4\5\1\2\a\5\xc0\0\4\6\3\1\2\3\xc0\0\4\5\0\1\2\3\4\5\2\a\6\3\0\x81\1\0\4\5\2\0\4\6\a\6\3\0\2\3\0\1\2\a\0\2\a\5\4\6\3\4\5\0\1\4\6\3\4\5\1\0\4\5\1\2\3\0\2\a\5\1\x80\1\xc1\0\0\4\5\0\4\6\3\2\3\0\1\xc0\2\2\a',
b'\2\a\5\1\xc0\0\x81\1\0\x81\1\4\6\3\0\xc1\0\xc0\1\2\3\0\2\a\5\1\xc0\0\2\3\0\1\4\5\0\4\6\3\x80\1\4\5\xc1\0\0\1\0\6\a\6\3\xc0\0\x81\1\0\1\0\1\4\5\4\5\1\x80\1\1\0\1\0\1\x8c\3\t\0\x81\1\0\xcd\1\21\xcd\0\n\x8c\2\1\0\xc1\1\0\v\x8d\2',b'\xc1\0\0\xc1\0\0\1\x80\1\1\32\30\1\0\x81\1\2\3\x80\1\xc1\0\27\0\1\0\1\2\a\5\0\xc1\0\0\1\32\x81\1\0\4\5\xc0\0\2\3\xc1\1\xc0\0\1\x80\1\1\4\5\xc1\0\xc0\0\xc1\1\0\1\x80\1\1\0\1\xc0\0\16\x8c\4\t\f\22\17\x8d\4\n\r\23\20\xc1\0\0\1\xc0\0\xc1\0\0\v',b'\x98\4\35\34\0\4\30\35\x9b\3\34\x80\1\33\34\xc1\1\xc0\0\1\0\1\0\x81\4\xc0\0\x81\1\xc0\0\1\xc0\0\xc1\0\0\1\x80\1\1\0\1\0\xc1\0\xc0\0\xc1\0\x80\1\1\0\1\0\1\xc0\0\1\xc0\1\1\0\x8c\3\t\x80\1\xc1\0\x8d\3\n\x8c\2',b'\5\4\5\0\xc1\0\xc0\0\xc1\0\0\4\6\xc0\0\2\3\2\3\0\2\3\2\3\0\4\xc0\0\4\5\4\5\0\4\5\4\5\2\3\xc0\1\xc1\0\xc0\0\x81\1\4\5\0\1\x80\1\1\xc0\0\x81\1\2\3\xc0\0\xc1\1\0\1\xc0\0\1\4\5\0\x81\1\0\1\xc0\0\xa5\1\2\3\xc1\0\x80\1\1\0\1$#$\4\5\xcc\1\17\0\1\0\1\0\1\2\3',
b'\0\b\x80\1\xc1\0\v\x8d\2\0\1\xc0\0\x81\1\0\xc1\0\b\xc1\0\0\1\xc0\0\xc1\0\0\b\1\xc0\0\xc1\0\xcc\0\22\xcc\4\xcd\0\23\xcd\4\1\0\1\0\1\xc0\0\1\0\1\b\1\xc0\0\b\xc0\0\1\0\1\xc0\0\1\0\xc1\0\xcc\2\t\b\0\1\xc0\0\1\xcd\2\n\xcc\2',b'\r\23\20\0\1\xc0\0\1\0\1\xc0\0\v\0\1\0\xc1\0\b\xc1\1\xc0\0\b\1\0\1\x80\1\16\xcc\5\17\xcd\5\20\xc0\1\xc1\0\0\1\xc0\1\1\0\1\0\1\0\1\xc0\0\xc1\0\xc0\0\b\xc0\0\x81\1\xc0\0\16\xcc\3\t\1\0\f\17\xcd\3\n\xcc\0', b'\xcd\1\21\xcd\3\b\xc0\0\1\xc0\1\b\xc0\0\1\2\xcc\2\t\xc1\0\x80\1\4\xcd\2\n\x8c\1\22\xcc\0\1\0\1\xc0\0\1\v\x8d\1\23\xcd\0\0\b\1\xc0\1\xc1\0\xc0\0\2\3\xc0\1\1\0\x81\1\xc0\0\4\5\1\0\xc1\2\16\xcc\5\17\xcd\1',b'\xcd\1\20\xc1\2\4\5\2\3\x81\1\0\xc1\0\0\1\0\2\3\4\5\1\0\b\1\0\xc1\0\2\3\4\5\xcc\0\t\xc0\0\1\b\0\1\4\5\xc0\0\xcd\0\n\xcc\4\2\3\v\xcd\4\4\5\0\1\b\xc1\0\0\1\0\b\0\1\x8c\6\x8d\6',
0,0,0,0,0,0,0,0,
b"\xa4\3\2\x85\2\b$\3&\r\xe6\x000\t$\3\r\v\16\r\x86\1\t$\3\6\f\17\r\x86\1\t$\3\6\r\xa6\1\0\t$\3\xe6\1\1\tD\x87\1\nG\xc4\3",b"\2\xa5\2\b\4\3\0&\xf0\0F\t\4\3\1\x86\2\t\4\3\xa6\1\rF\t\4\3\xa6\1\v\16\r\6\t\4\3\x86\1\r\f\17\r\6\t$G\n\xa7\1\xe4\6",0,0,
b"\x9b\4\21T\27\24\30[\x114\37\x95\1\35\30;\22\x95\2\31;\22\x95\2\31;\22\x95\2\31;\22\x95\2\31;\23\26\36\25\34\x96\1\32\xfb\0\22\25\31\xdb\1",b"[\21\x94\1\30\x9b\1\21\37\x95\1\35\24\30[\22\xf5\1\31[\23\x96\1\x1e5\31\x9b\2\x125\31\xdb\1\21\24\37\25\34\32\33\21\x94\1\37U\31;\22\x95\2\31;\22\25\34\xd6\1\32;",b"\33\21\xb4\1\30\xfb\0\21\37\xb5\1\x1d4\30\33\22\xb5\2\31\33\23\36U\x1c6\x1e5\31;\23V\32\21\24\x1f5\31\xfb\0\x114\37\xf5\0\31\xfb\0\22\xb5\1\34\32[\21\37\xf5\0\34\26\32\xfb\0\x125\x1c6\32\xfb\0",b"\x84\a\2\xa5\1\b\x84\1\3\x86\1\20\t\x84\1\3\x86\1\0\t\x84\1\3\x86\1\1\t\xa4\1'\nG\x84\a",
b"\x114\37\25\35\xd4\1\22\xf5\2\22\xb5\1\34\x96\1\22U\x1c6\32\21T\30\22U\35T\37U\35\23\36\xd5\2\33\22\x95\2\34\26\33\x136\36U\x1c6\32\x9b\1\23V\32\xfb\0",b"\37\25\31\xbb\x025\31\xbb\x026\32\21\xb4\1\30\xfb\0\21\37\xb5\1\35\30\x1b4\37\xf5\1\31\33\xd5\2\31\33V\36\xf5\0\x1c6\32\xfb\0\23\xf6\0\32\x9b\4",b"\33\21\x1f5\31\xfb\1\22U\35\27\24\30\x9b\1\22\xb5\1\35\30\xfb\0\23\36\xb5\1\35\30\xfb\0\22\xd5\1\31\xfb\0\23\36\xb5\1\31\x9b\1\23\26\x1e5\34\26\32\xdb\1\x136\32\x9b\4"))
collTile=A((b'\2\3\4\5\6\7\x08\n\x0b\x0c\r\x0f\x10\x11\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%',b'\0\1\2\3\4\5\7\x08\t\n\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f'))
doorTiles=A((b'\x11 #',b'\n\x17'))
del A
def Im(rle,x0,y0,w,pal,zx=3,zy=3,itransp=-1,ismap=0):
 mmap=b"";i,x=0,0;x0,y0=int(x0),int(y0);nvals=pal if ismap else len(pal)-1;nbits=0
 while nvals:nvals>>=1;nbits+=1
 maskval=(1<<nbits)-1;maskcnt=(0xFF>>nbits>>1)<<nbits
 while i<len(rle):
  v=rle[i];mv=v&maskval;c=(v&maskcnt)>>nbits
  if v&0b10000000 or nbits==8:i+=1;c|=rle[i]<<(7-nbits+(nbits==8))
  c+=1
  if ismap:mmap+=c*(mv.to_bytes(1,"big"))
  while c:
   cw=min(c,w-x)
   if mv!=itransp and not ismap:F(x0+x*zx,y0,cw*zx,zy,pal[mv])
   c-=cw;x=(x+cw)%w;y0+=(x==0 and zy)
  i+=1
 return mmap
def lines(txt):
 words=iter(txt.split());lines,cur=[],next(words)
 for word in words:
  if len(cur)+1+len(word)>17:lines.append(cur);cur=word
  else:cur+=" "+word
 lines.append(cur);return lines
kDelay={}
def Kt(key,val=None,delay=.1):
 kp=(val if val!=None else K(key))
 if not key in kDelay:kDelay[key]=0
 if kp and M()-kDelay[key]>delay:kDelay[key]=M();return 1
 return 0
def dialog(txt,side):
 txt2=lines(txt);x=60;y=10+side*122;F(x,y+5,200,70,(177,55,30));F(x+5,y,190,80,(177,55,30));F(x+5,y+10,190,60,(253,223,190));F(x+10,y+5,180,70,(253,223,190))
 for i in W(min(3,len(txt2))):
  for j in W(len(txt2[i])):D(txt2[i][j],x+15+j*10,y+12+i*20,(177,55,30),(253,223,190));S(.01)
 while K(4):0
 while 1-K(4):0
 for i in W(max(0,len(txt2)-3)):
  for k in W(1,6):
   for j in(0,1):D(txt2[i+1+j]+" "*(17-len(txt2[i+1+j])),x+15,y+32+j*20-k*4,(177,55,30),(253,223,190));F(x+15,y+49+j*20-k*4,170,5,(253,223,190))
   S(.01)
  for j in W(len(txt2[i+3])):S(.01+(txt2[i+3][j]=='.')*.5);D(txt2[i+3][j],x+15+j*10,y+52,(177,55,30),(253,223,190))
  while K(4):0
  while 1-K(4):0
 wrd.dChnk();p.dOnMap()
ent=[]
class Npc:
 def __init__(s,w,bigX,bigY,x,y,rle,pal,f):ent.append(s);s.w=w;s.bigX,s.bigY=bigX,bigY;s.x,s.y=x,y;s.rle=rle;s.pal=pal;s.func=f;s.questProg=0
 def d(s):Im(s.rle,oX+s.x*cs,oY+s.y*cs,8,s.pal,3,3,0)
 def act(s):
  r=s.func(s)
  if r==2:raise Exception("Merci d'avoir joue.")
def papy(s):
 if s.questProg==0:dialog("Coucou fiston, j'ai une mauvaise nouvelle... Notre village est menace car j'ai perdu les pierres magiques... Retrouves-les. Une est dans mon sac, mais je l'ai perdu dans une grotte.",s.y<4);s.questProg=1
 elif s.questProg==1:
  if items[1]in p.inv:dialog("Tu l'as retrouve, merci ! Je te donne la pierre... Maintenant, retrouves les autres pierres ! Une etait tombee dans le lac...",s.y<4);items[8].add(1);items[1].add(-1);s.questProg=2
  else:dialog("Retrouve mon sac, il est dans une grotte.",s.y<4)
 elif s.questProg==2:
  if items[9]in p.inv:dialog("Tu as retrouve la pierre ! Je ne sais pas ou est la derniere",s.y<4);s.questProg=3
  else:dialog("Retrouve la pierre dans le lac",s.y<4)
 elif s.questProg==3:
  if items[10]in p.inv:dialog("Le village est sauve ! Ou pas... combat final dans l'ep. 2 !",s.y<4);return 2
  else:dialog("Cherche dans le village, il te manque la derniere pierre.",s.y<4)
def pecheur(s):
 if s.questProg==0:
  if items[8]in p.inv:s.questProg=1;dialog("Tu veux que je peche une pierre ? J'ai perdu ma canne a peche...",s.y<4)
  else:dialog("Salut ! j'adore ce lac... J'y pechait avant...",s.y<4)
 elif s.questProg==1:
  if items[7]in p.inv:dialog("Tu as retrouve ma canne ! Je peche pour une pomme",s.y<4);s.questProg=3
  else:dialog("Je ne peux pas pecher sans canne",s.y<4)
 elif s.questProg==3:
  if items[0].nb>0:
   prob=C((6,6,6,6,9));items[0].add(-1);items[prob].add(1);dialog("Merci ! Pechons"+" ... "*11+"J'ai peche un"+(" poisson"if prob==6 else"e pierre bizarre"+", je te l"+"ea"[prob==9]+" donne."),s.y<4)
   if prob==9:s.questProg=4
  else:dialog("Tu n'as pas de pomme...",s.y<4)
 elif s.questProg==4:dialog("Merci pour ma canne !",s.y<4)
def vieille(s):
 if s.questProg==0:
  if items[9]in p.inv:dialog("On cherche une pierre magique ? Je l'ai, et tu l'as pour deux pots de confiture differents. Compris ?",s.y<4);s.questProg=1
  else:dialog("Bonjour ! Je vis toute seule dans cette maison, sans compagnie...",s.y<4)
 elif s.questProg==1:
  if items[4].nb>0 and items[5].nb>0:dialog("C'est pour moi ? Merci ! Tiens, la pierre",s.y<4);items[10].add(1);s.questProg=2
  else:dialog("Je veux 2 pots de confiture differents, rien d'autre.",s.y<4)
 elif s.questProg==2:dialog("La confiture etait delicieuse !",s.y<4)
def confiture(s):
 if s.questProg==0:
  if ent[3].questProg==1:dialog("Mamie veut de la confiture ? Il me faut un pot et 5 charbons par confiture.",s.y<4);s.questProg=1
  else:dialog("Bonjour ! Je suis un cuisinier.",s.y<4)
 elif s.questProg==1:
  if items[3].nb>0 and items[2].nb>5:
   prob=R(4,5);txt=items[prob].name;items[prob].add(1);dialog("Un pot et des charbons ? Parfait ! ... ... ... Voila, de la "+txt,s.y<4)
   if items[4].nb>0 and items[5].nb>0:s.questProg=2
  else:dialog("Desole, il me faut un pot et 5 charbons pour la confiture",s.y<4)
 elif s.questProg==2:dialog("J'ai trouve le materiel, tiens !",s.y<4);items[R(4,5)].add(1)
"""
def verrier(s):
 if s.questProg==0:dialog("Je suis un verrier de passage. Pour 8 poissons, je te fait un pot.",s.y<4);s.questProg=1
 elif s.questProg==1:
  if ent[3].questProg==2:return 1
  elif items[6].nb>7:dialog("C'est parti ! "+" ... "*15+"Et voila !",s.y<4);items[3].add(1);items[6].add(-8)
"""
Npc(0,2,3,5,2,b"\x101 \x012\1\0\1\23\22\23\1\0\1\4\25\4\1\20\1\4\25\4\1\0\1\26\27\26\21\x057\5\1\0\1\b\21\b\1\0",(0,"k",(152,64,48),(104,32,32),(168,28,40),(248,200,168),(160,172,72),(72,68,112),(200,104,48)),pecheur)
Npc(1,0,2,7,3,b"H\31\20\1\2\v\2\1\b\1\33\1\b\1\33\1\0\1\4\5\16\5\4\t\3\36\3\1\0\1\a\t\a\1\0",(0,"k",(192,220,200),(248,168,136),(168,148,120),(144,108,104),(48,40,48),(168,24,40)),papy)
Npc(1,3,3,7,3,b"\b\31\20\1\32\1\b\1\33\1\b\1\4\r\4\1\0\1\2\35\2\t\5\3\16\3\5\1\0\1\36\1\b\1\a\t\a\1\0",(0,"k",(72,68,112),(40,48,80),(240,128,128),(248,168,144),(224,56,48),(96,84,96)),confiture)
Npc(1,1,2,8,3,b"\20\t \1\n\1\20\1\2\v\2\1\b\1\33\1\b\1\33\1\0\1\3\34\3\t\3\5\16\5\3\t/\1",(0,"k",(192,220,200),(152,64,48),(144,92,168),(232,128,152),(224,176,232),(104,56,112)),vieille)
class Item:
 def __init__(s,rle,pal,name="",ig=0):s.nb=0;s.rle=rle;s.pal=pal;s.name=name;s.isGem=ig
 def d(s,x,y):
  if s.isGem:Im(gemRle,x,y,8,s.pal,3,3,0)
  else:Im(s.rle,x,y,8,s.pal,3,3,0)
 def add(s,nb):
  s.nb=min(s.nb+nb,99)
  if s.nb==0:p.inv.remove(s)
  elif not s in p.inv:p.inv.append(s)
c=(248,240,224)
items=(Item(b"\20\t \1\2\3\1\20\1\4\2\3\4\1\0\1\4\5\6\24\t\4\6\34\t,\1\0\1\34\1\20\31\b",(0,"k","#682020","#189060","#d01818","#f8f0e0","#e03830"),"pomme"),
Item(b"\b\31\20\1\32\1\0\1\3\22\4\2\t\3\5\23\1\0\1\3\5\2\f\2\t\3\5\32\1\0\1\5\32\1\b!\0",(0,"k","#e05030","#682020","#281828","#b03428"),'sac'),
Item(b"H\21\30\1\2\v\1\b\1\22\3\2\4\0\1\2\3\n\t\f\1\2\31\4\0\4\t\24\20\f\30",(0,(24,16,24),(32,28,24),(40,52,40),(0,4,0)),'charbon'),
Item(b"\0)\0\1*\1\0\1\3\f\3\1\0\1\3\34\3\t\3\34\3\t\v\f\v\1\0\1\33\1\20\31\b",(0,"k",(248,104,24),(152,172,176),(192,220,200))),
Item(b"\0)\0\1*\1\0\1\3\f\3\1\0\1\3\34\3\t\5\36\5\t\r\16\r\1\0\1\35\1\20\31\b",(0,"k",(248,104,24),(152,172,176),(192,220,200),(192,28,80),(232,80,120)),'confiture de framboise'),
Item(b"\0)\0\1*\1\0\1\3\f\3\1\0\1\3\34\3\t\5\36\5\t\r\16\r\1\0\1\35\1\20\31\b",(0,"k",(248,104,24),(152,172,176),(192,220,200),(240,148,16),(240,192,32)),"confiture d'orange"),
Item(b"\20\31\20\1\2\v\4\1\0\1\2\23\4\t\2\v\2\v\1\0\1\v\2\3\1\0\1\n\v\1\20\1\2\t \1 ",(0,"k",(72,152,224),(40,48,80),(72,68,112)),'poisson'),
Item(b"\0\t \1\2\3\1\30\1\3\n\1\20\1\3\1\n\1\b\1\4\t\n\1\0\1\5\21\n\t\v\6\t\2\1\0\21\b\1\0",(0,"k",(152,64,48),(168,148,120),(168,28,40),(224,232,224),(120,112,136)),'canne a peche'),
Item(0,(0,"k",c,(32,176,248),(128,116,152)),ig=1),
Item(0,(0,"k",c,(240,192,32),(240,148,16)),ig=1),
Item(0,(0,"k",c,(232,80,120),(192,28,80)),ig=1))
del c
gemRle=b"\20\t \1\2\3\1\20\1\n\v\1\0\1\22\23\t\23\24\1\0\1\v\f\1\20\1\3\4\1 \t\20"
potSprite=b"\b\31\20\1\32\1\0\t\32\21\2\31\3\t\4\25\2\3\t\23\24\1\0\1\34\1\20\31\b"
potPal=(0,"#482020","#d8a860","#905830","#b87448","#f0d090")
class Chest:
 def __init__(s,w,bigX,bigY,x,y,it,probs,unique=0):ent.append(s);s.w=w;s.bigX,s.bigY=bigX,bigY;s.x,s.y=x,y;s.items=it;s.probs=probs;s.unique=unique
 def d(s):
  if type(s.items)==int and type(s.probs)==int:items[s.items].d(oX+s.x*cs,oY+s.y*cs)
  else:Im(potSprite,oX+s.x*cs,oY+s.y*cs,8,potPal,3,3,0)
 def act(s):
  item=(s.items if type(s.items)==int else C(s.items));prob=(s.probs if type(s.probs)==int else C(s.probs));items[item].add(prob);txt='Tu as '+("trouve "if type(s.items)==int and type(s.probs)==int else"casse la jarre ! Dedans il y avait ")+str(prob)+" "+items[item].name+("s"if prob>1 else"");dialog(txt,s.y<4);wrd.curEnt.remove(s);wrd.dTile(s.x,s.y)
  if s.unique:ent.remove(s);del s
Chest(1,0,2,8,2,0,(1,2))
Chest(1,1,2,10,1,(0,6),(1,2,3))
Chest(1,1,2,10,2,0,(1,2))
Chest(1,3,3,4,4,(0,6),(1,2))
Chest(1,3,3,4,3,0,(1,2))
Chest(1,1,4,5,4,2,1)
Chest(1,1,4,7,3,2,1)
Chest(1,1,4,9,5,2,1)

Chest(1,1,3,4,1,1,1,1)
Chest(1,2,3,3,2,7,1,1)
class World:
 def __init__(s):s.wrd=1;s.bigX,s.bigY=0,2;s.curChnk=b'';s.curEnt=[];s.decompCur()
 def decompCur(s):
  pal=pal1 if 1-s.wrd else pal2;s.curChnk=Im(chnkTiles[s.wrd*20+s.bigY*4+s.bigX],0,0,13,pal,ismap=1);s.curEnt=[]
  for i in ent:
   if i.bigX==s.bigX and i.bigY==s.bigY and i.w==s.wrd:s.curEnt.append(i)
 def dTile(s,x,y):Im(tilesExt[s.curChnk[x+y*dim[0]]+38*s.wrd],oX+x*cs,oY+y*cs,8,palExt[24*s.wrd:24+s.wrd*30],3,3)
 def dChnk(s):
  for i in W(dim[0]*dim[1]):s.dTile(i%dim[0],i//dim[0])
  for i in s.curEnt:i.d()
 def moveChnk(s,x,y):s.bigX+=x;s.bigY+=y;s.decompCur();s.dChnk()
 def collDoor(s,p):
  s.wrd=1-s.wrd;s.decompCur()
  for i in W(len(s.curChnk)):
   if s.curChnk[i]in doorTiles[s.wrd]:p.x=i%dim[0];p.y=i//dim[0];break
  s.dChnk();p.dOnMap()
wrd=World()
class Player:
 def __init__(s):s.x=6;s.y=4;s.dir=[0,1];s.inv=[];s.pal=("k","#682020","#484470","#984030","#906c68","#c86830","#e09048","#c0dcc8",0);s.sprites=(b"\x180(\x006\0\b\0U\0\b\0\1\23\1\0\30\x003\0\b\0\27\22\27\20\x032\3\0\b\0\4\20\4\0\b",b"\x180(\x006\0\b\0U\0\b\x001\0\30\x003\0\b\0\27\22\27\20\x012\1\0\b\0\2\20\2\0\b",b"\x180(\x006\0\b\0U\0\b\0\23\21\0\30\x003\0\b\0\a\2\a\2\27\20\x012\5\0\b\0\4\20\4\0\b",b"\x180(\x006\0\b\0U\0\b\0\21\23\0\30\x003\0\b\0\27\2\a\2\a\20\x052\1\0\b\0\4\20\4\0\b")
 def d(s,x,y,z):Im(s.sprites[round(2.5*s.dir[0]**2+.5*s.dir[0]+.5*s.dir[1]**2-.5*s.dir[1])],x,y,8,s.pal,z,z,8)
 def dOnMap(s):s.d(oX+s.x*cs,oY+s.y*cs,3)
 def hide(s):wrd.dTile(s.x,s.y)
 def Inv(s):
  F(30,35,260,152,(177,55,30));F(35,30,250,162,(177,55,30));F(217,40,68,58,(253,223,190));F(222,35,58,68,(253,223,190));F(217,113,68,69,(253,223,190));F(222,108,58,79,(253,223,190));F(35,40,177,142,(253,223,190));F(40,35,167,152,(253,223,190));s.d(235,53,4);i1,i2=0,0
  for i in s.inv:
   if i.isGem:i.d(224+(i2%2)*30,118+i2*15);i2+=1
   else:i.d(60+(i1//4)*70,47+(i1%4)*35);D("x"+str(i.nb),85+(i1//4)*70,49+(i1%4)*35,(177,55,30),(253,223,190));i1+=1
  while K(4):0
  while 1-K(4):0
  wrd.dChnk();s.dOnMap()
 def Coll(s,hori,verti):
  if s.x+hori in(-1,dim[0])or s.y+verti in(-1,dim[1]):return 0
  if wrd.curChnk[s.x+hori+(s.y+verti)*dim[0]]in collTile[wrd.wrd]:
   if wrd.curChnk[s.x+hori+(s.y+verti)*dim[0]]in doorTiles[wrd.wrd]:return 2
   else:return 1
  else:
   for i in wrd.curEnt:
    if i.x==s.x+hori and i.y==s.y+verti:return i
  return 0
 def up(s,pK,pKold):
  hori=Kt(3,('r'in pK))-Kt(0,('l'in pK));verti=Kt(2,('d'in pK))-Kt(1,('u'in pK));ok=('o'in pK and not'o'in pKold);moved=0;oldDir=s.dir.copy()
  if hori:
   s.dir=[hori,0]
   if s.x+hori in(-1,dim[0]):wrd.moveChnk(hori,0);s.x-=(dim[0]-1)*hori;moved=1
   elif not s.Coll(hori,0):s.hide();moved=1;s.x+=hori
  elif verti:
   s.dir=[0,verti]
   if s.y+verti in(-1,dim[1]):wrd.moveChnk(0,verti);s.y-=(dim[1]-1)*verti;moved=1
   elif not s.Coll(0,verti):s.hide();moved=1;s.y+=verti
  if moved or s.dir!=oldDir:s.dOnMap()
  if ok:
   coll=s.Coll(*s.dir)
   if type(coll)!=int:coll.act()
   elif coll==2:wrd.collDoor(s)
   else:s.Inv()
p=Player()
items[3].add(5)
wrd.dChnk()
p.dOnMap()
pKold=""
while 1:
 pK=""
 if K(4):pK+='o'
 if K(0):pK+='l'
 if K(1):pK+='u'
 if K(2):pK+='d'
 if K(3):pK+='r'
 p.up(pK,pKold);pKold=pK

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our cookies policy.