From e7e26f581b7acc35cc40ee0f4736e5af968c6374 Mon Sep 17 00:00:00 2001 From: nek0 Date: Sun, 3 Jan 2021 19:48:55 +0100 Subject: [PATCH] new post --- .../posts/2021-01-02-Gravity-and-collision.md | 48 ++++++++++++++++++ site/vids/2021-01-02.mp4 | Bin 0 -> 18388 bytes 2 files changed, 48 insertions(+) create mode 100644 site/posts/2021-01-02-Gravity-and-collision.md create mode 100644 site/vids/2021-01-02.mp4 diff --git a/site/posts/2021-01-02-Gravity-and-collision.md b/site/posts/2021-01-02-Gravity-and-collision.md new file mode 100644 index 0000000..564f385 --- /dev/null +++ b/site/posts/2021-01-02-Gravity-and-collision.md @@ -0,0 +1,48 @@ +--- +title: Gravity and collision +author: nek0 +tags: +- english +- "devlog: pituicat" +description: New progress with impact. +--- + +Hello and first of all a happy new year 2021! + +It's been only a little while since I last worked on my latest game. I took the +time between Christmas and New Year to dive again into the depths of code. + +Following the rough roadmap I have in my head I am trying to get the game to +become finally interactive, but being a platformer, this has some prerequisites +on basic physics and collision detection and collision handling. So I prepared +again a lot of reusable plumbing, implemented all the necessary functions +and tied it all together nicely to play along with the already existing parts +of the game. Here is a small video of the result: + + + +Again, it does not look like much, but I am very happy about this result. +Although I will surely have to tweak the collision reaction more, but it is a +good start, so I believe. + +Next up will be handling of input events including, but not lmited to, keyboard +key presses to control the player. After that I will hopefully be ready to fill +the game with actual content. + +As always, you may check out the code of the game and its progress +[in its repository][repo]. I try to leave as many helpful comments and +documentation as possible while programming, but if anything is unclear, you +need further explanation or just want to talk about the game or any other +interesting topic, do not hesitate to contact me [via email][email] or any +other means listed [on my contact page][contact]. + +So much for this update. I hope I will be able to continue to work on this game +shortly. + +Until then, keep calm and wash hands. + +[repo]: https://gitea.nek0.eu/nek0/pituicat +[email]: mailto:nek0@nenk0.eu +[contact]: https://nek0.eu/contact.html diff --git a/site/vids/2021-01-02.mp4 b/site/vids/2021-01-02.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..cd9b81a4a9e8f679230b6de62bb78c8d8f8fe7a8 GIT binary patch literal 18388 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 literal 0 HcmV?d00001