aboutsummaryrefslogtreecommitdiff
path: root/src/et_spider.c
diff options
context:
space:
mode:
authorJuan J. Martinez <jjm@usebox.net>2023-11-05 11:22:55 +0000
committerJuan J. Martinez <jjm@usebox.net>2023-11-05 11:31:28 +0000
commit2fbdf974338bde8576efdae40a819a76b2391033 (patch)
tree64d41a37470143f142344f9a439d96de3e7918c2 /src/et_spider.c
downloadkitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.tar.gz
kitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.zip
Initial import of the open source release
Diffstat (limited to 'src/et_spider.c')
-rw-r--r--src/et_spider.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/et_spider.c b/src/et_spider.c
new file mode 100644
index 0000000..8373d79
--- /dev/null
+++ b/src/et_spider.c
@@ -0,0 +1,102 @@
+/*
+ Kitsune's Curse
+ Copyright (C) 2020-2023 Juan J. Martinez <jjm@usebox.net>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+#include "splib.h"
+#include "plw.h"
+#include "sound.h"
+#include "main.h"
+
+#include "maps.h"
+
+// generated
+#include "spider.h"
+
+#include "entities.h"
+#include "et_spider.h"
+#include "et_player.h"
+
+void draw_spider()
+{
+ if (!*it_frame)
+ put_sprite4(spider[1], *it_x, *it_y, 1, 0);
+ else
+ {
+ // draws the thread
+ if (!(*it_param & 128))
+ it_k = *it_param & 127;
+ else
+ it_k = *it_extra - (*it_param & 127);
+
+ it_k >>= 3;
+ while (it_k)
+ {
+ put_sprite4(spider[2], *it_x, *it_y - (it_k << 3), 1, 0);
+ --it_k;
+ }
+
+ put_sprite4(spider[0], *it_x, *it_y, 2, 0);
+ erase_sprite(*it_ox, *it_oy, 2);
+ }
+}
+
+void update_spider()
+{
+ // waiting
+ if (!*it_frame)
+ {
+ if (!magic && life && py > *it_y && abs_sub(*it_x, px) < 9 && abs_sub(*it_y, py) < 48)
+ {
+ *it_frame = 1;
+ PLW_PlaySoundEffectP(EFX_SPIDER);
+ }
+ else
+ return;
+ }
+
+ // limit and change direction
+ if ((*it_param & 127) == *it_extra)
+ {
+ // back up
+ if (*it_param & 128)
+ {
+ erase_sprite(*it_x, *it_y + 8, 1);
+ *it_frame = 0;
+ *it_param = 0;
+ goto spider_done;
+ }
+ else
+ // touch bottom
+ *it_param = 128;
+ }
+
+ if (*it_param & 128)
+ {
+ *it_y -= 1;
+ *it_param += 1;
+ }
+ else
+ {
+ *it_y += 8;
+ *it_param += 8;
+ }
+
+spider_done:
+
+ // only going down
+ if (!(*it_param & 128) && check_for_player(16))
+ player_hit(1);
+}