Created
January 1, 2020 06:02
-
-
Save DarkLotus/d10f559d1684e5458f9f29be88c4dfb4 to your computer and use it in GitHub Desktop.
0xc0Stuff
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //Handler for 0xC0 | |
| int __cdecl sub_46C120(int a1) | |
| { | |
| int v1; // edi@1 | |
| int v2; // ebx@1 | |
| __int16 v3; // bp@1 | |
| int v4; // esi@1 | |
| int v5; // eax@4 | |
| int v6; // esi@4 | |
| char v8; // [sp+12h] [bp-56h]@1 | |
| char v9; // [sp+13h] [bp-55h]@1 | |
| __int16 v10; // [sp+14h] [bp-54h]@1 | |
| __int16 v11; // [sp+18h] [bp-50h]@1 | |
| __int16 v12; // [sp+1Ch] [bp-4Ch]@1 | |
| __int16 v13; // [sp+20h] [bp-48h]@1 | |
| int v14; // [sp+24h] [bp-44h]@1 | |
| int v15; // [sp+28h] [bp-40h]@1 | |
| int v16; // [sp+2Ch] [bp-3Ch]@1 | |
| int v17; // [sp+30h] [bp-38h]@1 | |
| int v18; // [sp+34h] [bp-34h]@1 | |
| int v19; // [sp+38h] [bp-30h]@1 | |
| int v20; // [sp+3Ch] [bp-2Ch]@1 | |
| int v21; // [sp+40h] [bp-28h]@1 | |
| int v22; // [sp+44h] [bp-24h]@1 | |
| int v23; // [sp+48h] [bp-20h]@1 | |
| int v24; // [sp+4Ch] [bp-1Ch]@1 | |
| int v25; // [sp+50h] [bp-18h]@1 | |
| int v26; // [sp+54h] [bp-14h]@1 | |
| int v27; // [sp+58h] [bp-10h]@1 | |
| __int16 v28; // [sp+5Ch] [bp-Ch]@1 | |
| int v29; // [sp+60h] [bp-8h]@1 | |
| v1 = 0; | |
| v14 = 0; | |
| v2 = 0; | |
| ReadByte(a1, (int)&v14, &v26); | |
| ReadUInt(a1, (int)&v14, &v15); | |
| ReadUInt(a1, (int)&v14, &v16); | |
| ReadUShort(a1, (int)&v14, &v25); | |
| ReadUShort(a1, (int)&v14, &v10); | |
| ReadUShort(a1, (int)&v14, &v11); | |
| ReadByte(a1, (int)&v14, &v8); | |
| v3 = v8; | |
| LOWORD(v29) = v10; | |
| HIWORD(v29) = v11; | |
| ReadUShort(a1, (int)&v14, &v12); | |
| ReadUShort(a1, (int)&v14, &v13); | |
| ReadByte(a1, (int)&v14, &v9); | |
| LOWORD(v27) = v12; | |
| HIWORD(v27) = v13; | |
| v28 = v9; | |
| ReadByte(a1, (int)&v14, &v24); | |
| ReadByte(a1, (int)&v14, &v23); | |
| ReadByte(a1, (int)&v14, &v22); | |
| ReadByte(a1, (int)&v14, &v21); | |
| ReadByte(a1, (int)&v14, &v20); | |
| ReadByte(a1, (int)&v14, &v19); | |
| ReadUInt(a1, (int)&v14, &v18); | |
| ReadUInt(a1, (int)&v14, &v17); | |
| v4 = sub_5A3710(v15); | |
| if ( v4 && (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 36))(v4) ) | |
| v2 = v4; | |
| v5 = sub_5A3710(v16); | |
| v6 = v5; | |
| if ( v5 && (*(int (__thiscall **)(int))(*(_DWORD *)v5 + 36))(v5) ) | |
| v1 = v6; | |
| return sub_4EB7A0(v26, v2, v1, v25, v29, v3, v27, v28, v24, v23, v22, v21, v20, v19, v18, v17); | |
| } | |
| int __cdecl sub_4EB7A0(unsigned __int8 type, int a2, int a3, int itemID, int a5, __int16 a6, int a7, __int16 a8, int speedd, int duration, char unk1, char unk2, int bFixedDir, int bExplode, int hue, int renderMode) | |
| { | |
| int result; // eax@1 | |
| void *v17; // eax@5 | |
| void *v18; // esi@5 | |
| void *v19; // eax@9 | |
| void *v20; // esi@9 | |
| void *v21; // eax@12 | |
| void *v22; // esi@12 | |
| void *v23; // eax@15 | |
| void *v24; // esi@15 | |
| _DWORD *v25; // eax@18 | |
| _DWORD *v26; // esi@18 | |
| void *v27; // eax@23 | |
| void *v28; // esi@23 | |
| void *v29; // eax@27 | |
| void *v30; // esi@27 | |
| result = type; | |
| switch ( type ) | |
| { | |
| case 0u: | |
| if ( a2 ) | |
| { | |
| if ( a3 ) | |
| { | |
| if ( dword_94BFAC ) | |
| { | |
| v23 = j__malloc_0(0x15u); | |
| v24 = v23; | |
| *(_WORD *)v23 = itemID; | |
| *(_DWORD *)((char *)v23 + 2) = a2; | |
| v23 = (char *)v23 + 2; | |
| *((_DWORD *)v23 + 1) = a3; | |
| v23 = (char *)v23 + 4; | |
| *((_BYTE *)v23 + 4) = speedd; | |
| v23 = (char *)v23 + 4; | |
| *((_BYTE *)v23 + 1) = bFixedDir; | |
| v23 = (char *)v23 + 1; | |
| *((_BYTE *)v23 + 1) = bExplode; | |
| v23 = (char *)v23 + 2; | |
| *(_DWORD *)v23 = hue; | |
| *((_DWORD *)v23 + 1) = renderMode; | |
| sub_4E0BE0(15, v24, 0x15u); | |
| result = sub_42ED8C(v24); | |
| } | |
| else | |
| { | |
| result = sub_4E9BF0(itemID, a2, a3, speedd, bFixedDir, bExplode, hue, renderMode); | |
| } | |
| } | |
| else if ( dword_94BFAC ) | |
| { | |
| v19 = j__malloc_0(0x17u); | |
| v20 = v19; | |
| *(_WORD *)v19 = itemID; | |
| *(_DWORD *)((char *)v19 + 2) = a2; | |
| v19 = (char *)v19 + 2; | |
| *((_DWORD *)v19 + 1) = a7; | |
| *((_WORD *)v19 + 4) = a8; | |
| v19 = (char *)v19 + 4; | |
| *((_BYTE *)v19 + 6) = speedd; | |
| v19 = (char *)v19 + 6; | |
| *((_BYTE *)v19 + 1) = bFixedDir; | |
| v19 = (char *)v19 + 1; | |
| *((_BYTE *)v19 + 1) = bExplode; | |
| v19 = (char *)v19 + 2; | |
| *(_DWORD *)v19 = hue; | |
| *((_DWORD *)v19 + 1) = renderMode; | |
| sub_4E0BE0(14, v20, 0x17u); | |
| result = sub_42ED8C(v20); | |
| } | |
| else | |
| { | |
| result = sub_4E9B10(itemID, a2, a7, a8, speedd, bFixedDir, bExplode, hue, renderMode); | |
| } | |
| } | |
| else if ( a3 ) | |
| { | |
| if ( dword_94BFAC ) | |
| { | |
| v21 = j__malloc_0(0x17u); | |
| v22 = v21; | |
| *(_WORD *)v21 = itemID; | |
| *(_DWORD *)((char *)v21 + 2) = a5; | |
| *((_WORD *)v21 + 3) = a6; | |
| v21 = (char *)v21 + 2; | |
| *(_DWORD *)((char *)v21 + 6) = a3; | |
| v21 = (char *)v21 + 6; | |
| *((_BYTE *)v21 + 4) = speedd; | |
| v21 = (char *)v21 + 4; | |
| *((_BYTE *)v21 + 1) = bFixedDir; | |
| v21 = (char *)v21 + 1; | |
| *((_BYTE *)v21 + 1) = bExplode; | |
| v21 = (char *)v21 + 2; | |
| *(_DWORD *)v21 = hue; | |
| *((_DWORD *)v21 + 1) = renderMode; | |
| sub_4E0BE0(13, v22, 0x17u); | |
| result = sub_42ED8C(v22); | |
| } | |
| else | |
| { | |
| result = sub_4E9A30(itemID, a5, a6, a3, speedd, bFixedDir, bExplode, hue, renderMode); | |
| } | |
| } | |
| else if ( dword_94BFAC == a3 ) | |
| { | |
| result = sub_4E9940(itemID, a5, a6, a7, a8, speedd, bFixedDir, bExplode, hue, renderMode); | |
| } | |
| else | |
| { | |
| v17 = j__malloc_0(0x19u); | |
| v18 = v17; | |
| *(_WORD *)v17 = itemID; | |
| *(_DWORD *)((char *)v17 + 2) = a5; | |
| *((_WORD *)v17 + 3) = a6; | |
| v17 = (char *)v17 + 2; | |
| *(_DWORD *)((char *)v17 + 6) = a7; | |
| *((_WORD *)v17 + 5) = a8; | |
| v17 = (char *)v17 + 6; | |
| *((_BYTE *)v17 + 6) = speedd; | |
| v17 = (char *)v17 + 6; | |
| *((_BYTE *)v17 + 1) = bFixedDir; | |
| v17 = (char *)v17 + 1; | |
| *((_BYTE *)v17 + 1) = bExplode; | |
| v17 = (char *)v17 + 2; | |
| *(_DWORD *)v17 = hue; | |
| *((_DWORD *)v17 + 1) = renderMode; | |
| sub_4E0BE0(12, v18, 0x19u); | |
| result = sub_42ED8C(v18); | |
| } | |
| break; | |
| case 1u: | |
| if ( dword_94BFAC ) | |
| { | |
| v25 = j__malloc_0(0xCu); | |
| v26 = v25; | |
| *v25 = a2; | |
| v25[1] = hue; | |
| v25[2] = renderMode; | |
| sub_4E0BE0(11, v25, 4u); | |
| result = sub_42ED8C(v26); | |
| } | |
| else if ( a2 ) | |
| { | |
| if ( j__malloc(0x160u) ) | |
| sub_4E47E0(a2, hue, renderMode); | |
| goto LABEL_31; | |
| } | |
| break; | |
| case 2u: | |
| if ( !dword_94BFAC ) | |
| { | |
| if ( j__malloc(0x160u) ) | |
| sub_4E4350(a5, a6, itemID, speedd, duration, unk1, unk2, hue, renderMode); | |
| goto LABEL_31; | |
| } | |
| v27 = j__malloc_0(0x14u); | |
| v28 = v27; | |
| *(_DWORD *)v27 = a5; | |
| *((_WORD *)v27 + 2) = a6; | |
| *((_WORD *)v27 + 3) = itemID; | |
| v27 = (char *)v27 + 6; | |
| *((_BYTE *)v27 + 2) = speedd; | |
| v27 = (char *)v27 + 2; | |
| *((_BYTE *)v27 + 1) = duration; | |
| v27 = (char *)v27 + 1; | |
| *((_BYTE *)v27 + 1) = unk1; | |
| v27 = (char *)v27 + 1; | |
| *((_BYTE *)v27 + 1) = unk2; | |
| v27 = (char *)v27 + 2; | |
| *(_DWORD *)v27 = hue; | |
| *((_DWORD *)v27 + 1) = renderMode; | |
| sub_4E0BE0(9, v28, 0x14u); | |
| result = sub_42ED8C(v28); | |
| break; | |
| case 3u: | |
| if ( dword_94BFAC ) | |
| { | |
| v29 = j__malloc_0(0x12u); | |
| v30 = v29; | |
| *(_DWORD *)v29 = a2; | |
| *((_WORD *)v29 + 2) = itemID; | |
| v29 = (char *)v29 + 4; | |
| *((_BYTE *)v29 + 2) = speedd; | |
| v29 = (char *)v29 + 2; | |
| *((_BYTE *)v29 + 1) = duration; | |
| v29 = (char *)v29 + 1; | |
| *((_BYTE *)v29 + 1) = unk1; | |
| v29 = (char *)v29 + 1; | |
| *((_BYTE *)v29 + 1) = unk2; | |
| v29 = (char *)v29 + 2; | |
| *(_DWORD *)v29 = hue; | |
| *((_DWORD *)v29 + 1) = renderMode; | |
| sub_4E0BE0(10, v30, 0x12u); | |
| result = sub_42ED8C(v30); | |
| } | |
| else if ( a2 ) | |
| { | |
| if ( j__malloc(0x160u) ) | |
| sub_4E45D0(a2, itemID, speedd, duration, unk1, unk2, hue, renderMode); | |
| LABEL_31: | |
| result = sub_4DCA10(0, 1); | |
| } | |
| break; | |
| default: | |
| return result; | |
| } | |
| return result; | |
| } | |
| _WORD *__thiscall sub_4E4350(_WORD *this, int a2, __int16 a3, unsigned __int16 a4, char a5, char a6, char a7, char a8, int a9, int a10) | |
| { | |
| _WORD *v10; // esi@1 | |
| int v11; // eax@1 | |
| v10 = this; | |
| sub_4DCD90(); | |
| *(_DWORD *)v10 = &off_676C14; | |
| v10[94] = 0; | |
| v10[95] = 0; | |
| v10[96] = 0; | |
| v10[164] = a4; | |
| *((_DWORD *)v10 + 83) = 0; | |
| v10[168] = 0; | |
| v10[169] = 0; | |
| v10[170] = 0; | |
| *((_DWORD *)v10 + 81) = a10; | |
| *((_DWORD *)v10 + 80) = a9; | |
| *((_DWORD *)v10 + 79) = 0; | |
| *((_DWORD *)v10 + 13) = 22 * (dword_A7322C + (signed __int16)a2 - SHIWORD(a2)) - dword_719860; | |
| *((_DWORD *)v10 + 14) = 22 * (SHIWORD(a2) + (signed __int16)a2) - 4 * a3 - dword_71985C + 43; | |
| *((_BYTE *)v10 + 265) = a6; | |
| *((_BYTE *)v10 + 264) = 0; | |
| *((_BYTE *)v10 + 266) = 11 - a5; | |
| *((_BYTE *)v10 + 267) = 0; | |
| *((_BYTE *)v10 + 268) = 0; | |
| v11 = 72 * a4; | |
| if ( *(_BYTE *)(v11 + dword_A1AE98 + 65) ) | |
| { | |
| *((_DWORD *)v10 + 76) = 1; | |
| *((_BYTE *)v10 + 266) = *(_BYTE *)(v11 + dword_A1AE98 + 67); | |
| v10[135] = a4; | |
| v10[136] = 0; | |
| v10[137] = a4 + *(_BYTE *)(v11 + dword_A1AE98); | |
| } | |
| else | |
| { | |
| *((_DWORD *)v10 + 76) = 0; | |
| v10[135] = a4; | |
| v10[137] = a4; | |
| v10[136] = a4 + *(_BYTE *)(48 * a4 + dword_AB9070 + 9) - 1; | |
| } | |
| *((_DWORD *)v10 + 77) = 0; | |
| *((_DWORD *)v10 + 75) = 0; | |
| *((_DWORD *)v10 + 70) = 0; | |
| *((_DWORD *)v10 + 69) = 0; | |
| *((_DWORD *)v10 + 86) = 0; | |
| *((_DWORD *)v10 + 73) = a7 != 0; | |
| *((_DWORD *)v10 + 72) = 1; | |
| *((_DWORD *)v10 + 74) = a8 != 0; | |
| v10[94] = 0; | |
| v10[95] = 0; | |
| v10[96] = 0; | |
| *((_DWORD *)v10 + 49) = 0; | |
| *((_DWORD *)v10 + 52) = 0; | |
| *((_DWORD *)v10 + 50) = 0; | |
| *((_DWORD *)v10 + 51) = 0; | |
| *((_DWORD *)v10 + 53) = 0; | |
| *((_DWORD *)v10 + 78) = 0; | |
| *((_DWORD *)v10 + 2) = "missile gump"; | |
| *((_DWORD *)v10 + 30) = 0; | |
| *((_DWORD *)v10 + 27) = 0; | |
| *((_DWORD *)v10 + 31) = 0; | |
| *((_DWORD *)v10 + 26) = 0; | |
| *((_DWORD *)v10 + 25) = 0; | |
| *((_DWORD *)v10 + 24) = 0; | |
| *((_DWORD *)v10 + 23) = 0; | |
| *((_DWORD *)v10 + 22) = 0; | |
| if ( j__malloc(0x70u) ) | |
| *((_DWORD *)v10 + 54) = sub_4D9AD0(v10, a2, a3); | |
| else | |
| *((_DWORD *)v10 + 54) = 0; | |
| return v10; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment