/* 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 #include "splib.h" #include "plw.h" #include "sound.h" #include "main.h" // generated #include "explo.h" #include "splash.h" #include "tiles.h" #include "entities.h" #include "et_effect.h" static const struct st_entity base = { ET_EXPLO, 0, 0, 0, 0, 0, 0, 0, 1, // param 0, // extra update_effect, draw_explo, 0 }; void update_effect() { if (++*it_delay > 1) { *it_delay = 0; if (++*it_frame > *it_param) { destroy_entity(); erase_sprite(*it_x, *it_y, 2); } } } void draw_explo() { put_sprite4(explo[*it_frame], *it_x, *it_y, 2, 0); } void draw_splash() { put_sprite4(splash[*it_frame], *it_x, *it_y, 2, 0); } void new_explo() { if (!new_entity()) return; memcpy(sp_new, &base, sizeof(base) - 2); sp_new->x = px; sp_new->y = py + 6; if (player_h) { sp_new->y += 4; if (sp_new->y > TH * TMH - 16) sp_new->y = (uint8_t)(TH * TMH - 16); } PLW_PlaySoundEffectP(EFX_MAGIC); } void new_explo_et() { if (!new_entity()) return; memcpy(sp_new, &base, sizeof(base) - 2); sp_new->x = *it_x; sp_new->y = *it_y + 6; PLW_PlaySoundEffectP(EFX_MAGIC); } void new_splash() { if (!new_entity()) return; memcpy(sp_new, &base, sizeof(base) - 2); sp_new->draw = draw_splash; sp_new->param = 2; sp_new->x = px; sp_new->y = py + 8; PLW_PlaySoundEffectP(EFX_SPLASH); } void draw_torch() { if (!*it_param) put_tile(bgtiles[TORCH_BASE_TILE + *it_frame], get_tile_xy(*it_x, *it_y)); } void update_tile_anim() { if ((*it_param)++ > 2) { *it_param = 0; if (++(*it_frame) == 3) *it_frame = 0; } }