Ive wondered how to find out which mounts your characters has and as I didnt find anything about it, I took a look myself.
Number of Companions/Mounts you have (from GetNumCompanions):
Code:
006FC39F |> 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
006FC3A2 |. C1E1 04 SHL ECX,4
006FC3A5 |. 8B91 50751D01 MOV EDX,DWORD PTR DS:[ECX+11D7550]
Something like
Code:
dword index = 1<<4; //1 for mounts, 0 for companions
dword numMounts = *(index+0x11D7550);
in C.
How to find which mounts you can summon (from CallCompanion):
Code:
.text:006FDF8E 020 mov eax, [ebp+var_10]
.text:006FDF91 020 shl eax, 4 ; Shift Logical Left
.text:006FDF94 020 fldcw word ptr [ebp+var_8] ; Load Control Word
.text:006FDF97 020 add eax, offset dword_11D754C ; Add
.text:006FDF9C 020 add esp, 8 ; Add
.text:006FDF9F 018 fistp qword ptr [ebp-0Ch] ; Store Integer and Pop
.text:006FDFA2 018 mov ecx, [ebp+var_C]
.text:006FDFA5 018 sub ecx, 1 ; Integer Subtraction
.text:006FDFA8 018 cmp ecx, [eax+4] ; Compare Two Operands
.text:006FDFAB 018 fldcw [ebp+var_2] ; Load Control Word
.text:006FDFAE 018 jnb short loc_6FDFDA ; Jump if Not Below (CF=0)
.text:006FDFB0 018 mov edx, [eax+8]
.text:006FDFB3 018 mov eax, [edx+ecx*4]
which translates to
Code:
dword struct = 1<<4; //1 for mounts again, I suppose 0 for companions
struct += 0x11D754C;
struct = *(struct+8);
and then finally
Code:
for (int i = 0; i < numMounts; i++)
cout << *(struct+i*4);