mirror of https://github.com/PrimeDecomp/prime.git
Add CBeamProjectile
This commit is contained in:
parent
04a530faeb
commit
7de5f08127
|
@ -3516,8 +3516,8 @@ Render__15CGameProjectileCFRC13CStateManager:
|
||||||
/* 8003A47C 000373DC 38 21 00 10 */ addi r1, r1, 0x10
|
/* 8003A47C 000373DC 38 21 00 10 */ addi r1, r1, 0x10
|
||||||
/* 8003A480 000373E0 4E 80 00 20 */ blr
|
/* 8003A480 000373E0 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
.global "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
"__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb":
|
"__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb":
|
||||||
/* 8003A484 000373E4 94 21 FE D0 */ stwu r1, -0x130(r1)
|
/* 8003A484 000373E4 94 21 FE D0 */ stwu r1, -0x130(r1)
|
||||||
/* 8003A488 000373E8 7C 08 02 A6 */ mflr r0
|
/* 8003A488 000373E8 7C 08 02 A6 */ mflr r0
|
||||||
/* 8003A48C 000373EC 90 01 01 34 */ stw r0, 0x134(r1)
|
/* 8003A48C 000373EC 90 01 01 34 */ stw r0, 0x134(r1)
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
.section .data
|
.section .data
|
||||||
.balign 8
|
.balign 8
|
||||||
|
|
||||||
.global lbl_803E4648
|
.global __vt__15CBeamProjectile
|
||||||
lbl_803E4648:
|
__vt__15CBeamProjectile:
|
||||||
# ROM: 0x3E1648
|
# ROM: 0x3E1648
|
||||||
.4byte 0
|
.4byte 0
|
||||||
.4byte 0
|
.4byte 0
|
||||||
|
@ -23,7 +23,7 @@ lbl_803E4648:
|
||||||
.4byte GetDamageVulnerability__6CActorCFv
|
.4byte GetDamageVulnerability__6CActorCFv
|
||||||
.4byte GetDamageVulnerability__6CActorCFRC9CVector3fRC9CVector3fRC11CDamageInfo
|
.4byte GetDamageVulnerability__6CActorCFRC9CVector3fRC9CVector3fRC11CDamageInfo
|
||||||
.4byte GetTouchBounds__15CBeamProjectileCFv
|
.4byte GetTouchBounds__15CBeamProjectileCFv
|
||||||
.4byte nullsub_142
|
.4byte Touch__15CBeamProjectileFR6CActorR13CStateManager
|
||||||
.4byte GetOrbitPosition__6CActorCFRC13CStateManager
|
.4byte GetOrbitPosition__6CActorCFRC13CStateManager
|
||||||
.4byte GetAimPosition__6CActorCFRC13CStateManagerf
|
.4byte GetAimPosition__6CActorCFRC13CStateManagerf
|
||||||
.4byte GetHomingPosition__6CActorCFRC13CStateManagerf
|
.4byte GetHomingPosition__6CActorCFRC13CStateManagerf
|
||||||
|
@ -263,7 +263,7 @@ lbl_80198E8C:
|
||||||
/* 80199118 00196078 38 C1 00 14 */ addi r6, r1, 0x14
|
/* 80199118 00196078 38 C1 00 14 */ addi r6, r1, 0x14
|
||||||
/* 8019911C 0019607C B0 01 00 14 */ sth r0, 0x14(r1)
|
/* 8019911C 0019607C B0 01 00 14 */ sth r0, 0x14(r1)
|
||||||
/* 80199120 00196080 38 80 00 01 */ li r4, 1
|
/* 80199120 00196080 38 80 00 01 */ li r4, 1
|
||||||
/* 80199124 00196084 48 00 01 9D */ bl SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeRC14CRayCastResult
|
/* 80199124 00196084 48 00 01 9D */ bl SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeR14CRayCastResult9TUniqueId
|
||||||
/* 80199128 00196088 88 1C 04 64 */ lbz r0, 0x464(r28)
|
/* 80199128 00196088 88 1C 04 64 */ lbz r0, 0x464(r28)
|
||||||
/* 8019912C 0019608C 54 00 D7 FF */ rlwinm. r0, r0, 0x1a, 0x1f, 0x1f
|
/* 8019912C 0019608C 54 00 D7 FF */ rlwinm. r0, r0, 0x1a, 0x1f, 0x1f
|
||||||
/* 80199130 00196090 41 82 01 08 */ beq lbl_80199238
|
/* 80199130 00196090 41 82 01 08 */ beq lbl_80199238
|
||||||
|
@ -286,7 +286,7 @@ lbl_80199158:
|
||||||
/* 80199170 001960D0 38 C1 00 10 */ addi r6, r1, 0x10
|
/* 80199170 001960D0 38 C1 00 10 */ addi r6, r1, 0x10
|
||||||
/* 80199174 001960D4 B0 01 00 10 */ sth r0, 0x10(r1)
|
/* 80199174 001960D4 B0 01 00 10 */ sth r0, 0x10(r1)
|
||||||
/* 80199178 001960D8 38 80 00 02 */ li r4, 2
|
/* 80199178 001960D8 38 80 00 02 */ li r4, 2
|
||||||
/* 8019917C 001960DC 48 00 01 45 */ bl SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeRC14CRayCastResult
|
/* 8019917C 001960DC 48 00 01 45 */ bl SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeR14CRayCastResult9TUniqueId
|
||||||
/* 80199180 001960E0 88 1C 04 64 */ lbz r0, 0x464(r28)
|
/* 80199180 001960E0 88 1C 04 64 */ lbz r0, 0x464(r28)
|
||||||
/* 80199184 001960E4 54 00 D7 FF */ rlwinm. r0, r0, 0x1a, 0x1f, 0x1f
|
/* 80199184 001960E4 54 00 D7 FF */ rlwinm. r0, r0, 0x1a, 0x1f, 0x1f
|
||||||
/* 80199188 001960E8 41 82 00 B0 */ beq lbl_80199238
|
/* 80199188 001960E8 41 82 00 B0 */ beq lbl_80199238
|
||||||
|
@ -375,8 +375,8 @@ lbl_80199298:
|
||||||
/* 801992B8 00196218 38 21 09 F0 */ addi r1, r1, 0x9f0
|
/* 801992B8 00196218 38 21 09 F0 */ addi r1, r1, 0x9f0
|
||||||
/* 801992BC 0019621C 4E 80 00 20 */ blr
|
/* 801992BC 0019621C 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeRC14CRayCastResult
|
.global SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeR14CRayCastResult9TUniqueId
|
||||||
SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeRC14CRayCastResult:
|
SetCollisionResultData__15CBeamProjectileFQ215CBeamProjectile11EDamageTypeR14CRayCastResult9TUniqueId:
|
||||||
/* 801992C0 00196220 94 21 FF F0 */ stwu r1, -0x10(r1)
|
/* 801992C0 00196220 94 21 FF F0 */ stwu r1, -0x10(r1)
|
||||||
/* 801992C4 00196224 7C 08 02 A6 */ mflr r0
|
/* 801992C4 00196224 7C 08 02 A6 */ mflr r0
|
||||||
/* 801992C8 00196228 2C 04 00 01 */ cmpwi r4, 1
|
/* 801992C8 00196228 2C 04 00 01 */ cmpwi r4, 1
|
||||||
|
@ -419,8 +419,8 @@ ResetBeam__15CBeamProjectileFR13CStateManagerb:
|
||||||
/* 80199348 001962A8 D0 03 03 00 */ stfs f0, 0x300(r3)
|
/* 80199348 001962A8 D0 03 03 00 */ stfs f0, 0x300(r3)
|
||||||
/* 8019934C 001962AC 4E 80 00 20 */ blr
|
/* 8019934C 001962AC 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global nullsub_142
|
.global Touch__15CBeamProjectileFR6CActorR13CStateManager
|
||||||
nullsub_142:
|
Touch__15CBeamProjectileFR6CActorR13CStateManager:
|
||||||
/* 80199350 001962B0 4E 80 00 20 */ blr
|
/* 80199350 001962B0 4E 80 00 20 */ blr
|
||||||
|
|
||||||
.global Accept__15CBeamProjectileFR8IVisitor
|
.global Accept__15CBeamProjectileFR8IVisitor
|
||||||
|
@ -571,7 +571,7 @@ lbl_80199484:
|
||||||
/* 80199560 001964C0 93 01 00 24 */ stw r24, 0x24(r1)
|
/* 80199560 001964C0 93 01 00 24 */ stw r24, 0x24(r1)
|
||||||
/* 80199564 001964C4 93 21 00 28 */ stw r25, 0x28(r1)
|
/* 80199564 001964C4 93 21 00 28 */ stw r25, 0x28(r1)
|
||||||
/* 80199568 001964C8 90 01 00 2C */ stw r0, 0x2c(r1)
|
/* 80199568 001964C8 90 01 00 2C */ stw r0, 0x2c(r1)
|
||||||
/* 8019956C 001964CC 4B EA 0F 19 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
/* 8019956C 001964CC 4B EA 0F 19 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
/* 80199570 001964D0 88 01 00 4C */ lbz r0, 0x4c(r1)
|
/* 80199570 001964D0 88 01 00 4C */ lbz r0, 0x4c(r1)
|
||||||
/* 80199574 001964D4 28 00 00 00 */ cmplwi r0, 0
|
/* 80199574 001964D4 28 00 00 00 */ cmplwi r0, 0
|
||||||
/* 80199578 001964D8 41 82 00 1C */ beq lbl_80199594
|
/* 80199578 001964D8 41 82 00 1C */ beq lbl_80199594
|
||||||
|
@ -583,9 +583,9 @@ lbl_80199484:
|
||||||
/* 80199590 001964F0 48 1A 78 B1 */ bl __dt__6CTokenFv
|
/* 80199590 001964F0 48 1A 78 B1 */ bl __dt__6CTokenFv
|
||||||
lbl_80199594:
|
lbl_80199594:
|
||||||
/* 80199594 001964F4 38 00 00 00 */ li r0, 0
|
/* 80199594 001964F4 38 00 00 00 */ li r0, 0
|
||||||
/* 80199598 001964F8 3C 60 80 3E */ lis r3, lbl_803E4648@ha
|
/* 80199598 001964F8 3C 60 80 3E */ lis r3, __vt__15CBeamProjectile@ha
|
||||||
/* 8019959C 001964FC 98 01 00 4C */ stb r0, 0x4c(r1)
|
/* 8019959C 001964FC 98 01 00 4C */ stb r0, 0x4c(r1)
|
||||||
/* 801995A0 00196500 38 03 46 48 */ addi r0, r3, lbl_803E4648@l
|
/* 801995A0 00196500 38 03 46 48 */ addi r0, r3, __vt__15CBeamProjectile@l
|
||||||
/* 801995A4 00196504 7F C3 F3 78 */ mr r3, r30
|
/* 801995A4 00196504 7F C3 F3 78 */ mr r3, r30
|
||||||
/* 801995A8 00196508 90 1A 00 00 */ stw r0, 0(r26)
|
/* 801995A8 00196508 90 1A 00 00 */ stw r0, 0(r26)
|
||||||
/* 801995AC 0019650C 48 1F 38 71 */ bl abs
|
/* 801995AC 0019650C 48 1F 38 71 */ bl abs
|
||||||
|
|
|
@ -2007,7 +2007,7 @@ lbl_80215680:
|
||||||
/* 8021576C 002126CC 93 C1 00 24 */ stw r30, 0x24(r1)
|
/* 8021576C 002126CC 93 C1 00 24 */ stw r30, 0x24(r1)
|
||||||
/* 80215770 002126D0 93 E1 00 28 */ stw r31, 0x28(r1)
|
/* 80215770 002126D0 93 E1 00 28 */ stw r31, 0x28(r1)
|
||||||
/* 80215774 002126D4 91 E1 00 2C */ stw r15, 0x2c(r1)
|
/* 80215774 002126D4 91 E1 00 2C */ stw r15, 0x2c(r1)
|
||||||
/* 80215778 002126D8 4B E2 4D 0D */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
/* 80215778 002126D8 4B E2 4D 0D */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
/* 8021577C 002126DC 38 61 00 40 */ addi r3, r1, 0x40
|
/* 8021577C 002126DC 38 61 00 40 */ addi r3, r1, 0x40
|
||||||
/* 80215780 002126E0 48 12 83 61 */ bl "internal_dereference__Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>Fv"
|
/* 80215780 002126E0 48 12 83 61 */ bl "internal_dereference__Q24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>Fv"
|
||||||
/* 80215784 002126E4 3C 60 80 3E */ lis r3, __vt__17CEnergyProjectile@ha
|
/* 80215784 002126E4 3C 60 80 3E */ lis r3, __vt__17CEnergyProjectile@ha
|
||||||
|
|
|
@ -1639,7 +1639,7 @@ lbl_80198AE8:
|
||||||
/* 80198BB0 00195B10 91 61 00 24 */ stw r11, 0x24(r1)
|
/* 80198BB0 00195B10 91 61 00 24 */ stw r11, 0x24(r1)
|
||||||
/* 80198BB4 00195B14 90 01 00 28 */ stw r0, 0x28(r1)
|
/* 80198BB4 00195B14 90 01 00 28 */ stw r0, 0x28(r1)
|
||||||
/* 80198BB8 00195B18 92 A1 00 2C */ stw r21, 0x2c(r1)
|
/* 80198BB8 00195B18 92 A1 00 2C */ stw r21, 0x2c(r1)
|
||||||
/* 80198BBC 00195B1C 4B EA 18 C9 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
/* 80198BBC 00195B1C 4B EA 18 C9 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
/* 80198BC0 00195B20 88 01 00 70 */ lbz r0, 0x70(r1)
|
/* 80198BC0 00195B20 88 01 00 70 */ lbz r0, 0x70(r1)
|
||||||
/* 80198BC4 00195B24 28 00 00 00 */ cmplwi r0, 0
|
/* 80198BC4 00195B24 28 00 00 00 */ cmplwi r0, 0
|
||||||
/* 80198BC8 00195B28 41 82 00 1C */ beq lbl_80198BE4
|
/* 80198BC8 00195B28 41 82 00 1C */ beq lbl_80198BE4
|
||||||
|
|
|
@ -3798,7 +3798,7 @@ GetTouchBounds__16CNewFlameThrowerCFv:
|
||||||
/* 802644D4 00261434 91 61 00 24 */ stw r11, 0x24(r1)
|
/* 802644D4 00261434 91 61 00 24 */ stw r11, 0x24(r1)
|
||||||
/* 802644D8 00261438 90 01 00 28 */ stw r0, 0x28(r1)
|
/* 802644D8 00261438 90 01 00 28 */ stw r0, 0x28(r1)
|
||||||
/* 802644DC 0026143C 93 01 00 2C */ stw r24, 0x2c(r1)
|
/* 802644DC 0026143C 93 01 00 2C */ stw r24, 0x2c(r1)
|
||||||
/* 802644E0 00261440 4B DD 5F A5 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
/* 802644E0 00261440 4B DD 5F A5 */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
/* 802644E4 00261444 88 01 00 DC */ lbz r0, 0xdc(r1)
|
/* 802644E4 00261444 88 01 00 DC */ lbz r0, 0xdc(r1)
|
||||||
/* 802644E8 00261448 28 00 00 00 */ cmplwi r0, 0
|
/* 802644E8 00261448 28 00 00 00 */ cmplwi r0, 0
|
||||||
/* 802644EC 0026144C 41 82 00 1C */ beq lbl_80264508
|
/* 802644EC 0026144C 41 82 00 1C */ beq lbl_80264508
|
||||||
|
|
|
@ -203,9 +203,9 @@ __dt__15CBeamProjectileFv:
|
||||||
/* 80176D2C 00173C8C 93 C1 00 08 */ stw r30, 8(r1)
|
/* 80176D2C 00173C8C 93 C1 00 08 */ stw r30, 8(r1)
|
||||||
/* 80176D30 00173C90 7C 9E 23 78 */ mr r30, r4
|
/* 80176D30 00173C90 7C 9E 23 78 */ mr r30, r4
|
||||||
/* 80176D34 00173C94 41 82 00 E4 */ beq lbl_80176E18
|
/* 80176D34 00173C94 41 82 00 E4 */ beq lbl_80176E18
|
||||||
/* 80176D38 00173C98 3C 60 80 3E */ lis r3, lbl_803E4648@ha
|
/* 80176D38 00173C98 3C 60 80 3E */ lis r3, __vt__15CBeamProjectile@ha
|
||||||
/* 80176D3C 00173C9C 34 1F 04 00 */ addic. r0, r31, 0x400
|
/* 80176D3C 00173C9C 34 1F 04 00 */ addic. r0, r31, 0x400
|
||||||
/* 80176D40 00173CA0 38 03 46 48 */ addi r0, r3, lbl_803E4648@l
|
/* 80176D40 00173CA0 38 03 46 48 */ addi r0, r3, __vt__15CBeamProjectile@l
|
||||||
/* 80176D44 00173CA4 90 1F 00 00 */ stw r0, 0(r31)
|
/* 80176D44 00173CA4 90 1F 00 00 */ stw r0, 0(r31)
|
||||||
/* 80176D48 00173CA8 41 82 00 58 */ beq lbl_80176DA0
|
/* 80176D48 00173CA8 41 82 00 58 */ beq lbl_80176DA0
|
||||||
/* 80176D4C 00173CAC 80 BF 04 00 */ lwz r5, 0x400(r31)
|
/* 80176D4C 00173CAC 80 BF 04 00 */ lwz r5, 0x400(r31)
|
||||||
|
|
|
@ -3040,7 +3040,7 @@ sub_801c0144:
|
||||||
/* 801C025C 001BD1BC 91 81 00 24 */ stw r12, 0x24(r1)
|
/* 801C025C 001BD1BC 91 81 00 24 */ stw r12, 0x24(r1)
|
||||||
/* 801C0260 001BD1C0 91 61 00 28 */ stw r11, 0x28(r1)
|
/* 801C0260 001BD1C0 91 61 00 28 */ stw r11, 0x28(r1)
|
||||||
/* 801C0264 001BD1C4 90 01 00 2C */ stw r0, 0x2c(r1)
|
/* 801C0264 001BD1C4 90 01 00 2C */ stw r0, 0x2c(r1)
|
||||||
/* 801C0268 001BD1C8 4B E7 A2 1D */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>sb"
|
/* 801C0268 001BD1C8 4B E7 A2 1D */ bl "__ct__15CGameProjectileFbRC28TToken<18CWeaponDescription>RCQ24rstl66basic_string<c,Q24rstl14char_traits<c>,Q24rstl17rmemory_allocator>11EWeaponTypeRC12CTransform4f14EMaterialTypesRC11CDamageInfo9TUniqueId7TAreaId9TUniqueId9TUniqueIdUibRC9CVector3fRCQ24rstl50optional_object<31TLockedToken<15CGenDescription>>Usb"
|
||||||
/* 801C026C 001BD1CC 88 01 00 A4 */ lbz r0, 0xa4(r1)
|
/* 801C026C 001BD1CC 88 01 00 A4 */ lbz r0, 0xa4(r1)
|
||||||
/* 801C0270 001BD1D0 28 00 00 00 */ cmplwi r0, 0
|
/* 801C0270 001BD1D0 28 00 00 00 */ cmplwi r0, 0
|
||||||
/* 801C0274 001BD1D4 41 82 00 1C */ beq lbl_801C0290
|
/* 801C0274 001BD1D4 41 82 00 1C */ beq lbl_801C0290
|
||||||
|
|
|
@ -252,7 +252,7 @@ LIBS = [
|
||||||
["MetroidPrime/ScriptObjects/CScriptEMPulse", False],
|
["MetroidPrime/ScriptObjects/CScriptEMPulse", False],
|
||||||
"MetroidPrime/HUD/CHudDecoInterface",
|
"MetroidPrime/HUD/CHudDecoInterface",
|
||||||
"MetroidPrime/Weapons/CFlameThrower",
|
"MetroidPrime/Weapons/CFlameThrower",
|
||||||
"MetroidPrime/Weapons/CBeamProjectile",
|
["MetroidPrime/Weapons/CBeamProjectile", False],
|
||||||
"MetroidPrime/CFluidPlaneCPU",
|
"MetroidPrime/CFluidPlaneCPU",
|
||||||
"MetroidPrime/CFluidPlaneDoor",
|
"MetroidPrime/CFluidPlaneDoor",
|
||||||
["MetroidPrime/ScriptObjects/CScriptRoomAcoustics", True],
|
["MetroidPrime/ScriptObjects/CScriptRoomAcoustics", True],
|
||||||
|
|
|
@ -19,8 +19,17 @@ public:
|
||||||
const CTransform4f& xf, int maxLength, float beamRadius, float travelSpeed,
|
const CTransform4f& xf, int maxLength, float beamRadius, float travelSpeed,
|
||||||
EMaterialTypes matType, const CDamageInfo& dInfo, TUniqueId uid, TAreaId aid, TUniqueId owner,
|
EMaterialTypes matType, const CDamageInfo& dInfo, TUniqueId uid, TAreaId aid, TUniqueId owner,
|
||||||
EProjectileAttrib attribs, bool growingBeam);
|
EProjectileAttrib attribs, bool growingBeam);
|
||||||
~CBeamProjectile() override;
|
|
||||||
|
|
||||||
|
// CEntity
|
||||||
|
~CBeamProjectile() override;
|
||||||
|
void Accept(IVisitor& visitor) override;
|
||||||
|
|
||||||
|
// CActor
|
||||||
|
rstl::optional_object<CAABox> GetTouchBounds() const override;
|
||||||
|
void Touch(CActor&, CStateManager&) override;
|
||||||
|
void CalculateRenderBounds() override;
|
||||||
|
|
||||||
|
// CBeamProjectile
|
||||||
virtual void UpdateFx(const CTransform4f&, float, CStateManager&);
|
virtual void UpdateFx(const CTransform4f&, float, CStateManager&);
|
||||||
virtual void ResetBeam(CStateManager&, bool);
|
virtual void ResetBeam(CStateManager&, bool);
|
||||||
virtual void Fire(const CTransform4f&, CStateManager&, bool) = 0;
|
virtual void Fire(const CTransform4f&, CStateManager&, bool) = 0;
|
||||||
|
@ -51,6 +60,8 @@ private:
|
||||||
rstl::reserved_vector< CVector3f, 8 > x400_pointCache;
|
rstl::reserved_vector< CVector3f, 8 > x400_pointCache;
|
||||||
bool x464_24_growingBeam : 1;
|
bool x464_24_growingBeam : 1;
|
||||||
bool x464_25_enableTouchDamage : 1;
|
bool x464_25_enableTouchDamage : 1;
|
||||||
|
|
||||||
|
void SetCollisionResultData(EDamageType dType, CRayCastResult& res, TUniqueId id);
|
||||||
};
|
};
|
||||||
CHECK_SIZEOF(CBeamProjectile, 0x468)
|
CHECK_SIZEOF(CBeamProjectile, 0x468)
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
|
#include "MetroidPrime/CStateManager.hpp"
|
||||||
#include "MetroidPrime/Weapons/CProjectileWeapon.hpp"
|
#include "MetroidPrime/Weapons/CProjectileWeapon.hpp"
|
||||||
#include "MetroidPrime/Weapons/CWeapon.hpp"
|
#include "MetroidPrime/Weapons/CWeapon.hpp"
|
||||||
|
|
||||||
|
@ -16,7 +17,13 @@ class CProjectileTouchResult;
|
||||||
|
|
||||||
class CGameProjectile : public CWeapon {
|
class CGameProjectile : public CWeapon {
|
||||||
public:
|
public:
|
||||||
// TODO ctor
|
CGameProjectile(bool active, const TToken< CWeaponDescription >&, const rstl::string& name,
|
||||||
|
EWeaponType wType, const CTransform4f& xf, EMaterialTypes excludeMat,
|
||||||
|
const CDamageInfo& dInfo, TUniqueId uid, TAreaId aid, TUniqueId owner,
|
||||||
|
TUniqueId homingTarget, uint attribs, bool underwater,
|
||||||
|
const CVector3f& scale,
|
||||||
|
const rstl::optional_object< TLockedToken< CGenDescription > >& visorParticle,
|
||||||
|
ushort visorSfx, bool sendCollideMsg);
|
||||||
|
|
||||||
// CEntity
|
// CEntity
|
||||||
~CGameProjectile() override;
|
~CGameProjectile() override;
|
||||||
|
@ -41,6 +48,10 @@ public:
|
||||||
bool GetWeaponActive() const { return x2e4_24_active; }
|
bool GetWeaponActive() const { return x2e4_24_active; }
|
||||||
void DeleteProjectileLight(CStateManager&);
|
void DeleteProjectileLight(CStateManager&);
|
||||||
|
|
||||||
|
void ApplyDamageToActors(CStateManager& mgr, const CDamageInfo& dInfo);
|
||||||
|
CRayCastResult RayCollisionCheckWithWorld(TUniqueId& idOut, const CVector3f& start, const CVector3f& end,
|
||||||
|
float mag, const TEntityList& nearList, CStateManager& mgr);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
rstl::optional_object< TLockedToken< CGenDescription > > x158_visorParticle;
|
rstl::optional_object< TLockedToken< CGenDescription > > x158_visorParticle;
|
||||||
ushort x168_visorSfx;
|
ushort x168_visorSfx;
|
||||||
|
|
|
@ -30,6 +30,7 @@ public:
|
||||||
EProjectileAttrib GetAttribField() const { return xe8_projectileAttribs; }
|
EProjectileAttrib GetAttribField() const { return xe8_projectileAttribs; }
|
||||||
TUniqueId GetOwnerId() const { return xec_ownerId; }
|
TUniqueId GetOwnerId() const { return xec_ownerId; }
|
||||||
EWeaponType GetWeaponType() const { return xf0_weaponType; }
|
EWeaponType GetWeaponType() const { return xf0_weaponType; }
|
||||||
|
CMaterialFilter GetFilter() const { return xf8_filter; }
|
||||||
CDamageInfo& OrigDamageInfo() { return x110_origDamageInfo; }
|
CDamageInfo& OrigDamageInfo() { return x110_origDamageInfo; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
11
libc/math.h
11
libc/math.h
|
@ -43,15 +43,16 @@ typedef int _INT32;
|
||||||
typedef unsigned int _UINT32;
|
typedef unsigned int _UINT32;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int abs(int n);
|
||||||
#ifdef __MWERKS__
|
#ifdef __MWERKS__
|
||||||
#define abs(n) __abs(n)
|
// #define abs(n) __abs(n)
|
||||||
#define labs(n) __labs(n)
|
#define labs(n) __labs(n)
|
||||||
static inline double fabs(double x) { return __fabs(x); }
|
static inline double fabs(double x) { return __fabs(x); }
|
||||||
#else
|
#else
|
||||||
static inline int abs(int n) {
|
// static inline int abs(int n) {
|
||||||
int mask = n >> 31;
|
// int mask = n >> 31;
|
||||||
return (n + mask) ^ mask;
|
// return (n + mask) ^ mask;
|
||||||
}
|
// }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern _INT32 __float_huge[];
|
extern _INT32 __float_huge[];
|
||||||
|
|
|
@ -0,0 +1,116 @@
|
||||||
|
#include "MetroidPrime/Weapons/CBeamProjectile.hpp"
|
||||||
|
|
||||||
|
#include "Collision/CRayCastResult.hpp"
|
||||||
|
#include "Kyoto/Audio/CSfxManager.hpp"
|
||||||
|
|
||||||
|
CBeamProjectile::CBeamProjectile(const TToken< CWeaponDescription >& wDesc,
|
||||||
|
const rstl::string& name, EWeaponType wType,
|
||||||
|
const CTransform4f& xf, int maxLength, float beamRadius,
|
||||||
|
float travelSpeed, EMaterialTypes matType,
|
||||||
|
const CDamageInfo& dInfo, TUniqueId uid, TAreaId aid,
|
||||||
|
TUniqueId owner, EProjectileAttrib attribs, bool growingBeam)
|
||||||
|
: CGameProjectile(false, wDesc, name, wType, xf, matType, dInfo, uid, aid, owner, kInvalidUniqueId,
|
||||||
|
attribs, false, CVector3f(1.f, 1.f, 1.f), rstl::optional_object_null(),
|
||||||
|
CSfxManager::kInternalInvalidSfxId, false)
|
||||||
|
, x2e8_intMaxLength(CMath::AbsI(maxLength))
|
||||||
|
, x2ec_maxLength(x2e8_intMaxLength)
|
||||||
|
, x2f0_invMaxLength(1.f / x2ec_maxLength)
|
||||||
|
, x2f4_beamRadius(beamRadius)
|
||||||
|
, x2f8_damageType(kDT_None)
|
||||||
|
, x2fc_(kInvalidUniqueId)
|
||||||
|
, x2fe_collisionActorId(kInvalidUniqueId)
|
||||||
|
, x300_intBeamLength(growingBeam ? 0.f : x2ec_maxLength)
|
||||||
|
, x304_beamLength(x2ec_maxLength)
|
||||||
|
, x308_travelSpeed(travelSpeed)
|
||||||
|
, x30c_collisionNormal(CVector3f::Up())
|
||||||
|
, x318_collisionPoint(CVector3f::Zero())
|
||||||
|
, x324_xf(CTransform4f::Identity())
|
||||||
|
, x354_(CAABox::Identity())
|
||||||
|
, x36c_(CAABox::Identity())
|
||||||
|
, x384_(CVector3f::Zero())
|
||||||
|
, x400_pointCache(CVector3f::Zero())
|
||||||
|
, x464_24_growingBeam(growingBeam)
|
||||||
|
, x464_25_enableTouchDamage(false) {}
|
||||||
|
|
||||||
|
rstl::optional_object< CAABox > CBeamProjectile::GetTouchBounds() const {
|
||||||
|
if (!GetActive() || !x464_25_enableTouchDamage) {
|
||||||
|
return rstl::optional_object_null();
|
||||||
|
}
|
||||||
|
const CVector3f pos = GetTranslation();
|
||||||
|
return CAABox(pos.GetX() - 0.1f, pos.GetY() - 0.1f, pos.GetZ() - 0.1f, pos.GetX() + 0.1f,
|
||||||
|
pos.GetY() + 0.1f, pos.GetZ() + 0.1f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBeamProjectile::CalculateRenderBounds() {
|
||||||
|
SetRenderBounds(x354_.GetTransformedAABox(x324_xf));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBeamProjectile::Accept(IVisitor& visitor) { visitor.Visit(*this); }
|
||||||
|
|
||||||
|
void CBeamProjectile::Touch(CActor&, CStateManager&) {}
|
||||||
|
|
||||||
|
void CBeamProjectile::ResetBeam(CStateManager&, bool) {
|
||||||
|
if (x464_24_growingBeam)
|
||||||
|
x300_intBeamLength = 0.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CBeamProjectile::SetCollisionResultData(EDamageType dType, CRayCastResult& res, TUniqueId id) {
|
||||||
|
x2f8_damageType = dType;
|
||||||
|
x304_beamLength = res.GetTime();
|
||||||
|
x318_collisionPoint = res.GetPoint();
|
||||||
|
x30c_collisionNormal = res.GetPlane().GetNormal();
|
||||||
|
x2fe_collisionActorId = dType == kDT_Actor ? id : kInvalidUniqueId;
|
||||||
|
SetTranslation(res.GetPoint());
|
||||||
|
}
|
||||||
|
|
||||||
|
void CBeamProjectile::UpdateFx(const CTransform4f& xf, float dt, CStateManager& mgr) {
|
||||||
|
if (!GetActive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
SetTransform(xf.GetRotation());
|
||||||
|
if (x464_24_growingBeam) {
|
||||||
|
x300_intBeamLength += x308_travelSpeed * dt;
|
||||||
|
if (x300_intBeamLength > x2ec_maxLength)
|
||||||
|
x300_intBeamLength = x2ec_maxLength;
|
||||||
|
}
|
||||||
|
x304_beamLength = x300_intBeamLength;
|
||||||
|
x2f8_damageType = kDT_None;
|
||||||
|
CVector3f beamEnd = xf.GetColumn(kDY).AsNormalized() * x300_intBeamLength + xf.GetTranslation();
|
||||||
|
x298_previousPos = xf.GetTranslation();
|
||||||
|
SetTranslation(beamEnd);
|
||||||
|
|
||||||
|
x354_ = CAABox(-x2f4_beamRadius, 0.f, -x2f4_beamRadius, x2f4_beamRadius, x304_beamLength,
|
||||||
|
x2f4_beamRadius);
|
||||||
|
|
||||||
|
x36c_ = CAABox(CVector3f(-x2f4_beamRadius, 0.f, -x2f4_beamRadius),
|
||||||
|
CVector3f(x2f4_beamRadius, x300_intBeamLength, x2f4_beamRadius))
|
||||||
|
.GetTransformedAABox(xf);
|
||||||
|
|
||||||
|
TUniqueId collideId = kInvalidUniqueId;
|
||||||
|
TEntityList nearList;
|
||||||
|
mgr.BuildNearList(nearList, x36c_,
|
||||||
|
CMaterialFilter::MakeExclude(CMaterialList(kMT_ProjectilePassthrough)),
|
||||||
|
this);
|
||||||
|
|
||||||
|
CRayCastResult res = RayCollisionCheckWithWorld(collideId, x298_previousPos, beamEnd,
|
||||||
|
x300_intBeamLength, nearList, mgr);
|
||||||
|
|
||||||
|
if (TCastToConstPtr< CActor >(mgr.ObjectById(collideId))) {
|
||||||
|
SetCollisionResultData(kDT_Actor, res, collideId);
|
||||||
|
if (x464_25_enableTouchDamage)
|
||||||
|
ApplyDamageToActors(mgr, CDamageInfo(x12c_curDamageInfo, dt));
|
||||||
|
|
||||||
|
} else if (res.IsValid()) {
|
||||||
|
SetCollisionResultData(kDT_World, res, kInvalidUniqueId);
|
||||||
|
if (x464_25_enableTouchDamage) {
|
||||||
|
CMaterialFilter filter(GetFilter());
|
||||||
|
CDamageInfo dmg(x12c_curDamageInfo, dt);
|
||||||
|
mgr.ApplyDamageToWorld(GetOwnerId(), *this, res.GetPoint(), dmg, filter);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
x318_collisionPoint = xf * CVector3f(x2f4_beamRadius, x304_beamLength, x2f4_beamRadius);
|
||||||
|
SetTranslation(x318_collisionPoint);
|
||||||
|
}
|
||||||
|
x324_xf = xf;
|
||||||
|
}
|
Loading…
Reference in New Issue