diff --git a/include/Game/Enemy/EyeBeamer.hpp b/include/Game/Enemy/EyeBeamer.hpp new file mode 100644 index 00000000..873fc065 --- /dev/null +++ b/include/Game/Enemy/EyeBeamer.hpp @@ -0,0 +1,58 @@ +#pragma once + +#include "Game/LiveActor/LiveActor.hpp" +#include "JSystem/JGeometry/TMatrix.hpp" + +class VolumeModelDrawer; +class ModelObj; +class MapPartsRailMover; + +class EyeBeamer : public LiveActor { +public: + EyeBeamer(const char *); + + virtual ~EyeBeamer(); + virtual void init(const JMapInfoIter &); + virtual void initAfterPlacement(); + virtual void draw() const; + virtual void calcAnim(); + virtual void startClipped(); + virtual void endClipped(); + virtual void control(); + virtual void calcAndSetBaseMtx(); + virtual void attackSensor(HitSensor *, HitSensor *); + + void initStartNerve(const JMapInfoIter &); + void initModel(); + void initRailMoveFunction(const JMapInfoIter &); + void updatePoseAndTrans(); + void updateWaterSurfaceMtx(); + void requestStartPatrol(); + bool tryGotoPatrol(); + bool tryPatrol(); + void exeDemoTurn(); + void exeDemoGotoPatrol(); + void exeTurn(); + void exeGotoPatrol(); + void exePatrol(); + bool isInBeamRange(const TVec3f &) const; + bool isOnBeam() const; + + MapPartsRailMover* mRailMover; // 0x8C + ModelObj* mBeamBloom; // 0x90 + ModelObj* mBeamMdl; // 0x94 + VolumeModelDrawer* mBeamVolumeDrawer; // 0x98 + TMtx34f _9C; + TQuat4f _CC; + TQuat4f _DC; + TVec3f _EC; + TVec3f _F8; + TVec3f _104; + TRot3f mWaterSurfaceMtx; // 0x110 + TVec3f _140; + + f32 _15C; + f32 _160; + + bool mIsInMercatorCube; // 0x164 +}; diff --git a/libs/JSystem/include/JSystem/JGeometry/TVec.hpp b/libs/JSystem/include/JSystem/JGeometry/TVec.hpp index 5c19e549..89fb9ac8 100644 --- a/libs/JSystem/include/JSystem/JGeometry/TVec.hpp +++ b/libs/JSystem/include/JSystem/JGeometry/TVec.hpp @@ -104,22 +104,23 @@ namespace JGeometry { setInline(rSrc); }*/ +#ifdef __MWERKS__ inline TVec3(const register Vec &rSrc) NO_INLINE { register TVec3 *dst = this; register const Vec *src = &rSrc; register f32 z; register f32 xy; - -#if __MWERKS__ __asm { psq_l xy, 0(src), 0, 0 lfs z, 8(src) psq_st xy, 0(dst), 0, 0 stfs z, 8(dst) }; -#endif } +#else + inline TVec3(const Vec &rSrc) NO_INLINE; +#endif /* General operations */ void set(const Vec &rSrc); diff --git a/libs/RVL_SDK/include/revolution/os/OSContext.h b/libs/RVL_SDK/include/revolution/os/OSContext.h index 9a2565df..dd7eb0bd 100644 --- a/libs/RVL_SDK/include/revolution/os/OSContext.h +++ b/libs/RVL_SDK/include/revolution/os/OSContext.h @@ -116,10 +116,14 @@ void OSSaveFPUContext(OSContext *); void __OSContextInit(void); +#ifdef __MWERKS__ void OSFillFPUContext(register OSContext* context); +#else +void OSFillFPUContext(OSContext* context); +#endif #ifdef __cplusplus } #endif -#endif // OSCONTEXT_H \ No newline at end of file +#endif // OSCONTEXT_H