Fix WriteMonster weirdmatch

This commit is contained in:
Kermalis
2024-11-10 18:33:47 -05:00
parent fa08c0e691
commit c3cd344ad9

View File

@@ -249,227 +249,153 @@ static void WriteDungeonMonsters(DataSerializer *seri)
WriteMonster(seri, gDungeon->wildPokemon[i]);
}
// TODO: Rewrite like ReadMonster
static void WriteMonster(DataSerializer *seri, Entity *src)
{
Position *pos;
EntityInfo *info;
s32 counter;
EntityInfo info2;
u32 uStack_ac;
u32 uStack_a8;
HiddenPower *psStack_a4;
u8 *temp1;
u8 *temp2;
AITarget *temp3;
u8 *puStack_a0;
u32 *puStack_9c;
u32 *puStack_98;
u32 *puStack_94;
u8 *puStack_90;
Sleep *puStack_8c;
NonVolatile *puStack_88;
Immobilize *puStack_84;
Volatile *puStack_80;
Charging *puStack_7c;
Protection *puStack_78;
Waiting *puStack_74;
Linked *puStack_70;
MoveStatus *puStack_6c;
ItemStatus *puStack_68;
TransformStatus *puStack_64;
EyesightStatus *puStack_60;
Muzzled *pbStack_5c;
bool8 *pbStack_58;
bool8 *pbStack_54;
bool8 *pbStack_50;
bool8 *puStack_4c;
bool8 *pbStack_48;
bool8 *pbStack_44;
bool8 *pbStack_40;
bool8 *pbStack_3c;
u8 *puStack_38;
u8 *puStack_34;
bool8 *pbStack_30;
u8 *puStack_2c;
u8 *puStack_28;
u8 *puStack_24;
s32 i;
EntityInfo blankInfo;
u32 one;
u32 zero;
zero = 0;
one = 1;
WriteU8(seri, 0xAA);
WriteU8(seri, 0x55);
uStack_a8 = 0;
uStack_ac = 1;
WriteU8(seri,0xaa);
WriteU8(seri,0x55);
if (EntityExists(src)) {
info = GetEntInfo(src);
WriteBytes(seri,&uStack_ac,1);
WriteBytes(seri,&src->pos.x,1);
WriteBytes(seri,&src->pos.y,1);
WriteBytes(seri,&src->isVisible,1);
WriteBytes(seri,&src->spawnGenID,2);
WriteBytes(seri, &one, 1);
WriteBytes(seri, &src->pos.x, 1);
WriteBytes(seri, &src->pos.y, 1);
WriteBytes(seri, &src->isVisible, 1);
WriteBytes(seri, &src->spawnGenID, 2);
}
else {
memset(&info2,0,sizeof(EntityInfo));
info = &info2;
WriteBytes(seri,&uStack_a8,1);
WriteBytes(seri,&uStack_a8,1);
WriteBytes(seri,&uStack_a8,1);
WriteBytes(seri,&uStack_a8,1);
WriteBytes(seri,&uStack_a8,2);
memset(&blankInfo, 0, sizeof(EntityInfo));
info = &blankInfo;
WriteBytes(seri, &zero, 1);
WriteBytes(seri, &zero, 1);
WriteBytes(seri, &zero, 1);
WriteBytes(seri, &zero, 1);
WriteBytes(seri, &zero, 2);
}
WriteU16(seri,info->flags);
WriteMonsterID(seri,info->apparentID);
WriteMonsterID(seri,info->id);
WriteBool8(seri,info->isNotTeamMember);
WriteBool8(seri,info->isTeamLeader);
WriteU8(seri,info->shopkeeper);
WriteU8(seri,info->level);
WriteU8(seri,info->teamIndex);
WriteJoinedAt(seri,&info->joinedAt);
WriteS16(seri,info->IQ);
WriteS16(seri,info->HP);
WriteS16(seri,info->maxHPStat);
WriteS16(seri,info->originalHP);
WriteU8(seri,info->atk[0]);
WriteU8(seri,info->atk[1]);
WriteU8(seri,info->def[0]);
WriteU8(seri,info->def[1]);
WriteU32(seri,info->exp);
WriteS16(seri,info->offensiveStages[0]);
WriteS16(seri,info->offensiveStages[1]);
WriteS16(seri,info->defensiveStages[0]);
WriteS16(seri,info->defensiveStages[1]);
WriteS16(seri,info->hitChanceStages[0]);
WriteS16(seri,info->hitChanceStages[1]);
WriteS16(seri,info->flashFireBoost);
WriteS32(seri,info->offensiveMultipliers[0]);
WriteS32(seri,info->offensiveMultipliers[1]);
WriteS32(seri,info->defensiveMultipliers[0]);
WriteS32(seri,info->defensiveMultipliers[1]);
WriteActionContainer(seri,&info->action);
WriteType(seri,info->types[0]);
WriteType(seri,info->types[1]);
WriteAbility(seri,info->abilities[0]);
WriteAbility(seri,info->abilities[1]);
WriteItem(seri,&info->heldItem);
WriteU16(seri, info->flags);
WriteMonsterID(seri, info->apparentID);
WriteMonsterID(seri, info->id);
WriteBool8(seri, info->isNotTeamMember);
WriteBool8(seri, info->isTeamLeader);
WriteU8(seri, info->shopkeeper);
WriteU8(seri, info->level);
WriteU8(seri, info->teamIndex);
WriteJoinedAt(seri, &info->joinedAt);
WriteS16(seri, info->IQ);
WriteS16(seri, info->HP);
WriteS16(seri, info->maxHPStat);
WriteS16(seri, info->originalHP);
WriteU8(seri, info->atk[0]);
WriteU8(seri, info->atk[1]);
WriteU8(seri, info->def[0]);
WriteU8(seri, info->def[1]);
WriteU32(seri, info->exp);
WriteS16(seri, info->offensiveStages[0]);
WriteS16(seri, info->offensiveStages[1]);
WriteS16(seri, info->defensiveStages[0]);
WriteS16(seri, info->defensiveStages[1]);
WriteS16(seri, info->hitChanceStages[0]);
WriteS16(seri, info->hitChanceStages[1]);
WriteS16(seri, info->flashFireBoost);
WriteS32(seri, info->offensiveMultipliers[0]);
WriteS32(seri, info->offensiveMultipliers[1]);
WriteS32(seri, info->defensiveMultipliers[0]);
WriteS32(seri, info->defensiveMultipliers[1]);
WriteActionContainer(seri, &info->action);
WriteType(seri, info->types[0]);
WriteType(seri, info->types[1]);
WriteAbility(seri, info->abilities[0]);
WriteAbility(seri, info->abilities[1]);
WriteItem(seri, &info->heldItem);
WriteMonsterUnk64(seri, info->unk64);
temp3 = &info->aiTarget;
temp2 = info->IQSkillMenuFlags;
temp1 = info->IQSkillFlags;
puStack_a0 = &info->tactic;
psStack_a4 = &info->hiddenPower;
puStack_9c = &info->unk98;
puStack_98 = &info->unk9C;
puStack_94 = &info->unkA0;
puStack_8c = &info->sleep;
puStack_88 = &info->nonVolatile;
puStack_84 = &info->immobilize;
puStack_80 = &info->volatileStatus;
puStack_7c = &info->charging;
puStack_78 = &info->protection;
puStack_74 = &info->waitingStruct;
puStack_70 = &info->linked;
puStack_6c = &info->moveStatus;
puStack_68 = &info->itemStatus;
puStack_64 = &info->transformStatus;
puStack_60 = &info->eyesightStatus;
pbStack_5c = &info->muzzled;
pbStack_58 = &info->powerEars;
pbStack_54 = &info->scanning;
pbStack_50 = &info->stairSpotter;
puStack_4c = &info->unkF3;
pbStack_48 = &info->grudge;
puStack_34 = &info->expMultiplier;
pbStack_44 = &info->exposed;
pbStack_40 = &info->isColorChanged;
pbStack_3c = &info->bossFlag;
puStack_38 = &info->terrifiedTurns;
pbStack_30 = &info->useHeldItem;
puStack_2c = &info->perishSongTurns;
puStack_28 = &info->unkFE;
puStack_24 = &info->unkFF;
puStack_90 = &info->clientType;
pos = info->prevPos;
for (counter = 0; counter < NUM_PREV_POS; counter++) {
WriteTilePos(seri, pos);
pos++;
}
for (i = 0; i < NUM_PREV_POS; i++)
WriteTilePos(seri, &info->prevPos[i]);
WriteAITarget(seri,temp3);
WriteIQSkills(seri,temp2);
WriteIQSkills(seri,temp1);
WriteTactic(seri,*puStack_a0);
WriteHiddenPower(seri,psStack_a4);
WriteU32(seri,*puStack_9c);
WriteU32(seri,*puStack_98);
WriteU32(seri,*puStack_94);
WriteSleep(seri,puStack_8c);
WriteNonVolatile(seri,puStack_88);
WriteImmobilize(seri,puStack_84);
WriteVolatile(seri,puStack_80);
WriteCharging(seri,puStack_7c);
WriteProtection(seri,puStack_78);
WriteWaiting(seri,puStack_74);
WriteLinked(seri,puStack_70);
WriteMoveStatus(seri,puStack_6c);
WriteItemStatus(seri,puStack_68);
WriteTransformStatus(seri,puStack_64);
WriteEyesightStatus(seri,puStack_60);
WriteMuzzled(seri,pbStack_5c);
WriteBool8(seri,*pbStack_58);
WriteBool8(seri,*pbStack_54);
WriteBool8(seri,*pbStack_50);
WriteBool8(seri,*puStack_4c);
WriteBool8(seri,*pbStack_48);
WriteU8(seri,*puStack_34);
WriteBool8(seri,*pbStack_44);
WriteBool8(seri,*pbStack_40);
WriteBool8(seri,*pbStack_3c);
WriteU8(seri,*puStack_38);
WriteBool8(seri,*pbStack_30);
WriteU8(seri,*puStack_2c);
WriteU8(seri,*puStack_28);
WriteMonsterUnkFF(seri,*puStack_24);
WriteTargetingDecoy(seri,info->targetingDecoy);
WriteSpeedStage(seri,info->speedStage);
WriteSpeedCounters(seri,info->speedUpCounters,NUM_SPEED_COUNTERS);
WriteSpeedCounters(seri,info->speedDownCounters,NUM_SPEED_COUNTERS);
WriteAITarget(seri, &info->aiTarget);
WriteIQSkills(seri, info->IQSkillMenuFlags);
WriteIQSkills(seri, info->IQSkillFlags);
WriteTactic(seri, info->tactic);
WriteHiddenPower(seri, &info->hiddenPower);
WriteU32(seri, info->unk98);
WriteU32(seri, info->unk9C);
WriteU32(seri, info->unkA0);
WriteSleep(seri, &info->sleep);
WriteNonVolatile(seri, &info->nonVolatile);
WriteImmobilize(seri, &info->immobilize);
WriteVolatile(seri, &info->volatileStatus);
WriteCharging(seri, &info->charging);
WriteProtection(seri, &info->protection);
WriteWaiting(seri, &info->waitingStruct);
WriteLinked(seri, &info->linked);
WriteMoveStatus(seri, &info->moveStatus);
WriteItemStatus(seri, &info->itemStatus);
WriteTransformStatus(seri, &info->transformStatus);
WriteEyesightStatus(seri, &info->eyesightStatus);
WriteMuzzled(seri, &info->muzzled);
WriteBool8(seri, info->powerEars);
WriteBool8(seri, info->scanning);
WriteBool8(seri, info->stairSpotter);
WriteBool8(seri, info->unkF3);
WriteBool8(seri, info->grudge);
WriteU8(seri, info->expMultiplier);
WriteBool8(seri, info->exposed);
WriteBool8(seri, info->isColorChanged);
WriteBool8(seri, info->bossFlag);
WriteU8(seri, info->terrifiedTurns);
WriteBool8(seri, info->useHeldItem);
WriteU8(seri, info->perishSongTurns);
WriteU8(seri, info->unkFE);
WriteMonsterUnkFF(seri, info->unkFF);
WriteTargetingDecoy(seri, info->targetingDecoy);
WriteSpeedStage(seri, info->speedStage);
WriteSpeedCounters(seri, info->speedUpCounters, NUM_SPEED_COUNTERS);
WriteSpeedCounters(seri, info->speedDownCounters, NUM_SPEED_COUNTERS);
WriteU8(seri, info->stockpileStage);
WriteU8(seri, info->unk113);
WriteU8(seri, info->moveRandomly);
WriteMoves(seri, &info->moves);
WriteBelly(seri, &info->belly);
WriteBelly(seri, &info->maxBelly);
WriteBool8(seri,info->aiNextToTarget);
WriteBool8(seri,info->recalculateFollow);
WriteBool8(seri,info->waiting);
WriteBool8(seri,info->unk146);
WriteBool8(seri,info->attacking);
WriteBool8(seri,info->unk149);
WriteBool8(seri,info->unk14A);
WriteBool8(seri,info->unk14B);
WriteBool8(seri,info->unk14C);
WriteU16(seri,info->visualFlags);
WriteU16(seri,info->previousVisualFlags);
WriteBool8(seri,info->unk152);
WriteU8(seri,info->unk153);
WriteBool8(seri,info->unk154);
WriteBool8(seri,info->unk155);
WriteBool8(seri,info->unk156);
WriteU8(seri,info->unk164);
WriteU8(seri,info->unk165);
WriteU8(seri,info->unk166);
WriteU8(seri,info->unk167);
WriteU8(seri,info->unk168);
WriteU8(seri,info->turnsSinceWarpScarfActivation);
WriteTilePos(seri,&(info->targetPos));
WriteBool8(seri, info->aiNextToTarget);
WriteBool8(seri, info->recalculateFollow);
WriteBool8(seri, info->waiting);
WriteBool8(seri, info->unk146);
WriteBool8(seri, info->attacking);
WriteBool8(seri, info->unk149);
WriteBool8(seri, info->unk14A);
WriteBool8(seri, info->unk14B);
WriteBool8(seri, info->unk14C);
WriteU16(seri, info->visualFlags);
WriteU16(seri, info->previousVisualFlags);
WriteBool8(seri, info->unk152);
WriteU8(seri, info->unk153);
WriteBool8(seri, info->unk154);
WriteBool8(seri, info->unk155);
WriteBool8(seri, info->unk156);
WriteU8(seri, info->unk164);
WriteU8(seri, info->unk165);
WriteU8(seri, info->unk166);
WriteU8(seri, info->unk167);
WriteU8(seri, info->unk168);
WriteU8(seri, info->turnsSinceWarpScarfActivation);
WriteTilePos(seri, &info->targetPos);
WriteS32(seri, info->unk174);
WriteU16(seri, info->abilityEffectFlags);
WriteS16(seri, info->unk1F8);
WriteS16(seri, info->mobileTurnTimer);
WriteU32(seri, info->expGainedInTurn);
WriteClientType(seri, *puStack_90);
WriteClientType(seri, info->clientType);
}
static void WriteDungeonFloor(DataSerializer *seri)