int __thiscall EQPlayer__CreateFromSpawn(int EQPlayer, int EQSpawn) { struct_EQSpawnPtr *EQSpawnPtr; // edi@1 struct_EQPlayerPtr *EQPlayerPtr; // esi@1 int result; // eax@2 int v5; // eax@3 char *v6; // ebx@3 struct_EQPlayerPtr *v7; // ecx@4 char *v8; // eax@5 char *v9; // ecx@5 int v10; // ecx@5 int v11; // ecx@8 int v12; // eax@9 signed int v13; // edx@10 int v14; // ecx@22 int v16; // [sp-8h] [bp-24h]@15 int v17; // [sp+8h] [bp-14h]@25 int v18; // [sp+Ch] [bp-10h]@25 int v19; // [sp+10h] [bp-Ch]@25 int v20; // [sp+14h] [bp-8h]@1 int v21; // [sp+18h] [bp-4h]@12 signed int v22; // [sp+24h] [bp+8h]@3 signed int v23; // [sp+24h] [bp+8h]@5 signed int v24; // [sp+24h] [bp+8h]@12 signed int v25; // [sp+24h] [bp+8h]@19 char *v26; // [sp+24h] [bp+8h]@21 EQSpawnPtr = (struct_EQSpawnPtr *)EQSpawn; EQPlayerPtr = (struct_EQPlayerPtr *)EQPlayer; v20 = 1; if ( EQSpawn ) { v5 = *(_DWORD *)(EQSpawn + 75); v22 = 0; *(_DWORD *)(EQPlayer + 572) = v5; *(_BYTE *)(EQPlayer + 589) = EQSpawnPtr->byte6; *(_DWORD *)(EQPlayer + 576) = EQSpawnPtr->dword144; *(_DWORD *)(EQPlayer + 0x230) = EQSpawnPtr->dwordE9; v6 = EQSpawnPtr->fC5; do { sub_47A406(v22, *(_DWORD *)(v6 + 151)); sub_47A3EB(v22++, *(_DWORD *)v6); v6 += 4; } while ( v22 < 9 ); EQPlayerPtr->dword258 = EQSpawnPtr->dword154; EQPlayerPtr->dword270 = EQSpawnPtr->dword14F; EQPlayerPtr->dword25C = EQSpawnPtr->dwordBD; EQPlayerPtr->dword274 = EQSpawnPtr->byte56; EQPlayerPtr->dword284 = 100; EQPlayerPtr->byte245 = EQSpawnPtr->byte55; EQPlayerPtr->byte246 = EQSpawnPtr->byte92; EQPlayerPtr->byte247 = EQSpawnPtr->byte72; EQPlayerPtr->byte248 = EQSpawnPtr->byte14C; EQPlayerPtr->byte249 = EQSpawnPtr->byte91; EQPlayerPtr->byte24A = EQSpawnPtr->byte9C; EQPlayerPtr->byte1B7 = EQSpawnPtr->byte112; EQPlayerPtr->byte1B8 = EQSpawnPtr->byte8B; EQPlayerPtr->byte24B = EQSpawnPtr->byte0; EQPlayerPtr->dword280 = EQSpawnPtr->dword47; EQPlayerPtr->dword288 = EQSpawnPtr->dwordEE; EQPlayerPtr->dword27C = EQSpawnPtr->dwordC1; EQPlayer__SetBoatAttribs(v7, EQSpawnPtr->dword11C); EQPlayerPtr->byte244 = EQSpawnPtr->byte53; EQPlayerPtr->byte252 = EQSpawnPtr->byte14B; EQPlayerPtr->byte24E = EQSpawnPtr->byte14E; EQPlayerPtr->byte24C = EQSpawnPtr->byte97; EQPlayerPtr->byte250 = EQSpawnPtr->byte54; EQPlayerPtr->byte1B1 = EQSpawnPtr->byte4; EQPlayerPtr->byte24F = EQSpawnPtr->byte148; EQPlayerPtr->byte251 = EQSpawnPtr->byte57; EQPlayerPtr->byte253 = EQSpawnPtr->byte14A; EQPlayerPtr->dword264 = EQSpawnPtr->byte5; sub_47E900(v10, EQSpawnPtr->byteED); EQPlayerPtr->byte1B4 = EQSpawnPtr->byte180; EQPlayerPtr->byte1B5 = EQSpawnPtr->byte149; EQPlayerPtr->byte1B2 = EQSpawnPtr->byte90; EQPlayerPtr->byte256 = EQSpawnPtr->byte1; EQPlayerPtr->dword28C = EQSpawnPtr->byte14D; EQPlayerPtr->byte254 = EQSpawnPtr->byte153; EQPlayerPtr->byte255 = EQSpawnPtr->byte113; strcpy(&EQPlayerPtr->char1, &EQSpawnPtr->char124); EQPlayerPtr->dword278 = EQSpawnPtr->byte3; *(float *)&EQPlayerPtr->dword30 = 0.0; v9 = &EQPlayerPtr->f1B9[83]; *(float *)&EQPlayerPtr->dword34 = 0.0; *(float *)&EQPlayerPtr->dword38 = 0.0; EQPlayerPtr->float4C = 0.0; EQPlayerPtr->float50 = 0.0; EQPlayerPtr->float48 = 0.0; EQPlayerPtr->float3C = 0.0; EQPlayerPtr->float40 = 0.0; EQPlayerPtr->float44 = 0.0; EQPlayerPtr->float58 = 0.0; EQPlayerPtr->float54 = 0.0; EQPlayerPtr->float5C = 0.0; v23 = 0; EQPlayerPtr->byte1B3 = EQSpawnPtr->byte123 == 1; EQPlayerPtr->byte1B0 = EQSpawnPtr->byte58; EQPlayerPtr->dword294 = EQSpawnPtr->dword98; EQPlayerPtr->dword298 = EQSpawnPtr->dword8C; EQPlayerPtr->dword29C = EQSpawnPtr->dword93; EQPlayerPtr->dword2A0 = EQSpawnPtr->dword4F; EQPlayerPtr->dword1A0 = EQSpawnPtr->dword158; v8 = EQSpawnPtr->f114; do { *(_DWORD *)v9 = *(_DWORD *)v8; ++v23; v8 += 4; v9 += 4; } while ( v23 < 2 ); dword_9006AC = 1; if ( (EQSpawnPtr->dword62 & 0x1FF80000) == 34603008 ) { v11 = EQSpawnPtr->dword5E; if ( (EQSpawnPtr->dword5E & 0x3FF) == 66 ) { v12 = EQSpawnPtr->dword62 & 0xE007FFFF; v20 = 2; EQSpawnPtr->dword62 = v12; EQSpawnPtr->dword5E = v11 & 0xFFFFFC00; } } sub_465304(&EQPlayerPtr->dword30, &EQSpawnPtr->dword5E, EQPlayerPtr); v13 = 0; dword_9006AC = 0; if ( EQPlayerPtr->byte254 > -1 && sub_479E02(-1) ) { v24 = v13; v21 = (int)EQSpawnPtr->f15C; do { if ( v24 && v24 < 7 ) v16 = EQPlayerPtr->byte254; else v16 = *(_DWORD *)(v21 - 151); sub_47A3EB(v24, v16); sub_47A406(v24++, *(_DWORD *)v21); v21 += 4; } while ( v24 < 9 ); EQPlayerPtr->byte254 = -1; } else { v25 = v13; v21 = (int)EQSpawnPtr->f15C; do { sub_47A3EB(v25, *(_DWORD *)(v21 - 151)); sub_47A406(v25++, *(_DWORD *)v21); v21 += 4; } while ( v25 < 9 ); } v26 = EQSpawnPtr->f73; v21 = 6; do { v14 = *(_DWORD *)v26; if ( *(_DWORD *)v26 ) { if ( v14 < dword_85139C ) { if ( (char *)dword_851398 + 268 * v14 ) { v17 = EQPlayerPtr->dword30; v18 = EQPlayerPtr->dword34; v19 = EQPlayerPtr->dword38; sub_495CC3(v14, 2, (char *)dword_851398 + 268 * v14, EQPlayerPtr, EQPlayerPtr, &v17, 0, 0, 0); } } } v26 += 4; } while ( v21-- != 1 ); sub_47A77B((int)EQPlayerPtr, &EQSpawnPtr->charF2); sub_47A7B7((int)EQPlayerPtr, &EQSpawnPtr->char9D); result = v20; } else { result = 0; } return result; }