Skip to content
1 change: 1 addition & 0 deletions config/RMGK01/splits.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2572,6 +2572,7 @@ Game/Enemy/CocoNutBall.cpp:
.ctors start:0x8052EA68 end:0x8052EA6C
.rodata start:0x80531E30 end:0x80531E50
.data start:0x8057B348 end:0x8057B500
.sdata start:0x806B18F0 end:0x806B18F8
.sbss start:0x806B3DA0 end:0x806B3DB8
.sdata2 start:0x806BA2A8 end:0x806BA338

Expand Down
2 changes: 1 addition & 1 deletion config/RMGK01/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62267,7 +62267,7 @@ hCountTimer__21@unnamed@BombHei_cpp@ = .sdata:0x806B18E0; // type:object size:0x
lbl_806B18E4 = .sdata:0x806B18E4; // type:object size:0x4 data:string
lbl_806B18E8 = .sdata:0x806B18E8; // type:object size:0x4 data:string
lbl_806B18F0 = .sdata:0x806B18F0; // type:object size:0x4 data:string
lbl_806B18F4 = .sdata:0x806B18F4; // type:object size:0x4
lbl_806B18F4 = .sdata:0x806B18F4; // type:object size:0x4 data:string
lbl_806B18F8 = .sdata:0x806B18F8; // type:object size:0x4 data:string
lbl_806B18FC = .sdata:0x806B18FC; // type:object size:0x4
lbl_806B1900 = .sdata:0x806B1900; // type:object size:0x4 data:string
Expand Down
52 changes: 52 additions & 0 deletions include/Game/Enemy/CocoNutBall.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#include "Game/LiveActor/LiveActor.hpp"

class CocoNutBall : public LiveActor {
public:
CocoNutBall(const char* pName);

virtual ~CocoNutBall();
virtual void init(const JMapInfoIter& rIter);
virtual void appear();
virtual void kill();
virtual void calcAndSetBaseMtx();
virtual void attackSensor(HitSensor* pSender, HitSensor* pReceiver);
virtual bool receiveMsgPlayerAttack(u32 msg, HitSensor* pSender, HitSensor* pReceiver);

void appearAndThrow(const TVec3f&, f32);
void hitBackToPlayer();
void demoBreak(const TVec3f&);
HitSensor* isBindedAny() const;
bool isValidReceivePunch() const;
bool isNerveTrowToOrFreeze() const; // inline used several places
bool isSensorBody(HitSensor*) const;
void calcHitBackVelocitAndGravity();
bool isHitBackRight() const;
bool isHitBackFront() const;
void calcHitBackDstPos(TVec3f*, bool, bool);
bool tryToKill(bool);
void setVelocityToPlayer(f32, f32);
void freeze();
bool isFreezable();
void processApproachToPlayer();
void exeThrow();
void exeHitBackToHost();
void exeHitBackToPlayer();
void exeRebound();
void exeFreeze();
void exeFreezeRelease();

LiveActor* _8C;
TVec3f _90;
s32 _9C;
s32 _A0;
TVec3f _A4;
TVec3f _B0;
bool _BC;
bool _BD;
bool _BE;
f32 _C0;
f32 _C4;
TVec3f _C8;
f32 _D4;
bool _D8;
};
15 changes: 14 additions & 1 deletion libs/JSystem/include/JSystem/JGeometry/TVec.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -394,6 +394,10 @@ namespace JGeometry {
return ret;
}

inline void negate(const TVec3& rVec) {
JMathInlineVEC::PSVECNegate(rVec, this);
}

inline TVec3 negateOperatorInternal() const {
TVec3 ret;
JGeometry::negateInternal(&this->x, &ret.x);
Expand Down Expand Up @@ -711,7 +715,16 @@ namespace JGeometry {
return lengthinv * oldlength;
};

f32 setLength(const TVec3&, f32);
f32 setLength(const TVec3& rVec, f32 newlength) {
f32 oldlength = rVec.squared();
if (oldlength <= 0.0000038146973f) {
zero();
return 0.0f;
}
f32 lengthinv = JGeometry::TUtil< f32 >::inv_sqrt(oldlength);
scale(lengthinv * newlength, rVec);
return lengthinv * oldlength;
};

f32 length() const {
return PSVECMag(this);
Expand Down
Loading