From d86009a79dedd7675f375dd9cf2e3df4dc75fd2c Mon Sep 17 00:00:00 2001 From: Henrique Gemignani Passos Lima Date: Mon, 5 Dec 2022 23:35:31 +0200 Subject: [PATCH] Add rstl::binary_find Including CAnimData::GetBoundingBox Former-commit-id: e4a864880ba8b0b7c023bb7562b86b7d07dbc99f --- asm/Kyoto/Animation/CAnimSource.s | 2 +- asm/Kyoto/Animation/CCharLayoutInfo.s | 9 +-- asm/Kyoto/Audio/DolphinCAudioSys.s | 20 ++--- asm/MetroidPrime/CAnimData.s | 72 ++++++++--------- asm/MetroidPrime/CParticleDatabase.s | 8 +- configure.py | 2 +- include/Kyoto/Animation/CAnimTreeNode.hpp | 6 +- include/MetroidPrime/CAnimData.hpp | 2 +- include/MetroidPrime/CCharacterInfo.hpp | 1 + include/MetroidPrime/Player/CPlayerState.hpp | 1 + include/rstl/algorithm.hpp | 85 +++++++++++++++++++- include/rstl/functional.hpp | 18 +++++ include/rstl/iterator.hpp | 12 +++ include/rstl/pair.hpp | 14 ++++ include/rstl/pointer_iterator.hpp | 4 + include/rstl/red_black_tree.hpp | 34 ++------ include/rstl/string.hpp | 6 ++ include/rstl/vector.hpp | 1 + src/MetroidPrime/CAnimData.cpp | 22 +++++ 19 files changed, 232 insertions(+), 87 deletions(-) create mode 100644 include/rstl/functional.hpp create mode 100644 src/MetroidPrime/CAnimData.cpp diff --git a/asm/Kyoto/Animation/CAnimSource.s b/asm/Kyoto/Animation/CAnimSource.s index 7226e641..6d245fee 100644 --- a/asm/Kyoto/Animation/CAnimSource.s +++ b/asm/Kyoto/Animation/CAnimSource.s @@ -1720,7 +1720,7 @@ sub_802edef0: /* 802EDF08 002EAE68 7C 9E 23 78 */ mr r30, r4 /* 802EDF0C 002EAE6C 93 A1 00 14 */ stw r29, 0x14(r1) /* 802EDF10 002EAE70 7C 7D 1B 78 */ mr r29, r3 -/* 802EDF14 002EAE74 4B D3 C8 3D */ bl sub_8002a750 +/* 802EDF14 002EAE74 4B D3 C8 3D */ bl "__lt__Q24rstl66basic_string,Q24rstl17rmemory_allocator>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 802EDF18 002EAE78 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802EDF1C 002EAE7C 40 82 00 28 */ bne lbl_802EDF44 /* 802EDF20 002EAE80 7F A3 EB 78 */ mr r3, r29 diff --git a/asm/Kyoto/Animation/CCharLayoutInfo.s b/asm/Kyoto/Animation/CCharLayoutInfo.s index 9dbb15f8..4b6e39eb 100644 --- a/asm/Kyoto/Animation/CCharLayoutInfo.s +++ b/asm/Kyoto/Animation/CCharLayoutInfo.s @@ -136,7 +136,7 @@ lbl_802F7D60: /* 802F7D60 002F4CC0 7F A5 EB 78 */ mr r5, r29 /* 802F7D64 002F4CC4 38 7C 00 01 */ addi r3, r28, 1 /* 802F7D68 002F4CC8 38 9F 00 10 */ addi r4, r31, 0x10 -/* 802F7D6C 002F4CCC 4B D3 29 BD */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 802F7D6C 002F4CCC 4B D3 29 BD */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 802F7D70 002F4CD0 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802F7D74 002F4CD4 40 82 00 10 */ bne lbl_802F7D84 /* 802F7D78 002F4CD8 7F FE FB 78 */ mr r30, r31 @@ -153,7 +153,7 @@ lbl_802F7D88: /* 802F7D9C 002F4CFC 7F A4 EB 78 */ mr r4, r29 /* 802F7DA0 002F4D00 38 7C 00 01 */ addi r3, r28, 1 /* 802F7DA4 002F4D04 38 BE 00 10 */ addi r5, r30, 0x10 -/* 802F7DA8 002F4D08 4B D3 29 81 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 802F7DA8 002F4D08 4B D3 29 81 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 802F7DAC 002F4D0C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802F7DB0 002F4D10 41 82 00 08 */ beq lbl_802F7DB8 lbl_802F7DB4: @@ -999,14 +999,14 @@ lbl_802F890C: /* 802F890C 002F586C 7F C4 F3 78 */ mr r4, r30 /* 802F8910 002F5870 38 7D 00 01 */ addi r3, r29, 1 /* 802F8914 002F5874 38 BF 00 10 */ addi r5, r31, 0x10 -/* 802F8918 002F5878 4B D3 1E 11 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 802F8918 002F5878 4B D3 1E 11 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 802F891C 002F587C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802F8920 002F5880 7C 7B 1B 78 */ mr r27, r3 /* 802F8924 002F5884 40 82 00 34 */ bne lbl_802F8958 /* 802F8928 002F5888 7F C5 F3 78 */ mr r5, r30 /* 802F892C 002F588C 38 7D 00 01 */ addi r3, r29, 1 /* 802F8930 002F5890 38 9F 00 10 */ addi r4, r31, 0x10 -/* 802F8934 002F5894 4B D3 1D F5 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 802F8934 002F5894 4B D3 1D F5 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 802F8938 002F5898 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 802F893C 002F589C 40 82 00 1C */ bne lbl_802F8958 /* 802F8940 002F58A0 93 FC 00 00 */ stw r31, 0(r28) @@ -1311,4 +1311,3 @@ lbl_803D6E28: # ROM: 0x3D3E28 .asciz "??(??)" .balign 4 - diff --git a/asm/Kyoto/Audio/DolphinCAudioSys.s b/asm/Kyoto/Audio/DolphinCAudioSys.s index eff984bf..ccc9c322 100644 --- a/asm/Kyoto/Audio/DolphinCAudioSys.s +++ b/asm/Kyoto/Audio/DolphinCAudioSys.s @@ -900,7 +900,7 @@ lbl_8034B1A8: /* 8034B1A8 00348108 7F A5 EB 78 */ mr r5, r29 /* 8034B1AC 0034810C 38 7C 00 01 */ addi r3, r28, 1 /* 8034B1B0 00348110 38 9F 00 10 */ addi r4, r31, 0x10 -/* 8034B1B4 00348114 4B CD F5 75 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034B1B4 00348114 4B CD F5 75 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034B1B8 00348118 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034B1BC 0034811C 40 82 00 10 */ bne lbl_8034B1CC /* 8034B1C0 00348120 7F FE FB 78 */ mr r30, r31 @@ -917,7 +917,7 @@ lbl_8034B1D0: /* 8034B1E4 00348144 7F A4 EB 78 */ mr r4, r29 /* 8034B1E8 00348148 38 7C 00 01 */ addi r3, r28, 1 /* 8034B1EC 0034814C 38 BE 00 10 */ addi r5, r30, 0x10 -/* 8034B1F0 00348150 4B CD F5 39 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034B1F0 00348150 4B CD F5 39 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034B1F4 00348154 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034B1F8 00348158 41 82 00 08 */ beq lbl_8034B200 lbl_8034B1FC: @@ -1364,7 +1364,7 @@ lbl_8034B7B8: /* 8034B7B8 00348718 7F A5 EB 78 */ mr r5, r29 /* 8034B7BC 0034871C 38 7C 00 01 */ addi r3, r28, 1 /* 8034B7C0 00348720 38 9F 00 10 */ addi r4, r31, 0x10 -/* 8034B7C4 00348724 4B CD EF 65 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034B7C4 00348724 4B CD EF 65 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034B7C8 00348728 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034B7CC 0034872C 40 82 00 10 */ bne lbl_8034B7DC /* 8034B7D0 00348730 7F FE FB 78 */ mr r30, r31 @@ -1381,7 +1381,7 @@ lbl_8034B7E0: /* 8034B7F4 00348754 7F A4 EB 78 */ mr r4, r29 /* 8034B7F8 00348758 38 7C 00 01 */ addi r3, r28, 1 /* 8034B7FC 0034875C 38 BE 00 10 */ addi r5, r30, 0x10 -/* 8034B800 00348760 4B CD EF 29 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034B800 00348760 4B CD EF 29 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034B804 00348764 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034B808 00348768 41 82 00 08 */ beq lbl_8034B810 lbl_8034B80C: @@ -1881,7 +1881,7 @@ lbl_8034BEC0: /* 8034BEC0 00348E20 7F A5 EB 78 */ mr r5, r29 /* 8034BEC4 00348E24 38 7C 00 01 */ addi r3, r28, 1 /* 8034BEC8 00348E28 38 9F 00 10 */ addi r4, r31, 0x10 -/* 8034BECC 00348E2C 4B CD E8 5D */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034BECC 00348E2C 4B CD E8 5D */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034BED0 00348E30 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034BED4 00348E34 40 82 00 10 */ bne lbl_8034BEE4 /* 8034BED8 00348E38 7F FE FB 78 */ mr r30, r31 @@ -1942,7 +1942,7 @@ lbl_8034BF90: /* 8034BF90 00348EF0 7F A4 EB 78 */ mr r4, r29 /* 8034BF94 00348EF4 38 7C 00 01 */ addi r3, r28, 1 /* 8034BF98 00348EF8 38 BF 00 10 */ addi r5, r31, 0x10 -/* 8034BF9C 00348EFC 4B CD E7 8D */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034BF9C 00348EFC 4B CD E7 8D */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034BFA0 00348F00 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034BFA4 00348F04 41 82 00 10 */ beq lbl_8034BFB4 /* 8034BFA8 00348F08 7F FE FB 78 */ mr r30, r31 @@ -2960,14 +2960,14 @@ lbl_8034CD94: /* 8034CD94 00349CF4 7F C4 F3 78 */ mr r4, r30 /* 8034CD98 00349CF8 38 7D 00 01 */ addi r3, r29, 1 /* 8034CD9C 00349CFC 38 BF 00 10 */ addi r5, r31, 0x10 -/* 8034CDA0 00349D00 4B CD D9 89 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034CDA0 00349D00 4B CD D9 89 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034CDA4 00349D04 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034CDA8 00349D08 7C 7B 1B 78 */ mr r27, r3 /* 8034CDAC 00349D0C 40 82 00 34 */ bne lbl_8034CDE0 /* 8034CDB0 00349D10 7F C5 F3 78 */ mr r5, r30 /* 8034CDB4 00349D14 38 7D 00 01 */ addi r3, r29, 1 /* 8034CDB8 00349D18 38 9F 00 10 */ addi r4, r31, 0x10 -/* 8034CDBC 00349D1C 4B CD D9 6D */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034CDBC 00349D1C 4B CD D9 6D */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034CDC0 00349D20 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034CDC4 00349D24 40 82 00 1C */ bne lbl_8034CDE0 /* 8034CDC8 00349D28 93 FC 00 00 */ stw r31, 0(r28) @@ -3290,14 +3290,14 @@ lbl_8034D24C: /* 8034D24C 0034A1AC 7F C4 F3 78 */ mr r4, r30 /* 8034D250 0034A1B0 38 7D 00 01 */ addi r3, r29, 1 /* 8034D254 0034A1B4 38 BF 00 10 */ addi r5, r31, 0x10 -/* 8034D258 0034A1B8 4B CD D4 D1 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034D258 0034A1B8 4B CD D4 D1 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034D25C 0034A1BC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034D260 0034A1C0 7C 7B 1B 78 */ mr r27, r3 /* 8034D264 0034A1C4 40 82 00 34 */ bne lbl_8034D298 /* 8034D268 0034A1C8 7F C5 F3 78 */ mr r5, r30 /* 8034D26C 0034A1CC 38 7D 00 01 */ addi r3, r29, 1 /* 8034D270 0034A1D0 38 9F 00 10 */ addi r4, r31, 0x10 -/* 8034D274 0034A1D4 4B CD D4 B5 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8034D274 0034A1D4 4B CD D4 B5 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8034D278 0034A1D8 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8034D27C 0034A1DC 40 82 00 1C */ bne lbl_8034D298 /* 8034D280 0034A1E0 93 FC 00 00 */ stw r31, 0(r28) diff --git a/asm/MetroidPrime/CAnimData.s b/asm/MetroidPrime/CAnimData.s index c6287906..6396190d 100644 --- a/asm/MetroidPrime/CAnimData.s +++ b/asm/MetroidPrime/CAnimData.s @@ -1459,27 +1459,27 @@ sub_8002a708: /* 8002A708 00027668 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8002A70C 0002766C 7C 08 02 A6 */ mflr r0 /* 8002A710 00027670 90 01 00 14 */ stw r0, 0x14(r1) -/* 8002A714 00027674 48 00 00 15 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8002A714 00027674 48 00 00 15 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8002A718 00027678 80 01 00 14 */ lwz r0, 0x14(r1) /* 8002A71C 0002767C 7C 08 03 A6 */ mtlr r0 /* 8002A720 00027680 38 21 00 10 */ addi r1, r1, 0x10 /* 8002A724 00027684 4E 80 00 20 */ blr -.global "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" -"__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>": +.global "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" +"__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>": /* 8002A728 00027688 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8002A72C 0002768C 7C 08 02 A6 */ mflr r0 /* 8002A730 00027690 7C 83 23 78 */ mr r3, r4 /* 8002A734 00027694 7C A4 2B 78 */ mr r4, r5 /* 8002A738 00027698 90 01 00 14 */ stw r0, 0x14(r1) -/* 8002A73C 0002769C 48 00 00 15 */ bl sub_8002a750 +/* 8002A73C 0002769C 48 00 00 15 */ bl "__lt__Q24rstl66basic_string,Q24rstl17rmemory_allocator>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8002A740 000276A0 80 01 00 14 */ lwz r0, 0x14(r1) /* 8002A744 000276A4 7C 08 03 A6 */ mtlr r0 /* 8002A748 000276A8 38 21 00 10 */ addi r1, r1, 0x10 /* 8002A74C 000276AC 4E 80 00 20 */ blr -.global sub_8002a750 -sub_8002a750: +.global "__lt__Q24rstl66basic_string,Q24rstl17rmemory_allocator>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" +"__lt__Q24rstl66basic_string,Q24rstl17rmemory_allocator>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>": /* 8002A750 000276B0 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8002A754 000276B4 7C 08 02 A6 */ mflr r0 /* 8002A758 000276B8 90 01 00 14 */ stw r0, 0x14(r1) @@ -6115,7 +6115,7 @@ lbl_8002E960: /* 8002E978 0002B8D8 7F E4 FB 78 */ mr r4, r31 /* 8002E97C 0002B8DC 38 61 00 08 */ addi r3, r1, 8 /* 8002E980 0002B8E0 38 A1 00 0C */ addi r5, r1, 0xc -/* 8002E984 0002B8E4 48 00 00 D1 */ bl sub_8002ea54 +/* 8002E984 0002B8E4 48 00 00 D1 */ bl "find_by_key,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>>__4rstlFRCQ24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8002E988 0002B8E8 83 C1 00 08 */ lwz r30, 8(r1) /* 8002E98C 0002B8EC 38 61 00 0C */ addi r3, r1, 0xc /* 8002E990 0002B8F0 48 30 F1 51 */ bl "internal_dereference__Q24rstl66basic_string,Q24rstl17rmemory_allocator>Fv" @@ -6171,8 +6171,8 @@ lbl_8002EA40: /* 8002EA4C 0002B9AC 38 21 00 C0 */ addi r1, r1, 0xc0 /* 8002EA50 0002B9B0 4E 80 00 20 */ blr -.global sub_8002ea54 -sub_8002ea54: +.global "find_by_key,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>>__4rstlFRCQ24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" +"find_by_key,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>>__4rstlFRCQ24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>": /* 8002EA54 0002B9B4 94 21 FF D0 */ stwu r1, -0x30(r1) /* 8002EA58 0002B9B8 7C 08 02 A6 */ mflr r0 /* 8002EA5C 0002B9BC 7C A6 2B 78 */ mr r6, r5 @@ -6193,15 +6193,15 @@ sub_8002ea54: /* 8002EA98 0002B9F8 90 01 00 14 */ stw r0, 0x14(r1) /* 8002EA9C 0002B9FC 90 01 00 18 */ stw r0, 0x18(r1) /* 8002EAA0 0002BA00 91 01 00 20 */ stw r8, 0x20(r1) -/* 8002EAA4 0002BA04 48 00 00 19 */ bl sub_8002eabc +/* 8002EAA4 0002BA04 48 00 00 19 */ bl "binary_find,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>" /* 8002EAA8 0002BA08 80 01 00 34 */ lwz r0, 0x34(r1) /* 8002EAAC 0002BA0C 83 E1 00 2C */ lwz r31, 0x2c(r1) /* 8002EAB0 0002BA10 7C 08 03 A6 */ mtlr r0 /* 8002EAB4 0002BA14 38 21 00 30 */ addi r1, r1, 0x30 /* 8002EAB8 0002BA18 4E 80 00 20 */ blr -.global sub_8002eabc -sub_8002eabc: +.global "binary_find,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>" +"binary_find,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>": /* 8002EABC 0002BA1C 94 21 FF C0 */ stwu r1, -0x40(r1) /* 8002EAC0 0002BA20 7C 08 02 A6 */ mflr r0 /* 8002EAC4 0002BA24 90 01 00 44 */ stw r0, 0x44(r1) @@ -6220,7 +6220,7 @@ sub_8002eabc: /* 8002EAF8 0002BA58 38 81 00 10 */ addi r4, r1, 0x10 /* 8002EAFC 0002BA5C 91 01 00 0C */ stw r8, 0xc(r1) /* 8002EB00 0002BA60 90 01 00 10 */ stw r0, 0x10(r1) -/* 8002EB04 0002BA64 48 00 25 0D */ bl sub_80031010 +/* 8002EB04 0002BA64 48 00 25 0D */ bl "lower_bound,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>" /* 8002EB08 0002BA68 80 A1 00 14 */ lwz r5, 0x14(r1) /* 8002EB0C 0002BA6C 3B E0 00 00 */ li r31, 0 /* 8002EB10 0002BA70 80 1C 00 00 */ lwz r0, 0(r28) @@ -6229,7 +6229,7 @@ sub_8002eabc: /* 8002EB1C 0002BA7C 41 82 00 1C */ beq lbl_8002EB38 /* 8002EB20 0002BA80 7F C3 F3 78 */ mr r3, r30 /* 8002EB24 0002BA84 7F A4 EB 78 */ mr r4, r29 -/* 8002EB28 0002BA88 48 00 00 41 */ bl sub_8002eb68 +/* 8002EB28 0002BA88 48 00 00 41 */ bl "__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>" /* 8002EB2C 0002BA8C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 8002EB30 0002BA90 40 82 00 08 */ bne lbl_8002EB38 /* 8002EB34 0002BA94 3B E0 00 01 */ li r31, 1 @@ -6249,12 +6249,12 @@ lbl_8002EB4C: /* 8002EB60 0002BAC0 38 21 00 40 */ addi r1, r1, 0x40 /* 8002EB64 0002BAC4 4E 80 00 20 */ blr -.global sub_8002eb68 -sub_8002eb68: +.global "__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>" +"__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>": /* 8002EB68 0002BAC8 94 21 FF F0 */ stwu r1, -0x10(r1) /* 8002EB6C 0002BACC 7C 08 02 A6 */ mflr r0 /* 8002EB70 0002BAD0 90 01 00 14 */ stw r0, 0x14(r1) -/* 8002EB74 0002BAD4 4B FF BB B5 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 8002EB74 0002BAD4 4B FF BB B5 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8002EB78 0002BAD8 80 01 00 14 */ lwz r0, 0x14(r1) /* 8002EB7C 0002BADC 7C 08 03 A6 */ mtlr r0 /* 8002EB80 0002BAE0 38 21 00 10 */ addi r1, r1, 0x10 @@ -8906,8 +8906,8 @@ lbl_80030FFC: /* 80031008 0002DF68 38 21 00 10 */ addi r1, r1, 0x10 /* 8003100C 0002DF6C 4E 80 00 20 */ blr -.global sub_80031010 -sub_80031010: +.global "lower_bound,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>" +"lower_bound,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,Q24rstl66basic_string,Q24rstl17rmemory_allocator>,Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>": /* 80031010 0002DF70 94 21 FF D0 */ stwu r1, -0x30(r1) /* 80031014 0002DF74 7C 08 02 A6 */ mflr r0 /* 80031018 0002DF78 90 01 00 34 */ stw r0, 0x34(r1) @@ -8922,7 +8922,7 @@ sub_80031010: /* 8003103C 0002DF9C 90 81 00 08 */ stw r4, 8(r1) /* 80031040 0002DFA0 38 81 00 08 */ addi r4, r1, 8 /* 80031044 0002DFA4 90 01 00 0C */ stw r0, 0xc(r1) -/* 80031048 0002DFA8 48 00 07 F9 */ bl sub_80031840 +/* 80031048 0002DFA8 48 00 07 F9 */ bl "distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>" /* 8003104C 0002DFAC 80 1F 00 00 */ lwz r0, 0(r31) /* 80031050 0002DFB0 7C 7D 1B 78 */ mr r29, r3 /* 80031054 0002DFB4 90 01 00 10 */ stw r0, 0x10(r1) @@ -8935,11 +8935,11 @@ lbl_8003105C: /* 8003106C 0002DFCC 7C 9C 0E 70 */ srawi r28, r4, 1 /* 80031070 0002DFD0 90 01 00 10 */ stw r0, 0x10(r1) /* 80031074 0002DFD4 7F 84 E3 78 */ mr r4, r28 -/* 80031078 0002DFD8 48 00 07 09 */ bl sub_80031780 +/* 80031078 0002DFD8 48 00 07 09 */ bl "advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>i" /* 8003107C 0002DFDC 80 81 00 10 */ lwz r4, 0x10(r1) /* 80031080 0002DFE0 7F 63 DB 78 */ mr r3, r27 /* 80031084 0002DFE4 7F 45 D3 78 */ mr r5, r26 -/* 80031088 0002DFE8 48 00 00 55 */ bl sub_800310dc +/* 80031088 0002DFE8 48 00 00 55 */ bl "__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 8003108C 0002DFEC 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 80031090 0002DFF0 41 82 00 24 */ beq lbl_800310B4 /* 80031094 0002DFF4 80 01 00 10 */ lwz r0, 0x10(r1) @@ -8963,12 +8963,12 @@ lbl_800310B8: /* 800310D4 0002E034 38 21 00 30 */ addi r1, r1, 0x30 /* 800310D8 0002E038 4E 80 00 20 */ blr -.global sub_800310dc -sub_800310dc: +.global "__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" +"__cl__Q24rstl209pair_sorter_finder,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl81less,Q24rstl17rmemory_allocator>>>CFRCQ24rstl89pair,Q24rstl17rmemory_allocator>,6CAABox>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>": /* 800310DC 0002E03C 94 21 FF F0 */ stwu r1, -0x10(r1) /* 800310E0 0002E040 7C 08 02 A6 */ mflr r0 /* 800310E4 0002E044 90 01 00 14 */ stw r0, 0x14(r1) -/* 800310E8 0002E048 4B FF 96 41 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800310E8 0002E048 4B FF 96 41 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800310EC 0002E04C 80 01 00 14 */ lwz r0, 0x14(r1) /* 800310F0 0002E050 7C 08 03 A6 */ mtlr r0 /* 800310F4 0002E054 38 21 00 10 */ addi r1, r1, 0x10 @@ -9036,7 +9036,7 @@ sub_800311c8: /* 800311C8 0002E128 94 21 FF F0 */ stwu r1, -0x10(r1) /* 800311CC 0002E12C 7C 08 02 A6 */ mflr r0 /* 800311D0 0002E130 90 01 00 14 */ stw r0, 0x14(r1) -/* 800311D4 0002E134 4B FF 95 55 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800311D4 0002E134 4B FF 95 55 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800311D8 0002E138 80 01 00 14 */ lwz r0, 0x14(r1) /* 800311DC 0002E13C 7C 08 03 A6 */ mtlr r0 /* 800311E0 0002E140 38 21 00 10 */ addi r1, r1, 0x10 @@ -9466,15 +9466,15 @@ lbl_8003176C: /* 80031778 0002E6D8 38 21 00 10 */ addi r1, r1, 0x10 /* 8003177C 0002E6DC 4E 80 00 20 */ blr -.global sub_80031780 -sub_80031780: +.global "advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>i" +"advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>i": /* 80031780 0002E6E0 94 21 FF F0 */ stwu r1, -0x10(r1) /* 80031784 0002E6E4 7C 08 02 A6 */ mflr r0 /* 80031788 0002E6E8 90 01 00 14 */ stw r0, 0x14(r1) /* 8003178C 0002E6EC 38 A1 00 0C */ addi r5, r1, 0xc /* 80031790 0002E6F0 88 01 00 08 */ lbz r0, 8(r1) /* 80031794 0002E6F4 98 01 00 0C */ stb r0, 0xc(r1) -/* 80031798 0002E6F8 48 00 00 95 */ bl sub_8003182c +/* 80031798 0002E6F8 48 00 00 95 */ bl "__advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>iQ24rstl26random_access_iterator_tag" /* 8003179C 0002E6FC 80 01 00 14 */ lwz r0, 0x14(r1) /* 800317A0 0002E700 7C 08 03 A6 */ mtlr r0 /* 800317A4 0002E704 38 21 00 10 */ addi r1, r1, 0x10 @@ -9524,16 +9524,16 @@ sub_80031818: /* 80031824 0002E784 90 03 00 00 */ stw r0, 0(r3) /* 80031828 0002E788 4E 80 00 20 */ blr -.global sub_8003182c -sub_8003182c: +.global "__advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>iQ24rstl26random_access_iterator_tag" +"__advance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>,i>__4rstlFRQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>iQ24rstl26random_access_iterator_tag": /* 8003182C 0002E78C 1C 04 00 28 */ mulli r0, r4, 0x28 /* 80031830 0002E790 80 83 00 00 */ lwz r4, 0(r3) /* 80031834 0002E794 7C 04 02 14 */ add r0, r4, r0 /* 80031838 0002E798 90 03 00 00 */ stw r0, 0(r3) /* 8003183C 0002E79C 4E 80 00 20 */ blr -.global sub_80031840 -sub_80031840: +.global "distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>" +"distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>": /* 80031840 0002E7A0 94 21 FF E0 */ stwu r1, -0x20(r1) /* 80031844 0002E7A4 7C 08 02 A6 */ mflr r0 /* 80031848 0002E7A8 90 01 00 24 */ stw r0, 0x24(r1) @@ -9546,7 +9546,7 @@ sub_80031840: /* 80031864 0002E7C4 90 C1 00 10 */ stw r6, 0x10(r1) /* 80031868 0002E7C8 98 E1 00 0C */ stb r7, 0xc(r1) /* 8003186C 0002E7CC 90 01 00 14 */ stw r0, 0x14(r1) -/* 80031870 0002E7D0 48 00 00 9D */ bl sub_8003190c +/* 80031870 0002E7D0 48 00 00 9D */ bl "__distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl26random_access_iterator_tag" /* 80031874 0002E7D4 80 01 00 24 */ lwz r0, 0x24(r1) /* 80031878 0002E7D8 7C 08 03 A6 */ mtlr r0 /* 8003187C 0002E7DC 38 21 00 20 */ addi r1, r1, 0x20 @@ -9592,8 +9592,8 @@ sub_80031884: /* 80031904 0002E864 38 21 00 20 */ addi r1, r1, 0x20 /* 80031908 0002E868 4E 80 00 20 */ blr -.global sub_8003190c -sub_8003190c: +.global "__distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl26random_access_iterator_tag" +"__distance,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>>__4rstlFQ24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl293const_pointer_iterator,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl133vector,Q24rstl17rmemory_allocator>,6CAABox>,Q24rstl17rmemory_allocator>,Q24rstl17rmemory_allocator>Q24rstl26random_access_iterator_tag": /* 8003190C 0002E86C 80 A3 00 00 */ lwz r5, 0(r3) /* 80031910 0002E870 3C 60 66 66 */ lis r3, 0x66666667@ha /* 80031914 0002E874 80 04 00 00 */ lwz r0, 0(r4) diff --git a/asm/MetroidPrime/CParticleDatabase.s b/asm/MetroidPrime/CParticleDatabase.s index ed6f33f0..ab0341e0 100644 --- a/asm/MetroidPrime/CParticleDatabase.s +++ b/asm/MetroidPrime/CParticleDatabase.s @@ -1590,7 +1590,7 @@ lbl_800B8ED8: /* 800B8ED8 000B5E38 7F A5 EB 78 */ mr r5, r29 /* 800B8EDC 000B5E3C 38 7C 00 01 */ addi r3, r28, 1 /* 800B8EE0 000B5E40 38 9F 00 10 */ addi r4, r31, 0x10 -/* 800B8EE4 000B5E44 4B F7 18 45 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800B8EE4 000B5E44 4B F7 18 45 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800B8EE8 000B5E48 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800B8EEC 000B5E4C 40 82 00 10 */ bne lbl_800B8EFC /* 800B8EF0 000B5E50 7F FE FB 78 */ mr r30, r31 @@ -1607,7 +1607,7 @@ lbl_800B8F00: /* 800B8F14 000B5E74 7F A4 EB 78 */ mr r4, r29 /* 800B8F18 000B5E78 38 7C 00 01 */ addi r3, r28, 1 /* 800B8F1C 000B5E7C 38 BE 00 10 */ addi r5, r30, 0x10 -/* 800B8F20 000B5E80 4B F7 18 09 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800B8F20 000B5E80 4B F7 18 09 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800B8F24 000B5E84 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800B8F28 000B5E88 41 82 00 08 */ beq lbl_800B8F30 lbl_800B8F2C: @@ -4409,14 +4409,14 @@ lbl_800BB62C: /* 800BB62C 000B858C 7F C4 F3 78 */ mr r4, r30 /* 800BB630 000B8590 38 7D 00 01 */ addi r3, r29, 1 /* 800BB634 000B8594 38 BF 00 10 */ addi r5, r31, 0x10 -/* 800BB638 000B8598 4B F6 F0 F1 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800BB638 000B8598 4B F6 F0 F1 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800BB63C 000B859C 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800BB640 000B85A0 7C 7B 1B 78 */ mr r27, r3 /* 800BB644 000B85A4 40 82 00 34 */ bne lbl_800BB678 /* 800BB648 000B85A8 7F C5 F3 78 */ mr r5, r30 /* 800BB64C 000B85AC 38 7D 00 01 */ addi r3, r29, 1 /* 800BB650 000B85B0 38 9F 00 10 */ addi r4, r31, 0x10 -/* 800BB654 000B85B4 4B F6 F0 D5 */ bl "__cl__Q24rstl140select1st,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>>CFRCQ24rstl119pair,Q24rstl17rmemory_allocator>,Q24rstl28auto_ptr<16CParticleGenInfo>>" +/* 800BB654 000B85B4 4B F6 F0 D5 */ bl "__cl__Q24rstl81less,Q24rstl17rmemory_allocator>>CFRCQ24rstl66basic_string,Q24rstl17rmemory_allocator>RCQ24rstl66basic_string,Q24rstl17rmemory_allocator>" /* 800BB658 000B85B8 54 60 06 3F */ clrlwi. r0, r3, 0x18 /* 800BB65C 000B85BC 40 82 00 1C */ bne lbl_800BB678 /* 800BB660 000B85C0 93 FC 00 00 */ stw r31, 0(r28) diff --git a/configure.py b/configure.py index e817b81a..8e1464ae 100755 --- a/configure.py +++ b/configure.py @@ -32,7 +32,7 @@ LIBS = [ "MetroidPrime/CCredits", "MetroidPrime/CSplashScreen", ["MetroidPrime/CInstruction", True], - "MetroidPrime/CAnimData", + ["MetroidPrime/CAnimData", False], "MetroidPrime/Factories/CCharacterFactory", "MetroidPrime/Factories/CAssetFactory", ["MetroidPrime/Tweaks/CTweakPlayer", False], diff --git a/include/Kyoto/Animation/CAnimTreeNode.hpp b/include/Kyoto/Animation/CAnimTreeNode.hpp index ea73dac0..5b41ada2 100644 --- a/include/Kyoto/Animation/CAnimTreeNode.hpp +++ b/include/Kyoto/Animation/CAnimTreeNode.hpp @@ -5,8 +5,10 @@ class CAnimTreeNode : public IAnimReader { public: - virtual CCharAnimTime VGetTimeRemaining() const; - + virtual CAnimTreeEffectiveContribution VGetContributionOfHighestInfluence() const = 0; + CAnimTreeEffectiveContribution GetContributionOfHighestInfluence() const { + return VGetContributionOfHighestInfluence(); + } }; #endif // _CANIMTREENODE diff --git a/include/MetroidPrime/CAnimData.hpp b/include/MetroidPrime/CAnimData.hpp index 4d07f3d2..03890e60 100644 --- a/include/MetroidPrime/CAnimData.hpp +++ b/include/MetroidPrime/CAnimData.hpp @@ -74,7 +74,7 @@ public: const CParticleDatabase& GetParticleDB() const { return x120_particleDB; } // SetIsAnimating__9CAnimDataFb // SetAnimDir__9CAnimDataFQ29CAnimData8EAnimDir - // GetBoundingBox__9CAnimDataCFv + CAABox GetBoundingBox() const; // GetBoundingBox__9CAnimDataCFRC12CTransform4f // GetLocatorSegId__9CAnimDataCFRCQ24rstl66basic_string // ResetPOILists__9CAnimDataFv diff --git a/include/MetroidPrime/CCharacterInfo.hpp b/include/MetroidPrime/CCharacterInfo.hpp index 0be0ce62..384935f2 100644 --- a/include/MetroidPrime/CCharacterInfo.hpp +++ b/include/MetroidPrime/CCharacterInfo.hpp @@ -24,6 +24,7 @@ public: }; const CPASDatabase& GetPASDatabase() const { return x30_pasDatabase; } + const rstl::vector< rstl::pair< rstl::string, CAABox > >& GetAnimBBoxList() const { return x88_aabbs; } private: ushort x0_tableCount; diff --git a/include/MetroidPrime/Player/CPlayerState.hpp b/include/MetroidPrime/Player/CPlayerState.hpp index d4c78edb..737c38ea 100644 --- a/include/MetroidPrime/Player/CPlayerState.hpp +++ b/include/MetroidPrime/Player/CPlayerState.hpp @@ -195,5 +195,6 @@ private: int x184_scanCompletionRateSecond; CStaticInterference x188_staticIntf; }; +CHECK_SIZEOF(CPlayerState, 0x198) #endif // _CPLAYERSTATE diff --git a/include/rstl/algorithm.hpp b/include/rstl/algorithm.hpp index 0ec643bb..97d35f19 100644 --- a/include/rstl/algorithm.hpp +++ b/include/rstl/algorithm.hpp @@ -1,6 +1,8 @@ #ifndef _RSTL_ALGORITHM #define _RSTL_ALGORITHM +#include "rstl/functional.hpp" +#include "rstl/pair.hpp" #include "rstl/pointer_iterator.hpp" namespace rstl { @@ -67,7 +69,7 @@ void __sort3(T& a, T& b, T& c, Cmp comp) { template < typename It, class Cmp > void sort(It first, It last, Cmp cmp) { - int count = last - first; // use distance? + int count = last - first; // use distance? if (count > 1) { if (count <= 20) { __insertion_sort(first, last, cmp); @@ -93,6 +95,87 @@ void sort(It first, It last, Cmp cmp) { } } +template < typename It, typename T, typename Cmp > +It lower_bound(It start, It end, const T& value, Cmp cmp) { + int dist = distance(start, end); + It it = start; + while (dist > 0) { + it = start; + int halfDist = dist / 2; + advance(it, halfDist); + if (cmp(*it, value)) { + start = it; + ++start; + dist = (dist - halfDist) - 1; + } else { + dist = halfDist; + } + } + return start; +} + +template < typename It, typename T, typename Cmp > +It binary_find(It start, It end, const T& value, Cmp cmp) { + It lower = lower_bound(start, end, value, cmp); + bool found = false; + if (lower != end && !cmp(value, *lower)) { + found = true; + } + if (found) { + return lower; + } else { + return end; + } +} + +template < typename T, typename Cmp > +class pair_sorter_finder; + +template < typename K, typename V, typename Cmp > +class pair_sorter_finder< pair< K, V >, Cmp > { +public: + typedef K key_type; + + Cmp cmp; + + pair_sorter_finder(const Cmp& cmp) : cmp(cmp) {} + + bool operator()(const K& a, const pair< K, V >& b) const; + /* { + return cmp(a, b.first); + }*/ + + bool operator()(const pair< K, V >& a, const K& b) const; + /* { + return cmp(a.first, b); + }*/ +}; + +template < typename K, typename V, typename Cmp > +bool pair_sorter_finder< pair< K, V >, Cmp >::operator()(const K& a, const pair< K, V >& b) const { + return cmp(a, b.first); +} + +template < typename K, typename V, typename Cmp > +bool pair_sorter_finder< pair< K, V >, Cmp >::operator()(const pair< K, V >& a, const K& b) const { + return cmp(a.first, b); +} + +template < typename T > +typename T::const_iterator +find_by_key(const T& container, + const typename select1st< typename T::value_type >::value_type& key); + +template < typename T > +typename T::const_iterator +find_by_key(const T& container, + const typename select1st< typename T::value_type >::value_type& key) { + typedef typename select1st< typename T::value_type >::value_type K; + + return binary_find(container.begin(), container.end(), key, + pair_sorter_finder< typename T::value_type, less< K > >(rstl::less< K >())); +} + } // namespace rstl #endif // _RSTL_ALGORITHM diff --git a/include/rstl/functional.hpp b/include/rstl/functional.hpp new file mode 100644 index 00000000..14821a89 --- /dev/null +++ b/include/rstl/functional.hpp @@ -0,0 +1,18 @@ +#ifndef _RSTL_FUNCTIONAL +#define _RSTL_FUNCTIONAL + +namespace rstl { + +template < typename P > +struct identity { + const P& operator()(const P& it) const { return it; } +}; + +template < typename T > +struct less { + bool operator()(const T& a, const T& b) const { return a < b; } +}; + +} // namespace rstl + +#endif // _RSTL_FUNCTIONAL diff --git a/include/rstl/iterator.hpp b/include/rstl/iterator.hpp index 03a16f3a..6b53dec4 100644 --- a/include/rstl/iterator.hpp +++ b/include/rstl/iterator.hpp @@ -25,6 +25,18 @@ inline typename It::difference_type distance(It first, It last) { return __distance(first, last, typename It::iterator_category()); } +template < typename It, typename S > +void __advance(It& it, S count, forward_iterator_tag) { + while (count > 0) { + ++it; + } +} + +template < typename It, typename S > +inline void advance(It& it, S count) { + return __advance(it, count, typename It::iterator_category()); +} + } // namespace rstl #endif // _RSTL_ITERATOR diff --git a/include/rstl/pair.hpp b/include/rstl/pair.hpp index 4c3eda85..f1a22d29 100644 --- a/include/rstl/pair.hpp +++ b/include/rstl/pair.hpp @@ -15,6 +15,20 @@ public: L first; R second; }; + +template < typename P > +struct select1st { + const P& operator()(const P& it) const { return it; } +}; + +template < typename K, typename V > +struct select1st< pair< K, V > > { + typedef K value_type; + + const K& operator()(const pair< K, V >& it) const { return it.first; } +}; + + } // namespace rstl #endif // _RSTL_PAIR diff --git a/include/rstl/pointer_iterator.hpp b/include/rstl/pointer_iterator.hpp index 68c6a051..eb2cbd2f 100644 --- a/include/rstl/pointer_iterator.hpp +++ b/include/rstl/pointer_iterator.hpp @@ -132,6 +132,10 @@ inline typename It::difference_type __distance(It first, It last, random_access_ return last - first; } +template < typename It, typename S > +inline void __advance(It& it, S count, random_access_iterator_tag) { + it += count; +} template < typename T > struct iterator_traits {}; diff --git a/include/rstl/red_black_tree.hpp b/include/rstl/red_black_tree.hpp index e0ac7d3e..aa80521f 100644 --- a/include/rstl/red_black_tree.hpp +++ b/include/rstl/red_black_tree.hpp @@ -3,30 +3,12 @@ #include "types.h" +#include "rstl/functional.hpp" +#include "rstl/iterator.hpp" #include "rstl/pair.hpp" #include "rstl/rmemory_allocator.hpp" -#include "rstl/iterator.hpp" namespace rstl { -template < typename P > -struct select1st { - const P& operator()(const P& it) const { return it; } -}; - -template < typename K, typename V > -struct select1st< pair< K, V > > { - const K& operator()(const pair< K, V >& it) const { return it.first; } -}; - -template < typename P > -struct identity { - const P& operator()(const P& it) const { return it; } -}; - -template < typename T > -struct less { - bool operator()(const T& a, const T& b) const { return a < b; } -}; enum node_color { kNC_Red, @@ -52,9 +34,7 @@ private: : mLeft(left), mRight(right), mParent(parent), mColor(color) { construct(get_value(), value); } - ~node() { - get_value()->~P(); - } + ~node() { get_value()->~P(); } P* get_value() { return reinterpret_cast< P* >(&mValue); } const P* get_value() const { return reinterpret_cast< const P* >(&mValue); } @@ -93,7 +73,7 @@ public: // TODO why is this bool here? const_iterator(node* node, const header* header, bool b) - : mNode(node), mHeader(header)/*, x8_(b)*/ {} + : mNode(node), mHeader(header) /*, x8_(b)*/ {} const P* operator->() const { return mNode->get_value(); } const P* operator*() const { return mNode->get_value(); } @@ -191,7 +171,7 @@ public: } return iterator(needle, &x8_header, false); } - + iterator erase(iterator it) { node* node = it.get_node(); ++it; @@ -245,7 +225,9 @@ private: void rebalance(node* n) { rbtree_rebalance(&x8_header, n); } - node* rebalance_for_erase(node* n) { return static_cast(rbtree_rebalance_for_erase(&x8_header, n)); } + node* rebalance_for_erase(node* n) { + return static_cast< node* >(rbtree_rebalance_for_erase(&x8_header, n)); + } }; static bool kUnknownValueNewRoot = true; diff --git a/include/rstl/string.hpp b/include/rstl/string.hpp index 5a791723..149d4234 100644 --- a/include/rstl/string.hpp +++ b/include/rstl/string.hpp @@ -107,6 +107,7 @@ public: int _eq_helper(const basic_string& other) const; bool operator==(const basic_string& other) const; + bool operator<(const basic_string& other) const; const char* data() const { return x0_ptr; } }; @@ -116,6 +117,11 @@ bool basic_string< _CharTp, Traits, Alloc >::operator==(const basic_string& othe return _eq_helper(other) == 0; } +template < typename _CharTp, typename Traits, typename Alloc > +bool basic_string< _CharTp, Traits, Alloc >::operator<(const basic_string& other) const { + return _eq_helper(other) < 0; +} + // template <> // const char basic_string::mNull = 0; // template <> diff --git a/include/rstl/vector.hpp b/include/rstl/vector.hpp index d484166f..074d822b 100644 --- a/include/rstl/vector.hpp +++ b/include/rstl/vector.hpp @@ -36,6 +36,7 @@ protected: public: typedef pointer_iterator< T, vector< T, Alloc >, Alloc > iterator; typedef const_pointer_iterator< T, vector< T, Alloc >, Alloc > const_iterator; + typedef T value_type; iterator begin() { return iterator(xc_items); } const_iterator begin() const { return const_iterator(xc_items); } diff --git a/src/MetroidPrime/CAnimData.cpp b/src/MetroidPrime/CAnimData.cpp new file mode 100644 index 00000000..25e7a115 --- /dev/null +++ b/src/MetroidPrime/CAnimData.cpp @@ -0,0 +1,22 @@ +#include "MetroidPrime/CAnimData.hpp" + +#include "Kyoto/Animation/CAnimTreeNode.hpp" + +#include "rstl/algorithm.hpp" + +CAABox CAnimData::GetBoundingBox() const { + const rstl::vector< rstl::pair< rstl::string, CAABox > >& aabbList = + xc_charInfo.GetAnimBBoxList(); + + if (aabbList.size() > 0) { + CAnimTreeEffectiveContribution contrib = x1f8_animRoot->GetContributionOfHighestInfluence(); + rstl::string name = contrib.GetPrimitiveName(); + + rstl::vector< rstl::pair< rstl::string, CAABox > >::const_iterator search = + rstl::find_by_key(aabbList, rstl::string(name)); + if (search != aabbList.end()) { + return search->second; + } + } + return x108_aabb; +}