//
// указатель на текущее авто для которого рисовать неон
// или нулевой если неон не нужен
// в CLEO это была 0@
//
static void* active_vehicle;
//
// временная переменная со стека потока CLEO, которая зачем-то вместо стека используется
// хранит в себе указатель на авто, который игра обрабатывает и используется для вычисления флага draw on buildings
// в CLEO это была 2@
//
static void* tmp; // 2@
//
// цвета (0 - 128)
// в CLEO это была 6@
static unsigned int color_blue; // 6@
// в CLEO это была 5@
static unsigned int color_green; // 5@
// в CLEO это была 4@
static unsigned int color_red; // 4@
//
// переменная, которая используется для хранения размера модели
// в CLEO это была 8@
static float dimension_corner_b_x;
//
// временная переменная со стека потока CLEO, которая зачем-то вместо стека используется
// в CLEO это была 7@
static float tmp_dimension;
//
// переменная, которая используется для хранения размера модели
// в CLEO это была 9@
static float dimension_corner_b_y;
extern __declspec(naked) void patch_point(/* CVehicle* vehicle<esi> */) {
__asm {
/* 00: A1 00 00 00 00 */ mov eax, dword ptr active_vehicle
/* 05: 3B F0 */ cmp esi, eax
/* 07: 75 47 */ jnz short store_shadow
/* 09: 89 F0 */ mov eax, esi
/* 0B: A3 00 00 00 00 */ mov dword ptr tmp, eax
/* 10: 0F 94 C0 */ setz al
/* 13: 50 */ push eax
/* 14: 6A 00 */ push 0
/* 16: 68 00 00 80 3F */ push 3F800000h
/* 1B: 6A 00 */ push 0
/* 1D: 68 00 00 00 40 */ push 40000000h
/* 22: A1 00 00 00 00 */ mov eax, dword ptr color_blue
/* 27: 50 */ push eax
/* 28: A1 00 00 00 00 */ mov eax, dword ptr color_green
/* 2D: 50 */ push eax
/* 2E: A1 00 00 00 00 */ mov eax, dword ptr color_red
/* 33: 50 */ push eax
/* 34: 68 FF 00 00 00 */ push 0FFh
/* 39: 8B 46 14 */ mov eax, [esi+14h]
/* 3C: D9 40 04 */ fld dword ptr [eax+4]
/* 3F: B8 00 00 00 00 */ mov eax, dword ptr dimension_corner_b_x
/* 44: D8 08 */ fmul dword ptr [eax]
/* 46: B8 00 00 00 00 */ mov eax, dword ptr tmp_dimension
/* 4B: D9 18 */ fstp dword ptr [eax]
/* 4D: 8B 00 */ mov eax, [eax]
/* 4F: 50 */ push eax
/* 50: */ store_shadow:
/* 50: A1 00 00 00 00 */ mov eax, dword ptr active_vehicle
/* 55: 3B F0 */ cmp esi, eax
/* 57: 75 65 */ jnz short call_default
/* 59: 8B 46 14 */ mov eax, [esi+14h]
/* 5C: D9 40 00 */ fld dword ptr [eax+0]
/* 5F: B8 00 00 00 00 */ mov eax, dimension_corner_b_x
/* 64: D8 08 */ fmul dword ptr [eax]
/* 66: B8 00 00 00 00 */ mov eax, tmp_dimension
/* 6B: D9 18 */ fstp dword ptr [eax]
/* 6D: 8B 00 */ mov eax, [eax]
/* 6F: 50 */ push eax
/* 70: 8B 46 14 */ mov eax, [esi+14h]
/* 73: D9 40 14 */ fld dword ptr [eax+14h]
/* 76: B8 00 00 00 00 */ mov eax, dimension_corner_b_y
/* 7B: D8 08 */ fmul dword ptr [eax]
/* 7D: B8 00 00 00 00 */ mov eax, tmp_dimension
/* 82: D9 18 */ fstp dword ptr [eax]
/* 84: 8B 00 */ mov eax, [eax]
/* 86: 50 */ push eax
/* 87: 8B 46 14 */ mov eax, [esi+14h]
/* 8A: D9 40 10 */ fld dword ptr [eax+10h]
/* 8D: B8 00 00 00 00 */ mov eax, dimension_corner_b_y
/* 92: D8 08 */ fmul dword ptr [eax]
/* 94: B8 00 00 00 00 */ mov eax, tmp_dimension
/* 99: D9 18 */ fstp dword ptr [eax]
/* 9B: 8B 00 */ mov eax, [eax]
/* 9D: 50 */ push eax
/* 9E: 8B 46 14 */ mov eax, [esi+14h]
/* A1: 83 C0 30 */ add eax, 30h
/* A4: 50 */ push eax
/* A5: A1 F4 03 C4 00 */ mov eax, ds:0C403F4h
/* AA: 50 */ push eax
/* AB: 6A 02 */ push 2
/* AD: B8 90 73 70 00 */ mov eax, 707390h
/* B2: FF D0 */ call eax
/* B4: 83 C4 40 */ add esp, 40h
/* B7: A1 00 00 00 00 */ mov eax, dword ptr tmp
/* BC: 89 C6 */ mov esi, eax
/* BE: */ call_default:
/* BE: 8B 46 14 */ mov eax, [esi+14h]
/* C1: 89 F1 */ mov ecx, esi
/* C3: 50 */ push eax
/* C4: B8 60 1A 6E 00 */ mov eax, 6E1A60h
/* C9: FF D0 */ call eax
/* CB: B8 BE BC 6A 00 */ mov eax, 6ABCBEh
/* D0: FF E0 */ jmp eax
}
}