From b2938c51946d402bd8f291b38670ab56ea9e2a97 Mon Sep 17 00:00:00 2001 From: KikooDX Date: Mon, 17 Feb 2020 15:47:02 +0100 Subject: [PATCH] Friction and ice (WIP room) --- assets-cg/img/ice.png | Bin 0 -> 123 bytes levels.lua | 3 +- platform.g3a | Bin 56668 -> 58100 bytes src/collide.c | 18 +++-- src/draw.c | 6 ++ src/main.c | 177 +++++++++++++++++++++++++----------------- 6 files changed, 123 insertions(+), 81 deletions(-) create mode 100644 assets-cg/img/ice.png diff --git a/assets-cg/img/ice.png b/assets-cg/img/ice.png new file mode 100644 index 0000000000000000000000000000000000000000..cfaf2e19762c67051d88026f2a3a7e46ee094f5e GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~d!3HGTx9oodq!^2X+?^QKos)S9|vm_-X6xa?}lx>^Vqw;y;UZ9kNkvv2FF6|Qm TT04IO4Pfwe^>bP0l+XkKVg)Gz literal 0 HcmV?d00001 diff --git a/levels.lua b/levels.lua index a23f15e..42389c6 100644 --- a/levels.lua +++ b/levels.lua @@ -3,6 +3,7 @@ -- - placeholder tile -- v spike -- ^ elevator +-- ~ ice -- j jump upgrade -- -- level id format : YYXX with YY and XX being the Y and X position on the map @@ -60,7 +61,7 @@ levels = {[5049] = [[ -00.....0.0.0..0..0......00- -00......0.0..000.0....vv00- -00....................vv00- --00000000000000000000000000- +-00~~~~~~~~~~~~~~~~~~~~~~00- -00000000000000000000000000- ---------------------------- ]], diff --git a/platform.g3a b/platform.g3a index 36669600ec5bd3ad3a16a5a4276c766222e329cb..8beb18ae248b48a2b090d2e8d9a87327bdb6102d 100644 GIT binary patch delta 4424 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 MAX_HSPD) hspd = MAX_HSPD; + } + direction = move; + } + else if (hspd > 0) + { + if (friction != 0.2) hspd -= DECELERATION * friction; + else hspd -= DECELERATION / 4 * friction; + if (hspd < 0) hspd = 0; + } + trunc_hspd = hspd * direction; + if (!collide_solid(player_x + trunc_hspd, player_y, level)) + { + player_x += trunc_hspd; + } + else + { + int sign_hspd = sgn(trunc_hspd); + while (!collide_solid(player_x + sign_hspd, player_y, level)) + { + player_x += sign_hspd; + } + hspd = 0; + } + } + //ground detection if (vspd >= 0 && collide_solid(player_x, player_y + 1, level)) { on_ground = 6; @@ -85,19 +118,19 @@ int main(void) set_start_pos(&start_x, &start_y, player_x, player_y); } } - else - { - if (on_ground != 6 && vspd < MAX_VSPD) vspd += GRAV; - if (on_ground) on_ground--; - } - //vertical movement - if (UG_CAN_JUMP) jump_test(&jump_pressed, &jump_buffer, &jump_hold); - //jump - if (jump_buffer && on_ground) { - vspd = JUMP_SPD; - on_ground = 0; + else + { + if (on_ground != 6 && vspd < MAX_VSPD) vspd += GRAV; + if (on_ground) on_ground--; + } + //vertical movement + if (UG_CAN_JUMP) jump_test(&jump_pressed, &jump_buffer, &jump_hold); + //jump + if (jump_buffer && on_ground) { + vspd = JUMP_SPD; + on_ground = 0; jump_hold = JUMP_SCALE; - } + } else if (jump_hold && keydown(KEY_SHIFT)) { jump_hold--; @@ -114,27 +147,27 @@ int main(void) } vspd -= GRAV; } - //vertical collision - { - int trunc_vspd = vspd; //truncate vspd + //vertical collision + { + int trunc_vspd = vspd; //truncate vspd if (trunc_vspd) { if (!collide_solid(player_x, player_y + trunc_vspd, level)) - { - player_y += trunc_vspd; - } + { + player_y += trunc_vspd; + } else { - int sign_vspd = sgn(trunc_vspd); - while (!collide_solid(player_x, player_y + sign_vspd, level)) - { - player_y += sign_vspd; - } - vspd = 0; + int sign_vspd = sgn(trunc_vspd); + while (!collide_solid(player_x, player_y + sign_vspd, level)) + { + player_y += sign_vspd; + } + vspd = 0; jump_hold = 0; - } + } } - } + } //spike collision and death if (collide(player_x, player_y, level, 'v')) { @@ -146,7 +179,7 @@ int main(void) if (player_x <= 22) { level_id -= 1; - player_x = 416 + hspd; + player_x = 416 + (move * (int) hspd); set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level, upgrades); @@ -155,7 +188,7 @@ int main(void) else if (player_x >= 416) { level_id += 1; - player_x = 22 + hspd; + player_x = 22 + (move * (int) hspd); set_start_pos(&start_x, &start_y, player_x, player_y); set_level(level_id, level); draw_level(level, upgrades); @@ -186,13 +219,13 @@ int main(void) erase_tile(player_x, player_y, level); draw_upgrade_message('j'); } - //exit - if (keydown(KEY_EXIT)) return 0; - } + //exit + if (keydown(KEY_EXIT)) return 0; + } } int sgn(int number) { - if (number < 0) return -1; - else return 1; + if (number < 0) return -1; + else return 1; }