From 27cfd5a575d9ac60594556c0a1770211e99a5d24 Mon Sep 17 00:00:00 2001 From: Clownacy Date: Sun, 27 Jan 2019 12:18:21 +0000 Subject: [PATCH] Added NPC015, NPC018, and NPC020 (chest close, door, and chest open) --- Makefile | 1 + src/NpcAct.h | 4 +++ src/NpcAct000.cpp | 85 +++++++++++++++++++++++++++++++++++++++++++++++ src/NpcAct020.cpp | 29 ++++++++++++++++ src/NpcTbl.cpp | 6 ++-- 5 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 src/NpcAct020.cpp diff --git a/Makefile b/Makefile index c48567eb..43037d3d 100644 --- a/Makefile +++ b/Makefile @@ -55,6 +55,7 @@ SOURCES = \ MyChar \ MycHit \ NpcAct000 \ + NpcAct020 \ NpChar \ NpcHit \ NpcTbl \ diff --git a/src/NpcAct.h b/src/NpcAct.h index 78124aa7..6da5916a 100644 --- a/src/NpcAct.h +++ b/src/NpcAct.h @@ -7,5 +7,9 @@ void ActNpc004(NPCHAR *npc); void ActNpc005(NPCHAR *npc); void ActNpc006(NPCHAR *npc); +void ActNpc015(NPCHAR *npc); void ActNpc016(NPCHAR *npc); void ActNpc017(NPCHAR *npc); +void ActNpc018(NPCHAR *npc); + +void ActNpc021(NPCHAR *npc); diff --git a/src/NpcAct000.cpp b/src/NpcAct000.cpp index 69bd23fc..260d541c 100644 --- a/src/NpcAct000.cpp +++ b/src/NpcAct000.cpp @@ -615,6 +615,63 @@ void ActNpc006(NPCHAR *npc) npc->rect = rcLeft[npc->ani_no]; } +//Chest (closed) +void ActNpc015(NPCHAR *npc) +{ + RECT rcLeft[3]; + + rcLeft[0] = {240, 0, 256, 16}; + rcLeft[1] = {256, 0, 272, 16}; + rcLeft[2] = {272, 0, 288, 16}; + + switch (npc->act_no) + { + case 0: + npc->act_no = 1; + npc->bits |= 0x2000u; + + if (npc->direct == 2) + { + npc->ym = -0x200; + + for (int i = 0; i < 4; ++i) + SetNpChar(4, npc->x + (Random(-12, 12) * 0x200), npc->y + (Random(-12, 12) * 0x200), Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + } + + // Fallthrough + case 1: + npc->ani_no = 0; + + if (Random(0, 30) == 0) + npc->act_no = 2; + + break; + + case 2: + if (++npc->ani_wait > 1) + { + npc->ani_wait = 0; + ++npc->ani_no; + } + + if (npc->ani_no > 2) + { + npc->ani_no = 0; + npc->act_no = 1; + } + + break; + } + + npc->ym += 0x40; + if (npc->ym > 0x5FF) + npc->ym = 0x5FF; + + npc->y += npc->ym; + + npc->rect = rcLeft[npc->ani_no]; +} + //Save point void ActNpc016(NPCHAR *npc) { @@ -748,3 +805,31 @@ void ActNpc017(NPCHAR *npc) npc->y += npc->ym; } + +// Door +void ActNpc018(NPCHAR *npc) +{ + RECT rect[2]; + + rect[0] = {224, 16, 240, 40}; + rect[1] = {192, 112, 208, 136}; + + switch (npc->act_no) + { + case 0: + if (npc->direct == 0) + npc->rect = rect[0]; + else + npc->rect = rect[1]; + + break; + + case 1: + for (int i = 0; i < 4; ++i) + SetNpChar(4, npc->x, npc->y, Random(-341, 341), Random(-0x600, 0), 0, 0, 0x100); + + npc->act_no = 0; + npc->rect = rect[0]; + break; + } +} \ No newline at end of file diff --git a/src/NpcAct020.cpp b/src/NpcAct020.cpp new file mode 100644 index 00000000..9a1c0808 --- /dev/null +++ b/src/NpcAct020.cpp @@ -0,0 +1,29 @@ +#include "WindowsWrapper.h" + +#include "MyChar.h" +#include "NpChar.h" +#include "Game.h" +#include "Sound.h" +#include "Back.h" +#include "Triangle.h" + +//Chest (open) +void ActNpc021(NPCHAR *npc) +{ + switch (npc->act_no) + { + case 0: + npc->act_no = 1; + + if (npc->direct == 2) + npc->y += 0x2000; + + break; + } + + RECT rect[0]; + + rect[0] = {224, 40, 240, 48}; + + npc->rect = rect[0]; +} diff --git a/src/NpcTbl.cpp b/src/NpcTbl.cpp index 320ca33a..6ee7f722 100644 --- a/src/NpcTbl.cpp +++ b/src/NpcTbl.cpp @@ -71,13 +71,13 @@ NPCFUNCTION gpNpcFuncTbl[] = nullptr, nullptr, nullptr, - nullptr, + ActNpc015, ActNpc016, ActNpc017, + ActNpc018, nullptr, nullptr, - nullptr, - nullptr, + ActNpc021, nullptr, nullptr, nullptr,