diff --git a/config/symbol_addrs.txt b/config/symbol_addrs.txt index aaa470b2..3481b08c 100644 --- a/config/symbol_addrs.txt +++ b/config/symbol_addrs.txt @@ -77,7 +77,10 @@ snd_SendIOPCommandNoWait = 0x11e8c8; // type:func // P2/alo.c //////////////////////////////////////////////////////////////// InitAlo__FP3ALO = 0x123ED0; // type:func +SnipAloObjects__FP3ALOiP4SNIP = 0x124DF8; // type:func UpdateAlo__FP3ALOf = 0x124FC0; // type:func +LoadAloFromBrx__FP3ALOP18CBinaryInputStream = 0x1289C0; // type:func +SetAloTargetHitTest__FP3ALOi = 0x12AA28; // type:func //////////////////////////////////////////////////////////////// // P2/binoc.c diff --git a/include/alo.h b/include/alo.h index 3cfd41c2..28c80765 100644 --- a/include/alo.h +++ b/include/alo.h @@ -8,6 +8,9 @@ #include #include +// Forward +struct CBinaryInputStream; + struct FICG { uchar grficSweep; @@ -17,6 +20,16 @@ struct FICG uchar grficShock; }; +/** + * @brief Unknown +*/ +struct SNIP +{ + int grfsnip; + OID oid; + int ib; +}; + /** * @brief "Lightweight" * @@ -56,6 +69,12 @@ struct ALO : public LO */ void InitAlo(ALO *palo); +/** + * @brief unknown + * + */ +void SnipAloObjects(ALO *palo, int csnip, SNIP *asnip); + /** * @brief Updates an ALO * @@ -63,4 +82,14 @@ void InitAlo(ALO *palo); */ void UpdateAlo(ALO *palo, float dt); +/** + * @brief unknown + */ +void LoadAloFromBrx(ALO *palo, CBinaryInputStream *pbis); + +/** + * @brief unknown + */ +void SetAloTargetHitTest(ALO *palo, int fHitTest); + #endif // ALO_H diff --git a/include/coin.h b/include/coin.h index 346ca186..427c4f44 100644 --- a/include/coin.h +++ b/include/coin.h @@ -18,16 +18,6 @@ struct COIN; struct KEY; struct CHARM; -/** - * @brief Unknown -*/ -struct SNIP -{ - int grfsnip; - OID oid; - int ib; -}; - /** * @brief DPRIZE state. * @@ -125,6 +115,14 @@ struct CHARM : public DPRIZE */ void InitDprize(DPRIZE *pdprize); +/** + * @brief Loads a DPrize from an Input Stream + * + * @param pdprize DPrize to initialize + * @param pbis Input Stream + */ +void LoadDprizeFromBrx(DPRIZE *pdprize, CBinaryInputStream *pbis); + /** * @brief Initializes a DPrize * @@ -152,4 +150,7 @@ void InitCharm(CHARM *pcharm); */ void InitKey(KEY *pkey); + +extern SNIP s_asnipDprize[5]; + #endif // COIN_H diff --git a/src/P2/coin.c b/src/P2/coin.c index 5081eb0c..208d7b07 100644 --- a/src/P2/coin.c +++ b/src/P2/coin.c @@ -18,7 +18,12 @@ void InitDprize(DPRIZE *pdprize) pdprize->fLastBounce = 1; } -INCLUDE_ASM(const s32, "P2/coin", LoadDprizeFromBrx__FP6DPRIZEP18CBinaryInputStream); +void LoadDprizeFromBrx(DPRIZE *pdprize, CBinaryInputStream *pbis) +{ + SetAloTargetHitTest(pdprize, 1); + LoadAloFromBrx(pdprize, pbis); + SnipAloObjects(pdprize, 5, s_asnipDprize); +} INCLUDE_ASM(const s32, "P2/coin", CloneDprize__FP6DPRIZET0);