xsb-levels.scm 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. (define (game-name-lookup n)
  2. (vector-ref (vector "Microban" "Sasquatch") n))
  3. (define xsb-level-menu-list
  4. '(("Microban" . 0) ("Sasquatch" . 1)))
  5. (define microban-data "iIgYI4GCKIgYRyKBgiUoGCKIgYiIEQiIiIGCIigYKHKBglQoGCNCgYIiKBiIiIEQIoiIGIgiiIgYIiIlKBgoIoUoGCMjhygYiIiIiBEIiIiIgYIiIigYI0RXgYIiIigYiIgigSIiiIgRAoiIiIEoIiIoEoI1MoGIJXUoGCI1MoGCIiIoGIiIiIEQiIiIKIiIGCIiiIIigYJVIiIoeBglKDMyIoGCIoiIiIgYiIgRCIiIiBgiIigYI1MoGCU1KBgjUygYJTUoGCJyKBiIiIgRAiiIiIEigjN4EiglUoEiiCiIEiKCgSIoKBiIgoGCIiiBgoIigYIigoGIgiKBIoiIgRCIiIGDIogYdVKBiCIoEogigSKIOBIiiIEQIiIiiIiBIiIigyKBIiIig4KBiIiIg4KBgnJSUlKBgoKCgoiBgiIiIoGIiIiIgRAiiIiIEigiIoEigoh4gYiCglKBgjOCUoGCIiIigYIoiIiBiIgRCIiIGCIogYJSKBiCUoiIEoiHMigSKCI4KBIoIiIoEiiIiIgRCIiBgyiBg3KBgyWBiFKIgSglIoEoIiKBKCKIgSiIgRCIiIiBgiIigYKCgoGDJUeBgiKIgYiIgRAiIiiIGIiIh4gYIiI0KBgiKCIoGIiIWCgSIigiKBIiKIiIEQKIiBKCKIiBKCIiKIGIKIIigYMjgnWIGCIoJVKBgiOCIigYiIiIiIEQiIiBgnKBgzOBhVWIGCIigYIiKBiIiIEQiIiIgYIiIoGDIyKBgogogYIlKBiIUoEihygSKCKBIoiIEQiIiIiBgiIzKBgidVKBiIiCiBIigigSIoIoEiKCKBIiiIgRCIiIiBgiIiiIGCJ1UzgYiIKIKBIoIiIoEigiiIgSKCKBIoiIEQiIgYIoiIGCMjKBglWHgYgiIoEoiIiBEIiIgYIiiIGDIyKBgiKCgYgoIoEodVKBKCIigSgiiIEoiIEQiIiIgYIkIoGCIiKBiCgogShXOBKCIoEoiIgRCCiIiBIoIigYiFV4GCIoiBgiIigYIyMoGIiIiBECiIgSgiiIEoJVKBiDMygYInUoGCIoiBiIiBECiIiBKCcoEoIigYiFKBgjM4GCVSgYiCKBIoiIEQiIiIGCIjgYKIKIGCJVeBgoIigYMiiIGIiIEQiIiBgiKBgnKBglWIgYgyMoEoIiKBKIiIgRAiIiiIiBIiIoIiiBIiIoIiKBKIiIgiKBiCIiKDKBglJSciiBgoiIiDgYIiIiIoGIiIiIiBEIiIGCKIgYJVKBgzMoGCdSgYIiiBiIiBECKIiBKIIoGIdTiBglUigYIyMoGIgiKBIoiIgRAoiIGIIoiBgiIigYNEV4GCIoiBiCKBKIiBEIiIiIGDKCKBgiUigYMlh4GCJSKBgygigYiIiIEQIoiIGIgiiIgYIiIiKBh1REMoGCIiIigYiIiIiBECiIgYgigYMlgYNSgYNSgYNSgYMliBgiJ4GIIigSiIiBEIiIGCKIiIiIiIgYJSUlJSUnKBgjMzMiIiIoGIiIiIiIiIgRAiIiKIgYiIgoOBgiKIg4GCIlKDgYJSJSKBiIiHgoEiIoIigSIiiIiBEIiIiIiIGCIiIiKBgog4iCgYKCVSMoGCMnWIKBiIiCIigSIiiIiIEQiIiBgiKIiBgoKCOBgiIlKIgYiChTIoGCIociKBgoKIiIgYIigYiIgRAoiIgSgiKBiCIogYJVUoGCNjKBiIiIgRCIiIiBgiIigYdVUogYIoMzgYgiIogSiIiIEQIiiIgSIoIoEiKHKBiIhTgYIiU4GCglOBgiIogYiIiBECIiKIiBIiIoJ4EiIigigYiIiCOBgiJSI4GCJVgjgYIiKIiBiIIoEiiIgRCIiIGHU4GIiIEQiIiIGDMygYIlKBgoWIGCJSgYInKBiIiIEQKIiIgYgiIoGCKIKBgoJSgYIkI4GIKHiBKCIoEoiIgRAiiIiIgYiCIiKBglJSIoGCiIKIiIGCcjIyIoGCIoiCIoGIiIKIiIEQiIiIGCJygYIoKIGCOCKIGCNVUoGCOCIoGIiCIoEiKIiIEQiIiIGCcigYJYKBglIoGCUogYiCiIgSgigigSgzMigSgiIigSiIiIgRAiiIgYiCKIiIGCJSJzOBglIiKCgYiCiIgoEigiIiKBIoiIiIgRCIiBgiiIGCIiiIGCJUcoGIgjgoEigiIoEiiIiIEQIoiIGIgngYIlKBgiQ4GCJDgYIlKBiIIoEiiIgRAoiIgYgyOIGCQkKBgigigYJSUoGIJyiBKIiIEQIiIiiIiIEiIiKCIigSKIiIIyKBiIIoiDIoGCUiUiMogYJ1UoIygYgiIoiIgSiIiIEQiIiIiBgnKCKBgiIiKBiIiFKBIiKCKIgSiChSM4EogoIoiBIiKIiBEIiIgYIiiIGCJSKBiEIygSgiJ4EoiIiBECKIiBIoIoEihygSKCKBiIKIiBgiIkKBgiUiKBiIiDKBIiKIiBEIiIGCKIiBg0UigYI1goGIJyKBKCIogSiIiBEIiIiIiIiBgiIiIiIoGCiIiIgniBgoIiIiIigYKCJSIoIoGCVSiIiCKBiIIoKCMzgSKIiCgiIoEiIiIoiIiBECiIiIiIEoIiIiKBiHiIiCgYIoIigoGCKCIlOBgiiFiDgYhYgig4GCIlIoOBgiKCKIgYiIiIgRCIiIiIGCIiIoGCiIgoGCgzN4GCiIWIgYKCIiKBgiVSUoGIiCIogSIoOIgSIoiBECIoiIiIiIGIiCIiiCKBgiVVMzNXgYIiIiiIIoGCIoiIKIiBiIiBEIiIgiKIiBgiKIiII4GCIiIiUiiIiIiBiIIoiII1IiJygSKCKCKCKIiCIoEiiIgiiIgiiIiBECiIiIGIIiKBgiJSgYIlUoGIgjiIiBIog4JygSIoMiUoEiKDKIiBIiiIgRAiiIiIEigiIoEigiUoEoiIUoGIJSUoGDMzgogYIiInKBiCKCIoEoiIiIgRAiKIgSIoeBKIhYiBiCIyKIGCKCgigYKCIoKBgoIigoGCgiKCgYIoKCKBiCUlKIEogyOIEigiKBIoIigSKIiIEQiIiBgiKIGCgigYdUOIGIIjKBKCWCgSiCIoEiiIiBECiIgSgiiIiIGIIiJSKBgjglIigYI4WIiIGCNygYiIiBEIiIIoiIGCKIiCKBgigigigYIoIiJYgYIjI4UigYcogoJSgYIiMoIigYiIiIiIgRCIiIGCcoiIGCIiIoGCUlUoGIWIIoGCIoiIGCMyKBiDMigSiIIoEiKIiBEIiIiIiIgYIiIoIiiIGCV1KCMiOBgogoiCiCgYKCIiIigoGCgiKCIoKBgoiIiIiCgYIiIiIiIoGIiIiIiIiBECKIiBKIIoiIgSgiUicoEoIlgiKBiIgoiIgYIoIigYIiJSgYIzgigYIjiIgYIogYiIEQiIgYIoiIgYJVJSgYIiIigYgogogYMzh4GCiIKIGCIiIoGCKCIoGIiIiIEQKIiBKCKIiIiBKFJ4IiOBiChVIiOBgiUiiDOBgiKCiIiBiIIigSKIiIEQKIiIiBiCMzOIGCIoiIiBgiJSUngYiCJSUoEiiIIiKBIiKIiIgRAoiIgYgiKBgiIoiIgYIoOCIoGHKDglKBgig4IogYIiKCKBiCKIVYEogiIigSKCKIiBIoiIEQiIiIiIgYJyMzMoGCIoiIWIGIKCJSUoEoJSIiIoEoIiiIiIEoiIgRAoiIiIGIIiIogYIlJSKBglJSUoGIKIgoiIEociMzM4EogiIiiIEiiIiIgRAoiIiIiBKCIigigYglhYIoGCI1NyKBgiOCIigYiIiIiIEQiIgYIoiIiIGCIyiCOBglgiIjgYgogoI4EoIiKCKBKIiCgigSKCdSiIEiglUoEigiIoEiiIiIEQKIiIEoIigSgjKBiCQoGCJIgYIniBiCUoEoIigSiIiBEIiIgYIiiIGCMiKIGISFIoGCOCUoGCeIKIGCIiKBiIiIgRCIiIgYIiKIGCUlKIGIJVIoEoKCIoEoKIKIEoIjI4EoJzI4EoIoiIEoiIEQiIiIiBgiMzKBgiiIKIGCKCUigYgodSKBKCglIoEoKIgoiIgSgiIiIiKBKCIoiCIoEoiIgoiIgRAiIiIoiIEoiIiIIoEoJSIiIoEoIiUlIoEoKIiIiIGIKCMigYIoKCKBgicjKIGIKCgoEoIiMoEoiIiIEQIiKIiBIoiCKIEoglIigYglIoKBgnhVIoGCMyKIgYIziIGIiIEQIiIoiIGIiIgigYIiIiKBgiMzI4GIWIiIgYJSKBgiJYiBiCJSKBKIJyKBIoiIiBECIiKIiBKCiIIoEoKCIigSgoIoKBKChSg4EoKCKCgoEoKFKDgoEiKCKCgoGIiFKDgoGCciIigoGCIoIogoGIiIiIEQiIiIiIgYIiiCIoGCUiV4KBiIgoJSgSIoOCKIEoKDglgSgoMiKBKCgyIoEiKIiIgRAoiIiIgSgiciKBKCUiUoGIgogoiBgiUzUigYIiMyIoGIiIiIiBEIiIiIiIgYIiI4gigYJVczVSgYIiiDIigYiIiIiIgRAiiIgSKCKCIiiIiBIoIoIiKCIoEigiiIiIOCgYiIIlIiIyKBgiJVgoiDgoGCIoIigoIigYiIiIiChyiBIiIiIiKCKBIiIiIiKIiBECiIiIiIGIIigiKIGCIigiIoGCJSglIoGCIkNCIoGIiDc4iIGCIkNCIoGCJSglIoGCIigiIoGIIigiKIEoiIiIiBEIiIiIiBgnKCIoGCUlIigYhYiCiBgiMzIoGCIoIigYiIiCKBIiIoiIEQiIiIiBhyIiKBgjVTKBglM1KBglM1KBgjVTKBgiIiKBiIiIiBECKIiIgSKCIigSKCIigYiIgigYIig4iIgYIiV1IigYiIg4IigSIogogogSIoIiU4EiKCIoiBIiiIiBECIoiIEiKCKIiIiIGIiCUlMzM4GCIlIiiIiIGHiIKIgYIlIoGCUoKBiCgigSgiIoEoiIiBEIiIgYIiiCiIgYIlKIgjgYJSIlIjgYgliIiDgoiIGCUigoI4iCKBgiIoKCOCJygYiCKCgiIiIoEiiIgogiIiiBIiIiIoiIiIEQIiIiIiIiIiiIiBIiIiIiIiIigiKBiIiIgiiIiIgoKBgiIigigigiIiKBgiciiIgigiIiiIgYIoIiIzM4goiIIoGCIiiIiCiCVSUlKBiIiIIigiIiIiIigSIiIiIoIoiIiIiIEiIiIiKIiBEIiIiIGCeCKBg1IigYMoJYgYNYIigYMoJSgYIoIigYiIiIgRAiiIiBIoIigSKCgoiIiIEigiQigiKBIogogiKCgSKCIiKEIoGIgoKCgoiBgiSFYiKBgoIiiCiBgiKCJCKBiIiIgoKBIiIigiKBIiIiiIiBEIiIiIiIgYMzOCIigYIoIiVSgYInIogigYIiIohSgYiIiCJSgSIiKCIigSIiKIiIgRAiiIiBIoIyiBiIJSKBgjJYeBgoUjKBgiUoiBiCMoEoiIgRAiIoiIgYiIgiKBgiIlIoGCJYWHgYiCgiKBIoIzMoEiiIIogSIigigSIiiIgRAoiIKIiBiCKIgiiBgiKCgiKBgiQyNCKBiIUiJYiBKCInIigYiFIiWIgYIkMjQigYIigoIigYgiiIIogSiIgoiIEQKIiIiIEoIiIigShyIlKBiCiIUoGCMzM4iBglJSUigYiIiCgoEiIigiKBIiIoiIgRCIiIiIGCIiIoGCVEQoGCQiQoGCQiQoGCREMoGCIiJ4GIiIiIEQiIgiIiiIiBgiiIIigiKIGCIigiKFJSgYM4KIiIKCKBgiciIoJSUoGDOCIiIiIogYgiKIiIiIgSiIiBECKIiIiBgoIiIoGCgoKCgSKCclKBiIKIgoGCIoiCgYJSKIOBiCUig4EoglIjgYKIJYOBiCiCg4GIgoIigYiCiIiBECKIiBIoIoEigliIgYiDIyKBglKCUoGCIyOIgYiIUoEiKCeBIiiIgRCIiIgYIiKIiBgiIjM4GCIiMzgYiIiCKBIoIoIoEiglUogSKCdSKBIoJVIoEiiCWCgSIoIiKBIiiIiIEQKIiIGIIiiIgYIlVSKBgoIiUoGCIliCiBiIIoMigSKCKCIoEoiIgoiBKCIoKIEoJzMzgSgiIiKBKCIoIoEoiIiIgRAiKIiIEiiCIoGIgigoGCIiMoGCKIKIiIGCIyMoIogYIoJyUiKIgYiIgygiUigSIiiIgiUigSIiIiiCUogSIiIiKCKIEiIiIigigSIiIiKIiBEIiIiBgiIoiBgiglKBgiUnKBiCiCiIiBgigzMzOBglJSUlKBiCIoiIiBKIiIEQIiKIiIGIiIIiiIgYIiIoIiKBgigzMzIoGIIogoKIgShVdVUoEoIiIoiBKIiIiBECIiKIiIEiKIgiKBiIgzMzgYJ1VVUoGCIiKCiBiIiCIoEiIoiIgRAoiIKIiBKCKIgiiBKCIiInKBiDOIgiKBgiIiKCKBgzOFIoKBgoglUlKBgiUiIoiBiIgiiIEiKIiBECiIiBiCIogYIlIogYJSUiiBiIWCMogSKCgjIoEogogyKBKCciMogSgiKCKBKIiIiIEQIoiIiBIoIiKIEogogigSglUoKBKCdSgoEoIiKCgYiIKCKBgiMzKIGCIiKIGIiIiBECIiIoiIGIiIiCKBglIiIiiBgliIiCKBgieCKCKBiCiDMiKBgigjOIiBglIoiBgliIGCKBiIgRAoiIiBKCMigYhTgoGCJCKBgjOIgYhSgoiIgYgogoIigYIoiIKCgYIiclJSgYgigiIigSiIiIiIgRCIiIGCIoiBgoUigYJSIoGCUlKBglgigYIniIGIKIiIiIGCIiIjM4GCIiIiIoGIiIiIM4EiIiIoiIEQiIiIiBgiIiKBglJVKIiIiIGIiIJ4gyMigSIihSKCMiKBIiKCIoMjKIEiIoWCiCgoEiIoIiIiIoEiIoIoiCKIEiIoIoKIiBIiKIiBEIiIiIiIiIgYIiIigiIigYJXVSgjIzgYgogoiCiCgSgoIiIiKCgSgoIigiKCgSgoiIiIiCgSgiIiIiIigSiIiIiIiIgRAiIiKIiIEiIiKCIogSIiIoJSKBiIiIiCh4gYIyKCUlIoGCIiIiJYKBgzOIiIIigYiIgiKIiIEQKIiIiIiIGIMzMzMigYJVVVVXKBgiKCgoKIGCgoIiIoGCIoiIiIGIiIEQiCiIgYiIIoiIEoJSUyKBiCgiNSgYIiiDiIGCJSIygYJygiKBgiiIiIGIiBECKIiIiIgYiCIoIigYJCUjIygYIiUogogYiISCIoEoInIoiBKCIoiBKIiIEQIoiIiIiBiIJygiKBgkJSQzKBgiJSgiKBiIhIIoiBKCIiKIEoIiiIEoiIgRCIiIIoiIgYIiiIgzKBglVSIiIoGCIlgiMygYiCeCKIKBIoIogiIoEiiIiIiIgRCIiIGCIoGCMoGDc4iBiDgigYIlIoGCUiKBiFUigSgiiIEoIoEoiIEQiIgYJ4iBg0IoiIgYM4VSUoGIIiIiKBKCgogigSgiKIiIEoiIgRAoiIiIEoIjI4iBKCMjIygYiCiIgoGCJ1IlKBgiVSJSgYiIIiiIEiKIiIEQIiIiIoiIGIiIiIgigYIiiCUiKBgiUiKIIoGIgoMjgogSKCgyOFiBIoKCIoIoEignJSIigSKCKIiIiBIoiIEQiIiIgYIiIoiIgYJVh4gzgYKCIiIigYIlKCgigYiIJSIzgSIoiIiIgRAoiIiIEoIiIoGIKIhYgYNSInKBgjMoUoGDiCJSgYIiKIiBiIiIEQIiIiKIiBIiIiiCKIgYiIIoIlIoGCKIiCUlKBgiIzgoUigYIoIiciiIGIKDOCiIEoKIKCgSgiIiKBKIiIiIEQIoiIGIgigYIiKIgYKCMjgYJyMziIgYKCgoIiiBgiKCVSIoGIiIIlJSgSIiiFKCiBIiIoIiKBIiIoiIiBECiIgYgiiIgYIiMzgYIiMzgYIigogYIihyiIgoiIGIiIJSIoiCKBIiKCKIUlIigSIoiCIiJVIoEiKCUiiCIoiBIigiIoiIiBIiiIiIEQiIiIiCiIiBgigiKIgiKBgiIiKIJSKBg4JyiCUiiBg4IiglIogYOCIiUiiBgyiCiIiBiCIigSiIiIEQIoiIiIgSKCKCMoEigiI0OBIoIoJCgYiIWIOIGCIiIlKBglKIJSgYIieCIoGIiIiIiBECKIiBIoIoEigiiIgYiFNSKBgiNzIoGCJTWIgYiIIoEiKCKBIiiIgRCIiBgiiIgYJSIoGCOCKBglgogYIyKBiIgoEiKCgSiIKIgSgiUigYgoWCiBglJyUoGCM4MygYiCIoiBIoiIgRAiKIiBKIgiiIiBKCVSgiKBKCUjI1WIEoIzKDJSgYiChEIyKBgiMkSCiIGCUjgjMoGIVTcyUoEoIiglUoEoiIgiiIEiIiiIgRAiKIiIEiKCcoEiiCIogYiDVVOIgYIlMzUigYIlODUigYIlMzUigYiDVVOIgSKIIiiBIigiKBIiiIiBECiIiIgYgiMiiBgjVVMoGCUyNSgYNSclOBglMjUoGCNVUygYgiMiiBKIiIiBECIiIiiIiBiIiIiCIoGDIiMieDgYIoiCIiKBiCUigiIoEoJSIoiIgSglgigSiCgigSKCIogSKIiIEQiIiIiIiBgiMigiKBgoMiciKBgigzgoiIiIGIIoglUlJSgSiCIiIiIiKBIoiIiIiIiIEQKIiBiCKIgYdSIoGIglKBKCKIiIgSgiUzM4EoIoKIiBKIKCgSglgoEoIiKBKCKIgSiIgRAiIiiIgSiIiCKBKCIiJYiIiIGIKIIzgiMzgYJSVYUiciKBgiIiIiiIIoGIiIiCKCiIgSIiIoiIEQIiiIgSIoIoEoiCKBiCJSgYIigoGChVKIiIgYKCIoIiOBgiUiciI4GIgiiIgzgSKIiCKIiBEIiIiCiIgYIiIoIiKBg4gihYgigYIigiIigigYUigoiCKCKBgoIiIigigoGCgoiIIoKCgYMnIiJSQjKBiIiIiIiIiIEQiIiIiIiIgYOCeCKCIoGDhVIiglKBg4IoJYIigYOCWCKCWIGDgiglgigYOCWCKCWBgzIoJSIoGDMigigigYiIiIiIiBECiIiIiIiIiIiIiIiIiIgSgiIiIiIiIiIiIiIiIigSgoiIiIiIiIiIiIiIiCgSgoIiIiIiIiIiIiIiKCgSgoKIiIiIiIiIiIiIKCgSgoKCIiIiIiIiIiIoKCgSgoKCiIiIiIiIiIgoKCgSgoKCgiIiIiIiIigoKCgSgoKCgoiIiIiIiCgoKCgSgoKCgoIiIiIiIigoKCgSgoKCgoKIiIiIiIgoKCgSgoKCgoIiIiIiIiIoKCgSgoKCgoiIiIiIiIiIKCgSgoKCgiIiIiIiIiIiKCgYhYKCiIiIiIiIiIiIiCgYMnKCIiIiIiIiIiIiIigYiIiIiIiIiIiIiIiIiIgRAiIoiIiCIiIiIiIiIoiIGIiISCKIiIiIiIiIiIIogYIiiIIiIiIiIiIiIiIiKBgiIiIiiIiIiCKIiCKIIoGIgoiIIiIoIoiIIoiIIogYSCgjgoKCgiIigiIigiKBhIKCKCIiKCiCKCiCKIIoGIgiIoiCiIIoKIIoKIIogSgiKChIIiIigiIigoIiKBKCIoKIgiiIiCKIiCgiIoEoiIgiKIiIIoiIiIKIiIgSgiKCgoRIIiIiIiIiIigYgoKCIoRIIoiIiIIogigYIiKIiIiIgigiIoiIgoiBgoIiIiIiIiKCUiIiIihIGCIoiIiIiCKIgniIiCKEgYiIgiIiIoiIKIiCIoiIiBEA==")
  6. (define sasquatch-data "IiiIEiiCgoiIEogiiIIoGIJSIiIoGCInUoIoGIgliIIoEigigzIoEogog4KIEoIiIiiBKCIiKIEoiIiIEQKIKIiIGIKIIygYKIJTKBKIJSIoGIJXKIgYJSKIGDMogogYIigogYiIgoEQIiIiIiIoiIgSIiIiIiiCIoEiIiIiIoIiKBIiKIiCKCUogSIigiiIhSWBIiKCIiJSUoEiKIKIJSUlgSIoIjgiUlKBIigiOCIiIoGIiIKIiIiIgYMzMnIoGDMzIiKBiCKIiIgSiIgRAiiIiIiIiBKIIiIoIngYiCUlWCIoGCiFIiJVKBgigiUoIigYiIiCiIiIGDMjNShIgYIzIiKIgYIjOIiIGIiIiIgRAiiIiIiIiBKIIiKCIiiBiIJSWFJSiIGChSUoJSWCgYJSIzgzIlKBgiUzODM1IoGCUjMkIzJSgYiIiCcoiIiBglIzIiMyUoGCJTM4MzUigYJSIzgzIlKBgoUlKCUlgoGIglJYUlKIgSiCIigiIogSKIiIiIiIEQIoiIiIiIgYiDIjUyI4iBKIJSJSJSiBIogjNTMogSIohYWFiBIiKDUlOBIiKCJyKBIiKIgoiBIiiCUlKIEiKDIlIjgSIoiCMoiBIiIoiIgRAiIiIiIiiIiIEiIoiIIogiIoEiiIIoIoIogoiBiIIiKIiCgiJSgYIlJyMzQzIlIoGCUlIogoiCIoiBiIKIgiKCiIiBKCIiIoiBKCIoiIEoiIgRAiIoiIiIEiIoIiIogYiIgoiCKIGCIiIigiiBh1REMohSgYIoIiKII4GIIogiglKBKIIoiINTgSKIIiIiIoEiKIiIgiiBIiIiIoiIEQiIiIiIGDIyIigYNTIyKBiCiIcoEoIlIogSglUogSgiUoEoIoiBKIiBECIiIoiIiBIiIigiIoEiIiKCciiIGIiCKCIiIoGCKIiDODhYiIgYJSUogzMiIiKBgiIiMzM4VSIoGIiIgohYgoiIgSIiKCJSIigSIiKIiCiIgSIiIigigSIiIigiiIiBIiIoiCUiIoEiIigiUlIigSIiKChYKIiBIiIoIiIoEiIiiIiIgRAiiIgYiCKIiBgiJyIogYKDI4OIgYJVUlVSgYiDg4OCgSiCIiIigSKIiCKIgSIiKIiBECIiIiIiIiKIiIEiIiIiIiIigiKBIiKIiIIiIoIiiIiIgSIigiKIiIKCIjMzMoGIiIKCiCKCgiIigoKBglJSUlJSgogiKIJSgYKCiDMzM4iIKIglUoiBgiIiKIJCgiIoKCJVIoGIiIiIiGVSIogoIiIigSIiIiIoNSWCgiiIiIiBIiIiIig4giKBIiIiIiiIiIiBECIoiIiIEoiCIiKIEoIiiIIoEoIiIigoGIhYcigoGCIoiIgoGCIoIkMoGIVYIkOIEoIiIkM4EoiIKDM4gSIigoVVKBIiKCIlIoEiIoiIgigSIiIiKIiBECiIiIgYgiIigoGCJDU4GCJDg4iBgoV1UigYIiiCgoGIiIgiKBIiIoiIgRAiKIiBIihygSKIIogSKCNYiIgSKFMoIigYiDNYKCgYIjNSJSgYJSUoKIgYiIgoKBIiKCIoEiIoiDgSIiIoiBECKIiIgSiCgiiIGIKCIoKIGCgiJTgoGIIlJTgoGCiIiDKIGCIiJTJ4GCIiJTKIiBiIKChIKCiIEiiIgjUiIigSIigiNSIiKBIiKII4iIgoEiIoKDUlIogSIigoNSIoKBIiKIKCIoKIEiIiiIIoKIEiIiIoiIiBECIiiIiIiIiBIiiCMjIyMoiBIigiVSUlJSKBIigiKIiIiIKCiIiBKIiCiCJSIiKCgiKBKCIigiUlKCKIgoKBiCKCgiKIiCIiJSKBgzMiiIiCUiiIgoiBgzMnIiIlIiIoIiKBgzOIiIiIiIglIlKBiIiCIiIiIiiIiCKBIiIiIiIiIiIiKIiBECIiiIgYiIgigYIiIigYUlJSgYNDQ0gYQ0NDgYJSUlgYMzMzgYNDQ0gYUlJSgYJSUlgYUlJSgYIiIigYcoiIgYiIEQiIiBgiKIiIiBgiUiIiKIGIKIiIgiiBKCgiIoKCiIiIiBKCgogiIlIiIiKIEoKDIih4iIiCUiiBKCg4IoiCIiiCUiiBKCgyIigiIiKIJSKIEoKDgiKCKIIiiCUiiBiCg4IogiiIIiiCUigYIoOCIoIoSIIiiCIoGCIjgoKCKISIIiiIiBiIiIIigiiIiIEiIiiIiBECIiKIiBIiIoIoGIiIhTgYIiUlOBgldTM4GCVVM4gYIlIzgYiIiIgRCIiIKIiIiIGCIoiCMlIoGCIlJDMoUogYglgjNCUieBKCJSMoiCIoEoiIiIgoiIgRAiKIiIKIiBIihyOIgiiIGIiCJVJSIigYIigjIyiCKBgiUoIyMogoGIIyJSVSKCgSgoIoiDIoKBKCiIgoiIgoEoIiIiKCIigSiIiIgoKIiBIiIiKCNSgSIiKIiCIoEiIiiCiIiBIiIiiIEQIiIoiIiIGIiIgiIiiIiIGCIyM1hTMjIoGCJSUiMiUlIoGIhYiIeIiFiIGCJSUiMiUlIoGCIyM1hTMjIoGIiIgiIiiIiIEiIiiIiIgRAiIiIiiIiIEiIiIigiKIEiiIiIglIoEiglJSUoUoEigiKDJSIoEoiIODgliIEoIiMzMygSgiUjOIWBiIKIIzIoGCJThSglgYIiUiKCKBiHIoIoiIEogiiIgSKIiBECIiIiIoiIgSIiKIiIIoiIgSIiKCI4UiJSgSIiKCgyVVJyiBIiIoIjhSIlIoEiIiiIOCJSUigSIiIigyKIUoiBKIiIiEiINSgSglIiIzM4iIGIKFhVMzOBgiUlIigzgYIiIlIoM4GCKIiIiIiBiIiBECIiIiIiKIiBKIiIiIiIIoEoIlJSUlIiiBKCKCgoKChYgSiDIyMjIyOBIoWCgoKChYiIGIgyMjIyMjIigYiFgoKCgoJyKBIoIiUlJSUiiIEigiiIiIiIiBIoiIEQIiIiiIiIiBKIiIgiIiKIiIiIiBiCUiIiiIIiIiIiKIGCUlKIKCKIiIiIgigYIlIoIiIiIiIiIoKBglJSgoIoiIiIiCgoGCJSKCKCgyMjIyKCgYJSUoKCIiMjIyOIKBgiUigoKCMjIyMoIoGIUliCgiiIgoKCIogSgiKHKCIiIigiiIgSiIiIIoiIgigigSIiIogiIigigigSIiIiiIiCKIIogSIiIiIiKIIiKIEiIiIiIiKIiIgRAiIiIoiIiBIiIiKCIiiIEiKIiIJSUigYiIIig4IiKIGCJShYOIWIiIGCVTI4NSIiIogYIlODg4iIgiiIgYgiMzMzMngiIigSiIhSg4iChYiFiBIoglIjIoIlJSUoEiKCUoiCIiIiIigSIoIigoiIiIiIiBIiiIiBEIiIGCKCIiIiIiIiKIiBgiiIiIiCiIiIgigYIiIiIiiIIogiUoGIOIiIgjMyIiKDKBKDgiIiKCOCIoJSgShVVYVVKDgiKIMoEoOCUiJSgzIiIiiBKDgiUiUiKCgiKIEoIoIiVSgiKIiIEoMiiFIoiIiBKDIigiUyKBiDJyiIOFKBgiIigoIiKBgiIogoiIiBiIiIEQIiIoiIgSIiKCIoEiIigiKCIiIiKIiIgSIoiCKIKIiIIoIiKIgSIoIiKCIiIiKIKFUigSKIUiKIiIiIiCUiUigYiCKIIzMzMzM1IoVXgYIiKCVYKIiIiCUiIigYIiUigzOCIiKIgiiIgYIigiJSiIKIIiiIgYiIiIgiIoEiIiIoIiKBIiIiKCIigSIiIiiIiIEQIiiIiBIigiKIiIEiKCVYIiiIiIEoiDIjJSgiIoEoIjiDiIiIgoEoJTIjKCIigoGIOIVVWFVSiIiIEoMzIiIyIigiIoEoM4g4iIOIgoh4EogoJSUlKCUlIoEigoIiIiKCIiKIgSKCg4g4OIiIgigSKCJSglMiIiUigSKCIiiIOIKIhYgSKIiIgoIiIiIoEiIiIiKIiIiIiBECIiIiIiIiIiIiiIiBIiIiIiIiIiIiKCIoEiIiIiIiiIiIiIJSgSIiiIiIKCIoIigiKBIiKCIigoJSIiJSh4EiiIKIKIiCiIKIKIgSKCIlIlIiIoIigiKBIoIlIlKChSglUlUoEoiIiCJSKCKCIoIigYgiIogoiIiIiIiIiBgiOCIlKCIigYMyIigiiIiIGDM4iIIoGDMzgoiIGDMzgYiIiBECIoiIiIEiiCIiKIEigiiIIoEigoglIoiIEigoI4IiU4iIEigoJCSIg1IoEigoJIIiiIKIiIEigoJyQkIoKCIoEigoIoiChIIkIoEigogoIkJDgoKIiIiBIoKCKCIiIzM1IlIigSKCgoglgliIhSIiIoGIhCIkIiIoIiKIiIiBgiKIiIiIiCiIgYIiIiIiIiIoGIIoiIiIiIiBKIiBECIiIiIiIoiIgSIiIiIiIoIziIiIiBIiIiIiIigjMzM4IoEiIiIiIiKDMohVIlgSIiIiIoiIg4giJSKBIiIiIigiMzOCUiVYGIiIKIKCIzI4UiUigYIigiIoKIOIgiVSWIgYIiiIIoKIKCJSKCIigYJyIoiIKCKCgoiFKCgYIiIiIiIiKCJSIiUigYIiiIgiIiKIgoiIVYgYIogiiIgiIigiIiIoGCKCIiIogiIoiIiCKBiIgiIiIogiIigoJSgSIiIiIiIogiIoKCIoEiIiIiIiIoiIiCiIiBECiIiBKCIoGIKCiIiBgiIogiiIiIgYKCIiJSIiIoiIGCIoiIJSJVKCKBiIiCKCVVJShSgSIiIiglIlJSUoiIiBIiIoiFIihSUiUiIoEiIiglJVIiIiiIJyiBIiIoIlJVVYiIMzIigSIiKCJSIiJSgyODM4EiIiiIJVVSIjMzMyKBIiIiKCIiIogzgzMzgSIiIiiIiIKIMzM4iIEiIiIiIiKCIjMzOCIoEiIiIiIiKIiIiIiBECIiIiIiIiIoiIgSIoiIIiIiIoIiiIiIEiKCKCIiIiKCUiIlKBIigiiIgiIigiWIUiiIEiKCIiKIiIiIgiglJSgSIoIiIiMzMzMzOCIlKBKIiIgogzM3iIIoJVIoEoIiKCiIiDiCgogiJSgSgiIiIiIiKCKFIlUlKBiIgoIoiIgoIoIlIoIoGCIigoIiIigiiIIiiIgYIiIigigiKCIiiIiBgiKCIiKIiIGIiIIiIoEiIoiIiIEQIoiIgiIiIoiIiIiBIoIigiIiIoIiIiKBiIKFiIKIiIKCgoKIiIGCUyMigoIiIyMjIyIigYKCgoWIgoKCgoKCgoWBgiMjIyMiUlJSUiMjIoGIhYKChYiIiIiIhYKFgSKCIyMiiCIiIiKCIyKBIoiFgoWIiIiCgoWChYiBIiKCIyNSUlKCIoIjIyKBIiKFgoKCgoKIiIWCgoKBIiKCIyMjIyMiUiMjIyKBIiKIgoKCgoKCgoKCgoKBIiIiglJTIyNSUlJSUlKBIiIiiIiCgoKIiIiIiIiBIiIiIiKCJyKBIiIiIiKIiIiBECIiIiIiIiIiIiIiiIgSKIiCIiIiIoiIiIgigYiHKIIiIiIoIiIigigYIiIoIiIiIoKIglJSgYIzM4iIiIiIIigigzgYIygiiCUiJSWCgigzgYiCgiIiUiVVKCglJSgSKCMzglIlUiKCgigigSKCIzglIiUlKCgogigSKIMzgiUlUlKFgoiIgSIoIiiCUiUlIigoEiKIgoiIiCKIgoKIgSIoIyIogoiIIyIjKBIogiIygiIigoODgoEigiMiKCgoKCIoIigSKCMoiIIiIoiIiIiBIoIogSKIiBECIoiIIiIiIiIoiIgSIoIoiIiIIoiIIigSIoJyJSIoiIIiUigSIoIoiDgiIoIlUigSiIOIJShSgiIoIogSgiM4JSMzgoiCKIEoJSMzWIOIIiIogSiDiIUlMyIlUogSKDIoMjiIJSUoEigiUzOIKIKCKBKIKIiIgiKCIogYgiKIIiIiiIiBglUigYIiUoGIglKBIoIogSKIiBECIiKIiIiBiIgoIiIoGCKIglVSgYIjMzUiiIiBgiM4JSKCJ4GIhYhYiIKCiIiIEoNDMzUiUiiIIoiIgSgjOIiIIogiJSUiKBKDMzQzMygiVSKCUoEoiIiIiIKFUogoIigSIiglOIgiIiIiUiiBIiKCIiIiWIhYKCKBIiKIiIIiUiIlKIiBIiIiIoiIIiKIiBIiIiIiIoiIiBECIoiIgSIoIigSiIIiiIiIiBiCJEQiIoKCgSgiQkIiKIKCiIiBiCJEQiKIKCiCIogSiIIiiIgoKCgiKBIigiKCgoKIiFJYiBIogiKIKCiCJTM1KIEiKIiIKCiCIiNzIoEiIiIigoKCIlMzUogSIiIiIoiIiIhSWIgSIiIiIiIiIigiKBIiIiIiIiIiKIiIEQiIgYIoiIiBgiIiIoiIGCUlIigiiIiBiIiCiIIiJSgSgigiJSKCIoEoIiIiiFiIiIEoJYiCKCMzgoEogoeFKIODgoEoIiKCIoMzgoEoJSiFJYMziIiBKIgogiKDMyIigSKCKCJSUlKCgoEigliIKIiIgoKBIoIiIiIiIiKCgSKIiIiIiIiCIoEiIiIiIiIiiIiBECIoiIEiiCKIiIiIiIiBKIIiIzMzMzMygYgiIoIoiIWIgogYIiIigoIiIigiiBgiIigiglVSKCgoiIgYiIgigjI4KIgjIyMogSIigiJTI4IoJVJSUngSIoiIiIKIgoIiiIiIgSIoJSIlIigogoiBIigiIlIlKCKCiCgoiIEiKCWIgoiIIoKCgogiiIgSIoIlJVUigogoIogiIiKBIiiCIiIiKCiCiIglVSIoEiIogoiIiIIzMzIiIoiIgSIigiUiIiIiKIiIgigSIigiKIiIgiiCIiiIgSIiiIiCIiiIgRAoiIiIiIiIGIIiIiKCIoiBgiUlVVUiIigYiCUiJSKIgoEiglJSWIgoKBIogiJSiCKCiIEiKIiCIoiIIigSIiKIgiIiIoKIgSIoiIIiiIgiIigSIoclIiiIIoOCiIiBIiglJSiCgiMzMiIoEiKCVSiCKIiDMzMigSKIJSKCIiKDODiCKBIoJSUogiIoMzMzIoEigiUlKCIigjIzgogSKIIlIoIiKIKIOCgSIoIiKIIiIoIiIigSIoiIiCIiIoiIiIgRAiiIgiIiKIiIiIEigiiIiCiCIoIoEigiIlKIglIlIoEigiUoKIIiJSIoiIEiiIIoIiKCiIWIIoGIiIIoiCKIiCIlIoGCIoJSJViCMyiFIoGCJVIiglIiIiIiKIGIIoJYgiiIgoKIiBiIKCKIUoiDODOBgiKIgzIoIjMzOIgYIigiQ4iCgigzIoGIVYIkOIcoIoIiKBKCIiJDKIiCKIgigSiIiIIigigiIiIoEiIiKIiIIogiIoiBIiIiIiIiIoIoiBIiIiIiIiIoiIEQIiIiiIgoiIiIiIiIiIiIEiiIiCKIgiIiIiIiI1IigYiCJTIiIiKIiIWIiCIoKBgiIlMiiIgoIiIjIiiII4GCJSU4iCiCgoiIKCJTglgYiCJTiCgoKCgigiglKCKBIoiIiCgogoUlKIIigygoEiIiIiiIiCg4MigiiIKCgSiIiCKCIoKIgoiCIoIiKBKISIIoIiIjgigiKFVCKIEoSIgoiCiCiCiCgiODKIEoiEgoIjUjglNTiCiIKBKISIKCg4iIIiIoJTIiiBKEiIKCVSIoiCiIIiiCKIEoiEgoKCIjJXUiiIiIgygSiIiCgoiCiIg4IiIiIlKBIiIiKCIiKCKIiIiIiIIoEiIiIoiIiIIiIiIiIiiIgRCIiIiIgYIiIiKCIiiIiIGCIlIiiIiIIiKIgYKFhSUlIoJSIiKBglIiV1IlJSUlUoGCUlglKCIiJVUigYIlJSiIiIgiKIiIGIIiKIgzM4iIgjOBKIhVglVVKDM0IzgSKCIiIiIogiKDMoEigigihYiDMziEiBIoIiiDNTIzMyIigSKIgjQiI4MzOCIoEiIoiIiIiIiIiIiBECIoiIKIiBIogigoIoIoiIiIGIgiKIhSiCgiIiiIGCJSIiIlKIgiIiIoGCUlKIhSIoIoIiIoGIgoiCgiIoIigiIoGCJSgiiCiIIiKCiIGCIiUiKChyIiIiKIGCWCgoiCiIIigiKBgiUoKCUlKCKCKCgYgiKCIiUigoMiIoEogigoIiiCgzIoiBIogoKCKIKDMyiBKIgoKIiCgzM4gSgiIiIiIlNDiBKIiIiIiIgziBIiIiIiIiiIgRAoiIiIiIiIiIiIiIiIEoIoIoIoIoIoIoIoIoEoJYUoJYUoJYUoJYUoEoIoIoIoIoIoIoIoIoEogoKIgoKIgoKIgoKIEoIoIoIoIoIoIoIoIoEoIiIoIiIoIiIoIiIoGIKIgoKIgoKIgoKIgogYIigigigigigigigiKBgiKCIiKCJyKCIiKCIoGIIoKIgoKIgoKIgoIogSgiMiMjIyIjIyMiMigSiIiIiIiIiIiIiIiIgRAigoKCgoKCgoKCgoKBKCgoKCgoKCgoKCgoKBgiI1IiIyUyIyUiI1IoEoJYKFgoKChYKCgoIoGCIyIyIiUyIyI1IyIygSgoWCgoKChYUlgoWCgYIyIiI1I1IiIyUyIyKBKCWCgoKCh4KCgoKFKBgiMiNSMiIlMlMiIiMoEoKFgoUlhYKCgoKFgoGCMiMlMiMiNSIiMiMigSgigoKChYKCgoWChSgYIlMiJSMiNSMiIlMiKBKCgoKCgoKCgoKCgoKBIoKCgoKCgoKCgoKCgR")
  7. (define base64-charset (string->list "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"))
  8. (define bits->base64-mapping (map cons (iota 64) base64-charset))
  9. (define base64->bits-mapping (map cons base64-charset (iota 64)))
  10. (define (divide-list l n)
  11. (cond
  12. ((null? l)
  13. (list '() '()))
  14. ((= n 0)
  15. (list '() l))
  16. (else
  17. (let ()
  18. (define result-ab (divide-list (cdr l) (- n 1)))
  19. (define a (list-ref result-ab 0))
  20. (define b (list-ref result-ab 1))
  21. (list (cons (car l) a) b)))))
  22. (define (pad-list-left l n c)
  23. (define ll (length l))
  24. (define nl (- n ll))
  25. (if (<= nl 0)
  26. l
  27. (append (make-list nl c) l)))
  28. (define (pad-list-right l n c)
  29. (define ll (length l))
  30. (define nl (- n ll))
  31. (if (<= nl 0)
  32. l
  33. (append l (make-list nl c))))
  34. (define (bits->integer bs)
  35. (let loop ((in (reverse bs))
  36. (out 0)
  37. (p 1))
  38. (if (null? in)
  39. out
  40. (loop (cdr in)
  41. (+ out (* p (car in)))
  42. (* p 2)))))
  43. (define (bits->base64 bitlist-uneven)
  44. (define padded-bitlist-length (modulo-buffer (length bitlist-uneven) 8))
  45. (define bitlist (pad-list-right bitlist-uneven padded-bitlist-length 0))
  46. (define (modulo-buffer n1 n2)
  47. (define b (modulo n1 n2))
  48. (if (= b 0)
  49. n1
  50. (+ n2 (- n1 b))))
  51. (define (base64-ref n)
  52. (cdr (assv n bits->base64-mapping)))
  53. (define result-ab (divide-list bitlist 6))
  54. (define a (list-ref result-ab 0))
  55. (define b (list-ref result-ab 1))
  56. (let loop ((in b)
  57. (out '())
  58. (front-six a)
  59. (n 0))
  60. (cond
  61. ((null? front-six)
  62. (let ((new-length (modulo-buffer n 4)))
  63. (list->string (reverse (pad-list-left out new-length #\=)))))
  64. (else
  65. (let ()
  66. (define result-ab (divide-list in 6))
  67. (define a (list-ref result-ab 0))
  68. (define b (list-ref result-ab 1))
  69. (loop b
  70. (cons (base64-ref (bits->integer (pad-list-right front-six 6 0))) out)
  71. a
  72. (+ n 1)))))))
  73. (define (base64->bits base64-string-with-padding)
  74. (define (remove-padding l n)
  75. (if (= n 0)
  76. l
  77. (remove-padding (reverse (cddr (reverse l))) (- n 1))))
  78. (define (separate-pad-count)
  79. (let loop ((in (reverse (string->list base64-string-with-padding)))
  80. (out 0))
  81. (if (char=? (car in) #\=)
  82. (loop (cdr in) (+ out 1))
  83. (list (list->string (reverse in))
  84. out))))
  85. (define result-ab (separate-pad-count))
  86. (define base64-string (list-ref result-ab 0))
  87. (define pad-count (list-ref result-ab 1))
  88. (define (base64-bit-ref c)
  89. (cdr (assv c base64->bits-mapping)))
  90. (define (integer->bits i)
  91. (let loop ((in i)
  92. (out '()))
  93. (if (> in 0)
  94. (loop (quotient in 2)
  95. (cons (modulo in 2) out))
  96. (pad-list-left out 6 0))))
  97. (let loop ((in (string->list base64-string))
  98. (out '()))
  99. (if (null? in)
  100. (apply append (reverse (cons (remove-padding (car out) pad-count) (cdr out))))
  101. (loop (cdr in)
  102. (cons (integer->bits (base64-bit-ref (car in))) out)))))
  103. (define (xsb-level-data->bits l)
  104. (define data-mapping
  105. '((floor . (0 0 1 0))
  106. (goal-square . (0 0 1 1))
  107. (box-on-goal-square . (0 1 0 0))
  108. (box . (0 1 0 1))
  109. (player-on-goal-square . (0 1 1 0))
  110. (player . (0 1 1 1))
  111. (wall . (1 0 0 0))))
  112. (define (tile->bit-chunk c)
  113. (cdr (assv (tile-type c) data-mapping)))
  114. (define max-i (level-cols l))
  115. (define max-j (level-rows l))
  116. (define (strip-wasted-space l)
  117. (if (equal? (car l) '(0 0 1 0))
  118. (strip-wasted-space (cdr l))
  119. l))
  120. (let loop ((i 0)
  121. (j 0)
  122. (result '()))
  123. (cond
  124. ((>= j max-j)
  125. result)
  126. ((>= i max-i)
  127. (loop 0 (+ j 1) (cons '(0 0 0 1) (strip-wasted-space result))))
  128. (else
  129. (loop (+ i 1)
  130. j
  131. (cons (tile->bit-chunk (level-ref l j i)) result))))))
  132. (define (xsb-game-file->bits g)
  133. (define ll (game-file-level-list g))
  134. (define sz (game-file-length g))
  135. (let loop ((i 0)
  136. (result '()))
  137. (if (< i (- sz 1))
  138. (loop (+ i 1)
  139. (cons '(0 0 0 0)
  140. (append (xsb-level-data->bits (game-file-ref g i))
  141. result)))
  142. (apply append
  143. (reverse
  144. (append (xsb-level-data->bits (game-file-ref g i))
  145. result))))))
  146. (define (bits->level b)
  147. (define tile-char-vector #(#f #\newline #\space #\. #\* #\$ #\+ #\@ #\#))
  148. (define (bit-chunk->char bc)
  149. (vector-ref tile-char-vector (bits->integer bc)))
  150. (let loop ((in b)
  151. (out '()))
  152. (if (null? in)
  153. (list->string (reverse out))
  154. (loop (cdr in)
  155. (cons (bit-chunk->char (car in))
  156. out)))))
  157. (define (bits->xsb-game-file b)
  158. (define (chunk-bits l)
  159. (let loop ((in l)
  160. (out '()))
  161. (define result-ab (divide-list in 4))
  162. (define a (list-ref result-ab 0))
  163. (define b (list-ref result-ab 1))
  164. (if (null? a)
  165. (reverse out)
  166. (loop b (cons a out)))))
  167. (define (split-levels l)
  168. (let loop ((in l)
  169. (out '(())))
  170. (if (null? in)
  171. (reverse (map reverse out))
  172. (loop (cdr in)
  173. (if (equal? '(0 0 0 0) (car in))
  174. (cons '() out)
  175. (cons (cons (car in) (car out)) (cdr out)))))))
  176. (define level-chunks (split-levels (chunk-bits b)))
  177. (string-join (map bits->level level-chunks) "\n"))
  178. (define file-system-level-data
  179. (list
  180. (cons 0 (bits->xsb-game-file (base64->bits microban-data)))
  181. (cons 1 (bits->xsb-game-file (base64->bits sasquatch-data)))))