alloc(FindCharacterAddress, 1024)

alloc(ListOffset, 4)

alloc(ESIList, 1024)

alloc(DupeXVac, 1024)

alloc(EDIValue, 4)

label(EndSearch)

label(CompareOffset)

label(StoreESI)

label(DoNormal)

FindCharacterAddress:

mov [esi+114],edi

push eax

push ebx

push ecx

push edx

mov eax,0

mov ebx,ListOffset

mov ecx,ESIList

mov edx,EDIValue

CompareOffset:

cmp eax,[ebx]

je StoreESI

cmp esi,[ecx+eax*4]

je EndSearch

inc eax

jmp CompareOffset

StoreESI:

mov [ecx+eax*4],esi

inc eax

mov [ebx],eax

mov [edx],edi

EndSearch:

pop edx

pop ecx

pop ebx

pop eax

jmp 672614

DupeXVac:

push eax

push ebx

push ecx

mov ebx,[ListOffset]

dec ebx

mov ecx,ESIList

mov eax,[ecx+ebx*4]

cmp esi,eax

je DoNormal

mov edi,[EDIValue]

DoNormal:

mov [esi+114],edi

pop eax

pop ebx

pop ecx

jmp 672614