aboutsummaryrefslogtreecommitdiff
path: root/src/et_effect.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_effect.c
downloadkitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.tar.gz
kitsunes-curse-2fbdf974338bde8576efdae40a819a76b2391033.zip
Initial import of the open source release
Diffstat (limited to 'src/et_effect.c')
-rw-r--r--src/et_effect.c125
1 files changed, 125 insertions, 0 deletions
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 <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 <string.h>
+
+#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;
+ }
+}