'FANESIA: A GENESIA (ULTIMATE DOMAIN) DEMAKE FOR LOWRESNX 'BY MARTIN "MOECHOFE" MAUCHAUFFEE 2021.. 'MADE ON IPAD MINI 4 VERSION$="R24" 'TODO: '================================= '(X) UNPACK MAP '(X) REPLACE THE SEPARATOR THAT COVERING OTHER BIOME, BY A 3RD NORMAL SEPARATOR, AND MOVE OTHER CHARAS '( ) FIND A WAY TO REDUCE THE CODE NEEDS TO DRAW ONE MAP CELL '(X) DISPLAY THE BIOME MAP '(X) ONLY UPDATE THE MAP BORDER INSTEAD OF THE FULL MAP '(X) APPLY LIMIT TO MAP SCROLL '( ) IMPLEMENT A 8X7 CELL EFFECT '(X) PLACE SEPARATOR UNDER COVERING TILE, NOT FULL BIOME '( ) REMOVE THE CODE THAT LIMITING THE RENDERING CALL BY PARTS, IT WILL COVER THE CASE WHEN THE MAP IS PANNING FAST. 'LEXICAL: '================================= 'MAP CELL = SAME AS BG CELL, 2X2 CELL ARE CALLED PLOTS 'MAP PLOT = 2X2 MAP CELL, ALL PLOT ARE SEPERATED BY 1 ROW AND 1 COL OF MAP CELL, 7X7 PLOT ARE CALLED PARCELS 'MAP PARCEL = 7X7 MAP PLOT, THEY CAN BE OWNED BY A PLAYER 'TECH DOC: '================================= 'EVEN IF THERE IS 4 BIOMES, WHEN THERE IS ONE THAT COVER AN OTHER ONE, THERE IS NO ALL COMBINAISON POSSIBLE: 'MOUNTAIN CAN COVER PLAIN 'PLAIN CAN COVER BEACH 'BEACH CAN COVER SEA 'SO THE PATTERN IS THE SAME AND THE RENDERING TECHNIC CAN BE DONE ONE TIMES AND REPEAT FOR EACH COMBINAISON 'BASE BIOME CELL WILL BE ALWAYS ON BG1 'COVERING BIOME SEPARATOR CELL WILL BE ALWAYS ON BG0 'FOR ONE PLOT OF 3X3 CELL: 'FF| 'FF| '--+ 'THERE IS A COUPLE OF DIFFERENTS COMBINAISON: 'THE PLOTS AT THE RIGHT, AT THE BOTTOM-RIGHT CORNER, CAN BE THE SAME OR DIFFERENT. 'IDEA: '================================= 'ATTRIBUTES RESPAWN AT A SPECIFIC SEASON. 'NOT ALL RESPAWN AT THE SAME TIMES. 'BUILDING WITH 2X2 PLOTS, SO CANNOT BE PLACED EVERYWHERE ON THE MAP. 'ASSETS: '================================= 'SOME TOOLS FOR CHARAS QUICK ACCESS 'CHARA#1..18 MOUNTAIN ROCK ASSETS 'CHARA#19..36 PLAIN GRASS ASSETS 'CHARA#37..54 BEACH SAND ASSETS 'CHARA#55.. SEA WATER ASSETS DATA 55,37,19,1 '(0) SEA '(1) BEACH '(2) GRASS '(3) MOUNTAIN DIM GLOBAL BIOME1STCHARA(3) FOR I=0 TO 3 READ BIOME1STCHARA(I) NEXT I 'PALETTE#0 SEA 'PALETTE#1 BEACH 'PALETTE#2 PLAIN 'PALETTE#3 MOUNTAIN DATA 0,1,2,3 DIM GLOBAL BIOMEPALETTE(3) FOR I=0 TO 3 READ BIOMEPALETTE(I) NEXT I ' BG#1 ??? ???? BG#0 ' RBBBCB 10 CELL RND PAL FLIP CELL RND PAL FLIP ' ------ -- ' 000000 00 TB+CB+14 TB+CB TB+15 ' 000001 01 TB+RB+12 TB+RB TB+16 ' 000100 04 TB+RB+14 TB+RB TB+6 2 TB ' 000101 05 TB+RB+14 TB+RB TB+17 TB 0,1 ' 010000 16 TB+BB+14 TB+BB TB+11 2 TB RND1,0 ?? ' 010001 17 TB+BB+14 TB+BB TB+17 TB 1,0 ' 010100 20 TB+CB+14 TB+CB TB+17 TB ' 010101 21 TB+14 0 ' 010110 22 TB+14 TB+CB+15 TB+CB 1,1 ' 011001 25 TB+14 TB+BB+15 TB+BB 0,1 ' 011010 26 TB+14 TB+BB+11 2 TB+BB 0,1 ' 100101 37 TB+14 TB+RB+15 TB+RB 1,0 ' 100110 38 TB+14 TB+RB+6 2 TB+RB 1,0 ' 101010 42 TB+14 TB+RB+17 TB+RB 1,1 ' WHAT CAN I DO WITH THAT? ' 1ST I CAN JOIN PAL AND FLIP INTO A SINGLE VALUE ' 2ND I CAN STORE PREPARED DATA INTO ROM OR PACK/RAM ' 3RD I CAN USE POKEW PEEKW TO QUICKLY COPY THE BG CELL WHOLE INFOS (CHARA+ATTRI) ' 4TH I CAN PROBABLY ADD THE TB INTO THE SIGNATURE ' 5TH I SHOULD CREATE A CART TO PREPARE THIS INFO AND GENERATE THE ROM DATA ' AND MAYBE USE THE CODE FOR RENDERONECELL FROM THIS CART. 'HEXASTRING: '================================= 'IT'S A TECHNIC TO STORE A HUGE AMOUNT A DATA AS HEXADECIMAL STRING INTO 2 LOWRESNX TOKENS. FOUND BY ERICISONIT, SAUCE: HTTPS://LOWRESNX.INUTILIS.COM/TOPIC.PHP?ID=2162#POST-15391 DATA 0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15 DIM GLOBAL ASC2DEC(22) FOR I=0 TO 22 READ ASC2DEC(I) NEXT I '(IN) H$ THE HEXASTRING SOURCE '(IN) I THE CHAR INDEX TO READ '(OUT) V THE READ VALUE SUB READHEXASTR(H$,I,V) V=ASC2DEC(ASC(MID$(H$,I,1))-48)*16+ASC2DEC(ASC(MID$(H$,I+1,1))-48) END SUB 'ARRAY: '================================= 'SOME TOOLS FOR ARRAY VALUE MANIPULATION '(INOUT) X,Y ARRAY CURSOR IN 1ST AND 2ND DIMENSION '(IN) A() AN 2 DIMENSION ARRAY SUB NEXTARRAY2(X,Y,A()) IF X=UBOUND(A) THEN X=0 ADD Y,1 ELSE ADD X,1 END IF END SUB 'MATH: '================================= 'CLAMP A VALUE TO A MIN AND MAX '(INOUT) V THE VALUE TO CLAMP '(IN) I MINIMAL VALUE '(IN) A MAXIMAL VALUE SUB CLAMP(V,I,A) V=MAX(I,MIN(A,V)) END SUB 'MAP DATA: '================================= 'MAP DATA CONTAINS THE BIOME TYPE AND ATTRIBUTE FLAG. 'BIOME TYPE ARE: '=0 SEA '=1 BEACH '=2 PLAIN '=3 MOUNTAIN 'ATTRIBUTE (WHEN FLAGGED-ON) ON TOP OF BIOME ARE: '=1 CHEST ON SAND '=2 TREE ON GRASS '=3 BOULDER ON ROCK 'PACKED MAP DATA ARE CONSISTS IN TWO STRINGS OF HEXADECIMAL DATA. 'THE EDITOR WILL PUT THOSE DATA INTO FILES #4 AND #5. 'THE BIOME USE THE FOLLOWING FORMAT: 'EACH BYTE USE THIS BIT FORMAT %CCCCCCTT, WITH T FOR THE BIOME TYPE, C FOR NUMBER OF TIMES THIS BIOME IS REPEATED BY BROWSING THE MAP CELLS FROM LEFT TO RIGHT, TOP TO BOTTOM. 'THE PROP USE THE FOLLOWING FORMAT: 'EACH BYTE CONTAINS 8 FLAGS, THAT REPRESENT IF ATTRIBUTES ARE PRESENT ON EACH CONSECUTIVE MAP CELLS FROM LEFT TO RIGHT, TOP TO BOTTOM. 'UNPACKED BIOME MAP DATA CONSISTS ON A SET OF ARRAYS OF 39X39 REPRESENTING EACH MAP CELLS. DIM GLOBAL BIOME(38,38) DIM GLOBAL ATTRI(38,38) 'TODO: MOVE THIS DOC WHERE THE PERSISTANT CODE IS 'THE STATUS OF A BIOME ATTRIBUTE (ON,OFF) ARE STORED AND PACKED IN PERSISTANT RAM#E000, 8 MAP CELLS ARE STORED IN EACH MEM BYTE, TAKING 35X35=154 BYTES 'NEXT PERSISTANT RAM#E09A '(IN) M THE MAP NUMBER (0..) '(LOCAL) H$ THE SOURCE HEXASTRING SUB UNPACKMAP(M) 'POINT TO THE RIGHT DATA RESTORE PACKEDMAPSDATA WHILE M>0 READ H$ READ H$ DEC M WEND 'READ HEXASTRING AND UNPACK THE BIOME TYPE '(LOCAL) H$ THE SOURCE HEXASTRING '(LOCAL) X,Y MAP CURSOR: BIOME(X,Y) '(LOCAL) I HEXASTRING CHAR CURSOR '(LOCAL) P THE READ PACKED BYTE '(LOCAL) B THE BIOME TYPE '(LOCAL) C THE BIOME REPEAT COUNTER '(LOCAL) J THE REPEAT COUNTER CURSOR READ H$ X=0 Y=0 P=0 FOR I=1 TO LEN(H$) STEP 2 CALL READHEXASTR(H$,I,P) B=P AND %11 C=(P AND %11111100)\4 FOR J=0 TO C BIOME(X,Y)=B CALL NEXTARRAY2(X,Y,BIOME()) NEXT J NEXT I 'DEVELOPER IF X<>0 OR Y<>39 THEN PAUSE 'READ HEXASTRING AND UNPACK THE ATTRIBUTE FLAG '(LOCAL) H$ THE SOURCE HEXASTRING '(LOCAL) P THE READ PACKED BYTE '(LOCAL) X,Y MAP CURSOR: BIOME(X,Y) '(LOCAL) I HEXASTRING CHAR CURSOR '(LOCAL) J THE PACKED BIT CURSOR READ H$ X=0 Y=0 FOR I=1 TO LEN(H$) STEP 2 CALL READHEXASTR(H$,I,P) FOR J=0 TO 7 ATTRI(X,Y)=P AND %1 CALL NEXTARRAY2(X,Y,ATTRI()) P=P\2 NEXT J NEXT I 'DEVELOPER IF X<>38 OR Y<>38 THEN PAUSE 'THE LAST IS MISSING BUT IT'S OK END SUB 'RENDERER: '================================= 'SHOW THE MAP WITH THE 2X2 PLOT SIZE SEPARATED BY ROWS AND COLUMNS OF SIZE 1 'BG1 FOR BIOME TYPE 'BG0 FOR SEPARATOR THAT COVER THE BIOME AT BG1 'RENDERER CACHE DATA 'TO REDUCE THE SIZE OF THE CODE THAT RENDER ONE MAP CELL, I PRE-COMPUTE THE CHARA NUM, THE BG CELL ATTRIBUTES AND A CHARA NUM ADDITIONAL MAX RANDOM VALUE INTO A PACKED HEXASTRING. DATA "004500013400013300022200022100031000004500013500013300022300022100031100004500012B02013300021902022100030702004500113600013300122400022100131200004500013002013300021E02022100030C020045000936000133000A24000221000B1200004500013600013300022400022100031200004500000000013300000000022100000000030F000000000045001934000133001A22000221001B1000004500113400013300122200022100131000004500113002013300121E02022100130C020045000934000133000A22000221000B1000004500092B020133000A19020221000B07020045000935000133000A23000221000B11000045001936000133001A24000221001B1200003703000000012503000000021303000000030103000000004001000000012E01000000021C01000000030A01000000004001013002012E01021E02021C01030C02004001113002012E01121E02021C01130C02003B01000000012901000000021701000000030501000000003B01012B02012901021902021701030702003B01092B020129010A19020217010B0702" 'LOAD THIS DATA IN RAM$A000..$A1A3 READ H$ A=$A000 P=0 FOR I=1 TO LEN(H$) STEP 2 CALL READHEXASTR(H$,I,P) POKE A,P ADD A,1 NEXT I 'DEVELOPER IF A<>$A1A4 THEN PAUSE 'RENDER CACHE INDEX 'IN ORDER TO FOUND WHERE THE RENDERED CACHED DATA IS STORED, THE FOLLOWING HEXASTRING DATA CONTAINS THE RELATIVE ADDRESS FOR IT. DATA "0000000000001401000000000000000000000000000000000000000000000000000000000000000000007E00960000000000A800BA000000680100000000000000000000000000000000CC00DE0000000000F00002010000920100000000000000000000000000002C01000000000000560100000000000000000000000000000000120000001A0124003600000000000000000000000000800100000000000048005A00000000006C0084009C0000000000AE00C00000006E0100000000000000000000000000000000D200E40000000000F600080100009801000000000000440100000000000032010000000000005C01000000000000000000000000000006001800000020012A003C0000000000000000000000000086010000000000004E0060000000000072008A00A20000000000B400C6000000740100000000000000000000000000000000D800EA0000000000FC000E0100009E010000000000004A010000000000003801000000000000620100000000000000000000000000000C001E0000002601300042000000000000000000000000008C010000000000005400660000000000780090000000000000000000000000007A01000000000000000000000000000000000000000000000000000000000000000000000000000050010000000000003E01" 'LOAD THIS DATA INTO AN ARRAY DIM GLOBAL RENDERCACHE(244) READ H$ P=0 Q=0 J=0 FOR I=1 TO LEN(H$) STEP 4 CALL READHEXASTR(H$,I,P) CALL READHEXASTR(H$,I+2,Q) RENDERCACHE(J)=Q*256+P+$A000 ADD J,1 NEXT I 'THE RENDERER WILL CREATE A CELL SIGNATURE USING: 'IT'S RELATIVE POSITION IN THE PLOT (0,1,2) FOR BOTH AXIS 'THE BIOME TYPE FOR THE RENDERER CELL 'THE CHANGE VALUE FOR THE CELL AT THE RIGHT OF THE RENDERER CELL (0= DECREASE THE BIOME TYPE, 1= SAME BIOM TYPE, 2= INCREASE THE BIOME TYPE) 'SAME THING FOR THE CELL AT THE BOTTOM 'SAME THING FOR THE CELL AT THE BOTTOM RIGHT '(IN) X,Y BG CELL POSITION '(LOCAL) M,N RELATIVE PLOT COL,ROW POSITION (0..2) '(LOCAL) E,F PLOT POSITION (0..38) '(LOCAL) TB THE BIOME TYPE FOR THE CURRENT CELL (0,1,2,3) '(LOCAL) RB THE BIOME DIFF FOR THE RIGHT CELL '(LOCAL) BB THE BIOME DIFF FOR THE BOTTOM CELL '(LOCAL) AB THE BUILT CELL SIGNATURE '(LOCAL) A THE ADDRESS WHERE THE RENDERER CACHE DATA ARE STORED MEM$A000..$A1A3 SUB RENDERCELL(X,Y) E=X\3 F=Y\3 IF E<0 OR F<0 OR E>38 OR F>38 THEN EXIT SUB RANDOMIZE X*7+Y*21 M=X MOD 3 N=Y MOD 3 TB=BIOME(E,F) RB=0 BB=0 CB=0 IF E<38 THEN RB=BIOME(E+1,F)-TB IF F<38 THEN BB=BIOME(E,F+1)-TB IF E<38 AND F<38 THEN CB=BIOME(E+1,F+1)-TB 'RB=BIOME(E+1,F)-TB 'BB=BIOME(E,F+1)-TB 'BUILD THE CELL SIGNATURE AB=(M<2 AND N<2)*-3 + (M=2 AND N<2)*-12 + (M<2 AND N=2)*-48 IF AB>%11 THEN AB=((RB+1)*16+(BB+1)*4) OR (AB AND %111100) ELSE IF AB=0 THEN AB=(RB+1)*16+(BB+1)*4+CB+1 END IF AB=TB*64+AB A=RENDERCACHE(AB) 'RENDER THE CELL BG 1 ATTR PEEK(A) CELL X,Y,PEEK(A+1)+RND(PEEK(A+2)) BG 0 ATTR PEEK(A+3) CELL X,Y,PEEK(A+4)+RND(PEEK(A+5)) END SUB 'MAP SCENE '================================= '(GLOBAL) MX,MY MAP POSITION GLOBAL MX,MY MX=8 MY=8 SCROLL 1,MX,MY SCROLL 0,MX,MY '(LOCAL) TD TOUCH TIME DURATION '(LOCAL) BX,BY TOUCH BEGIN COORDS IN PIXEL '(LOCAL) DX,DY MOVED DISTANCE THIS FRAME IN PIXEL '(LOCAL) CT,CL,CB,CR REDRAW UNTIL THIS RECT IN MAP CELL '(LOCAL) PT,PL,PB,PR CURRENLY DRAWN RECT IN MAP CELL SUB MAPSCENE GOSUB MAPUPDRECT GOSUB MAPDRAWFULL 'DETECT TOUCH INPUT MAPINPUT: TD=15 DO IF TAP THEN TD=0 BX=TOUCH.X BY=TOUCH.Y ELSE IF TOUCH THEN ADD TD,1 IF ABS(TOUCH.X-BX)>2 OR ABS(TOUCH.Y-BY)>2 THEN GOTO MAPPAN IF TD>=15 THEN GOTO MAPPAN ELSE IF TD<15 THEN TD=15 GOTO MAPTAP END IF GOSUB MAPUPDATE WAIT VBL LOOP MAPTAP: TRACE "TAP" GOTO MAPINPUT '(W) DX,DY MOVED DISTANCE THIS FRAME IN PIXEL MAPPAN: DO DX=BX-TOUCH.X DY=BY-TOUCH.Y IF DX<>0 OR DY<>0 THEN ADD MX,DX ADD MY,DY CALL CLAMP(MX,8,760) CALL CLAMP(MY,8,792) SCROLL 1,MX,MY SCROLL 0,MX,MY BX=TOUCH.X BY=TOUCH.Y GOSUB MAPUPDRECT GOSUB MAPUPDATE END IF WAIT VBL IF NOT TOUCH THEN GOTO MAPINPUT LOOP '(RW) CT,CL,CB,CR REDRAW COORDS IN MAP CELL TOP,LEFT,BOTTOM,RIGHT) '(W) PT,PL,PB,PR PREVIOUS REDRAW RECT IN MAP CELL '(W) X,Y MAP CELL ITERATOR MAPUPDATE: 'RENDER NEW CELLS AT THE RIGHT IF CR>PR THEN ADD PR,1 IF PR-PL>=32 THEN ADD PL,1 FOR Y=PT TO PB CALL RENDERCELL(PR,Y) NEXT Y END IF 'RENDER NEW CELLS AT THE LEFT IF CL=32 THEN ADD PR,-1 FOR Y=PT TO PB CALL RENDERCELL(PL,Y) NEXT Y END IF 'RENDER NEW CELLS AT THE BOTTOM IF CB>PB THEN ADD PB,1 IF PB-PT>=32 THEN ADD PT,1 FOR X=PL TO PR CALL RENDERCELL(X,PB) NEXT X END IF 'RENDER NEW CELLS AT THE TOP IF CT=32 THEN ADD PB,-1 FOR X=PL TO PR CALL RENDERCELL(X,PT) NEXT X END IF RETURN 'UPDATE THE WANTED DRAW RECT ACCORDING TO THE MAP SCROLL CURSOR '(R) MX,MY MAP POSITION '(W) CT,CL,CB,CR REDRAW RECT IN MAP CELL MAPUPDRECT: CT=(-1*8-7+MY)\8 CL=(-1*8-7+MX)\8 CB=(17*8+7+MY)\8 CR=(21*8+7+MX)\8 RETURN 'UPDATE THE FULL RECT '(R) CT,CL,CB,CR REDRAW RECT IN MAP CELL '(W) X,Y MAP CELL ITERATOR '(W) PT,PL,PB,PR PREVIOUS REDRAW RECT IN MAP CELL MAPDRAWFULL: FOR Y=CT TO CB FOR X=CL TO CR CALL RENDERCELL(X,Y) NEXT X NEXT Y PT=CT PL=CL PB=CB PR=CR RETURN END SUB 'MAIN: '================================= TOUCHSCREEN 'TEMP CALL UNPACKMAP(0) CALL MAPSCENE 'PACKED MAP: '================================= PACKEDMAPSDATA: 'FOR EACH MAP: TWO HEXASTRINGS: BIOME TYPE AND ATTRIBUTE FLAG DATA "B01D782D2809244110211C111A5114092231061514093A111A0D0C093E052E050C0942012E0D000D760D000D760D000D1E173E0D000D1E173A11000D1E331E0D040D1A371A1108091A3F121108091A3F0E150C051A1B0A170E150C0916170E17120D140516170E0F1E0914051A133E0518051A13120F120D14051E370E1114051E370E110C19122F1E090C190E3322050C1116070A1F220508152A0B360508117205080D72050C0D72050C0D72050C0D16092A0916051009120D1A210A09100D0615064D107D28210835340D1815D8" DATA "0000000000000800000000000000000100000100000002800044000000009000000100020848004042134901401211440000405240006001840500042400140010008580100422040100440401004002101100844221220000882208001001001000204801850020120002002220A4000044280000088048000880120024000000004800500000080044119200000462920400915024040000002001A4400920000000002000000000000000100020000000100000000001000000000000" 'ROM FILE: '================================= 'FILE#4..5 ARE USED BY THE MAP EDITOR, THE GENERATED VALUE WILL BE COPIED TO THE DATA ABOVU AS PACKED HEXASTRING AND THEN, FILE#4..5 SHOULD BE REMOVED #1:MAIN PALETTES 050B06000038240000080400002A1500 00353001003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 FFFFBFE7E6FFDFFF0000401819002000 FFFFBDFFFFD9F9FF0000420000260600 FFF3B3FFFFFEFFEF000C4C0000010010 FFFBFF9F9FFFFFFD0004006060000002 FFE5E7FFB3FFE7E7001A18004C001818 FFE7E7FFE7FFE5E70018180018001A18 8080C08080808C8040602060405E525E 80808080C080C0804040406020602060 8080C0C0808080804060202060404040 FFDFFF9494FFFEFF0020006B6B000100 FFF7FF9F94F4BFFF000800606B0B4000 FF4400000000000000BBEE0000000000 FF2000000000000000DF700000000000 FF0C00000060600000F31E00F09090F0 FFF3F39F94FCE7E7000C0C606B031818 800000000000000040C0000000000000 800000000000000140C0000000000302 0100000006068080FE83808F89C94F40 FFFEBEBFFFF7DFDF0001414000082020 FFDFF7F7FEBEBFFF0020080801414000 FFEFEDFDEFFFBFBF0010120210004040 FFBBEBEFFFBFBDFD0044141000404202 FFEFEBFBEFBBEBEF0010140410441410 FFEBBBEFEBFBEFEB0014441014041014 C0C0E0A0A0E0C0C02030105050103020 C0E0A0A0E0C0C0C03010505010302020 C0C0C0C0E0A0E0C02020203010501030 FFEFFFFAAAAFFFF70010000555500008 FFDFFFBAAAEFFFFD0020004555100002 FFEF2838000000000010D7447C000000 FFFB0E00000020000004F11F00705070 FFDB7E0000000000002481FF00000000 FFEBEFBAAAEFFBEB0014104555100414 C0800000000000002060C00000000000 C0C00000000607032020E0000F09080C FFBBBEE0A0E0C0C00044411F50103020 FFE7BFFEFFFB9FFF0018400100046000 FFECFF9FFFFFF3DF0013006000000C20 FFFDDFFFFFFCCFFF0002200000033000 FFFDFFCEFFFFFB9F0002003100000460 FFE7FFE3FFF3BFE70018001C000C4018 FFF3BFF3FFE3FFE6000C400C001C0019 E0E0E0E0F090F0E01010141008680810 E0F090F0E0B0E0E01008680810481014 E0E0E0E0B0E0E0B01010101048101048 FFDFFFA2FF89FFFB0020005D00760004 FFFBFF89FFE2FFBF00040076001D0040 FF9BFF64000000000064009B64010000 FFCFFB0E00000000003004F10E000000 FFFAFF0500000000000500FA05100000 FFE7FFA2FF88FFE30018005D0077001C F0B0E060000000000848109060000000 E0B0F07C243F0D0710480C825B403208 FFE7FFA4FC90F0E00018005B026C0810 00020408102020000002040810202000 00000608103020000000060810302000 00020C081020200000020C0810202000 00000204081010000000020408101000 00001010101008000000101010100800 00001008080808080000100808080808 00080808080808000008080808080800 00080808080808000008080808080800 00101808080808080010180808080808 0000007F000000000000007F00000000 0000007C000000000000007C00000000 0000007C000000000000007C00000000 00007806000000000000780600000000 0000003E400000000000003E40000000 000808F88F080800000808F88F080800 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FF808080808080800000000000000000 #4:PACKED BIOME B01D782D2809244110211C111A511409 2231061514093A111A0D0C093E052E05 0C0942012E0D000D760D000D760D000D 1E173E0D000D1E173A11000D1E331E0D 040D1A371A1108091A3F121108091A3F 0E150C051A1B0A170E150C0916170E17 120D140516170E0F1E0914051A133E05 18051A13120F120D14051E370E111405 1E370E110C19122F1E090C190E332205 0C1116070A1F220508152A0B36050811 7205080D72050C0D72050C0D72050C0D 16092A0916051009120D1A210A09100D 0615064D107D28210835340D1815D8 #5:PACKED ATTR 00000000000008000000000000000001 00000100000002800044000000009000 00010002084800404213490140121144 00004052400060018405000424001400 10008580100422040100440401004002 10110084422122000088220800100100 1000204801850020120002002220A400 00442800000880480008801200240000 00004800500000080044119200000462 920400915024040000002001A4400920 00000000200000000000000010002000 0000100000000001000000000000