aboutsummaryrefslogtreecommitdiff
path: root/src/et_switch.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_switch.c
downloadkitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.tar.gz
kitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.zip
Initial import of the open source release
Diffstat (limited to 'src/et_switch.c')
-rw-r--r--src/et_switch.c103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/et_switch.c b/src/et_switch.c
new file mode 100644
index 0000000..543ba25
--- /dev/null
+++ b/src/et_switch.c
@@ -0,0 +1,103 @@
+/*
+ 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 "cpcrslib/cpcrslib.h"
+#include "splib.h"
+#include "plw.h"
+#include "sound.h"
+#include "main.h"
+
+#include "maps.h"
+
+// generated
+#include "switch.h"
+#include "tiles.h"
+
+#include "entities.h"
+#include "et_player.h"
+#include "et_switch.h"
+
+void update_switch_door(uint8_t x, uint8_t y, uint8_t t)
+{
+ x >>= 3;
+ y >>= 3;
+
+ for (it_k = 0; it_k < 4; ++it_k)
+ {
+ put_tile(bgtiles[t], get_tile_xy(x, y));
+ set_map_tile(x, y++, t);
+ }
+
+ put_tile(bgtiles[BLOCKED_OPEN_DOOR_TILE], get_tile_xy(x, y));
+ set_map_tile(x, y++, BLOCKED_OPEN_DOOR);
+}
+
+void draw_switch()
+{
+ if (is_invalid_tile2(get_tile_xy(*it_x >> 3, *it_y >> 3)))
+ put_sprite4(switch_sprite[0], *it_x, *it_y, 2, *it_frame & 1);
+}
+
+void update_switch()
+{
+ if (*it_delay)
+ {
+ *it_delay -= 1;
+
+ if (*it_delay & 1)
+ {
+ if (!(*it_frame & 254))
+ {
+ *it_frame += 6;
+ if (*it_frame & 2)
+ PLW_PlaySoundEffectP(EFX_TICK);
+ }
+ else
+ *it_frame -= 2;
+ }
+
+ if (!*it_delay)
+ {
+ erase_sprite(*it_x, *it_y, 2);
+
+ if (!magic && life
+ && py < *it_extra + 32 && *it_extra < py + 24
+ && px + 2 < *it_param + 8 && *it_param < px + 6)
+ {
+ frame = WALK + 1;
+ player_hit(MAX_LIFE);
+ }
+
+ goto switch_toggle;
+ }
+ }
+
+ if (!check_for_player(16) || (*it_frame & 1))
+ return;
+
+ if (!player_h && cpc_TestKeyF(KEY_DOWN))
+ {
+ *it_delay = 64;
+
+switch_toggle:
+ *it_frame &= 1;
+ *it_frame ^= 1;
+
+ update_switch_door(*it_param, *it_extra, *it_frame & 1 ? 42 : SWITCH_DOOR_TILE);
+ PLW_PlaySoundEffectP(EFX_DOOR);
+ }
+}