Review combatLoad
This commit is contained in:
parent
7596d4d721
commit
0fe6d88a3a
|
@ -2087,17 +2087,10 @@ int _find_cid(int a1, int cid, Object** critterList, int critterListLength)
|
||||||
// 0x420E4C
|
// 0x420E4C
|
||||||
int combatLoad(File* stream)
|
int combatLoad(File* stream)
|
||||||
{
|
{
|
||||||
int v14;
|
|
||||||
int a2;
|
|
||||||
Object* obj;
|
|
||||||
int v24;
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
|
|
||||||
if (fileReadUInt32(stream, &gCombatState) == -1) return -1;
|
if (fileReadUInt32(stream, &gCombatState) == -1) return -1;
|
||||||
|
|
||||||
if (!isInCombat()) {
|
if (!isInCombat()) {
|
||||||
obj = objectFindFirst();
|
Object* obj = objectFindFirst();
|
||||||
while (obj != NULL) {
|
while (obj != NULL) {
|
||||||
if (PID_TYPE(obj->pid) == OBJ_TYPE_CRITTER) {
|
if (PID_TYPE(obj->pid) == OBJ_TYPE_CRITTER) {
|
||||||
if (obj->data.critter.combat.whoHitMeCid == -1) {
|
if (obj->data.critter.combat.whoHitMeCid == -1) {
|
||||||
|
@ -2116,56 +2109,47 @@ int combatLoad(File* stream)
|
||||||
if (fileReadInt32(stream, &_list_noncom) == -1) return -1;
|
if (fileReadInt32(stream, &_list_noncom) == -1) return -1;
|
||||||
if (fileReadInt32(stream, &_list_total) == -1) return -1;
|
if (fileReadInt32(stream, &_list_total) == -1) return -1;
|
||||||
|
|
||||||
if (objectListCreate(-1, gElevation, 1, &_combat_list) != _list_total) {
|
if (objectListCreate(-1, gElevation, OBJ_TYPE_CRITTER, &_combat_list) != _list_total) {
|
||||||
objectListFree(_combat_list);
|
objectListFree(_combat_list);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileReadInt32(stream, &v24) == -1) return -1;
|
if (fileReadInt32(stream, &(gDude->cid)) == -1) return -1;
|
||||||
|
|
||||||
gDude->cid = v24;
|
for (int index = 0; index < _list_total; index++) {
|
||||||
|
if (_combat_list[index]->data.critter.combat.whoHitMeCid == -1) {
|
||||||
for (i = 0; i < _list_total; i++) {
|
_combat_list[index]->data.critter.combat.whoHitMe = NULL;
|
||||||
if (_combat_list[i]->data.critter.combat.whoHitMeCid == -1) {
|
|
||||||
_combat_list[i]->data.critter.combat.whoHitMe = NULL;
|
|
||||||
} else {
|
} else {
|
||||||
for (j = 0; j < _list_total; j++) {
|
// NOTE: Uninline.
|
||||||
if (_combat_list[i]->data.critter.combat.whoHitMeCid == _combat_list[j]->cid) {
|
int found = _find_cid(0, _combat_list[index]->data.critter.combat.whoHitMeCid, _combat_list, _list_total);
|
||||||
break;
|
if (found == _list_total) {
|
||||||
}
|
_combat_list[index]->data.critter.combat.whoHitMe = NULL;
|
||||||
}
|
|
||||||
|
|
||||||
if (j == _list_total) {
|
|
||||||
_combat_list[i]->data.critter.combat.whoHitMe = NULL;
|
|
||||||
} else {
|
} else {
|
||||||
_combat_list[i]->data.critter.combat.whoHitMe = _combat_list[j];
|
_combat_list[index]->data.critter.combat.whoHitMe = _combat_list[found];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < _list_total; i++) {
|
for (int index = 0; index < _list_total; index++) {
|
||||||
if (fileReadInt32(stream, &v24) == -1) return -1;
|
int cid;
|
||||||
|
if (fileReadInt32(stream, &cid) == -1) return -1;
|
||||||
|
|
||||||
for (j = i; j < _list_total; j++) {
|
// NOTE: Uninline.
|
||||||
if (v24 == _combat_list[j]->cid) {
|
int found = _find_cid(index, cid, _combat_list, _list_total);
|
||||||
break;
|
if (found == _list_total) {
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j == _list_total) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = _combat_list[i];
|
Object* obj = _combat_list[index];
|
||||||
_combat_list[i] = _combat_list[j];
|
_combat_list[index] = _combat_list[found];
|
||||||
_combat_list[j] = obj;
|
_combat_list[found] = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < _list_total; i++) {
|
for (int index = 0; index < _list_total; index++) {
|
||||||
_combat_list[i]->cid = i;
|
_combat_list[index]->cid = index;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_aiInfoList) {
|
if (_aiInfoList != NULL) {
|
||||||
internal_free(_aiInfoList);
|
internal_free(_aiInfoList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2174,39 +2158,42 @@ int combatLoad(File* stream)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (v14 = 0; v14 < _list_total; v14++) {
|
for (int index = 0; index < _list_total; index++) {
|
||||||
CombatAiInfo* aiInfo = &(_aiInfoList[v14]);
|
CombatAiInfo* aiInfo = &(_aiInfoList[index]);
|
||||||
|
|
||||||
if (fileReadInt32(stream, &a2) == -1) return -1;
|
int friendlyId;
|
||||||
|
if (fileReadInt32(stream, &friendlyId) == -1) return -1;
|
||||||
|
|
||||||
if (a2 == -1) {
|
if (friendlyId == -1) {
|
||||||
aiInfo->friendlyDead = NULL;
|
aiInfo->friendlyDead = NULL;
|
||||||
} else {
|
} else {
|
||||||
// SFALL: Fix incorrect object type search when loading a game in
|
// SFALL: Fix incorrect object type search when loading a game in
|
||||||
// combat mode.
|
// combat mode.
|
||||||
aiInfo->friendlyDead = objectTypedFindById(a2, OBJ_TYPE_CRITTER);
|
aiInfo->friendlyDead = objectTypedFindById(friendlyId, OBJ_TYPE_CRITTER);
|
||||||
if (aiInfo->friendlyDead == NULL) return -1;
|
if (aiInfo->friendlyDead == NULL) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileReadInt32(stream, &a2) == -1) return -1;
|
int targetId;
|
||||||
|
if (fileReadInt32(stream, &targetId) == -1) return -1;
|
||||||
|
|
||||||
if (a2 == -1) {
|
if (targetId == -1) {
|
||||||
aiInfo->lastTarget = NULL;
|
aiInfo->lastTarget = NULL;
|
||||||
} else {
|
} else {
|
||||||
// SFALL: Fix incorrect object type search when loading a game in
|
// SFALL: Fix incorrect object type search when loading a game in
|
||||||
// combat mode.
|
// combat mode.
|
||||||
aiInfo->lastTarget = objectTypedFindById(a2, OBJ_TYPE_CRITTER);
|
aiInfo->lastTarget = objectTypedFindById(targetId, OBJ_TYPE_CRITTER);
|
||||||
if (aiInfo->lastTarget == NULL) return -1;
|
if (aiInfo->lastTarget == NULL) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileReadInt32(stream, &a2) == -1) return -1;
|
int itemId;
|
||||||
|
if (fileReadInt32(stream, &itemId) == -1) return -1;
|
||||||
|
|
||||||
if (a2 == -1) {
|
if (itemId == -1) {
|
||||||
aiInfo->lastItem = NULL;
|
aiInfo->lastItem = NULL;
|
||||||
} else {
|
} else {
|
||||||
// SFALL: Fix incorrect object type search when loading a game in
|
// SFALL: Fix incorrect object type search when loading a game in
|
||||||
// combat mode.
|
// combat mode.
|
||||||
aiInfo->lastItem = objectTypedFindById(a2, OBJ_TYPE_ITEM);
|
aiInfo->lastItem = objectTypedFindById(itemId, OBJ_TYPE_ITEM);
|
||||||
if (aiInfo->lastItem == NULL) return -1;
|
if (aiInfo->lastItem == NULL) return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue