From 2fbdf974338bde8576efdae40a819a76b2391033 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Sun, 5 Nov 2023 11:22:55 +0000 Subject: Initial import of the open source release --- src/et_switch.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 src/et_switch.c (limited to 'src/et_switch.c') 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 + + 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 . + */ +#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); + } +} -- cgit v1.2.3