Skip to content

Instantly share code, notes, and snippets.

@DarkLotus
Created January 1, 2020 06:02
Show Gist options
  • Select an option

  • Save DarkLotus/d10f559d1684e5458f9f29be88c4dfb4 to your computer and use it in GitHub Desktop.

Select an option

Save DarkLotus/d10f559d1684e5458f9f29be88c4dfb4 to your computer and use it in GitHub Desktop.
0xc0Stuff
//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