PDA

View Full Version : Extent of the damage from 01-16-2008 patch?



dphantom
01-18-2008, 10:20 AM
Hi all!

disclaimer: I'm not begging for a patch or wondering if/when it will be completed, etc.

I'm curious on what the extent of the damage is?

Patch day was a disaster as the non-existent QA department let the AoE client crash bug to the live servers. I know everyone was frustrated and I couldn't look at a single thing.

Are they obfuscating again? or is it a structure change, or just opcode rearranging?

If it is just opcode rearranging, I will start trying to figure them out tonight, but the obfuscating and structure will probably be over my head for a bit.

brainiac
01-18-2008, 01:10 PM
opcodes changed I believe, I think that's it.

elf
01-18-2008, 06:35 PM
I haven't looked at the code yet, and I'm sure these steps could be duplicated by anyone else but I thought I would post the errors I saw anyways, so anyone could build off of them.

Logged in first, then started ShowEQ, then zoned. Got lots of invalid packet warnings, bad crc, when I first started zoning and when I left that zone, and only occasionally while in the zone. Opcode error also showed up during that first zone. Being that the obsfucation packet started making ShowEQ like zoneing more often before it synced up, I zoned again, and got no more CRC errors, just the single opcode. Another zone line after that, and still just the opcode problem.


Warning: OP_WearChange (0x25f0) (dataLen: 10) doesn't match: sizeof(SpawnUpdateStruct):19
Looking at just the error, none of the length 10 structs look like they would be sent that often.
The opcode error didn't seem to be dependent on conversations going on around me, so if it is just opcode shuffling then I don't think it's one of the chat structs. Time of day struct could have gotten padded, but the error didn't seem regular enough for that, it showed up in clusters. The first struct that jumps out at me was hpNPCUpdate (length: 10), but we should get skittles if that was all that changed. The next one that hit me was spawnAppearanceStruct. It was length 8, if it got padded up to 10, that would explain why there are no skittles to begin with. That's where I'm starting from, anyways.

ieatacid
01-18-2008, 08:42 PM
Opcodes and structs changed. I have some of it done, but it's not 100% functional yet.

BlueAdept
01-19-2008, 10:12 AM
That is good to hear. I fixed the one that was easy, but still wasn't seeing anything. Usually you get something, but I was getting nothing. I was worry they changed the encryption.

ieatacid
01-19-2008, 05:58 PM
worldopcodes.xml


<opcode id="5B0B" name="OP_GuildList" updated="01/17/08">
<comment>old GuildListCode</comment>
<payload dir="server" typename="worldGuildListStruct" sizechecktype="match"/>
</opcode>
<opcode id="192E" name="OP_MOTD" updated="01/17/08">
<comment>old MOTDCode Server message of the day</comment>
<payload dir="server" typename="worldMOTDStruct" sizechecktype="none"/>
</opcode>

<!-- Not necessary for SEQ to run but here to name packets in logs -->
<opcode id="4892" name="OP_SendLoginInfo" updated="01/17/08">
<comment>Client starting world session by asking for login information</comment>
</opcode>

<opcode id="4762" name="OP_LogServer" updated="01/17/08">
<comment></comment>
</opcode>
<opcode id="701F" name="OP_ApproveWorld" updated="01/17/08">
<comment></comment>
</opcode>
<opcode id="399F" name="OP_EnterWorld" updated="01/17/08">
<comment>Server approval for client to enter world</comment>
</opcode>
<opcode id="7519" name="OP_ExpansionInfo" updated="01/17/08">
<comment>Which expansions user has</comment>
</opcode>
<opcode id="0F14" name="OP_SendCharInfo" updated="01/17/08">
<comment>Send all chars visible @ char select</comment>
</opcode>
<opcode id="0CA5" name="OP_SendSpellChecksum" updated="01/17/08">
<comment>Contains a snippet of spell data</comment>
</opcode>
<opcode id="1CB3" name="OP_SendExeChecksum" updated="01/17/08">
<comment>Second client verification packet</comment>
</opcode>
<opcode id="679D" name="OP_SendBaseDataChecksum" updated="01/17/08">
<comment>Second client verification packet</comment>
</opcode>
<opcode id="21C7" name="OP_SendSkillCapsChecksum" updated="01/17/08">
<comment>Third client verification packet</comment>
</opcode>
<opcode id="26C4" name="OP_SetChatServer" updated="01/17/08">
<comment>Chatserver? IP,Port,servername.Charname,password(?)</comment>
</opcode>
<opcode id="1C20" name="OP_SetChatServer2" updated="01/17/08">
<comment>Chatserver? IP,Port,servername.Charname,password(?)</comment>
</opcode>
<opcode id="13DA" name="OP_ZoneServerInfo" updated="01/17/08">
<comment>old ZoneServerInfo</comment>
</opcode>
<opcode id="3331" name="OP_WorldComplete" updated="01/17/08">
<comment>Client telling world server it is done. World replies by disconnecting.</comment>
</opcode>
<opcode id="0254" name="OP_DeleteCharacter" updated="01/17/08">
<comment>Delete character @ char select</comment>
</opcode>
<opcode id="1513" name="OP_CharacterCreate" updated="01/17/08">
<comment>Create character @ char select</comment>
</opcode>
<opcode id="413F" name="OP_ApproveName" updated="01/17/08">
<comment>Approving new character name @ char creation</comment>
</opcode>
<opcode id="4849" name="OP_RandomNameGenerator" updated="01/17/08">
<comment>Returns a random name</comment>
</opcode>

ieatacid
01-19-2008, 10:30 PM
zoneopcodes.xml


<opcode id="6022" name="OP_PlayerProfile" updated="01/17/08">
<comment>old CharProfileCode</comment>
<payload dir="server" typename="charProfileStruct" sizechecktype="match"/>
</opcode>
<opcode id="7901" name="OP_ZoneEntry" updated="01/17/08">
<comment>old ZoneEntryCode</comment>
<payload dir="client" typename="ClientZoneEntryStruct" sizechecktype="match"/>
<payload dir="server" typename="ServerZoneEntryStruct" sizechecktype="match"/>
</opcode>
<opcode id="72f8" name="OP_ZoneSpawns" updated="01/17/08">
<comment>old ZoneSpawnsCode</comment>
<payload dir="server" typename="spawnStruct" sizechecktype="modulus"/>
</opcode>
<opcode id="6015" name="OP_TimeOfDay" updated="01/17/08">
<comment>old TimeOfDayCode</comment>
<payload dir="server" typename="timeOfDayStruct" sizechecktype="match"/>
</opcode>
<opcode id="5CA5" name="OP_NewZone" updated="01/17/08">
<comment>old NewZoneCode</comment>
<payload dir="server" typename="newZoneStruct" sizechecktype="match"/>
</opcode>
<opcode id="1890" name="OP_SpawnDoor" updated="01/17/08">
<comment>old DoorSpawnsCode</comment>
<payload dir="server" typename="doorStruct" sizechecktype="modulus"/>
</opcode>
<opcode id="33E5" name="OP_GroundSpawn" updated="01/17/08">
<comment>old MakeDropCode</comment>
<payload dir="server" typename="makeDropStruct" sizechecktype="match"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="1932" name="OP_SendZonePoints" updated="01/17/08">
<comment>Coords in a zone that will port you to another zone</comment>
<payload dir="server" typename="zonePointsStruct" sizechecktype="none"/>
</opcode>
<opcode id="3088" name="OP_AAExpUpdate" updated="01/17/08">
<comment>Receiving AA experience. Also when percent to AA changes.</comment>
<payload dir="server" typename="altExpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="0E98" name="OP_ExpUpdate" updated="01/17/08">
<comment>old ExpUpdateCode</comment>
<payload dir="server" typename="expUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="51BC" name="OP_GuildMemberList" updated="01/17/08">
<comment></comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="0D677" name="OP_GuildMOTD" updated="01/17/08">
<comment>GuildMOTD</comment>
<payload dir="server" typename="guildMOTDStruct" sizechecktype="none"/>
</opcode>
<opcode id="7062" name="OP_ClientUpdate" updated="01/17/08">
<comment>Position updates</comment>
<payload dir="server" typename="playerSpawnPosStruct" sizechecktype="match"/>
<payload dir="both" typename="playerSelfPosStruct" sizechecktype="match"/>
</opcode>
<opcode id="664A" name="OP_NpcMoveUpdate" updated="01/17/08">
<comment>Position updates</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="4656" name="OP_MobUpdate" updated="01/17/08">
<comment>old MobUpdateCode</comment>
<payload dir="both" typename="spawnPositionUpdate" sizechecktype="match"/>
</opcode>
<opcode id="5C29" name="OP_NewSpawn" updated="01/17/08">
<comment>old NewSpawnCode</comment>
<payload dir="server" typename="spawnStruct" sizechecktype="match"/>
</opcode>
<opcode id="3164" name="OP_DeleteSpawn" updated="01/17/08">
<comment>old DeleteSpawnCode</comment>
<payload dir="both" typename="deleteSpawnStruct" sizechecktype="match"/>
</opcode>
<opcode id="1B85" name="OP_Death" updated="01/17/08">
<comment>old NewCorpseCode</comment>
<payload dir="server" typename="newCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="72ad" name="OP_RespawnFromHover" updated="01/17/08">
<comment>Server telling client that it is coming back from hover death</comment>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="231F" name="OP_WearChange" updated="01/17/08">
<comment>old SpawnUpdateCode</comment>
<payload dir="both" typename="SpawnUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="10B7" name="OP_SpawnAppearance" updated="01/17/08">
<comment>old SpawnAppearanceCode</comment>
<payload dir="both" typename="spawnAppearanceStruct" sizechecktype="match"/>
</opcode>
<opcode id="82D7" name="OP_Stamina" updated="01/17/08">
<comment>Server updating on hunger/thirst</comment>
<payload dir="server" typename="staminaStruct" sizechecktype="match"/>
</opcode>
<opcode id="25F0" name="OP_HPUpdate" updated="01/17/08">
<comment>old NpcHpUpdateCode Update HP % of a PC or NPC</comment>
<payload dir="both" typename="hpNpcUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="099D" name="OP_GuildMemberUpdate" updated="01/17/08">
<comment></comment>
<payload dir="server" typename="GuildMemberUpdate" sizechecktype="match"/>
</opcode>
<opcode id="5F0D" name="OP_ClickObject" updated="01/17/08">
<comment>old RemDropCode</comment>
<payload dir="both" typename="remDropStruct" sizechecktype="match"/>
</opcode>
<opcode id="2C27" name="OP_Action" updated="01/17/08">
<comment></comment>
<payload dir="both" typename="actionStruct" sizechecktype="match"/>
<payload dir="both" typename="actionAltStruct" sizechecktype="match"/>
</opcode>
<opcode id="7E4D" name="OP_Action2" updated="01/17/08">
<comment>old ActionCode</comment>
<payload dir="both" typename="action2Struct" sizechecktype="match"/>
</opcode>
<opcode id="6024" name="OP_Consider" updated="01/17/08">
<comment>old ConsiderCode</comment>
<payload dir="both" typename="considerStruct" sizechecktype="match"/>
</opcode>
<opcode id="7BBB" name="OP_TargetMouse" updated="01/17/08">
<comment>Targeting a person - old ClientTargetCode</comment>
<payload dir="both" typename="clientTargetStruct" sizechecktype="match"/>
</opcode>
<opcode id="0A1D" name="OP_SpawnRename" updated="01/17/08">
<comment>Spawns getting renamed after initial NewSpawn</comment>
<payload dir="server" typename="spawnRenameStruct" sizechecktype="match"/>
</opcode>
<opcode id="48F9" name="OP_Illusion" updated="01/17/08">
<comment>Spawn being illusioned (changing forms)</comment>
<payload dir="both" typename="spawnIllusionStruct" sizechecktype="match"/>
</opcode>
<opcode id="53D4" name="OP_Shroud" updated="01/17/08">
<comment>Server putting players into shroud form</comment>
<payload dir="server" typename="spawnShroudSelf" sizechecktype="none"/>
</opcode>
<opcode id="051B" name="OP_ZoneChange" updated="01/17/08">
<comment>old ZoneChangeCode</comment>
<payload dir="both" typename="zoneChangeStruct" sizechecktype="match"/>
</opcode>
<opcode id="5F51" name="OP_GroupInvite" updated="01/17/08">
<payload dir="both" typename="groupInviteStruct" sizechecktype="match"/>
<payload dir="both" typename="groupAltInviteStruct" sizechecktype="match"/>
<comment></comment>
</opcode>
<opcode id="5251" name="OP_GroupCancelInvite" updated="01/17/08">
<payload dir="both" typename="groupDeclineStruct" sizechecktype="match"/>
<comment>Declining to join a group</comment>
</opcode>
<opcode id="2736" name="OP_GroupFollow" updated="01/17/08">
<payload dir="both" typename="groupFollowStruct" sizechecktype="match"/>
<payload dir="both" typename="groupAltFollowStruct" sizechecktype="match"/>
<comment>Accepting to join a group</comment>
</opcode>
<opcode id="4B61" name="OP_GroupUpdate" updated="01/17/08">
<payload dir="server" typename="groupFullUpdateStruct" sizechecktype="match"/>
<payload dir="server" typename="groupUpdateStruct" sizechecktype="match"/>
<comment></comment>
</opcode>
<opcode id="47E7" name="OP_GroupDisband" updated="01/17/08">
<comment>Disband from group</comment>
<payload dir="both" typename="groupDisbandStruct" sizechecktype="match"/>
</opcode>
<opcode id="7EA8" name="OP_Buff" updated="01/17/08">
<comment>old BuffDropCode</comment>
<payload dir="both" typename="buffStruct" sizechecktype="match"/>
</opcode>
<opcode id="569A" name="OP_BuffFadeMsg" updated="01/17/08">
<comment>old SpellFadeCode</comment>
<payload dir="both" typename="spellFadedStruct" sizechecktype="none"/>
</opcode>
<opcode id="0D5A" name="OP_BeginCast" updated="01/17/08">
<comment>old BeginCastCode</comment>
<payload dir="both" typename="beginCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="3582" name="OP_CastSpell" updated="01/17/08">
<comment>old StartCastCode</comment>
<payload dir="both" typename="startCastStruct" sizechecktype="match"/>
</opcode>
<opcode id="3FD2" name="OP_SwapSpell" updated="01/17/08">
<comment>old TradeSpellBookSlotsCode</comment>
<payload dir="both" typename="tradeSpellBookSlotsStruct" sizechecktype="match"/>
</opcode>
<opcode id="8543" name="OP_MemorizeSpell" updated="01/17/08">
<comment>old MemSpellCode</comment>
<payload dir="both" typename="memSpellStruct" sizechecktype="match"/>
</opcode>
<opcode id="592D" name="OP_InspectAnswer" updated="01/17/08">
<comment>old InspectDataCode</comment>
<payload dir="both" typename="inspectDataStruct" sizechecktype="match"/>
</opcode>
<opcode id="7434" name="OP_Emote" updated="01/17/08">
<comment>old EmoteTextCode</comment>
<payload dir="both" typename="emoteTextStruct" sizechecktype="none"/>
</opcode>
<opcode id="5448" name="OP_SimpleMessage" updated="01/17/08">
<comment>old SimpleMessageCode</comment>
<payload dir="server" typename="simpleMessageStruct" sizechecktype="match"/>
</opcode>
<opcode id="1318" name="OP_FormattedMessage" updated="01/17/08">
<comment>old FormattedMessageCode</comment>
<payload dir="server" typename="formattedMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="2E79" name="OP_CommonMessage" updated="01/17/08">
<comment>old ChannelMessageCode</comment>
<payload dir="both" typename="channelMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="074F" name="OP_SpecialMesg" updated="01/17/08">
<comment>Communicate textual info to client</comment>
<payload dir="server" typename="specialMessageStruct" sizechecktype="none"/>
</opcode>
<opcode id="777C" name="OP_RandomReq" updated="01/17/08">
<comment>old RandomReqCode</comment>
<payload dir="client" typename="randomReqStruct" sizechecktype="match"/>
</opcode>
<opcode id="6CDC" name="OP_RandomReply" updated="01/17/08">
<comment>old RandomCode</comment>
<payload dir="server" typename="randomStruct" sizechecktype="match"/>
</opcode>
<opcode id="4464" name="OP_ConsentResponse" updated="01/17/08">
<comment>Server replying with consent information after /consent</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="0DCD" name="OP_DenyResponse" updated="01/17/08">
<comment>Server replying with deny information after /deny</comment>
<payload dir="server" typename="consentResponseStruct" sizechecktype="match"/>
</opcode>
<opcode id="50C2" name="OP_ManaChange" updated="01/17/08">
<comment>Mana change. Bards send this up with no size. Casters receive this for mana updates.</comment>
<payload dir="server" typename="manaDecrementStruct" sizechecktype="match"/>
<payload dir="client" typename="uint8_t" sizechecktype="none"/>
</opcode>
<opcode id="4675" name="OP_BazaarSearch" updated="01/17/08">
<payload dir="client" typename="bazaarSearchQueryStruct" sizechecktype="none"/>
<payload dir="server" typename="bazaarSearchResponseStruct" sizechecktype="modulus"/>
<payload dir="server" typename="uint8_t" sizechecktype="none"/>
<comment>Bazaar search tool</comment>
</opcode>
<opcode id="6546" name="OP_MoneyOnCorpse" updated="01/17/08">
<comment>old MoneyOnCorpseCode</comment>
<payload dir="server" typename="moneyOnCorpseStruct" sizechecktype="match"/>
</opcode>
<opcode id="7F01" name="OP_SkillUpdate" updated="01/17/08">
<comment>old SkillIncCode</comment>
<payload dir="server" typename="skillIncStruct" sizechecktype="match"/>
</opcode>
<opcode id="6A99" name="OP_LevelUpdate" updated="01/17/08">
<comment>old LevelUpUpdateCode</comment>
<payload dir="server" typename="levelUpUpdateStruct" sizechecktype="match"/>
</opcode>
<opcode id="083B" name="OP_CorpseLocResponse" updated="01/17/08">
<comment>old CorpseLocCode:</comment>
<payload dir="server" typename="corpseLocStruct" sizechecktype="match"/>
</opcode>
<!-- this might be wrong -->
<opcode id="07EE" name="OP_Logout" updated="01/17/08">
<comment></comment>
<payload dir="server" typename="none" sizechecktype="match"/>
</opcode>

ieatacid
01-19-2008, 10:31 PM
struct spawnStruct
{
/*0000*/ uint8_t unknown0000[132];
/*0132*/ uint32_t race; // Spawn race
/*0136*/ uint8_t unknown0136[8];
/*0144*/ uint8_t class_; // Player's class
/*0145*/ uint8_t unknown0145[69];
/*0214*/ uint8_t bodytype; // Bodytype
/*0215*/ uint8_t unknown0215[39];
/*0254*/ char name[64]; // Player's Name
/*0318*/ uint8_t unknown0318[4];
/*0322*/ char lastName[32]; // Player's Lastname
/*0354*/ uint8_t unknown0354[12];
/*0366*/ uint8_t anon; // 0=normal, 1=anon, 2=roleplay
/*0367*/ uint8_t unknown0367[3];
/*0370*/ int16_t deity; // Player's Deity
/*0372*/ uint8_t unknown0372[45];
/*0417*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0418*/ union
{
struct
{
/*0418*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0430*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0442*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0454*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0466*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0478*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0490*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0502*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0514*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0418*/ EquipStruct equipment[9];
};
/*0526*/ uint8_t unknown0526[2];
/*0528*/ uint8_t gm;
/*0529*/ char title[32]; // Title
/*0561*/ uint8_t unknown0561[7];
/*0568*/ uint8_t light; // Spawn's lightsource
/*0569*/ uint32_t petOwnerId; // If this is a pet, the spawn id of owner
/*0573*/ uint8_t unknown0573[5];
/*0578*/ uint8_t state; // stand state
/*0579*/ uint32_t spawnId; // Spawn Id
/*0583*/ uint8_t unknown0583[6];
/*0589*/ uint32_t guildID; // Current guild
/*0593*/ uint8_t gender; // Gender (0=male, 1=female)
/*0594*/ signed padding0000:12; // ***Placeholder
signed x:19; // x coord
signed padding0002:1; // ***Placeholder
/*0598*/ signed z:19;//598 // z coord
signed deltaHeading:10;// change in heading
signed padding0014:3; // ***Placeholder
/*0602*/ signed animation:10; // animation
unsigned heading:12; // heading
signed padding0018:10; // ***Placeholder
/*0606*/ signed deltaX:13; // change in x
signed deltaY:13; // change in y
signed padding0006:6; // ***Placeholder
/*0610*/ signed y:19; // y coord
signed deltaZ:13; // change in z
/*0614*/ float walkspeed; // Speed when running
/*0618*/ uint8_t unknown0618[43];
/*0661*/ uint8_t curHp; // Current hp
/*0662*/ uint8_t unknown0662;
/*0663*/ uint8_t level; // Spawn Level
/*0664*/ uint8_t unknown0664[7];
/*0671*/ float runspeed; // Speed when walking
/*0675*/ uint8_t unknown0675[7];
/*0682*/ union
{
struct
{
/*0682*/ Color_Struct color_helmet; // Color of helmet item
/*0686*/ Color_Struct color_chest; // Color of chest item
/*0690*/ Color_Struct color_arms; // Color of arms item
/*0694*/ Color_Struct color_bracers; // Color of bracers item
/*0698*/ Color_Struct color_hands; // Color of hands item
/*0702*/ Color_Struct color_legs; // Color of legs item
/*0706*/ Color_Struct color_feet; // Color of feet item
/*0710*/ Color_Struct color_primary; // Color of primary item
/*0714*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0682*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0718*/ uint8_t unknown0718[137];
/*0855*/ char suffix[32]; // Player's suffix (of Veeshan, etc.)
/*0887*/ uint8_t unknown0887[10];
/*0897*/
};

Backspace
01-19-2008, 10:51 PM
Which file does this pertain to?



struct spawnStruct
{
/*0000*/ uint8_t unknown0000[132];
/*0132*/ uint32_t race; // Spawn race
/*0136*/ uint8_t unknown0136[8];
/*0144*/ uint8_t class_; // Player's class
/*0145*/ uint8_t unknown0145[69];
/*0214*/ uint8_t bodytype; // Bodytype
/*0215*/ uint8_t unknown0215[39];
/*0254*/ char name[64]; // Player's Name
/*0318*/ uint8_t unknown0318[4];
/*0322*/ char lastName[32]; // Player's Lastname
/*0354*/ uint8_t unknown0354[12];
/*0366*/ uint8_t anon; // 0=normal, 1=anon, 2=roleplay
/*0367*/ uint8_t unknown0367[3];
/*0370*/ int16_t deity; // Player's Deity
/*0372*/ uint8_t unknown0372[45];
/*0417*/ uint8_t NPC; // 0=player,1=npc,2=pc corpse,3=npc corpse
/*0418*/ union
{
struct
{
/*0418*/ EquipStruct equip_helmet; // Equiptment: Helmet visual
/*0430*/ EquipStruct equip_chest; // Equiptment: Chest visual
/*0442*/ EquipStruct equip_arms; // Equiptment: Arms visual
/*0454*/ EquipStruct equip_bracers; // Equiptment: Wrist visual
/*0466*/ EquipStruct equip_hands; // Equiptment: Hands visual
/*0478*/ EquipStruct equip_legs; // Equiptment: Legs visual
/*0490*/ EquipStruct equip_feet; // Equiptment: Boots visual
/*0502*/ EquipStruct equip_primary; // Equiptment: Main visual
/*0514*/ EquipStruct equip_secondary; // Equiptment: Off visual
} equip;
/*0418*/ EquipStruct equipment[9];
};
/*0526*/ uint8_t unknown0526[2];
/*0528*/ uint8_t gm;
/*0529*/ char title[32]; // Title
/*0561*/ uint8_t unknown0561[7];
/*0568*/ uint8_t light; // Spawn's lightsource
/*0569*/ uint32_t petOwnerId; // If this is a pet, the spawn id of owner
/*0573*/ uint8_t unknown0573[5];
/*0578*/ uint8_t state; // stand state
/*0579*/ uint32_t spawnId; // Spawn Id
/*0583*/ uint8_t unknown0583[6];
/*0589*/ uint32_t guildID; // Current guild
/*0593*/ uint8_t gender; // Gender (0=male, 1=female)
/*0594*/ signed padding0000:12; // ***Placeholder
signed x:19; // x coord
signed padding0002:1; // ***Placeholder
/*0598*/ signed z:19;//598 // z coord
signed deltaHeading:10;// change in heading
signed padding0014:3; // ***Placeholder
/*0602*/ signed animation:10; // animation
unsigned heading:12; // heading
signed padding0018:10; // ***Placeholder
/*0606*/ signed deltaX:13; // change in x
signed deltaY:13; // change in y
signed padding0006:6; // ***Placeholder
/*0610*/ signed y:19; // y coord
signed deltaZ:13; // change in z
/*0614*/ float walkspeed; // Speed when running
/*0618*/ uint8_t unknown0618[43];
/*0661*/ uint8_t curHp; // Current hp
/*0662*/ uint8_t unknown0662;
/*0663*/ uint8_t level; // Spawn Level
/*0664*/ uint8_t unknown0664[7];
/*0671*/ float runspeed; // Speed when walking
/*0675*/ uint8_t unknown0675[7];
/*0682*/ union
{
struct
{
/*0682*/ Color_Struct color_helmet; // Color of helmet item
/*0686*/ Color_Struct color_chest; // Color of chest item
/*0690*/ Color_Struct color_arms; // Color of arms item
/*0694*/ Color_Struct color_bracers; // Color of bracers item
/*0698*/ Color_Struct color_hands; // Color of hands item
/*0702*/ Color_Struct color_legs; // Color of legs item
/*0706*/ Color_Struct color_feet; // Color of feet item
/*0710*/ Color_Struct color_primary; // Color of primary item
/*0714*/ Color_Struct color_secondary; // Color of secondary item
} equipment_colors;
/*0682*/ Color_Struct colors[9]; // Array elements correspond to struct equipment_colors above
};
/*0718*/ uint8_t unknown0718[137];
/*0855*/ char suffix[32]; // Player's suffix (of Veeshan, etc.)
/*0887*/ uint8_t unknown0887[10];
/*0897*/
};

ieatacid
01-19-2008, 11:28 PM
everquest.h

Backspace
01-20-2008, 08:00 AM
Getting this when I zone:

Warning: OP_NewZone (0x5ca5) (dataLen: 924) doesn't match: sizeof(newZoneStruct):920

rogues
01-20-2008, 10:07 AM
in your posted zoneopcodes.xml, there's an opcode "0D677" for "OP_GuildMOTD". Should that be 0D67?

With everything posted should showeq be working?

Thanks for all your work on this!!!

fransick
01-20-2008, 10:14 AM
Before I dig deeper into SpawnPositionUpdate, PlayerSpawnPosStruct, and PlayerSelfPosStruct, anyone else seeing crazy vector lines and incorrect data plots outside the map area that cause it to auto-resize the map down to an unreadable size?

I did a clean build of 5.12.0.0 downloaded from SVN (thank you Bonkersbobcat!) with the changes ieatacid posted above (New World and Zone Opcode XML and changes to spawnstruct in everquest.h)

Just wanted to see if I fluxxored something up or if others seeing odd map behavior.

rogues
01-20-2008, 10:22 AM
I'm getting the exact same behavior, fransick. I attributed it to me not quite applying the changes properly, but I guess that's not the case. It's very close. I'm also getting the same error as Backspace.

NPCs appear to be on the map properly, but not PC's. A great place to see this is the bazaar.

fransick
01-20-2008, 10:46 AM
I'm getting the exact same behavior, fransick. I attributed it to me not quite applying the changes properly, but I guess that's not the case. It's very close. I'm also getting the same error as Backspace.

NPCs appear to be on the map properly, but not PC's. A great place to see this is the bazaar.

The NewZoneStruct datalen message is unrelated but "fixable" by adding 4 to the placeholder at the end of the NewZoneStruct:

Change from:

/*0916*/ uint8_t unknown0916[4]; // *** Placeholder (11/24/2007)
}; /*0920*/


To:

/*0916*/ uint8_t unknown0916[8]; // *** Placeholder (01/17/2008)
}; /*0924*/


This eliminates the console messages and does not have any detrimental effects as far as I can see but I haven't done any testing to confirm at this point so your mileage may vary.

Nstalkerga
01-20-2008, 02:01 PM
same results ... ive tried a couple combinations of the above all skewed results...

Thanks in advance to all those that are working on it .. maybe ill figure out how to do it one day so i can help.

ieatacid
01-20-2008, 03:16 PM
in your posted zoneopcodes.xml, there's an opcode "0D677" for "OP_GuildMOTD". Should that be 0D67?


D677. It doesn't matter if there's a "0" in front of it, that's just how I copied it from IDA.


Before I dig deeper into SpawnPositionUpdate, PlayerSpawnPosStruct, and PlayerSelfPosStruct, anyone else seeing crazy vector lines and incorrect data plots outside the map area that cause it to auto-resize the map down to an unreadable size?

playerSpawnPosStruct is wrong and so is the position data in spawnStruct. It's being worked on.



The NewZoneStruct datalen message is unrelated but "fixable" by adding 4 to the placeholder at the end of the NewZoneStruct:

That's what I did. Forgot to post it.

BlueAdept
01-20-2008, 03:36 PM
Am busy this week. It probably wont be until Thursday before I even get to run EQ. If all the bugs get worked out, I will put out a new version next Monday.

ieatacid
01-20-2008, 06:51 PM
I'm having trouble with playerSpawnPosStruct. I believe I have y, x and z right but I'm having trouble with the rest.

For anyone who might be better at this bit field stuff than I am, feel free to help :)

I think these are the correct positions for y/x/z. Heading isn't right, and I'm not sure if deltaHeading is either.


/*0010*/ signed y:19; // y coord
signed deltaZ:13; // change in z
/*0014*/ unsigned heading:12; // ***Placeholder
signed x:19; // x coord
signed padding0002:1; // ***Placeholder
/*0018*/ signed z:19; // z coord
signed deltaHeading:10;// change in heading
signed padding0014:3; // ***Placeholder

That also leaves animation, deltaX and deltaY that need to be found.

purple
01-21-2008, 08:30 AM
There's some #ifdef 0 stuff in player.cpp and spawn.cpp (I think) that I'd use for those ieatacid. Makes it so that you don't have to recompile everything to mess with those structs (since because of dependencies everquest.h updates cause a recompile all pretty much). It also lets you dump the packets and watch them as you run around. So I'd go to a quiet zone (Arena, Shadowrest, Forgotten Halls) and just run around at right angles until I got the positions and deltas and animation right. The struct is the same in both places.

BlueAdept
01-21-2008, 09:14 AM
Hi purple. Good to see that you are still around. Hope things are going good for you.

ieatacid
01-21-2008, 02:53 PM
There's some #ifdef 0 stuff in player.cpp and spawn.cpp (I think) that I'd use for those ieatacid. Makes it so that you don't have to recompile everything to mess with those structs (since because of dependencies everquest.h updates cause a recompile all pretty much). It also lets you dump the packets and watch them as you run around. So I'd go to a quiet zone (Arena, Shadowrest, Forgotten Halls) and just run around at right angles until I got the positions and deltas and animation right. The struct is the same in both places.

Hi purple! Yeah, that's what I've been using (the one in player update in spawnshell.cpp). I got the self-position stuff worked out, I just need to get it working for other players and I think it just dawned on me today how to do it.

ieatacid
01-21-2008, 11:13 PM
everquest.h (thanks ksmith for help with bit fields)


struct playerSpawnPosStruct
{
/*0000*/ uint16_t spawnId;
/*0002*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0006*/ signed deltaHeading:10;// change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0010*/ signed y:19; // y coord
signed animation:13; // animation
/*0014*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0018*/ signed z:19; // z coord
signed deltaZ:13; // change in z
/*0022*/
};

Then you need to copy everything in that struct EXCEPT the spawnID field to spawnStruct at around line number 998, between the fields at 0593 and 0614 so that it looks like this:

/*0593*/ uint8_t gender; // Gender (0=male, 1=female)
/*0594*/ signed padding0000:12; // ***Placeholder
signed deltaX:13; // change in x
signed padding0005:7; // ***Placeholder
/*0598*/ signed deltaHeading:10;// change in heading
signed deltaY:13; // change in y
signed padding0006:9; // ***Placeholder
/*0602*/ signed y:19; // y coord
signed animation:13; // animation
/*0606*/ unsigned heading:12; // heading
signed x:19; // x coord
signed padding0014:1; // ***Placeholder
/*0610*/ signed z:19; // z coord
signed deltaZ:13; // change in z
/*0614*/ float walkspeed; // Speed when running


I've also updated the current svn trunk to version 5.12.1 -- it might be easier to grab that instead of copy/pasting all the changes.

I'd have made a tarball but I'm not sure on the exact command I'd need to issue to produce a proper one :o

bonkersbobcat
01-22-2008, 12:41 PM
Checked in stuff looks good. SEQ seems to work as well ). Thanks!

To make the tarball just run: "make dist"

I will update my build instructions to include making the tarball. Note that the tarball gets named based on the version number as specified in "config.in", however the version number from config.in only gets put into the project when you do the first developer build step of creating the configure file (make -f Makefile.dist build), so I need to move the step of editing the version number earlier in my directions.

BB

BlueAdept
01-22-2008, 12:57 PM
Thanks bonkers. I always just had a clean build that I tarballed up. Never knew about the make dist.