| 59 | } |
| 60 | |
| 61 | void agent_serialize(Stream* stream) |
| 62 | { |
| 63 | bool write = serialization_getMode() == SMODE_WRITE; |
| 64 | |
| 65 | SERIALIZE(SaveVersionInit, s_levelComplete, JFALSE); |
| 66 | SERIALIZE(SaveVersionInit, s_invalidLevelIndex, JFALSE); |
| 67 | SERIALIZE(SaveVersionInit, s_maxLevelIndex, JFALSE); |
| 68 | SERIALIZE(SaveVersionInit, s_levelIndex, JFALSE); |
| 69 | |
| 70 | // Agent. |
| 71 | char name[64] = { 0 }; |
| 72 | u8 agentNameLen = 0; |
| 73 | if (write) |
| 74 | { |
| 75 | strcpy(name, s_agentData[s_agentId].name); |
| 76 | name[32] = 0; // Just in case. |
| 77 | |
| 78 | agentNameLen = (u8)strlen(name); |
| 79 | agent_checkNameLen(agentNameLen); |
| 80 | } |
| 81 | SERIALIZE(SaveVersionInit, agentNameLen, 0); |
| 82 | if (!write) |
| 83 | { |
| 84 | agent_checkNameLen(agentNameLen); |
| 85 | } |
| 86 | SERIALIZE_BUF(SaveVersionInit, name, agentNameLen); |
| 87 | name[agentNameLen] = 0; |
| 88 | |
| 89 | // Agent data. |
| 90 | LevelSaveData data; |
| 91 | if (write) |
| 92 | { |
| 93 | agent_readSavedData(s_agentId, &data); |
| 94 | } |
| 95 | SERIALIZE(SaveVersionInit, data, { 0 }); |
| 96 | |
| 97 | // Find the agent. |
| 98 | if (!write) |
| 99 | { |
| 100 | s_agentId = -1; |
| 101 | // First get the count. |
| 102 | s32 agentCount = 0; |
| 103 | for (s32 i = 0; i < 14; i++) |
| 104 | { |
| 105 | if (!s_agentData[i].name[0]) { break; } |
| 106 | agentCount++; |
| 107 | } |
| 108 | // Next find the agent, if it exists. |
| 109 | for (s32 i = 0; i < agentCount; i++) |
| 110 | { |
| 111 | if (strcmp(s_agentData[i].name, name) == 0) |
| 112 | { |
| 113 | s_agentId = i; |
| 114 | break; |
| 115 | } |
| 116 | } |
| 117 | // If the agent doesn't exist, create it. |
| 118 | if (s_agentId < 0) |
no test coverage detected