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_effect.c | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/et_effect.c (limited to 'src/et_effect.c') diff --git a/src/et_effect.c b/src/et_effect.c new file mode 100644 index 0000000..02f40dc --- /dev/null +++ b/src/et_effect.c @@ -0,0 +1,125 @@ +/* + 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; + } +} -- cgit v1.2.3