/* 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); } }