diff --git a/CMakeLists.txt b/CMakeLists.txt index 0c4c622..1709610 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,8 @@ add_custom_command( editor/levels/16.lvl editor/levels/17.lvl editor/levels/18.lvl - editor/levels/19.lvl) + editor/levels/19.lvl + editor/levels/20.lvl) set(SOURCES src/collide.c diff --git a/assets-cg/img/end.png b/assets-cg/img/end.png index 7ac2b50..423b3b4 100755 Binary files a/assets-cg/img/end.png and b/assets-cg/img/end.png differ diff --git a/editor/levels/10.lvl b/editor/levels/10.lvl index 42b8a2c..15d0ae4 100755 --- a/editor/levels/10.lvl +++ b/editor/levels/10.lvl @@ -1,4 +1,4 @@ -11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116 +dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6 13 10 1 \ No newline at end of file diff --git a/editor/levels/11.lvl b/editor/levels/11.lvl index 8602403..55230eb 100755 --- a/editor/levels/11.lvl +++ b/editor/levels/11.lvl @@ -1,4 +1,4 @@ -1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16 +00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 13 10 1 \ No newline at end of file diff --git a/editor/levels/12.lvl b/editor/levels/12.lvl index a347bcc..08988b6 100755 --- a/editor/levels/12.lvl +++ b/editor/levels/12.lvl @@ -1,4 +1,4 @@ -1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116 +1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017 13 10 1 \ No newline at end of file diff --git a/editor/levels/13.lvl b/editor/levels/13.lvl old mode 100755 new mode 100644 index 8e1b788..3f1e0ff --- a/editor/levels/13.lvl +++ b/editor/levels/13.lvl @@ -1,4 +1,4 @@ -11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6 -13 +1333111111111111iiii11111i000d1iii1iiii000000d0001i0000iiii1iiii000000d0e0ii000000001iii1000000d000ii000000001iid1aaa0000000ii00S000000000000a000S000i1t000K00000S0000i1rr1iid111iiii1ii1rrr1iiid000000i10k00000000000000000i000i10000000000000000000i000i1333rrii11iiiirriii11000i100000000000000000000000i10s0000000000000000000S011333iiirriirriii111iiii116 +8 10 1 \ No newline at end of file diff --git a/editor/levels/14.lvl b/editor/levels/14.lvl index 08988b6..a347bcc 100755 --- a/editor/levels/14.lvl +++ b/editor/levels/14.lvl @@ -1,4 +1,4 @@ -1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017 +1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116 13 10 1 \ No newline at end of file diff --git a/editor/levels/15.lvl b/editor/levels/15.lvl index cacb12e..8e1b788 100755 --- a/editor/levels/15.lvl +++ b/editor/levels/15.lvl @@ -1,4 +1,4 @@ -i011100dd1111dddm111ddmd1i01d1000000010S0011100S01i01d100000001000000000001i01d1cc111001hh1c11111001i01ddddddi00i000bddd00001i01dd1133i00i000lddd000K1100000000i00i00001d110011300000000i00100331d100003300000010i001s03t1d1000031111100hki0011111ddd1BB1110S01hh11100m0000aaa0000110001001d100m000000000001100e1001d100m0aaa000aaa0110d11001111111ddddddddd116 -4 -7 +11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6 +13 +10 1 \ No newline at end of file diff --git a/editor/levels/16.lvl b/editor/levels/16.lvl index 4ac0d65..42b8a2c 100755 --- a/editor/levels/16.lvl +++ b/editor/levels/16.lvl @@ -1,4 +1,4 @@ -11111dddd100d110111111331000000000000d1d0000dd10s0111d00000000K1d10000d11111ddddd11ddhh1dddd000dddd11100Sh00dd00000dd00000001i0000000dd000000d0000S001i01100d0dd00d000dd0000001i0d00Sd0dd00dd10ddhh00l01i0ddddd0dd00ddi0d00000001iBBBdd0011aaddi0d0S00d0011000dd000300ddi0d0000d00110mmdd000d00ddi0dd00dd0011emtdddddd00ddi0ddddddkk1111111111100111Bdddd110016 -14 +11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116 +13 10 1 \ No newline at end of file diff --git a/editor/levels/18.lvl b/editor/levels/18.lvl old mode 100644 new mode 100755 index f670ad6..cacb12e --- a/editor/levels/18.lvl +++ b/editor/levels/18.lvl @@ -1,4 +1,4 @@ -111111110011ddd111111111110000001000S000S0d000000110000001000000000d0000s0111mmm101aaa000000d00BBB31100m01010a0000000d00B0Bb1100m01h10a00dKdhi0i0BBB011d0m01h10a00d0d00i00B0B011d0001h10000dSd00i00d00011d00d1h10000ddd00iBBd0t01h000d101dddd11100000d000h1000d1011111111331111111130000100000ddd000000100003000110000000000000k10e00111111110011111ddd11111116 -8 -10 +i011100dd1111dddm111ddmd1i01d1000000010S0011100S01i01d100000001000000000001i01d1cc111001hh1c11111001i01ddddddi00i000bddd00001i01dd1133i00i000lddd000K1100000000i00i00001d110011300000000i00100331d100003300000010i001s03t1d1000031111100hki0011111ddd1BB1110S01hh11100m0000aaa0000110001001d100m000000000001100e1001d100m0aaa000aaa0110d11001111111ddddddddd116 +4 +7 1 \ No newline at end of file diff --git a/editor/levels/19.lvl b/editor/levels/19.lvl old mode 100644 new mode 100755 index 3f1e0ff..4ac0d65 --- a/editor/levels/19.lvl +++ b/editor/levels/19.lvl @@ -1,4 +1,4 @@ -1333111111111111iiii11111i000d1iii1iiii000000d0001i0000iiii1iiii000000d0e0ii000000001iii1000000d000ii000000001iid1aaa0000000ii00S000000000000a000S000i1t000K00000S0000i1rr1iid111iiii1ii1rrr1iiid000000i10k00000000000000000i000i10000000000000000000i000i1333rrii11iiiirriii11000i100000000000000000000000i10s0000000000000000000S011333iiirriirriii111iiii116 -8 +11111dddd100d110111111331000000000000d1d0000dd10s0111d00000000K1d10000d11111ddddd11ddhh1dddd000dddd11100Sh00dd00000dd00000001i0000000dd000000d0000S001i01100d0dd00d000dd0000001i0d00Sd0dd00dd10ddhh00l01i0ddddd0dd00ddi0d00000001iBBBdd0011aaddi0d0S00d0011000dd000300ddi0d0000d00110mmdd000d00ddi0dd00dd0011emtdddddd00ddi0ddddddkk1111111111100111Bdddd110016 +14 10 1 \ No newline at end of file diff --git a/editor/levels/2.lvl b/editor/levels/2.lvl old mode 100755 new mode 100644 index b4d9942..0572082 --- a/editor/levels/2.lvl +++ b/editor/levels/2.lvl @@ -1,4 +1,4 @@ -1dddddd1001111111111111110000000000111110000000000000000l0001100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16 -13 -2 +1111d1d1111111111111111111e01010111100000s01d000d1100001011110001ddd1d000d11d00000111100011111d0k0d11d0d0000001000000000000011d0d0d0000100000000000001111ddd11001000000t0000001100000000011111dd1dd1133110000000001000aaad1111001100111dd111000000d000000110000000003000d00d000000110000000003000d00000d00011000d000003000d00K00d000111111111111111111111111117 +8 +10 1 \ No newline at end of file diff --git a/editor/levels/20.lvl b/editor/levels/20.lvl index 0572082..f670ad6 100644 --- a/editor/levels/20.lvl +++ b/editor/levels/20.lvl @@ -1,4 +1,4 @@ -1111d1d1111111111111111111e01010111100000s01d000d1100001011110001ddd1d000d11d00000111100011111d0k0d11d0d0000001000000000000011d0d0d0000100000000000001111ddd11001000000t0000001100000000011111dd1dd1133110000000001000aaad1111001100111dd111000000d000000110000000003000d00d000000110000000003000d00000d00011000d000003000d00K00d000111111111111111111111111117 +111111110011ddd111111111110000001000S000S0d000000110000001000000000d0000s0111mmm101aaa000000d00BBB31100m01010a0000000d00B0Bb1100m01h10a00dKdhi0i0BBB011d0m01h10a00d0d00i00B0B011d0001h10000dSd00i00d00011d00d1h10000ddd00iBBd0t01h000d101dddd11100000d000h1000d1011111111331111111130000100000ddd000000100003000110000000000000k10e00111111110011111ddd11111116 8 10 1 \ No newline at end of file diff --git a/editor/levels/3.lvl b/editor/levels/3.lvl index 65da0ed..b4d9942 100755 --- a/editor/levels/3.lvl +++ b/editor/levels/3.lvl @@ -1,4 +1,4 @@ -11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117 +1dddddd1001111111111111110000000000111110000000000000000l0001100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16 13 -10 +2 1 \ No newline at end of file diff --git a/editor/levels/5.lvl b/editor/levels/5.lvl index 4954ca5..65da0ed 100755 --- a/editor/levels/5.lvl +++ b/editor/levels/5.lvl @@ -1,4 +1,4 @@ -000000000000000000000000000000000000000000000000t000000000000000000000000000011dd111111111111111110000100000100000010000001000011cc001s0000d00000001000010000e111dd0100000dd100001001111000d0000000dd100001000001000111d000ddd1000010000000000000000ddd1000011111111111d111B11111000000000000000000000000000000000000000000000000000000000000000000000000000006 +11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117 13 -6 +10 1 \ No newline at end of file diff --git a/editor/levels/6.lvl b/editor/levels/6.lvl index 0998bf8..4954ca5 100755 --- a/editor/levels/6.lvl +++ b/editor/levels/6.lvl @@ -1,4 +1,4 @@ -10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117 -5 -9 +000000000000000000000000000000000000000000000000t000000000000000000000000000011dd111111111111111110000100000100000010000001000011cc001s0000d00000001000010000e111dd0100000dd100001001111000d0000000dd100001000001000111d000ddd1000010000000000000000ddd1000011111111111d111B11111000000000000000000000000000000000000000000000000000000000000000000000000000006 +13 +6 1 \ No newline at end of file diff --git a/editor/levels/8.lvl b/editor/levels/8.lvl index 15d0ae4..8602403 100755 --- a/editor/levels/8.lvl +++ b/editor/levels/8.lvl @@ -1,4 +1,4 @@ -dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6 +1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16 13 10 1 \ No newline at end of file diff --git a/editor/levels/9.lvl b/editor/levels/9.lvl index 55230eb..0998bf8 100755 --- a/editor/levels/9.lvl +++ b/editor/levels/9.lvl @@ -1,4 +1,4 @@ -00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 -13 -10 +10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117 +5 +9 1 \ No newline at end of file diff --git a/include/collide.h b/include/collide.h index b319edd..c3a10cb 100755 --- a/include/collide.h +++ b/include/collide.h @@ -1,6 +1,8 @@ #pragma once char collide(int x, int y, char level[], char block); +char collide_gravity(int x, int y, char level[], char gravity, char block); +char collide_solid_gravity(int x, int y, char level[], char gravity); char collide_solid(int x, int y, char level[]); char collide_dead(int x, int y, char level[]); char collide_point(int x, int y, char level[], char block); diff --git a/src/collide.c b/src/collide.c index 07d86ac..19acdee 100644 --- a/src/collide.c +++ b/src/collide.c @@ -7,20 +7,27 @@ char collide(int x, int y, char level[], char block) // detect if player is in a block { - if ((level[(int)(x / TILE_HEIGHT) + - (int)((y + PLAYER_HEIGHT) / TILE_HEIGHT) * LEVEL_WIDTH] == - block || - level[(int)((x + PLAYER_HEIGHT) / TILE_HEIGHT) + - (int)((y + PLAYER_HEIGHT) / TILE_HEIGHT) * LEVEL_WIDTH] == - block || - level[(int)(x / TILE_HEIGHT) + - (int)((y / TILE_HEIGHT) * LEVEL_WIDTH)] == block || - level[(int)((x + PLAYER_HEIGHT) / TILE_HEIGHT) + - (int)((y / TILE_HEIGHT) * LEVEL_WIDTH)] == block)) + if(collide_point(x, y, level, block) || + collide_point(x + PLAYER_HEIGHT, y, level, block) || + collide_point(x, y + PLAYER_HEIGHT, level, block) || + collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level, block)) return 1; return 0; } +char collide_gravity(int x, int y, char level[], char gravity, char block) { + if(gravity == 1) { + if(collide_point(x, y + PLAYER_HEIGHT, level, block) || + collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level, block)) + return 1; + } else { + if(collide_point(x, y, level, block) || + collide_point(x + PLAYER_HEIGHT, y, level, block)) + return 1; + } + return 0; +} + char collide_solid(int x, int y, char level[]) { return collide(x, y, level, '1') || collide(x, y, level, '3') || @@ -30,6 +37,15 @@ char collide_solid(int x, int y, char level[]) collide(x, y, level, 'r'); } +char collide_solid_gravity(int x, int y, char level[], char gravity) +{ + return collide_gravity(x, y, level, gravity, '1') || collide_gravity(x, y, level, gravity, '3') || + collide_gravity(x, y, level, gravity, '4') || collide_gravity(x, y, level, gravity, 'c') || + collide_gravity(x, y, level, gravity, 'C') || collide_gravity(x, y, level, gravity, 'B') || + collide_gravity(x, y, level, gravity, 'i') || collide_gravity(x, y, level, gravity, 'H') || + collide_gravity(x, y, level, gravity, 'r'); +} + char collide_dead(int x, int y, char level[]) { return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level, diff --git a/src/main.c b/src/main.c index 32fee5a..888d46d 100644 --- a/src/main.c +++ b/src/main.c @@ -169,7 +169,8 @@ static void game(int *id_level, char mode, char *type) coin); if (check_nbswitch) draw_nbswitch(nbswitch); - dprint(330, 0, C_RED, "%d", (int)(hspd * 100)); + dprint(330, 0, C_RED, "%d", collide_solid(player_x, player_y - 1, level)); + dprint(350, 0, C_RED, "%d", collide_solid(player_x, player_y + 1, level)); dupdate(); if (keydown(KEY_VARS) && usb_is_open()) usb_fxlink_screenshot(1); @@ -208,10 +209,8 @@ static void game(int *id_level, char mode, char *type) // Action key if (keydown(KEY_SHIFT) && !check && nbswitch > 0 && - ((collide_solid(player_x, player_y - 1, level) && - gravity == -1) || - (collide_solid(player_x, player_y + 1, level) && - gravity))) { + (collide_solid_gravity(player_x, player_y - 1, level, gravity) || + collide_solid_gravity(player_x, player_y + 1, level, gravity))) { vspd = 1; if (gravity == -1) gravity = 1; diff --git a/times.lvl b/times.lvl index 07b65c8..e56e2f7 100755 --- a/times.lvl +++ b/times.lvl @@ -1,20 +1,20 @@ 5.91 +8.25 8.76 -5.80 3.52 +5.80 3.58 -8.62 6.81 +6.23 +8.62 7.65 9.62 -6.04 -6.23 +8.35 +6.93 10.78 5.39 -8.35 +6.04 +17.95 7.45 10.53 -17.95 9.54 -6.93 -8.25