summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NewerProject.yaml1
-rw-r--r--fakeStarCoin.yaml10
-rw-r--r--src/bossRamboo.cpp2
-rw-r--r--src/fakeStarCoin.cpp113
4 files changed, 126 insertions, 0 deletions
diff --git a/NewerProject.yaml b/NewerProject.yaml
index fc78745..650ba6e 100644
--- a/NewerProject.yaml
+++ b/NewerProject.yaml
@@ -35,3 +35,4 @@ modules:
- processed/bossThwompaDomp.yaml
- processed/bossRamboo.yaml
- processed/effectVideo.yaml
+ - processed/fakeStarCoin.yaml
diff --git a/fakeStarCoin.yaml b/fakeStarCoin.yaml
new file mode 100644
index 0000000..84a5947
--- /dev/null
+++ b/fakeStarCoin.yaml
@@ -0,0 +1,10 @@
+---
+# Replaces AC_LIFT_SEESAW
+
+source_files: [../src/fakeStarCoin.cpp]
+hooks:
+ - name: FakeStarCoinAdd
+ type: add_func_pointer
+ src_addr_pal: 0x80969438
+ target_func: 'daFakeStarCoin::build(void)'
+
diff --git a/src/bossRamboo.cpp b/src/bossRamboo.cpp
index f61ec33..c1b9244 100644
--- a/src/bossRamboo.cpp
+++ b/src/bossRamboo.cpp
@@ -106,6 +106,8 @@ void daRamboo_c::dieBigFall_Execute() {
if (this->scale.x > 0.1) {
+ this->pos.y += 2.0;
+
PlaySound(this, SE_BOSS_CMN_DAMAGE_LAST);
PlaySound(this, SE_EMY_BIG_TERESA_DEAD);
diff --git a/src/fakeStarCoin.cpp b/src/fakeStarCoin.cpp
new file mode 100644
index 0000000..07d37f7
--- /dev/null
+++ b/src/fakeStarCoin.cpp
@@ -0,0 +1,113 @@
+#include <common.h>
+#include <game.h>
+#include <g3dhax.h>
+#include "player.h"
+#include "effects.h"
+#include <sfx.h>
+
+
+extern "C" void *PlaySound(dEn_c *, int soundID);
+
+
+class daFakeStarCoin : public dEn_c {
+ int onCreate();
+ int onExecute();
+ int onDelete();
+ int onDraw();
+
+ mHeapAllocator_c allocator;
+ m3d::mdl_c bodyModel;
+
+ u64 eventFlag;
+ s32 timer;
+ u32 delay;
+
+ u32 effect;
+ u8 type;
+
+ static daFakeStarCoin *build();
+
+ void updateModelMatrices();
+ void playerCollision(ActivePhysics *apThis, ActivePhysics *apOther);
+
+};
+
+
+void daFakeStarCoin::playerCollision(ActivePhysics *apThis, ActivePhysics *apOther) {
+
+ PlaySound(this, SE_EMY_CS_TERESA_BEAT_YOU);
+ CreateEffect(377, &this->pos);
+
+ this->Delete();
+}
+
+
+
+daFakeStarCoin *daFakeStarCoin::build() {
+ void *buffer = AllocFromGameHeap1(sizeof(daFakeStarCoin));
+ return new(buffer) daFakeStarCoin;
+}
+
+
+int daFakeStarCoin::onCreate() {
+
+ allocator.link(-1, GameHeaps[0], 0, 0x20);
+
+ nw4r::g3d::ResFile rf(getResource("star_coin", "g3d/star_coin.brres"));
+ bodyModel.setup(rf.GetResMdl("star_coinA"), &allocator, 0x224, 1, 0);
+ SetupTextures_Enemy(&bodyModel, 0);
+
+ allocator.unlink();
+
+ ActivePhysics::Info HitMeBaby;
+ HitMeBaby.xDistToCenter = 0.0;
+ HitMeBaby.yDistToCenter = -3.0;
+ HitMeBaby.xDistToEdge = 12.0;
+ HitMeBaby.yDistToEdge = 15.0;
+ HitMeBaby.category1 = 0x5;
+ HitMeBaby.category2 = 0x0;
+ HitMeBaby.bitfield1 = 0x4F;
+ HitMeBaby.bitfield2 = 0x200;
+ HitMeBaby.unkShort1C = 0;
+ HitMeBaby.callback = &dEn_c::collisionCallback;
+
+ this->aPhysics.initWithStruct(this, &HitMeBaby);
+ this->aPhysics.addToList();
+
+ this->scale.x = 1.0;
+ this->scale.y = 1.0;
+ this->scale.z = 1.0;
+
+ this->pos.x -= 120.0;
+
+ this->onExecute();
+ return true;
+}
+
+
+int daFakeStarCoin::onDelete() {
+ return true;
+}
+
+int daFakeStarCoin::onDraw() {
+ bodyModel.scheduleForDrawing();
+ return true;
+}
+
+
+void daFakeStarCoin::updateModelMatrices() {
+ matrix.translation(pos.x, pos.y, pos.z);
+ matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z);
+
+ bodyModel.setDrawMatrix(matrix);
+ bodyModel.setScale(&scale);
+ bodyModel.calcWorld(false);
+}
+
+int daFakeStarCoin::onExecute() {
+ updateModelMatrices();
+
+ this->rot.x += 0x200;
+ return true;
+}
+