From 5a2f7df84c307916c81f4bb78b5b8d3308a63543 Mon Sep 17 00:00:00 2001 From: Miloslav Ciz Date: Thu, 15 May 2025 22:35:57 +0200 Subject: [PATCH] Add data generating script --- TODO.txt | 9 +- assets.h | 1061 ++++++++++++++++-------------- assets/make_internal_data_file.c | 548 +++++++++++++++ game.h | 2 +- renderer.h | 2 +- 5 files changed, 1126 insertions(+), 496 deletions(-) create mode 100644 assets/make_internal_data_file.c diff --git a/TODO.txt b/TODO.txt index 0e8bc0b..d876327 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,6 +4,7 @@ fuck issue trackers :D - hitting ramps at higher speed still often bugs, try to fiddle with physics again (reshape iterations, tension, ...) +- shift the car texture a bit to align the wheels? KINDA DOESN'T GETT BETTER NOW - make car turned on its back behave nicer - press forward map??? :-D only when physics is frozen - make some kinda repo for world record runs? @@ -11,10 +12,6 @@ fuck issue trackers :D its velocity by a proportion of car's velocity change (this minus prev. frame), then offset car body by this. However we'll also have to transform inbetween world space and model space. -- c99 may impose limit 4095 chars on str literal, gives warning on internal - data file, try to somehow hack around it (maybe just convert it to an array in - the end?) Maybe this: make a standalone C file with the string in it that - when compiled and run outputs the array. - replay validation? - final tests: - very long replay @@ -43,6 +40,10 @@ fuck issue trackers :D =========== HANDLED ============== - should drifting make a sound? NO NEED +- c99 may impose limit 4095 chars on str literal, gives warning on internal + data file, try to somehow hack around it (maybe just convert it to an array in + the end?) Maybe this: make a standalone C file with the string in it that + when compiled and run outputs the array. - make replays have better names (time etc.) - LOD blocks in lower res look too small - 640x480 with resolution subdiv has bad sized menu item highlight diff --git a/assets.h b/assets.h index 23f32c7..0905736 100644 --- a/assets.h +++ b/assets.h @@ -60,498 +60,579 @@ static const char *LCR_texts[] = // TODO: define string for CLI arguments for frontends? -static const char *LCR_internalDataFile = +static const char LCR_internalDataFile[] = +{ +// data generated by make_internal_data_file.c: #if !LCR_SETTING_ONLY_SMALL_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" - ": + +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; +} diff --git a/game.h b/game.h index ddd145c..e4cf45c 100644 --- a/game.h +++ b/game.h @@ -1204,7 +1204,7 @@ void LCR_gameDrawPopupMessage(void) LCR_rendererDrawRect((LCR_EFFECTIVE_RESOLUTION_X - textW - 2 * LCR_GUI_GAP) / 2,_OFFSET_V,textW + 2 * LCR_GUI_GAP,textH + 2 * LCR_GUI_GAP, - LCR_CONVERT_COLOR(0xffff),1); + LCR_CONVERT_COLOR(0xce59),0); LCR_rendererDrawText(LCR_game.popupStr,(LCR_EFFECTIVE_RESOLUTION_X - textW) / 2,_OFFSET_V + LCR_GUI_GAP,LCR_CONVERT_COLOR(0x0300),_TEXT_SIZE); diff --git a/renderer.h b/renderer.h index b47e8dd..6be4533 100644 --- a/renderer.h +++ b/renderer.h @@ -366,7 +366,7 @@ void _LCR_pixelFunc3D(S3L_PixelInfo *pixel) for (int i = 0; i < 6; ++i) LCR_renderer.triUVs[i] = (LCR_carUvs[2 * LCR_carTriangleUvs[3 * - pixel->triangleIndex + i / 2] + i % 2] * (LCR_IMAGE_SIZE + 1)) / 512; + pixel->triangleIndex + i / 2] + i % 2] * (LCR_IMAGE_SIZE + i % 2)) / 512; #if (LCR_SETTING_CAR_TINT & 0x7) != 0x07 for (int i = 0; i < 256; ++i)