0043E48A MOV EAX,DWORD PTR DS:[ESI] ; Load lab.vtbl; Case C of switch 0043E0AF
0043E48C MOV ECX,ESI ; Load "this" pointer (Unit - lab)
0043E48E CALL DWORD PTR DS:[EAX+A0] ; Returns 1 if unit is able to work (0 for inactive/disabled)
0043E494 TEST EAX,EAX
0043E496 JE Outpost2.0043E0CA ; -> Return 0 (Lab Unit is unable to research)
0043E49C MOV AX,WORD PTR DS:[ESI+24] ; Load lab.timeLeftToIncrement
0043E4A0 DEC AX
0043E4A2 MOV WORD PTR DS:[ESI+24],AX
0043E4A6 JNZ Outpost2.0043E0CA ; -> Return 0
0043E4AC MOV WORD PTR DS:[ESI+24],0C0
0043E4B2 MOV EDX,DWORD PTR DS:[ESI+60] ; Load lab.techNum
0043E4B5 MOV EAX,DWORD PTR DS:[56C234] ; Load base address of TechInfo* array
0043E4BA MOVSX ECX,BYTE PTR DS:[ESI+64] ; Load lab.numScientists
0043E4BE MOV EBX,DWORD PTR DS:[EAX+EDX*4] ; Load TechInfo*
0043E4C1 NOP
0043E4C2 LEA EDX,DWORD PTR DS:[ECX+ECX*2] ; EDX := numScientists*3
0043E4C5 NOP
0043E4C6 MOV EBP,DWORD PTR DS:[EBX+14] ; Load TechInfo.maxScientists
0043E4C9 LEA EAX,DWORD PTR DS:[EDX+EDX*4] ; EDX := numScientists*15
0043E4CC MOVSX EDI,BYTE PTR SS:[EBP+EAX+4E0CD5] ; Load efficiency of each scientist
0043E4D4 MOV AL,BYTE PTR DS:[ESI+1D] ; Load lab.ownerID (from lower 4 bits)
0043E4D7 AND EAX,0F
0043E4DA MOV EDX,EAX ; Begin player offset calculation
0043E4DC SHL EAX,3
0043E4DF LEA EBX,DWORD PTR DS:[EAX+EAX*2]
0043E4E2 LEA EBP,DWORD PTR DS:[EDX+EBX*4]
0043E4E5 LEA EAX,DWORD PTR DS:[EDX+EBP*8]
0043E4E8 MOV EAX,DWORD PTR DS:[EAX*4+56EF50] ; Load Player.moraleLevel
0043E4EF SHL EAX,4
0043E4F2 MOV EAX,DWORD PTR DS:[EAX+EAX*2+565298] ; Load morale adjustment to research (% listed in morale.txt is scaled to fraction of 256)
0043E4F9 ADD EAX,100
0043E4FE IMUL EDI,EAX
0043E501 IMUL EDI,ECX
0043E504 CALL Outpost2.004028E0 ; IsMultiplayerDLL - returns 1 if DLL is for multiplayer, 0 otherwise
0043E509 TEST EAX,EAX
0043E50B JE SHORT Outpost2.0043E510 ; -> Skip (Not a multiplayer DLL)
0043E50D LEA EDI,DWORD PTR DS:[EDI+EDI*2] ; Multiply research progress by 3 (multiplayer DLL)
0043E510 MOV EAX,DWORD PTR DS:[ESI+3C] ; Load lab.researchNeededToComplete
0043E513 SUB EAX,EDI ; Subtract research done from total needed
0043E515 MOV DWORD PTR DS:[ESI+3C],EAX ; Store lab.researchNeededToComplete
0043E518 TEST EAX,EAX
0043E51A JG Outpost2.0043E0CA ; -> Return 0
; ... Complete research for player