PROCEDURE COMBATBUTTONS; ASSEMBLER;
ASM
PUSHAD
//Код подсказки к предыдущей кнопке
mov edx,[$6A6A14]
mov eax,[$6A6A10]
PUSH 1
PUSH EDX
PUSH EAX
MOV ECX, EBX
MOV BYTE [EBP-4],0
MOV EAX, $5FEE00
CALL EAX
MOV EDX,[EBX+$50]
LEA EDI,[EBX+$48]
LEA ECX,[EBP+$0C]
MOV DWORD [ebp+$0C],$39
PUSH ECX
PUSH 1
PUSH EDX
MOV ECX, EDI
MOV EAX, $404230
CALL EAX
MOV DWORD [Counter], 4
@@LoopButtons:
MOV ECX, [PointerOfButtonsTable]
MOV EAX, [Counter]
MOV ECX, [ECX+EAX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
CMP EAX, 4 //проверка на кнопку битвы
JNZ @@INC
//Подсказка при ПКМ
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
MOV EDX, [ECX+28]
//Подсказка при наведении мыши
MOV ECX, [PointerOfButtonsTable]
MOV EAX, [Counter]
MOV ECX, [ECX+EAX]
MOV ECX, [ECX+4]
MOV EAX, [ECX+32]
MOV EAX, EAX
MOV EAX,[ESI+8]
LEA ECX,[ebp+$0C]
PUSH ECX
PUSH 1
PUSH EAX
MOV ECX, ESI
MOV [ebp+$0C],EBX
MOV EAX, $5FE2D0
CALL EAX
PUSH $68
MOV EAX, $617492
CALL EAX
ADD ESP, 4
MOV [ebp+$0C],EAX
MOV BYTE [EBP-4],0
PUSH 2
PUSH 0
PUSH 0
PUSH 1
PUSH 0
MOV EDI, EAX
//деф кнопки
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+8]
//ID
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+4]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
PUSH EAX
//Y-size
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+24]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
PUSH EAX
//X-size
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+20]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
PUSH EAX
//Y-position
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+16]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
PUSH EAX
//X-position
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
PUSH DWORD [ECX+12]
MOV EAX, C_FUNC_ZVS_CONVERTION_STRING_TO_INTEGER
CALL EAX
ADD ESP, 4
PUSH EAX
MOV ECX, EDI
MOV EAX, $455BD0
CALL EAX
MOV [Temp], EAX
MOV EBX, EAX
//Подсказка при ПКМ
MOV ECX, [PointerOfButtonsTable]
MOV EDX, [Counter]
MOV ECX, [ECX+EDX]
MOV ECX, [ECX+4]
MOV EDX, [ECX+28]
//Подсказка при наведении мыши
MOV ECX, [PointerOfButtonsTable]
MOV EAX, [Counter]
MOV ECX, [ECX+EAX]
MOV ECX, [ECX+4]
MOV EAX, [ECX+32]
MOV EAX, EAX
PUSH 1
PUSH EDX
PUSH EAX
MOV ECX, EBX
MOV BYTE [EBP-4],0
MOV EAX, $5FEE00
CALL EAX
MOV EDX,[EBX+$50]
LEA EDI,[EBX+$48]
LEA ECX,[EBP+$0C]
MOV DWORD [ebp+$0C],$39
PUSH ECX
PUSH 1
PUSH EDX
MOV ECX, EDI
MOV EAX, $404230
CALL EAX
@@INC:
ADD DWORD [Counter], 4
CMP DWORD [Counter], NumberOfStrings*4
JLE @@LoopButtons
POPAD
MOV EBX, [Temp]
PUSH $46B63D //13
END; // .COMBATBUTTONS
Подтверждаю. Как раз связано с вопросом к Мору выше.
Я занулил Temp на входе, а нужно было туда EBX поместить.