123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- (define (game-name-lookup n)
- (vector-ref (vector "Microban" "Sasquatch") n))
- (define xsb-level-menu-list
- '(("Microban" . 0) ("Sasquatch" . 1)))
- (define microban-data "iIgYI4GCKIgYRyKBgiUoGCKIgYiIEQiIiIGCIigYKHKBglQoGCNCgYIiKBiIiIEQIoiIGIgiiIgYIiIlKBgoIoUoGCMjhygYiIiIiBEIiIiIgYIiIigYI0RXgYIiIigYiIgigSIiiIgRAoiIiIEoIiIoEoI1MoGIJXUoGCI1MoGCIiIoGIiIiIEQiIiIKIiIGCIiiIIigYJVIiIoeBglKDMyIoGCIoiIiIgYiIgRCIiIiBgiIigYI1MoGCU1KBgjUygYJTUoGCJyKBiIiIgRAiiIiIEigjN4EiglUoEiiCiIEiKCgSIoKBiIgoGCIiiBgoIigYIigoGIgiKBIoiIgRCIiIGDIogYdVKBiCIoEogigSKIOBIiiIEQIiIiiIiBIiIigyKBIiIig4KBiIiIg4KBgnJSUlKBgoKCgoiBgiIiIoGIiIiIgRAiiIiIEigiIoEigoh4gYiCglKBgjOCUoGCIiIigYIoiIiBiIgRCIiIGCIogYJSKBiCUoiIEoiHMigSKCI4KBIoIiIoEiiIiIgRCIiBgyiBg3KBgyWBiFKIgSglIoEoIiKBKCKIgSiIgRCIiIiBgiIigYKCgoGDJUeBgiKIgYiIgRAiIiiIGIiIh4gYIiI0KBgiKCIoGIiIWCgSIigiKBIiKIiIEQKIiBKCKIiBKCIiKIGIKIIigYMjgnWIGCIoJVKBgiOCIigYiIiIiIEQiIiBgnKBgzOBhVWIGCIigYIiKBiIiIEQiIiIgYIiIoGDIyKBgogogYIlKBiIUoEihygSKCKBIoiIEQiIiIiBgiIzKBgidVKBiIiCiBIigigSIoIoEiKCKBIiiIgRCIiIiBgiIiiIGCJ1UzgYiIKIKBIoIiIoEigiiIgSKCKBIoiIEQiIgYIoiIGCMjKBglWHgYgiIoEoiIiBEIiIgYIiiIGDIyKBgiKCgYgoIoEodVKBKCIigSgiiIEoiIEQiIiIgYIkIoGCIiKBiCgogShXOBKCIoEoiIgRCCiIiBIoIigYiFV4GCIoiBgiIigYIyMoGIiIiBECiIgSgiiIEoJVKBiDMygYInUoGCIoiBiIiBECiIiBKCcoEoIigYiFKBgjM4GCVSgYiCKBIoiIEQiIiIGCIjgYKIKIGCJVeBgoIigYMiiIGIiIEQiIiBgiKBgnKBglWIgYgyMoEoIiKBKIiIgRAiIiiIiBIiIoIiiBIiIoIiKBKIiIgiKBiCIiKDKBglJSciiBgoiIiDgYIiIiIoGIiIiIiBEIiIGCKIgYJVKBgzMoGCdSgYIiiBiIiBECKIiBKIIoGIdTiBglUigYIyMoGIgiKBIoiIgRAoiIGIIoiBgiIigYNEV4GCIoiBiCKBKIiBEIiIiIGDKCKBgiUigYMlh4GCJSKBgygigYiIiIEQIoiIGIgiiIgYIiIiKBh1REMoGCIiIigYiIiIiBECiIgYgigYMlgYNSgYNSgYNSgYMliBgiJ4GIIigSiIiBEIiIGCKIiIiIiIgYJSUlJSUnKBgjMzMiIiIoGIiIiIiIiIgRAiIiKIgYiIgoOBgiKIg4GCIlKDgYJSJSKBiIiHgoEiIoIigSIiiIiBEIiIiIiIGCIiIiKBgog4iCgYKCVSMoGCMnWIKBiIiCIigSIiiIiIEQiIiBgiKIiBgoKCOBgiIlKIgYiChTIoGCIociKBgoKIiIgYIigYiIgRAoiIgSgiKBiCIogYJVUoGCNjKBiIiIgRCIiIiBgiIigYdVUogYIoMzgYgiIogSiIiIEQIiiIgSIoIoEiKHKBiIhTgYIiU4GCglOBgiIogYiIiBECIiKIiBIiIoJ4EiIigigYiIiCOBgiJSI4GCJVgjgYIiKIiBiIIoEiiIgRCIiIGHU4GIiIEQiIiIGDMygYIlKBgoWIGCJSgYInKBiIiIEQKIiIgYgiIoGCKIKBgoJSgYIkI4GIKHiBKCIoEoiIgRAiiIiIgYiCIiKBglJSIoGCiIKIiIGCcjIyIoGCIoiCIoGIiIKIiIEQiIiIGCJygYIoKIGCOCKIGCNVUoGCOCIoGIiCIoEiKIiIEQiIiIGCcigYJYKBglIoGCUogYiCiIgSgigigSgzMigSgiIigSiIiIgRAiiIgYiCKIiIGCJSJzOBglIiKCgYiCiIgoEigiIiKBIoiIiIgRCIiBgiiIGCIiiIGCJUcoGIgjgoEigiIoEiiIiIEQIoiIGIgngYIlKBgiQ4GCJDgYIlKBiIIoEiiIgRAoiIgYgyOIGCQkKBgigigYJSUoGIJyiBKIiIEQIiIiiIiIEiIiKCIigSKIiIIyKBiIIoiDIoGCUiUiMogYJ1UoIygYgiIoiIgSiIiIEQiIiIiBgnKCKBgiIiKBiIiFKBIiKCKIgSiChSM4EogoIoiBIiKIiBEIiIgYIiiIGCJSKBiEIygSgiJ4EoiIiBECKIiBIoIoEihygSKCKBiIKIiBgiIkKBgiUiKBiIiDKBIiKIiBEIiIGCKIiBg0UigYI1goGIJyKBKCIogSiIiBEIiIiIiIiBgiIiIiIoGCiIiIgniBgoIiIiIigYKCJSIoIoGCVSiIiCKBiIIoKCMzgSKIiCgiIoEiIiIoiIiBECiIiIiIEoIiIiKBiHiIiCgYIoIigoGCKCIlOBgiiFiDgYhYgig4GCIlIoOBgiKCKIgYiIiIgRCIiIiIGCIiIoGCiIgoGCgzN4GCiIWIgYKCIiKBgiVSUoGIiCIogSIoOIgSIoiBECIoiIiIiIGIiCIiiCKBgiVVMzNXgYIiIiiIIoGCIoiIKIiBiIiBEIiIgiKIiBgiKIiII4GCIiIiUiiIiIiBiIIoiII1IiJygSKCKCKCKIiCIoEiiIgiiIgiiIiBECiIiIGIIiKBgiJSgYIlUoGIgjiIiBIog4JygSIoMiUoEiKDKIiBIiiIgRAiiIiIEigiIoEigiUoEoiIUoGIJSUoGDMzgogYIiInKBiCKCIoEoiIiIgRAiKIgSIoeBKIhYiBiCIyKIGCKCgigYKCIoKBgoIigoGCgiKCgYIoKCKBiCUlKIEogyOIEigiKBIoIigSKIiIEQiIiBgiKIGCgigYdUOIGIIjKBKCWCgSiCIoEiiIiBECiIgSgiiIiIGIIiJSKBgjglIigYI4WIiIGCNygYiIiBEIiIIoiIGCKIiCKBgigigigYIoIiJYgYIjI4UigYcogoJSgYIiMoIigYiIiIiIgRCIiIGCcoiIGCIiIoGCUlUoGIWIIoGCIoiIGCMyKBiDMigSiIIoEiKIiBEIiIiIiIgYIiIoIiiIGCV1KCMiOBgogoiCiCgYKCIiIigoGCgiKCIoKBgoiIiIiCgYIiIiIiIoGIiIiIiIiBECKIiBKIIoiIgSgiUicoEoIlgiKBiIgoiIgYIoIigYIiJSgYIzgigYIjiIgYIogYiIEQiIgYIoiIgYJVJSgYIiIigYgogogYMzh4GCiIKIGCIiIoGCKCIoGIiIiIEQKIiBKCKIiIiBKFJ4IiOBiChVIiOBgiUiiDOBgiKCiIiBiIIigSKIiIEQKIiIiBiCMzOIGCIoiIiBgiJSUngYiCJSUoEiiIIiKBIiKIiIgRAoiIgYgiKBgiIoiIgYIoOCIoGHKDglKBgig4IogYIiKCKBiCKIVYEogiIigSKCKIiBIoiIEQiIiIiIgYJyMzMoGCIoiIWIGIKCJSUoEoJSIiIoEoIiiIiIEoiIgRAoiIiIGIIiIogYIlJSKBglJSUoGIKIgoiIEociMzM4EogiIiiIEiiIiIgRAoiIiIiBKCIigigYglhYIoGCI1NyKBgiOCIigYiIiIiIEQiIgYIoiIiIGCIyiCOBglgiIjgYgogoI4EoIiKCKBKIiCgigSKCdSiIEiglUoEigiIoEiiIiIEQKIiIEoIigSgjKBiCQoGCJIgYIniBiCUoEoIigSiIiBEIiIgYIiiIGCMiKIGISFIoGCOCUoGCeIKIGCIiKBiIiIgRCIiIgYIiKIGCUlKIGIJVIoEoKCIoEoKIKIEoIjI4EoJzI4EoIoiIEoiIEQiIiIiBgiMzKBgiiIKIGCKCUigYgodSKBKCglIoEoKIgoiIgSgiIiIiKBKCIoiCIoEoiIgoiIgRAiIiIoiIEoiIiIIoEoJSIiIoEoIiUlIoEoKIiIiIGIKCMigYIoKCKBgicjKIGIKCgoEoIiMoEoiIiIEQIiKIiBIoiCKIEoglIigYglIoKBgnhVIoGCMyKIgYIziIGIiIEQIiIoiIGIiIgigYIiIiKBgiMzI4GIWIiIgYJSKBgiJYiBiCJSKBKIJyKBIoiIiBECIiKIiBKCiIIoEoKCIigSgoIoKBKChSg4EoKCKCgoEoKFKDgoEiKCKCgoGIiFKDgoGCciIigoGCIoIogoGIiIiIEQiIiIiIgYIiiCIoGCUiV4KBiIgoJSgSIoOCKIEoKDglgSgoMiKBKCgyIoEiKIiIgRAoiIiIgSgiciKBKCUiUoGIgogoiBgiUzUigYIiMyIoGIiIiIiBEIiIiIiIgYIiI4gigYJVczVSgYIiiDIigYiIiIiIgRAiiIgSKCKCIiiIiBIoIoIiKCIoEigiiIiIOCgYiIIlIiIyKBgiJVgoiDgoGCIoIigoIigYiIiIiChyiBIiIiIiKCKBIiIiIiKIiBECiIiIiIGIIigiKIGCIigiIoGCJSglIoGCIkNCIoGIiDc4iIGCIkNCIoGCJSglIoGCIigiIoGIIigiKIEoiIiIiBEIiIiIiBgnKCIoGCUlIigYhYiCiBgiMzIoGCIoIigYiIiCKBIiIoiIEQiIiIiBhyIiKBgjVTKBglM1KBglM1KBgjVTKBgiIiKBiIiIiBECKIiIgSKCIigSKCIigYiIgigYIig4iIgYIiV1IigYiIg4IigSIogogogSIoIiU4EiKCIoiBIiiIiBECIoiIEiKCKIiIiIGIiCUlMzM4GCIlIiiIiIGHiIKIgYIlIoGCUoKBiCgigSgiIoEoiIiBEIiIgYIiiCiIgYIlKIgjgYJSIlIjgYgliIiDgoiIGCUigoI4iCKBgiIoKCOCJygYiCKCgiIiIoEiiIgogiIiiBIiIiIoiIiIEQIiIiIiIiIiiIiBIiIiIiIiIigiKBiIiIgiiIiIgoKBgiIigigigiIiKBgiciiIgigiIiiIgYIoIiIzM4goiIIoGCIiiIiCiCVSUlKBiIiIIigiIiIiIigSIiIiIoIoiIiIiIEiIiIiKIiBEIiIiIGCeCKBg1IigYMoJYgYNYIigYMoJSgYIoIigYiIiIgRAiiIiBIoIigSKCgoiIiIEigiQigiKBIogogiKCgSKCIiKEIoGIgoKCgoiBgiSFYiKBgoIiiCiBgiKCJCKBiIiIgoKBIiIigiKBIiIiiIiBEIiIiIiIgYMzOCIigYIoIiVSgYInIogigYIiIohSgYiIiCJSgSIiKCIigSIiKIiIgRAiiIiBIoIyiBiIJSKBgjJYeBgoUjKBgiUoiBiCMoEoiIgRAiIoiIgYiIgiKBgiIlIoGCJYWHgYiCgiKBIoIzMoEiiIIogSIigigSIiiIgRAoiIKIiBiCKIgiiBgiKCgiKBgiQyNCKBiIUiJYiBKCInIigYiFIiWIgYIkMjQigYIigoIigYgiiIIogSiIgoiIEQKIiIiIEoIiIigShyIlKBiCiIUoGCMzM4iBglJSUigYiIiCgoEiIigiKBIiIoiIgRCIiIiIGCIiIoGCVEQoGCQiQoGCQiQoGCREMoGCIiJ4GIiIiIEQiIgiIiiIiBgiiIIigiKIGCIigiKFJSgYM4KIiIKCKBgiciIoJSUoGDOCIiIiIogYgiKIiIiIgSiIiBECKIiIiBgoIiIoGCgoKCgSKCclKBiIKIgoGCIoiCgYJSKIOBiCUig4EoglIjgYKIJYOBiCiCg4GIgoIigYiCiIiBECKIiBIoIoEigliIgYiDIyKBglKCUoGCIyOIgYiIUoEiKCeBIiiIgRCIiIgYIiKIiBgiIjM4GCIiMzgYiIiCKBIoIoIoEiglUogSKCdSKBIoJVIoEiiCWCgSIoIiKBIiiIiIEQKIiIGIIiiIgYIlVSKBgoIiUoGCIliCiBiIIoMigSKCKCIoEoiIgoiBKCIoKIEoJzMzgSgiIiKBKCIoIoEoiIiIgRAiKIiIEiiCIoGIgigoGCIiMoGCKIKIiIGCIyMoIogYIoJyUiKIgYiIgygiUigSIiiIgiUigSIiIiiCUogSIiIiKCKIEiIiIigigSIiIiKIiBEIiIiBgiIoiBgiglKBgiUnKBiCiCiIiBgigzMzOBglJSUlKBiCIoiIiBKIiIEQIiKIiIGIiIIiiIgYIiIoIiKBgigzMzIoGIIogoKIgShVdVUoEoIiIoiBKIiIiBECIiKIiIEiKIgiKBiIgzMzgYJ1VVUoGCIiKCiBiIiCIoEiIoiIgRAoiIKIiBKCKIgiiBKCIiInKBiDOIgiKBgiIiKCKBgzOFIoKBgoglUlKBgiUiIoiBiIgiiIEiKIiBECiIiBiCIogYIlIogYJSUiiBiIWCMogSKCgjIoEogogyKBKCciMogSgiKCKBKIiIiIEQIoiIiBIoIiKIEogogigSglUoKBKCdSgoEoIiKCgYiIKCKBgiMzKIGCIiKIGIiIiBECIiIoiIGIiIiCKBglIiIiiBgliIiCKBgieCKCKBiCiDMiKBgigjOIiBglIoiBgliIGCKBiIgRAoiIiBKCMigYhTgoGCJCKBgjOIgYhSgoiIgYgogoIigYIoiIKCgYIiclJSgYgigiIigSiIiIiIgRCIiIGCIoiBgoUigYJSIoGCUlKBglgigYIniIGIKIiIiIGCIiIjM4GCIiIiIoGIiIiIM4EiIiIoiIEQiIiIiBgiIiKBglJVKIiIiIGIiIJ4gyMigSIihSKCMiKBIiKCIoMjKIEiIoWCiCgoEiIoIiIiIoEiIoIoiCKIEiIoIoKIiBIiKIiBEIiIiIiIiIgYIiIigiIigYJXVSgjIzgYgogoiCiCgSgoIiIiKCgSgoIigiKCgSgoiIiIiCgSgiIiIiIigSiIiIiIiIgRAiIiKIiIEiIiKCIogSIiIoJSKBiIiIiCh4gYIyKCUlIoGCIiIiJYKBgzOIiIIigYiIgiKIiIEQKIiIiIiIGIMzMzMigYJVVVVXKBgiKCgoKIGCgoIiIoGCIoiIiIGIiIEQiCiIgYiIIoiIEoJSUyKBiCgiNSgYIiiDiIGCJSIygYJygiKBgiiIiIGIiBECKIiIiIgYiCIoIigYJCUjIygYIiUogogYiISCIoEoInIoiBKCIoiBKIiIEQIoiIiIiBiIJygiKBgkJSQzKBgiJSgiKBiIhIIoiBKCIiKIEoIiiIEoiIgRCIiIIoiIgYIiiIgzKBglVSIiIoGCIlgiMygYiCeCKIKBIoIogiIoEiiIiIiIgRCIiIGCIoGCMoGDc4iBiDgigYIlIoGCUiKBiFUigSgiiIEoIoEoiIEQiIgYJ4iBg0IoiIgYM4VSUoGIIiIiKBKCgogigSgiKIiIEoiIgRAoiIiIEoIjI4iBKCMjIygYiCiIgoGCJ1IlKBgiVSJSgYiIIiiIEiKIiIEQIiIiIoiIGIiIiIgigYIiiCUiKBgiUiKIIoGIgoMjgogSKCgyOFiBIoKCIoIoEignJSIigSKCKIiIiBIoiIEQiIiIgYIiIoiIgYJVh4gzgYKCIiIigYIlKCgigYiIJSIzgSIoiIiIgRAoiIiIEoIiIoGIKIhYgYNSInKBgjMoUoGDiCJSgYIiKIiBiIiIEQIiIiKIiBIiIiiCKIgYiIIoIlIoGCKIiCUlKBgiIzgoUigYIoIiciiIGIKDOCiIEoKIKCgSgiIiKBKIiIiIEQIoiIGIgigYIiKIgYKCMjgYJyMziIgYKCgoIiiBgiKCVSIoGIiIIlJSgSIiiFKCiBIiIoIiKBIiIoiIiBECiIgYgiiIgYIiMzgYIiMzgYIigogYIihyiIgoiIGIiIJSIoiCKBIiKCKIUlIigSIoiCIiJVIoEiKCUiiCIoiBIigiIoiIiBIiiIiIEQiIiIiCiIiBgigiKIgiKBgiIiKIJSKBg4JyiCUiiBg4IiglIogYOCIiUiiBgyiCiIiBiCIigSiIiIEQIoiIiIgSKCKCMoEigiI0OBIoIoJCgYiIWIOIGCIiIlKBglKIJSgYIieCIoGIiIiIiBECKIiBIoIoEigiiIgYiFNSKBgiNzIoGCJTWIgYiIIoEiKCKBIiiIgRCIiBgiiIgYJSIoGCOCKBglgogYIyKBiIgoEiKCgSiIKIgSgiUigYgoWCiBglJyUoGCM4MygYiCIoiBIoiIgRAiKIiBKIgiiIiBKCVSgiKBKCUjI1WIEoIzKDJSgYiChEIyKBgiMkSCiIGCUjgjMoGIVTcyUoEoIiglUoEoiIgiiIEiIiiIgRAiKIiIEiKCcoEiiCIogYiDVVOIgYIlMzUigYIlODUigYIlMzUigYiDVVOIgSKIIiiBIigiKBIiiIiBECiIiIgYgiMiiBgjVVMoGCUyNSgYNSclOBglMjUoGCNVUygYgiMiiBKIiIiBECIiIiiIiBiIiIiCIoGDIiMieDgYIoiCIiKBiCUigiIoEoJSIoiIgSglgigSiCgigSKCIogSKIiIEQiIiIiIiBgiMigiKBgoMiciKBgigzgoiIiIGIIoglUlJSgSiCIiIiIiKBIoiIiIiIiIEQKIiBiCKIgYdSIoGIglKBKCKIiIgSgiUzM4EoIoKIiBKIKCgSglgoEoIiKBKCKIgSiIgRAiIiiIgSiIiCKBKCIiJYiIiIGIKIIzgiMzgYJSVYUiciKBgiIiIiiIIoGIiIiCKCiIgSIiIoiIEQIiiIgSIoIoEoiCKBiCJSgYIigoGChVKIiIgYKCIoIiOBgiUiciI4GIgiiIgzgSKIiCKIiBEIiIiCiIgYIiIoIiKBg4gihYgigYIigiIigigYUigoiCKCKBgoIiIigigoGCgoiIIoKCgYMnIiJSQjKBiIiIiIiIiIEQiIiIiIiIgYOCeCKCIoGDhVIiglKBg4IoJYIigYOCWCKCWIGDgiglgigYOCWCKCWBgzIoJSIoGDMigigigYiIiIiIiBECiIiIiIiIiIiIiIiIiIgSgiIiIiIiIiIiIiIiIigSgoiIiIiIiIiIiIiIiCgSgoIiIiIiIiIiIiIiKCgSgoKIiIiIiIiIiIiIKCgSgoKCIiIiIiIiIiIoKCgSgoKCiIiIiIiIiIgoKCgSgoKCgiIiIiIiIigoKCgSgoKCgoiIiIiIiCgoKCgSgoKCgoIiIiIiIigoKCgSgoKCgoKIiIiIiIgoKCgSgoKCgoIiIiIiIiIoKCgSgoKCgoiIiIiIiIiIKCgSgoKCgiIiIiIiIiIiKCgYhYKCiIiIiIiIiIiIiCgYMnKCIiIiIiIiIiIiIigYiIiIiIiIiIiIiIiIiIgRAiIoiIiCIiIiIiIiIoiIGIiISCKIiIiIiIiIiIIogYIiiIIiIiIiIiIiIiIiKBgiIiIiiIiIiCKIiCKIIoGIgoiIIiIoIoiIIoiIIogYSCgjgoKCgiIigiIigiKBhIKCKCIiKCiCKCiCKIIoGIgiIoiCiIIoKIIoKIIogSgiKChIIiIigiIigoIiKBKCIoKIgiiIiCKIiCgiIoEoiIgiKIiIIoiIiIKIiIgSgiKCgoRIIiIiIiIiIigYgoKCIoRIIoiIiIIogigYIiKIiIiIgigiIoiIgoiBgoIiIiIiIiKCUiIiIihIGCIoiIiIiCKIgniIiCKEgYiIgiIiIoiIKIiCIoiIiBEA==")
- (define sasquatch-data "IiiIEiiCgoiIEogiiIIoGIJSIiIoGCInUoIoGIgliIIoEigigzIoEogog4KIEoIiIiiBKCIiKIEoiIiIEQKIKIiIGIKIIygYKIJTKBKIJSIoGIJXKIgYJSKIGDMogogYIigogYiIgoEQIiIiIiIoiIgSIiIiIiiCIoEiIiIiIoIiKBIiKIiCKCUogSIigiiIhSWBIiKCIiJSUoEiKIKIJSUlgSIoIjgiUlKBIigiOCIiIoGIiIKIiIiIgYMzMnIoGDMzIiKBiCKIiIgSiIgRAiiIiIiIiBKIIiIoIngYiCUlWCIoGCiFIiJVKBgigiUoIigYiIiCiIiIGDMjNShIgYIzIiKIgYIjOIiIGIiIiIgRAiiIiIiIiBKIIiKCIiiBiIJSWFJSiIGChSUoJSWCgYJSIzgzIlKBgiUzODM1IoGCUjMkIzJSgYiIiCcoiIiBglIzIiMyUoGCJTM4MzUigYJSIzgzIlKBgoUlKCUlgoGIglJYUlKIgSiCIigiIogSKIiIiIiIEQIoiIiIiIgYiDIjUyI4iBKIJSJSJSiBIogjNTMogSIohYWFiBIiKDUlOBIiKCJyKBIiKIgoiBIiiCUlKIEiKDIlIjgSIoiCMoiBIiIoiIgRAiIiIiIiiIiIEiIoiIIogiIoEiiIIoIoIogoiBiIIiKIiCgiJSgYIlJyMzQzIlIoGCUlIogoiCIoiBiIKIgiKCiIiBKCIiIoiBKCIoiIEoiIgRAiIoiIiIEiIoIiIogYiIgoiCKIGCIiIigiiBh1REMohSgYIoIiKII4GIIogiglKBKIIoiINTgSKIIiIiIoEiKIiIgiiBIiIiIoiIEQiIiIiIGDIyIigYNTIyKBiCiIcoEoIlIogSglUogSgiUoEoIoiBKIiBECIiIoiIiBIiIigiIoEiIiKCciiIGIiCKCIiIoGCKIiDODhYiIgYJSUogzMiIiKBgiIiMzM4VSIoGIiIgohYgoiIgSIiKCJSIigSIiKIiCiIgSIiIigigSIiIigiiIiBIiIoiCUiIoEiIigiUlIigSIiKChYKIiBIiIoIiIoEiIiiIiIgRAiiIgYiCKIiBgiJyIogYKDI4OIgYJVUlVSgYiDg4OCgSiCIiIigSKIiCKIgSIiKIiBECIiIiIiIiKIiIEiIiIiIiIigiKBIiKIiIIiIoIiiIiIgSIigiKIiIKCIjMzMoGIiIKCiCKCgiIigoKBglJSUlJSgogiKIJSgYKCiDMzM4iIKIglUoiBgiIiKIJCgiIoKCJVIoGIiIiIiGVSIogoIiIigSIiIiIoNSWCgiiIiIiBIiIiIig4giKBIiIiIiiIiIiBECIoiIiIEoiCIiKIEoIiiIIoEoIiIigoGIhYcigoGCIoiIgoGCIoIkMoGIVYIkOIEoIiIkM4EoiIKDM4gSIigoVVKBIiKCIlIoEiIoiIgigSIiIiKIiBECiIiIgYgiIigoGCJDU4GCJDg4iBgoV1UigYIiiCgoGIiIgiKBIiIoiIgRAiKIiBIihygSKIIogSKCNYiIgSKFMoIigYiDNYKCgYIjNSJSgYJSUoKIgYiIgoKBIiKCIoEiIoiDgSIiIoiBECKIiIgSiCgiiIGIKCIoKIGCgiJTgoGIIlJTgoGCiIiDKIGCIiJTJ4GCIiJTKIiBiIKChIKCiIEiiIgjUiIigSIigiNSIiKBIiKII4iIgoEiIoKDUlIogSIigoNSIoKBIiKIKCIoKIEiIiiIIoKIEiIiIoiIiBECIiiIiIiIiBIiiCMjIyMoiBIigiVSUlJSKBIigiKIiIiIKCiIiBKIiCiCJSIiKCgiKBKCIigiUlKCKIgoKBiCKCgiKIiCIiJSKBgzMiiIiCUiiIgoiBgzMnIiIlIiIoIiKBgzOIiIiIiIglIlKBiIiCIiIiIiiIiCKBIiIiIiIiIiIiKIiBECIiiIgYiIgigYIiIigYUlJSgYNDQ0gYQ0NDgYJSUlgYMzMzgYNDQ0gYUlJSgYJSUlgYUlJSgYIiIigYcoiIgYiIEQiIiBgiKIiIiBgiUiIiKIGIKIiIgiiBKCgiIoKCiIiIiBKCgogiIlIiIiKIEoKDIih4iIiCUiiBKCg4IoiCIiiCUiiBKCgyIigiIiKIJSKIEoKDgiKCKIIiiCUiiBiCg4IogiiIIiiCUigYIoOCIoIoSIIiiCIoGCIjgoKCKISIIiiIiBiIiIIigiiIiIEiIiiIiBECIiKIiBIiIoIoGIiIhTgYIiUlOBgldTM4GCVVM4gYIlIzgYiIiIgRCIiIKIiIiIGCIoiCMlIoGCIlJDMoUogYglgjNCUieBKCJSMoiCIoEoiIiIgoiIgRAiKIiIKIiBIihyOIgiiIGIiCJVJSIigYIigjIyiCKBgiUoIyMogoGIIyJSVSKCgSgoIoiDIoKBKCiIgoiIgoEoIiIiKCIigSiIiIgoKIiBIiIiKCNSgSIiKIiCIoEiIiiCiIiBIiIiiIEQIiIoiIiIGIiIgiIiiIiIGCIyM1hTMjIoGCJSUiMiUlIoGIhYiIeIiFiIGCJSUiMiUlIoGCIyM1hTMjIoGIiIgiIiiIiIEiIiiIiIgRAiIiIiiIiIEiIiIigiKIEiiIiIglIoEiglJSUoUoEigiKDJSIoEoiIODgliIEoIiMzMygSgiUjOIWBiIKIIzIoGCJThSglgYIiUiKCKBiHIoIoiIEogiiIgSKIiBECIiIiIoiIgSIiKIiIIoiIgSIiKCI4UiJSgSIiKCgyVVJyiBIiIoIjhSIlIoEiIiiIOCJSUigSIiIigyKIUoiBKIiIiEiINSgSglIiIzM4iIGIKFhVMzOBgiUlIigzgYIiIlIoM4GCKIiIiIiBiIiBECIiIiIiKIiBKIiIiIiIIoEoIlJSUlIiiBKCKCgoKChYgSiDIyMjIyOBIoWCgoKChYiIGIgyMjIyMjIigYiFgoKCgoJyKBIoIiUlJSUiiIEigiiIiIiIiBIoiIEQIiIiiIiIiBKIiIgiIiKIiIiIiBiCUiIiiIIiIiIiKIGCUlKIKCKIiIiIgigYIlIoIiIiIiIiIoKBglJSgoIoiIiIiCgoGCJSKCKCgyMjIyKCgYJSUoKCIiMjIyOIKBgiUigoKCMjIyMoIoGIUliCgiiIgoKCIogSgiKHKCIiIigiiIgSiIiIIoiIgigigSIiIogiIigigigSIiIiiIiCKIIogSIiIiIiKIIiKIEiIiIiIiKIiIgRAiIiIoiIiBIiIiKCIiiIEiKIiIJSUigYiIIig4IiKIGCJShYOIWIiIGCVTI4NSIiIogYIlODg4iIgiiIgYgiMzMzMngiIigSiIhSg4iChYiFiBIoglIjIoIlJSUoEiKCUoiCIiIiIigSIoIigoiIiIiIiBIiiIiBEIiIGCKCIiIiIiIiKIiBgiiIiIiCiIiIgigYIiIiIiiIIogiUoGIOIiIgjMyIiKDKBKDgiIiKCOCIoJSgShVVYVVKDgiKIMoEoOCUiJSgzIiIiiBKDgiUiUiKCgiKIEoIoIiVSgiKIiIEoMiiFIoiIiBKDIigiUyKBiDJyiIOFKBgiIigoIiKBgiIogoiIiBiIiIEQIiIoiIgSIiKCIoEiIigiKCIiIiKIiIgSIoiCKIKIiIIoIiKIgSIoIiKCIiIiKIKFUigSKIUiKIiIiIiCUiUigYiCKIIzMzMzM1IoVXgYIiKCVYKIiIiCUiIigYIiUigzOCIiKIgiiIgYIigiJSiIKIIiiIgYiIiIgiIoEiIiIoIiKBIiIiKCIigSIiIiiIiIEQIiiIiBIigiKIiIEiKCVYIiiIiIEoiDIjJSgiIoEoIjiDiIiIgoEoJTIjKCIigoGIOIVVWFVSiIiIEoMzIiIyIigiIoEoM4g4iIOIgoh4EogoJSUlKCUlIoEigoIiIiKCIiKIgSKCg4g4OIiIgigSKCJSglMiIiUigSKCIiiIOIKIhYgSKIiIgoIiIiIoEiIiIiKIiIiIiBECIiIiIiIiIiIiiIiBIiIiIiIiIiIiKCIoEiIiIiIiiIiIiIJSgSIiiIiIKCIoIigiKBIiKCIigoJSIiJSh4EiiIKIKIiCiIKIKIgSKCIlIlIiIoIigiKBIoIlIlKChSglUlUoEoiIiCJSKCKCIoIigYgiIogoiIiIiIiIiBgiOCIlKCIigYMyIigiiIiIGDM4iIIoGDMzgoiIGDMzgYiIiBECIoiIiIEiiCIiKIEigiiIIoEigoglIoiIEigoI4IiU4iIEigoJCSIg1IoEigoJIIiiIKIiIEigoJyQkIoKCIoEigoIoiChIIkIoEigogoIkJDgoKIiIiBIoKCKCIiIzM1IlIigSKCgoglgliIhSIiIoGIhCIkIiIoIiKIiIiBgiKIiIiIiCiIgYIiIiIiIiIoGIIoiIiIiIiBKIiBECIiIiIiIoiIgSIiIiIiIoIziIiIiBIiIiIiIigjMzM4IoEiIiIiIiKDMohVIlgSIiIiIoiIg4giJSKBIiIiIigiMzOCUiVYGIiIKIKCIzI4UiUigYIigiIoKIOIgiVSWIgYIiiIIoKIKCJSKCIigYJyIoiIKCKCgoiFKCgYIiIiIiIiKCJSIiUigYIiiIgiIiKIgoiIVYgYIogiiIgiIigiIiIoGCKCIiIogiIoiIiCKBiIgiIiIogiIigoJSgSIiIiIiIogiIoKCIoEiIiIiIiIoiIiCiIiBECiIiBKCIoGIKCiIiBgiIogiiIiIgYKCIiJSIiIoiIGCIoiIJSJVKCKBiIiCKCVVJShSgSIiIiglIlJSUoiIiBIiIoiFIihSUiUiIoEiIiglJVIiIiiIJyiBIiIoIlJVVYiIMzIigSIiKCJSIiJSgyODM4EiIiiIJVVSIjMzMyKBIiIiKCIiIogzgzMzgSIiIiiIiIKIMzM4iIEiIiIiIiKCIjMzOCIoEiIiIiIiKIiIiIiBECIiIiIiIiIoiIgSIoiIIiIiIoIiiIiIEiKCKCIiIiKCUiIlKBIigiiIgiIigiWIUiiIEiKCIiKIiIiIgiglJSgSIoIiIiMzMzMzOCIlKBKIiIgogzM3iIIoJVIoEoIiKCiIiDiCgogiJSgSgiIiIiIiKCKFIlUlKBiIgoIoiIgoIoIlIoIoGCIigoIiIigiiIIiiIgYIiIigigiKCIiiIiBgiKCIiKIiIGIiIIiIoEiIoiIiIEQIoiIgiIiIoiIiIiBIoIigiIiIoIiIiKBiIKFiIKIiIKCgoKIiIGCUyMigoIiIyMjIyIigYKCgoWIgoKCgoKCgoWBgiMjIyMiUlJSUiMjIoGIhYKChYiIiIiIhYKFgSKCIyMiiCIiIiKCIyKBIoiFgoWIiIiCgoWChYiBIiKCIyNSUlKCIoIjIyKBIiKFgoKCgoKIiIWCgoKBIiKCIyMjIyMiUiMjIyKBIiKIgoKCgoKCgoKCgoKBIiIiglJTIyNSUlJSUlKBIiIiiIiCgoKIiIiIiIiBIiIiIiKCJyKBIiIiIiKIiIiBECIiIiIiIiIiIiIiiIgSKIiCIiIiIoiIiIgigYiHKIIiIiIoIiIigigYIiIoIiIiIoKIglJSgYIzM4iIiIiIIigigzgYIygiiCUiJSWCgigzgYiCgiIiUiVVKCglJSgSKCMzglIlUiKCgigigSKCIzglIiUlKCgogigSKIMzgiUlUlKFgoiIgSIoIiiCUiUlIigoEiKIgoiIiCKIgoKIgSIoIyIogoiIIyIjKBIogiIygiIigoODgoEigiMiKCgoKCIoIigSKCMoiIIiIoiIiIiBIoIogSKIiBECIoiIIiIiIiIoiIgSIoIoiIiIIoiIIigSIoJyJSIoiIIiUigSIoIoiDgiIoIlUigSiIOIJShSgiIoIogSgiM4JSMzgoiCKIEoJSMzWIOIIiIogSiDiIUlMyIlUogSKDIoMjiIJSUoEigiUzOIKIKCKBKIKIiIgiKCIogYgiKIIiIiiIiBglUigYIiUoGIglKBIoIogSKIiBECIiKIiIiBiIgoIiIoGCKIglVSgYIjMzUiiIiBgiM4JSKCJ4GIhYhYiIKCiIiIEoNDMzUiUiiIIoiIgSgjOIiIIogiJSUiKBKDMzQzMygiVSKCUoEoiIiIiIKFUogoIigSIiglOIgiIiIiUiiBIiKCIiIiWIhYKCKBIiKIiIIiUiIlKIiBIiIiIoiIIiKIiBIiIiIiIoiIiBECIoiIgSIoIigSiIIiiIiIiBiCJEQiIoKCgSgiQkIiKIKCiIiBiCJEQiKIKCiCIogSiIIiiIgoKCgiKBIigiKCgoKIiFJYiBIogiKIKCiCJTM1KIEiKIiIKCiCIiNzIoEiIiIigoKCIlMzUogSIiIiIoiIiIhSWIgSIiIiIiIiIigiKBIiIiIiIiIiKIiIEQiIgYIoiIiBgiIiIoiIGCUlIigiiIiBiIiCiIIiJSgSgigiJSKCIoEoIiIiiFiIiIEoJYiCKCMzgoEogoeFKIODgoEoIiKCIoMzgoEoJSiFJYMziIiBKIgogiKDMyIigSKCKCJSUlKCgoEigliIKIiIgoKBIoIiIiIiIiKCgSKIiIiIiIiCIoEiIiIiIiIiiIiBECIoiIEiiCKIiIiIiIiBKIIiIzMzMzMygYgiIoIoiIWIgogYIiIigoIiIigiiBgiIigiglVSKCgoiIgYiIgigjI4KIgjIyMogSIigiJTI4IoJVJSUngSIoiIiIKIgoIiiIiIgSIoJSIlIigogoiBIigiIlIlKCKCiCgoiIEiKCWIgoiIIoKCgogiiIgSIoIlJVUigogoIogiIiKBIiiCIiIiKCiCiIglVSIoEiIogoiIiIIzMzIiIoiIgSIigiUiIiIiKIiIgigSIigiKIiIgiiCIiiIgSIiiIiCIiiIgRAoiIiIiIiIGIIiIiKCIoiBgiUlVVUiIigYiCUiJSKIgoEiglJSWIgoKBIogiJSiCKCiIEiKIiCIoiIIigSIiKIgiIiIoKIgSIoiIIiiIgiIigSIoclIiiIIoOCiIiBIiglJSiCgiMzMiIoEiKCVSiCKIiDMzMigSKIJSKCIiKDODiCKBIoJSUogiIoMzMzIoEigiUlKCIigjIzgogSKIIlIoIiKIKIOCgSIoIiKIIiIoIiIigSIoiIiCIiIoiIiIgRAiiIgiIiKIiIiIEigiiIiCiCIoIoEigiIlKIglIlIoEigiUoKIIiJSIoiIEiiIIoIiKCiIWIIoGIiIIoiCKIiCIlIoGCIoJSJViCMyiFIoGCJVIiglIiIiIiKIGIIoJYgiiIgoKIiBiIKCKIUoiDODOBgiKIgzIoIjMzOIgYIigiQ4iCgigzIoGIVYIkOIcoIoIiKBKCIiJDKIiCKIgigSiIiIIigigiIiIoEiIiKIiIIogiIoiBIiIiIiIiIoIoiBIiIiIiIiIoiIEQIiIiiIgoiIiIiIiIiIiIEiiIiCKIgiIiIiIiI1IigYiCJTIiIiKIiIWIiCIoKBgiIlMiiIgoIiIjIiiII4GCJSU4iCiCgoiIKCJTglgYiCJTiCgoKCgigiglKCKBIoiIiCgogoUlKIIigygoEiIiIiiIiCg4MigiiIKCgSiIiCKCIoKIgoiCIoIiKBKISIIoIiIjgigiKFVCKIEoSIgoiCiCiCiCgiODKIEoiEgoIjUjglNTiCiIKBKISIKCg4iIIiIoJTIiiBKEiIKCVSIoiCiIIiiCKIEoiEgoKCIjJXUiiIiIgygSiIiCgoiCiIg4IiIiIlKBIiIiKCIiKCKIiIiIiIIoEiIiIoiIiIIiIiIiIiiIgRCIiIiIgYIiIiKCIiiIiIGCIlIiiIiIIiKIgYKFhSUlIoJSIiKBglIiV1IlJSUlUoGCUlglKCIiJVUigYIlJSiIiIgiKIiIGIIiKIgzM4iIgjOBKIhVglVVKDM0IzgSKCIiIiIogiKDMoEigigihYiDMziEiBIoIiiDNTIzMyIigSKIgjQiI4MzOCIoEiIoiIiIiIiIiIiBECIoiIKIiBIogigoIoIoiIiIGIgiKIhSiCgiIiiIGCJSIiIlKIgiIiIoGCUlKIhSIoIoIiIoGIgoiCgiIoIigiIoGCJSgiiCiIIiKCiIGCIiUiKChyIiIiKIGCWCgoiCiIIigiKBgiUoKCUlKCKCKCgYgiKCIiUigoMiIoEogigoIiiCgzIoiBIogoKCKIKDMyiBKIgoKIiCgzM4gSgiIiIiIlNDiBKIiIiIiIgziBIiIiIiIiiIgRAoiIiIiIiIiIiIiIiIEoIoIoIoIoIoIoIoIoEoJYUoJYUoJYUoJYUoEoIoIoIoIoIoIoIoIoEogoKIgoKIgoKIgoKIEoIoIoIoIoIoIoIoIoEoIiIoIiIoIiIoIiIoGIKIgoKIgoKIgoKIgogYIigigigigigigigiKBgiKCIiKCJyKCIiKCIoGIIoKIgoKIgoKIgoIogSgiMiMjIyIjIyMiMigSiIiIiIiIiIiIiIiIgRAigoKCgoKCgoKCgoKBKCgoKCgoKCgoKCgoKBgiI1IiIyUyIyUiI1IoEoJYKFgoKChYKCgoIoGCIyIyIiUyIyI1IyIygSgoWCgoKChYUlgoWCgYIyIiI1I1IiIyUyIyKBKCWCgoKCh4KCgoKFKBgiMiNSMiIlMlMiIiMoEoKFgoUlhYKCgoKFgoGCMiMlMiMiNSIiMiMigSgigoKChYKCgoWChSgYIlMiJSMiNSMiIlMiKBKCgoKCgoKCgoKCgoKBIoKCgoKCgoKCgoKCgR")
- (define base64-charset (string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))
- (define bits->base64-mapping (map cons (iota 64) base64-charset))
- (define base64->bits-mapping (map cons base64-charset (iota 64)))
- (define (divide-list l n)
- (cond
- ((null? l)
- (list '() '()))
- ((= n 0)
- (list '() l))
- (else
- (let ()
- (define result-ab (divide-list (cdr l) (- n 1)))
- (define a (list-ref result-ab 0))
- (define b (list-ref result-ab 1))
- (list (cons (car l) a) b)))))
- (define (pad-list-left l n c)
- (define ll (length l))
- (define nl (- n ll))
- (if (<= nl 0)
- l
- (append (make-list nl c) l)))
- (define (pad-list-right l n c)
- (define ll (length l))
- (define nl (- n ll))
- (if (<= nl 0)
- l
- (append l (make-list nl c))))
- (define (bits->integer bs)
- (let loop ((in (reverse bs))
- (out 0)
- (p 1))
- (if (null? in)
- out
- (loop (cdr in)
- (+ out (* p (car in)))
- (* p 2)))))
- (define (bits->base64 bitlist-uneven)
- (define padded-bitlist-length (modulo-buffer (length bitlist-uneven) 8))
- (define bitlist (pad-list-right bitlist-uneven padded-bitlist-length 0))
- (define (modulo-buffer n1 n2)
- (define b (modulo n1 n2))
- (if (= b 0)
- n1
- (+ n2 (- n1 b))))
- (define (base64-ref n)
- (cdr (assv n bits->base64-mapping)))
- (define result-ab (divide-list bitlist 6))
- (define a (list-ref result-ab 0))
- (define b (list-ref result-ab 1))
- (let loop ((in b)
- (out '())
- (front-six a)
- (n 0))
- (cond
- ((null? front-six)
- (let ((new-length (modulo-buffer n 4)))
- (list->string (reverse (pad-list-left out new-length #\=)))))
- (else
- (let ()
- (define result-ab (divide-list in 6))
- (define a (list-ref result-ab 0))
- (define b (list-ref result-ab 1))
- (loop b
- (cons (base64-ref (bits->integer (pad-list-right front-six 6 0))) out)
- a
- (+ n 1)))))))
- (define (base64->bits base64-string-with-padding)
- (define (remove-padding l n)
- (if (= n 0)
- l
- (remove-padding (reverse (cddr (reverse l))) (- n 1))))
- (define (separate-pad-count)
- (let loop ((in (reverse (string->list base64-string-with-padding)))
- (out 0))
- (if (char=? (car in) #\=)
- (loop (cdr in) (+ out 1))
- (list (list->string (reverse in))
- out))))
- (define result-ab (separate-pad-count))
- (define base64-string (list-ref result-ab 0))
- (define pad-count (list-ref result-ab 1))
- (define (base64-bit-ref c)
- (cdr (assv c base64->bits-mapping)))
- (define (integer->bits i)
- (let loop ((in i)
- (out '()))
- (if (> in 0)
- (loop (quotient in 2)
- (cons (modulo in 2) out))
- (pad-list-left out 6 0))))
- (let loop ((in (string->list base64-string))
- (out '()))
- (if (null? in)
- (apply append (reverse (cons (remove-padding (car out) pad-count) (cdr out))))
- (loop (cdr in)
- (cons (integer->bits (base64-bit-ref (car in))) out)))))
- (define (xsb-level-data->bits l)
- (define data-mapping
- '((floor . (0 0 1 0))
- (goal-square . (0 0 1 1))
- (box-on-goal-square . (0 1 0 0))
- (box . (0 1 0 1))
- (player-on-goal-square . (0 1 1 0))
- (player . (0 1 1 1))
- (wall . (1 0 0 0))))
- (define (tile->bit-chunk c)
- (cdr (assv (tile-type c) data-mapping)))
- (define max-i (level-cols l))
- (define max-j (level-rows l))
- (define (strip-wasted-space l)
- (if (equal? (car l) '(0 0 1 0))
- (strip-wasted-space (cdr l))
- l))
- (let loop ((i 0)
- (j 0)
- (result '()))
- (cond
- ((>= j max-j)
- result)
- ((>= i max-i)
- (loop 0 (+ j 1) (cons '(0 0 0 1) (strip-wasted-space result))))
- (else
- (loop (+ i 1)
- j
- (cons (tile->bit-chunk (level-ref l j i)) result))))))
- (define (xsb-game-file->bits g)
- (define ll (game-file-level-list g))
- (define sz (game-file-length g))
- (let loop ((i 0)
- (result '()))
- (if (< i (- sz 1))
- (loop (+ i 1)
- (cons '(0 0 0 0)
- (append (xsb-level-data->bits (game-file-ref g i))
- result)))
- (apply append
- (reverse
- (append (xsb-level-data->bits (game-file-ref g i))
- result))))))
- (define (bits->level b)
- (define tile-char-vector #(#f #\newline #\space #\. #\* #\$ #\+ #\@ #\#))
- (define (bit-chunk->char bc)
- (vector-ref tile-char-vector (bits->integer bc)))
- (let loop ((in b)
- (out '()))
- (if (null? in)
- (list->string (reverse out))
- (loop (cdr in)
- (cons (bit-chunk->char (car in))
- out)))))
- (define (bits->xsb-game-file b)
- (define (chunk-bits l)
- (let loop ((in l)
- (out '()))
- (define result-ab (divide-list in 4))
- (define a (list-ref result-ab 0))
- (define b (list-ref result-ab 1))
- (if (null? a)
- (reverse out)
- (loop b (cons a out)))))
- (define (split-levels l)
- (let loop ((in l)
- (out '(())))
- (if (null? in)
- (reverse (map reverse out))
- (loop (cdr in)
- (if (equal? '(0 0 0 0) (car in))
- (cons '() out)
- (cons (cons (car in) (car out)) (cdr out)))))))
- (define level-chunks (split-levels (chunk-bits b)))
- (string-join (map bits->level level-chunks) "\n"))
- (define file-system-level-data
- (list
- (cons 0 (bits->xsb-game-file (base64->bits microban-data)))
- (cons 1 (bits->xsb-game-file (base64->bits sasquatch-data)))))
|