Skip to content

Commit ac3bd45

Browse files
committed
Match CMemoryCardDriver::UpdateCardProbe()
1 parent 91e1d0f commit ac3bd45

4 files changed

Lines changed: 76 additions & 32 deletions

File tree

include/Kyoto/Animation/CPASAnimInfo.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@
88
class CPASAnimInfo {
99
public:
1010
CPASAnimInfo(int id);
11-
CPASAnimInfo(int id, const rstl::reserved_vector<CPASAnimParm::UParmValue, 8>& parms);
11+
CPASAnimInfo(int id, const rstl::reserved_vector< CPASAnimParm::UParmValue, 8 >& parms);
1212

1313
int GetAnimId() const { return x0_id; }
1414
CPASAnimParm GetAnimParmData(uint idx, CPASAnimParm::EParmType type) const;
1515
const CPASAnimParm::UParmValue& GetAnimParmValue(uint idx) const;
16+
17+
bool operator<(const CPASAnimInfo& rhs) const { return x0_id < rhs.x0_id; }
18+
1619
private:
1720
uint x0_id;
1821
rstl::reserved_vector< CPASAnimParm::UParmValue, 8 > x4_parms;

include/Kyoto/Animation/CPASAnimState.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313

1414
class CPASAnimState {
1515
public:
16+
CPASAnimState(int id);
17+
CPASAnimState(CInputStream& in);
18+
1619
CPASAnimParm GetAnimParmData(int, unsigned int) const;
1720

1821
pas::EAnimationState GetStateId() const { return x0_id; }
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#include "Kyoto/Animation/CPASAnimState.hpp"
2+
3+
#include "Kyoto/Streams/CInputStream.hpp"
4+
#include "rstl/algorithm.hpp"
5+
6+
CPASAnimState::CPASAnimState(const int id) : x0_id(static_cast< pas::EAnimationState >(id)) {}
7+
8+
CPASAnimState::CPASAnimState(CInputStream& in) : x0_id(pas::kAS_Invalid) {
9+
x0_id = static_cast<pas::EAnimationState>(in.Get<int>());
10+
const uint parmCount = in.Get< uint >();
11+
const uint animCount = in.Get< uint >();
12+
13+
x4_parms.reserve(parmCount);
14+
x14_anims.reserve(animCount);
15+
x24_selectionCache.reserve(animCount);
16+
17+
for (int i = 0; i < parmCount; i++) {
18+
x4_parms.push_back(in.Get< CPASParmInfo >());
19+
}
20+
21+
for (int i = 0; i < animCount; i++) {
22+
int id = in.Get< int >();
23+
rstl::reserved_vector< CPASAnimParm::UParmValue, 8 > parms;
24+
for (int j = 0; j < parmCount; j++) {
25+
CPASAnimParm::UParmValue val;
26+
switch (x4_parms[i].GetParameterType()) {
27+
case CPASAnimParm::kPT_Int32:
28+
val.m_int = in.Get< int >();
29+
break;
30+
case CPASAnimParm::kPT_UInt32:
31+
val.m_uint = in.Get< uint >();
32+
break;
33+
case CPASAnimParm::kPT_Float:
34+
val.m_float = in.Get< float >();
35+
break;
36+
case CPASAnimParm::kPT_Bool:
37+
val.m_bool = in.Get< bool >();
38+
break;
39+
case CPASAnimParm::kPT_Enum:
40+
val.m_uint = in.Get< uint >();
41+
break;
42+
default:
43+
val.m_int = 0;
44+
break;
45+
}
46+
47+
parms.push_back(val);
48+
}
49+
CPASAnimInfo animInfo(id, parms);
50+
rstl::vector< CPASAnimInfo >::iterator iter = rstl::lower_bound(
51+
x14_anims.begin(), x14_anims.end(), animInfo, rstl::less< CPASAnimInfo >());
52+
x14_anims.insert(iter, animInfo);
53+
}
54+
}

src/MetroidPrime/CMemoryCardDriver.cpp

Lines changed: 15 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -383,41 +383,25 @@ void CMemoryCardDriver::UpdateCardProbe() {
383383
ProbeResults result = CMemoryCardSys::IsMemoryCardInserted(x0_cardPort);
384384
ECardResult error = result.x0_error;
385385

386-
if (error == kCR_READY && result.x8_sectorSize != 0x2000) {
387-
x10_state = kS_CardProbeFailed;
388-
x14_error = kE_CardNon8KSectors;
389-
} else if (error != kCR_BUSY) {
390-
if (error == kCR_WRONGDEVICE) {
386+
if (error == kCR_READY) {
387+
if (result.x8_sectorSize != 0x2000) {
391388
x10_state = kS_CardProbeFailed;
392-
x14_error = kE_CardWrongDevice;
393-
} else if (error != kCR_READY) {
394-
NoCardFound();
395-
} else {
396-
x10_state = kS_CardProbeDone;
397-
StartMountCard();
389+
x14_error = kE_CardNon8KSectors;
390+
return;
398391
}
392+
} else if (error == kCR_BUSY) {
393+
return;
394+
} else if (error == kCR_WRONGDEVICE) {
395+
x10_state = kS_CardProbeFailed;
396+
x14_error = kE_CardWrongDevice;
397+
return;
398+
} else {
399+
NoCardFound();
400+
return;
399401
}
400402

401-
// switch (result.x0_error) {
402-
// case kCR_READY:
403-
// if (result.x8_sectorSize != 0x2000) {
404-
// x10_state = kS_CardProbeFailed;
405-
// x14_error = kE_CardNon8KSectors;
406-
// } else {
407-
// x10_state = kS_CardProbeDone;
408-
// StartMountCard();
409-
// }
410-
// break;
411-
// case kCR_BUSY:
412-
// break;
413-
// case kCR_WRONGDEVICE:
414-
// x10_state = kS_CardProbeFailed;
415-
// x14_error = kE_CardWrongDevice;
416-
// break;
417-
// default:
418-
// NoCardFound();
419-
// break;
420-
// }
403+
x10_state = kS_CardProbeDone;
404+
StartMountCard();
421405
}
422406

423407
void CMemoryCardDriver::StartMountCard() {

0 commit comments

Comments
 (0)