/** Helper program to generate the array containing internal data file for assets.h. This is done because the C99 standard theoretically limits string literal size, and so if we put the huge string right into assets.h, the source code might be untranslatable with some compilers. Big compilers like GCC have no problem, but we want to maximize compatibility, and so we move the "less compatible" code here. This program just converts a string literal to a more friendlier array of numbers. */ #include const char *part1 = // big maps // MAP 1: "MLC1;4321 0 " ":*C2mL:!x6G:+L2H:+D38" // start, finish, CPs // pillars: ":nw0w2L:f151:m151" ":nz0w2L:f151:m151" ":nw0H2L:f151:m151" ":nz0H2L:f151:m151" // big structure: ":=z09:f83D" ":=H0k:fa1s" ":=H0D:fa29" ":-A29:f61C" ":'A2pI:f611" ":'B2j:f511" ":=C0j:f347" ":=H0q2:f42c" ":xB2k:f625" // start hole ":uB2o:uF2oJ :uB2kL :uF2kI" // curved corners in start ":]G2kL:]G2oL" // decorative ramps near start ":-w29:f41e" ":xH0r:f35b" // hole ":=G0C:f561" // small wall ":^G5CJ:^K5CL" // the wall corners ":=H0o1:f412" // grass near start ":=H1L1:fa11" // grass ":;R0q:f16l" // big wall west ":;E0ML:fc61" // big wall north ":)Q1rJ:f11c" // curved ramps along big wall ":)Q2DJ:f118" // curved ramps along big wall ":uQ2L|:f141:\\R0LI|:f161:\\Q0ML:f161" // corner between big walls ":=v09:fc2g" ":^z3s:^z3tI" // two small ramps near finish ":;R0l:f125" // small wall near start ":;L0jJ:f521" // small wall near start ":uQ1kI:\\R0k:f121:\\Q0jL|:f121" // corner between small walls ":=G0f1:f545:AK0f1:f141" // big grass block near start ":=A2a2:f12f:^A3a2" // wall ":=w0o:f331" ":=v072:f14i" // wall ":=G072:f14d" // wall ":'G1lL:f113:IrL:f514" ":^orPI-:fB11" ":AKtL2|I:m111:AStP2|I:m111:IPsL2:IVsN2" // pillars ":-UrC3-:f518:'UrJ3-:f511:'UrC3I-:f511" // fozen bridge ":=Urw2:f516" // dirt ":|Ysw2J:f11k" // fence ":=vrK1:f713" ":AW0y:f1r1:AW0M:f1r1:Ap0M:f1r1" // bottom pillars // loop: ":]FsNJ:f113:|FtNJ:f113" ":]FwNJ-:f113:|FvNJ-:f113" ":]DsKL:f113:|DtKL:f113" ":]DwKL-:f113:|DvKL-:f113" ":-DxK:f316" ":;CsK|:f153" ":;GsN:f153" ":,CxK|:f116" ":,GxK:f116" ":}FsNJ:}DsML:|EsM2:|EsN2I" ":ICsPI:f151:IGsK:f151" // downhill: ":^TrwJ:f116:^TqwL-:f116" ":^SqwJ:f116:^SpwL-:f116" ":^RpwJ:f116:^RowL-:f116" ":^QowJ:f116:^QnwL-:f116" ":^PnwJ:f116:^PmwL-:f116" ":^OmwJ:f116:^OlwL-:f116" ":^NlwJ:f116:^NkwL-:f116" ":^MkwJ:f116:^MjwL-:f116" ":^LjwJ:f116:^LiwL-:f116" ":^KiwJ:f116:^KhwL-:f116" ":^JhwJ:f116:^JgwL-:f116" ":^IgwJ:f116:^IfwL-:f116" ":=Hfw2:f116" ":^GfwJ:f116:^GewL-:f116" ":^FewJ:f116:^FdwL-:f116" ":^EdwJ:f116:^EcwL-:f116" ":^DcwJ:f116:^DbwL-:f116" ":^CbwJ:f116:^CawL-:f116" ":^BawJ:f116:^B9wL-:f116" ":^A9wJ:f116:^A8wL-:f116" ":^z8wJ:f116:^z7wL-:f116" ":^y7wJ:f116:^y6wL-:f116" ":yx6wJ:f116:^x5wL-:f116" ":yw5wJ:f116:^w4wL-:f116" ":yv4wJ:f116:^v3wL-:f116" ":^u3wJ:f116:^u2wL-:f116" ":^t2wJ:f116:^t1wL-:f116" ":^s1wJ:f116:^s0wL-:f116" // bumps on downhill: ":oDcB:f121" ":=Fey:f121" ":oJhw:f121" ":=KiA:f121" ":=Mkx" ":=Pny:f121" // finish platform: ":=n0w:f516:=o0y1:=o0z1" ":Ap1x2L:f1p1:Aq1w2L:f141:Ap1w2J:f141" ":Ap1A2:f1p1:Aq1B2:f141:Ap1B2I:f141" // heart: ":\\3031I:\\3021|:=4021:n4031L:A4011J" ":\\6031I|:\\6021:=5021:n5031I:A5011" // MAP 4: "#MLC4;4321 1" // overall structure: ":=000:f53a:x111:f424:x116:f323" ":)115L:)315J:)125L-:)325J-:x215:f121" // start door ":-031:fa19:<031:fa11:<039I:fa11:<621I-:f411" // start roof ":A&0hI|:f171:v&7h|:^Z7hI:f211:^@6hJ-:xZ1h:m371" // big gate ":=500:fz16:f51k:=D01:fp16" ":_X07:-X02:f41m:=X0u:f51q" ":=00y:f51p:=30W:fT14" ":=U0T:f414:=W0S:f414:=W0X:=T0V" ":^a05-:ft11" ":F01:f316:>00D:f513" ":=b0W3:fa14:'W02L:f114" ":=60I2:f236:^62IJ:f116:^73IJ:f116" // spectator seats ":|01z2L:f11eborderleft" ":\\Q121L:f121:\\P121|J:f121:\\Q151|L:f121:\\P151IJ:f121" ":\\Q261L:\\P261|J:\\Q211|L:\\P211IJ" ":=915:f12f" // wall ":n915J:f121:n415:f121" ":-6323:f212" ":!612:f212:+W1V:+21Q:+D13:*217I" // MAP 5: "#MLC5;4321 0" ":*I8wJ" ":vq1t1J:m111:vs1r1J:m111" ":vI4g3J:AI3g1L:AI2g1L:m131" ":vN4g3J:AN3g1L:AN2g1L:m131" // overall big structure: ":=o0k:fp1x:xu0B:f81b:=C1k:fb25:=I2g:f514" ":=I1p:f52j:=50p:fg35:=509:fr1g:xa0h:fe18" ":=j0s:f53g:=51n2:f512:xH0I:fa1a" ":]o1uL:f119:|o2uL:f119" // ramp left ":)H1qJ:f11d" // ramp right ":xb0f:fb12:xd0e:f711:x509:f313:f611:f116" ":xm09:fc11:xs0a:f516:xu0g:f212:xp0a:f312:xr0c" ":An0hI:Am0gI:Al0fI:Aj0eI:Aa0hL:Ab0fL:Ad0eL" ":Aw0j:Av0i:Au0h:At0g:As0f" ":Ar0d:Aq0c:Ap0b:Ao0a:Am09" ":A50eJ:A60cJ:A70bJ:A80aJ:Aa09J" ":=i0u:f131:Ah0uI:f131:Ai0vI:f131" ":xo0I:f11a:xp0N:f114:xp0Q:f411:xD0Q:f411:xG0N:f114" ":Au0L:AB0LJ:Ap0NI:Aq0PI:As0QI:AD0QL:AF0PL:AG0NL" ":nM0HL:f131:>x0r:f412" ":=u0l1:f414:ou0A:f811" // corner: ":xo0l:f218:xq0n:f214" ":Aj0p:f131:Ak0q:f131:Al0r:f131:Am0s:f131" ":An0t:f131:xk0p:f131:xn0s:f131" ":Ao0tJ:Ap0sJ:Aq0rJ:Ar0qJ:As0pJ" ":As0oI:Ar0nI:Aq0mI:Ap0lI:Ao0kI" // diagonal bridge: ":=82x:f919:=52u:f713:=g2C:f316" ":A52wI:A62xI:A72yI:A82zI:A92AI:=72x" ":Aa2u:Ab2v:Ac2w:xb2u" ":Ag2HI:Af2GI:Ae2FI:Ad2EI" ":Ae2y:Af2z:Ah2B:Ai2C" ":xg2z:xe2x:xf2x:f212" ":A92BJ:A72DJ:=80C1:f141:x82B:x82A" ":Ac2EL:Aa2GL:=b0F1:f141:xc2F:xd2F" ":A72EI:A82FI:A92GI" ":=d0x1:f141:=g0A1:f141" // tunnel: ":=I3q:f56d:xJ3q:f35d:^I8qJ:f11d:^M8qL:f11d" ":]J3qL:f11d:]L3qJ:f11d" ":|J4qL:f11d:|L4qJ:f11d" ":|J6qL-:f11d:|L6qJ-:f11d" ":]J7qL-:f11d:]L7qJ-:f11d" ":=H0w:f181:AH1xI:f171:AH1v|:f171:xI8v:f213:AJ8x|:AJ8vI" // start platform // big bridge: ":E0k:f514" // slope: ":^C2vI-:f611" ":^p3v:fj11" ":^o4w:fj11:^o3w-I:fj11" ":^n5x:fj11:^n4x-I:fj11" ":^m6y:fj11:^m5y-I:fj11" ":^l7z:fj11:^l6z-I:fj11" ":^k8A:fj11:^k7A-I:fj11" ":=k8B:f419:=o8F:f415:^k9K2I:f611:^k8K2I-:f611" // top ":=y0F1:fb15:^y0F1:fb11:^y0J1I:fb11" // end // TINY MAP 2: "#MLCtiny2;4321 1" ":*w@v-:!v0u:f313" // tunnel: ":=wct:f1K1:=wcx:f1K1:=ucv:f1K1:=ycv:f1K1" ":Avcw:f1K1:AucwI:f1K1:AvcxI:f1K1" ":AxcwJ:f1K1:AycwL:f1K1:AxcxL:f1K1" ":AvcuL:f1K1:AucuJ:f1K1:AvctJ:f1K1" ":AxcuI:f1K1:Aycu:f1K1:Axct:f1K1" ":xukt:f6c6:xuEt:f6c6" // splits //obstacles: ":~wUv3-:~wVv3:\\xDv2J|:.vQv:,wAu1" ":f113:~xnw3-:~xow3:~weu3-:~wfu3:\\vcv2L|" // TINY MAP 3: "#MLCtiny3;4321 2" ":*w1d:!w1d:+w1A" // big bumps: ":vw1hJ:m111" ":vw1qJ:m111" ":vw1yJ:m111" ":vy1r1J:m111" ":vy1u2J:m111" ":vv1t3J:m111" ":vu1k1I:vu1l1|" ":vu1v2I:vu1w2|" ":vy1lL:vy1m" ":vy1v1L:vy1w1" ":vy1yL:vy1z" // diagonal column: ":Aw1mL:m111" // big structure: ":=t0d2:f71p" ":=t1B1:f711" ":^t1d1J:f11p:^z1d1L:f11p" ":'u0n1I:f511:'u0o1:f511" // small bumps: ":~y1i1:~w1j3:~x1l:~x1p3:~u1q2:~w1s2:~x1v:~v1w1:~x1x3" // TINY MAP 4: "#MLCtiny4;4321 2" ":*M1AJ" // box: ":=C2w:faca" ":=C6w2:fa1a" ":=H2w2:f1ca" ":=C0z:fb14" ":xA2x:fgo8" ":^C2w-:fb11:^C1x-:fb11:^C0z-:fb11" ":^C0C-I:fb11:^C1E-I:fb11:^C2F-I:fb11" ":vC2wL-:vC2F-:vM2wI-:vM2FJ-" // top: ":-Few2:f411:-FeF2:f411" ":AC3w|:f1b1:AM3w:f1b1" ":AC3FI:f1b1:AM3FL:f1b1" // ramps: ":]C2xI:fb11:|C3xI:fb11" ":'C1yI:fb11" ":= ROW_LENGTH) { putchar('\n'); count = 0; } } puts("\n#endif // !LCR_SETTING_ONLY_SMALL_MAPS"); count = 0; while (*part2) { printf("0x%2x%s",*part2,part2[1] ? "," : ""); part2++; count++; if (count >= ROW_LENGTH) { putchar('\n'); count = 0; } } return 0; }