287
"Homeworld Remastered AOB script (2.1)"
Auto Assembler Script
[ENABLE]
aobscanmodule(aobPlayerReader,HomeworldRM.exe,8B 04 82 EB 02 33 C0 C2 04 00 8B 44 24 04 83 F8 FF)
aobscanmodule(aobAsteroidReader,HomeworldRM.exe,8B 81 74 0A 00 00 F3 0F 59 ?? ?? ?? ?? ?? C1 F8 0A 66 0F 6E C0)
aobscanmodule(aobResourceCountReader,HomeworldRM.exe,8B 8F D4 0A 00 00 8B 80 AC 09 00 00 03 F1 85 C0 74 ?? 66 0F 6E 48 08)
aobscanmodule(aobDropoffCalc,HomeworldRM.exe,F3 0F 2C F0 3B C6 0F 4C F0)
aobscanmodule(aobResTakerOnBuild,HomeworldRM.exe,8B F9 29 47 0C 8B B7 ?? ?? 00 00 8B 06 89 45 08 EB)
aobscanmodule(aobBuildWriter,HomeworldRM.exe,29 41 0C 8D 44 24 18 50 8B CF E8 ?? ?? ?? ?? 8B)
aobscanmodule(aobResearchWriter,HomeworldRM.exe,01 45 44 8B 4D 24 8D 44 24 10 50 E8)
aobscanmodule(aobShipHealthUpdater,HomeworldRM.exe,8B 86 58 01 00 00 C1 E8 05 A8 01 74)
aobscanmodule(aobCaptureCalc,HomeworldRM.exe,F3 0F 58 56 5C 8B D8 8B 8B ?? ?? 00 00 0F 2F)
aobscanmodule(aobBonusCalc,HomeworldRM.exe,F3 0F 59 84 F2 ?? ?? 00 00 5E F3 0F 59 C1 C2 04 00) // Dirty!!!
aobscanmodule(aobUnitCapReader,HomeworldRM.exe,F3 0F 10 04 90 F3 0F 58 C1 0F 28 C8 F3 0F 10)
alloc(newmem,4096)
label(aobPlayerReader_r)
registersymbol(aobPlayerReader_r)
label(lblPlayerReader)
label(lblPlayerReaderSkip)
label(pPlayer)
registersymbol(pPlayer)
label(aobAsteroidReader_r)
registersymbol(aobAsteroidReader_r)
label(lblAsteroidReader)
label(lblAsteroidReaderSkip)
label(lblAsteroidReaderRet)
label(bEnableInfiniteAsteroidRefill)
registersymbol(bEnableInfiniteAsteroidRefill)
label(fTemp)
registersymbol(fTemp)
label(aobResourceCountReader_r)
registersymbol(aobResourceCountReader_r)
label(lblResourceCountReader)
label(lblResourceCountReaderSkip)
label(lblResourceCountReaderRet)
label(bEnableQuickHarvest)
registersymbol(bEnableQuickHarvest)
label(aobDropoffCalc_r)
registersymbol(aobDropoffCalc_r)
label(lblDropoffCalc)
label(lblDropoffCalcSkip)
label(lblDropoffCalcRet)
label(bEnableResDropRateMod)
label(fResDropRateMod)
registersymbol(bEnableResDropRateMod)
registersymbol(fResDropRateMod)
label(aobResTakerOnBuild_r)
registersymbol(aobResTakerOnBuild_r)
label(lblResTakerOnBuild)
label(lblResTakerOnBuildSkip)
label(lblResTakerOnBuildRet)
label(bEnableFreeBldAndRsrch)
registersymbol(bEnableFreeBldAndRsrch)
label(aobBuildWriter_r)
registersymbol(aobBuildWriter_r)
label(lblBuildWriter)
label(lblBuildWriterSkip)
label(lblBuildWriterRet)
label(bEnableInstantBuild)
registersymbol(bEnableInstantBuild)
label(aobResearchWriter_r)
registersymbol(aobResearchWriter_r)
label(lblResearchWriter)
label(lblResearchWriterSkip)
label(lblResearchWriterRet)
label(bEnableInstantResearch)
registersymbol(bEnableInstantResearch)
label(aobShipHealthUpdater_r)
registersymbol(aobShipHealthUpdater_r)
label(lblShipHealthUpdater)
label(lblShipHealthUpdaterSkip)
label(lblShipHealthUpdaterRet)
label(bEnableGodMode)
registersymbol(bEnableGodMode)
label(aobCaptureCalc_r)
registersymbol(aobCaptureCalc_r)
label(lblCaptureCalc)
label(lblCaptureCalcSkip)
label(lblCaptureCalcRet)
label(bEnableInstantCapture)
registersymbol(bEnableInstantCapture)
label(aobUnitCapReader_r)
registersymbol(aobUnitCapReader_r)
label(lblUnitCapReader)
label(lblUnitCapReaderSkip)
label(lblUnitCapReaderRet)
label(bEnableUnitCapMod)
label(fUnitCapMod)
registersymbol(bEnableUnitCapMod)
registersymbol(fUnitCapMod)
label(aobBonusCalc_r)
registersymbol(aobBonusCalc_r)
label(lblBonusCalc)
label(lblBonusCalcSkipMaxHealth)
label(lblBonusCalcSkipSpeed)
label(lblBonusCalcSkipDamage)
label(lblBonusCalcSkipPrimarySensorsRange)
label(lblBonusCalcSkipSecondarySensorsRange)
label(lblBonusCalcSkipResourceCollectionRate)
label(lblBonusCalcSkipResourceCapacity)
label(lblBonusCalcSkip)
label(lblBonusCalcRet)
label(bEnableMaxHealthMod)
label(fMaxHealthMod)
label(bEnableSpeedMod)
label(fSpeedMod)
label(bEnableDamageMod)
label(fDamageMod)
label(bEnablePrimarySensorsRangeMod)
label(fPrimarySensorsRangeMod)
label(bEnableSecondarySensorsRangeMod)
label(fSecondarySensorsRangeMod)
label(bEnableResourceCollectionRateMod)
label(fResourceCollectionRateMod)
label(bEnableResourceCapacityMod)
label(fResourceCapacityMod)
registersymbol(bEnableMaxHealthMod)
registersymbol(fMaxHealthMod)
registersymbol(bEnableSpeedMod)
registersymbol(fSpeedMod)
registersymbol(bEnableDamageMod)
registersymbol(fDamageMod)
registersymbol(bEnablePrimarySensorsRangeMod)
registersymbol(fPrimarySensorsRangeMod)
registersymbol(bEnableSecondarySensorsRangeMod)
registersymbol(fSecondarySensorsRangeMod)
registersymbol(bEnableResourceCollectionRateMod)
registersymbol(fResourceCollectionRateMod)
registersymbol(bEnableResourceCapacityMod)
registersymbol(fResourceCapacityMod)
newmem:
bEnableInfiniteAsteroidRefill:
dd 0
bEnableQuickHarvest:
dd 0
bEnableResDropRateMod:
dd 1
fResDropRateMod:
dd (float)10.0
bEnableFreeBldAndRsrch:
dd 0
bEnableInstantBuild:
dd 0
bEnableInstantResearch:
dd 0
bEnableGodMode:
dd 0
bEnableInstantCapture:
dd 0
bEnableUnitCapMod:
dd 0
fUnitCapMod:
dd (float)1.5
// Bonus mods
bEnableMaxHealthMod:
dd 0
fMaxHealthMod:
dd (float)2.0
bEnableSpeedMod:
dd 1
fSpeedMod:
dd (float)1.5
bEnableDamageMod:
dd 1
fDamageMod:
dd (float)1.25
bEnablePrimarySensorsRangeMod:
dd 1
fPrimarySensorsRangeMod:
dd (float)1.75
bEnableSecondarySensorsRangeMod:
dd 1
fSecondarySensorsRangeMod:
dd (float)1.75
bEnableResourceCollectionRateMod:
dd 1
fResourceCollectionRateMod:
dd (float)5.0
bEnableResourceCapacityMod:
dd 1
fResourceCapacityMod:
dd (float)2.5
lblPlayerReader:
test eax,eax
db 8B 04 82
jnz short lblPlayerReaderSkip
mov dword ptr [pPlayer],eax
lblPlayerReaderSkip:
jmp aobPlayerReader+7
pPlayer:
dd 0
lblAsteroidReader:
cmp dword ptr [bEnableInfiniteAsteroidRefill],1
jne short lblAsteroidReaderSkip
fld dword ptr [ecx+000009FC]
fistp dword ptr [fTemp]
mov eax,[fTemp]
shl eax,0A
mov dword ptr [ecx+00000A74],eax
jmp lblAsteroidReaderRet
lblAsteroidReaderSkip:
db 8B 81 74 0A 00 00
jmp lblAsteroidReaderRet
fTemp:
dd 0
lblResourceCountReader:
push eax
push eax
mov eax,[edi+0000095C]
cmp dword ptr [pPlayer],eax
pop eax
jne short lblResourceCountReaderSkip
cmp dword ptr [bEnableQuickHarvest],1
jne short lblResourceCountReaderSkip
mov eax,[eax+000009AC]
test eax,eax
jz short lblResourceCountReaderSkip
mov eax,[eax+08]
shl eax,0a
cmp dword ptr [edi+00000AD4],eax
jge short lblResourceCountReaderSkip
mov dword ptr [edi+00000AD4],eax
lblResourceCountReaderSkip:
pop eax
db 8B 8F D4 0A 00 00
jmp lblResourceCountReaderRet
lblDropoffCalc:
mov esi,[ecx+0000095C]
cmp dword ptr [pPlayer],esi
jne short lblDropoffCalcSkip
cmp dword ptr [bEnableResDropRateMod],1
jne short lblDropoffCalcSkip
mulss xmm0,[fResDropRateMod]
lblDropoffCalcSkip:
db F3 0F 2C F0 3B C6
jmp lblDropoffCalcRet
lblResTakerOnBuild:
mov esi,[ecx+0000095C]
cmp dword ptr [pPlayer],esi
je short lblResTakerOnBuildSkip
cmp dword ptr [bEnableFreeBldAndRsrch],1
jne short lblResTakerOnBuildSkip
xor eax,eax
lblResTakerOnBuildSkip:
db 8B F9 29 47 0C
jmp lblResTakerOnBuildRet
lblBuildWriter:
push eax
mov eax,[edi+0000095C]
cmp dword ptr [pPlayer],eax
pop eax
je short lblBuildWriterSkip
cmp dword ptr [bEnableInstantBuild],1
jne short lblBuildWriterSkip
mov eax,[ecx+0C]
lblBuildWriterSkip:
db 29 41 0C 8D 44 24 18
jmp lblBuildWriterRet
lblResearchWriter:
mov ecx,[ebp+24]
cmp dword ptr [pPlayer],ecx
jne short lblResearchWriterSkip
cmp dword ptr [bEnableInstantResearch],1
jne short lblResearchWriterSkip
mov eax,[ebp+3c]
shl eax,0a
sub eax,[ebp+44]
lblResearchWriterSkip:
db 01 45 44 8B 4D 24
jmp lblResearchWriterRet
lblShipHealthUpdater:
mov eax,[esi+0000095C]
cmp dword ptr [pPlayer],eax
jne short lblShipHealthUpdaterSkip
cmp dword ptr [bEnableGodMode],1
jne short lblShipHealthUpdaterSkip
cmp dword ptr [esi+00000164],0
jle short lblShipHealthUpdaterSkip
movd eax,xmm1
cmp dword ptr [esi+00000164],eax
je short lblShipHealthUpdaterSkip
mov eax,20
jmp lblShipHealthUpdaterRet
lblShipHealthUpdaterSkip:
db 8B 86 58 01 00 00
jmp lblShipHealthUpdaterRet
lblCaptureCalc:
mov ecx,[ecx+0000095C]
cmp dword ptr [pPlayer],ecx
je short lblCaptureCalcSkip
cmp dword ptr [bEnableInstantCapture],1
jne short lblCaptureCalcSkip
mov dword ptr [esi+5C],(float)1.0
lblCaptureCalcSkip:
db F3 0F 58 56 5C
jmp lblCaptureCalcRet
lblUnitCapReader:
db F3 0F 10 04 90
cmp dword ptr [bEnableUnitCapMod],1
jne short lblUnitCapReaderSkip
mov edi,[esp+0c]
cmp dword ptr [pPlayer],edi
jne short lblUnitCapReaderSkip
mulss xmm0,[fUnitCapMod]
lblUnitCapReaderSkip:
jmp lblUnitCapReaderRet
lblBonusCalc:
mov ecx,[edx+0000095C]
cmp dword ptr [pPlayer],ecx
jne lblBonusCalcSkip
cmp esi,(int)1
jne short lblBonusCalcSkipMaxHealth
cmp dword ptr [bEnableMaxHealthMod],1
jne lblBonusCalcSkip
mulss xmm0,[fMaxHealthMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipMaxHealth:
cmp esi,(int)2
jne short lblBonusCalcSkipSpeed
cmp dword ptr [bEnableSpeedMod],1
jne lblBonusCalcSkip
mulss xmm0,[fSpeedMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipSpeed:
cmp esi,(int)7
jne short lblBonusCalcSkipDamage
cmp dword ptr [bEnableDamageMod],1
jne lblBonusCalcSkip
mulss xmm0,[fDamageMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipDamage:
cmp esi,(int)20
jne short lblBonusCalcSkipSecondarySensorsRange
cmp dword ptr [bEnableSecondarySensorsRangeMod],1
jne lblBonusCalcSkip
mulss xmm0,[fSecondarySensorsRangeMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipSecondarySensorsRange:
cmp esi,(int)21
jne short lblBonusCalcSkipPrimarySensorsRange
cmp dword ptr [bEnablePrimarySensorsRangeMod],1
jne lblBonusCalcSkip
mulss xmm0,[fPrimarySensorsRangeMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipPrimarySensorsRange:
cmp esi,(int)25
jne short lblBonusCalcSkipResourceCollectionRate
cmp dword ptr [bEnableResourceCollectionRateMod],1
jne lblBonusCalcSkip
mulss xmm0,[fResourceCollectionRateMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipResourceCollectionRate:
cmp esi,(int)27
jne short lblBonusCalcSkipResourceCapacity
cmp dword ptr [bEnableResourceCapacityMod],1
jne lblBonusCalcSkip
mulss xmm0,[fResourceCapacityMod]
jmp lblBonusCalcSkip
lblBonusCalcSkipResourceCapacity:
lblBonusCalcSkip:
db 5E F3 0F 59 C1
jmp lblBonusCalcRet
aobBonusCalc+9:
aobBonusCalc_r:
jmp lblBonusCalc
lblBonusCalcRet:
aobUnitCapReader:
aobUnitCapReader_r:
jmp lblUnitCapReader
lblUnitCapReaderRet:
aobCaptureCalc:
aobCaptureCalc_r:
jmp lblCaptureCalc
lblCaptureCalcRet:
aobShipHealthUpdater:
aobShipHealthUpdater_r:
jmp lblShipHealthUpdater
nop
lblShipHealthUpdaterRet:
aobResearchWriter:
aobResearchWriter_r:
jmp lblResearchWriter
nop
lblResearchWriterRet:
aobBuildWriter:
aobBuildWriter_r:
jmp lblBuildWriter
nop
nop
lblBuildWriterRet:
aobResTakerOnBuild:
aobResTakerOnBuild_r:
jmp lblResTakerOnBuild
lblResTakerOnBuildRet:
aobDropoffCalc:
aobDropoffCalc_r:
jmp lblDropoffCalc
nop
lblDropoffCalcRet:
aobResourceCountReader:
aobResourceCountReader_r:
jmp lblResourceCountReader
nop
lblResourceCountReaderRet:
aobAsteroidReader:
aobAsteroidReader_r:
jmp lblAsteroidReader
nop
lblAsteroidReaderRet:
aobPlayerReader:
aobPlayerReader_r:
jmp lblPlayerReader
[DISABLE]
aobPlayerReader_r:
db 8B 04 82 EB 02
unregistersymbol(aobPlayerReader_r)
unregistersymbol(pPlayer)
aobAsteroidReader_r:
db 8B 81 74 0A 00 00
unregistersymbol(aobAsteroidReader_r)
unregistersymbol(bEnableInfiniteAsteroidRefill)
unregistersymbol(fTemp)
aobResourceCountReader_r:
db 8B 8F D4 0A 00 00
unregistersymbol(aobResourceCountReader_r)
unregistersymbol(bEnableQuickHarvest)
aobDropoffCalc_r:
db F3 0F 2C F0 3B C6
unregistersymbol(aobDropoffCalc_r)
unregistersymbol(bEnableResDropRateMod)
unregistersymbol(fResDropRateMod)
aobResTakerOnBuild_r:
db 8B F9 29 47 0C
unregistersymbol(aobResTakerOnBuild_r)
unregistersymbol(bEnableFreeBldAndRsrch)
aobResTakerOnBuild_r:
db 8B F9 29 47 0C
unregistersymbol(aobResTakerOnBuild_r)
unregistersymbol(bEnableBuildForFree)
aobBuildWriter_r:
db 29 41 0C 8D 44 24 18
unregistersymbol(aobBuildWriter_r)
unregistersymbol(bEnableInstantBuild)
aobResearchWriter_r:
db 01 45 44 8B 4D 24
unregistersymbol(aobResearchWriter_r)
unregistersymbol(bEnableInstantResearch)
aobShipHealthUpdater_r:
db 8B 86 58 01 00 00
unregistersymbol(aobShipHealthUpdater_r)
unregistersymbol(bEnableGodMode)
aobCaptureCalc_r:
db F3 0F 58 56 5C
unregistersymbol(aobCaptureCalc_r)
unregistersymbol(bEnableInstantCapture)
aobUnitCapReader_r:
db F3 0F 10 04 90
unregistersymbol(aobUnitCapReader_r)
unregistersymbol(bEnableUnitCapMod)
unregistersymbol(fUnitCapMod)
aobBonusCalc_r:
db 5E F3 0F 59 C1
unregistersymbol(aobBonusCalc_r)
unregistersymbol(bEnableMaxHealthMod)
unregistersymbol(fMaxHealthMod)
unregistersymbol(bEnableSpeedMod)
unregistersymbol(fSpeedMod)
unregistersymbol(bEnableDamageMod)
unregistersymbol(fDamageMod)
unregistersymbol(bEnablePrimarySensorsRangeMod)
unregistersymbol(fPrimarySensorsRangeMod)
unregistersymbol(bEnableSecondarySensorsRangeMod)
unregistersymbol(fSecondarySensorsRangeMod)
unregistersymbol(bEnableResourceCollectionRateMod)
unregistersymbol(fResourceCollectionRateMod)
unregistersymbol(bEnableResourceCapacityMod)
unregistersymbol(fResourceCapacityMod)
dealloc(newmem)
288
"Resourcing"
8000FF
1
289
"bEnableInfiniteAsteroidRefill"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableInfiniteAsteroidRefill
290
"bEnableQuickHarvest"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableQuickHarvest
291
"bEnableResDropRateMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableResDropRateMod
292
"fResDropRateMod"
FF0000
Float
fResDropRateMod
293
"bEnableFreeBldAndRsrch"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableFreeBldAndRsrch
294
"bEnableInstantBuild"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableInstantBuild
295
"bEnableInstantResearch"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableInstantResearch
296
"bEnableUnitCapMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableUnitCapMod
297
"fUnitCapMod"
FF0000
Float
fUnitCapMod
348
"Bonus mods"
8000FF
1
349
"bEnableMaxHealthMod (causes capture/repair issues!)"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableMaxHealthMod
350
"fMaxHealthMod"
FF0000
Float
fMaxHealthMod
351
"bEnableSpeedMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableSpeedMod
352
"fSpeedMod"
FF0000
Float
fSpeedMod
353
"bEnableDamageMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableDamageMod
354
"fDamageMod"
FF0000
Float
fDamageMod
355
"bEnablePrimarySensorsRangeMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnablePrimarySensorsRangeMod
356
"fPrimarySensorsRangeMod"
FF0000
Float
fPrimarySensorsRangeMod
357
"bEnableSecondarySensorsRangeMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableSecondarySensorsRangeMod
358
"fSecondarySensorsRangeMod"
FF0000
Float
fSecondarySensorsRangeMod
359
"bEnableResourceCollectionRateMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableResourceCollectionRateMod
360
"fResourceCollectionRateMod"
FF0000
Float
fResourceCollectionRateMod
361
"bEnableResourceCapacityMod"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableResourceCapacityMod
362
"fResourceCapacityMod"
FF0000
Float
fResourceCapacityMod
307
"bEnableGodMode"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableGodMode
308
"bEnableInstantCapture"
0:Disabled
1:Enabled
008000
4 Bytes
bEnableInstantCapture