<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="45">
  <CheatEntries>
    <CheatEntry>
      <ID>1337110796</ID>
      <Description>"Get skill pt"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_GET_SKPT,Starfield.exe,8B 88 20 0F 00 00) // should be unique
alloc(newmem,$1000,INJECT_GET_SKPT)

label(code)
label(return)
label(i_sk_pt_addr)

newmem:
  mov [i_sk_pt_addr], rax

code:
  mov ecx,[rax+00000F20]
  jmp return
align 10 cc
  i_sk_pt_addr:
  dq 0

INJECT_GET_SKPT:
  jmp newmem
  nop
return:
registersymbol(INJECT_GET_SKPT)
registersymbol(i_sk_pt_addr)
[DISABLE]

INJECT_GET_SKPT:
  db 8B 88 20 0F 00 00

unregistersymbol(INJECT_GET_SKPT)
unregistersymbol(i_sk_pt_addr)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+208B4AD

Starfield.exe+208B483: CC                       - int 3 
Starfield.exe+208B484: 40 53                    - push rbx
Starfield.exe+208B486: 48 83 EC 30              - sub rsp,30
Starfield.exe+208B48A: 48 83 3D 96 98 50 03 00  - cmp qword ptr [Starfield.exe+5594D28],00
Starfield.exe+208B492: 74 69                    - je Starfield.exe+208B4FD
Starfield.exe+208B494: 48 81 C1 88 00 00 00     - add rcx,00000088
Starfield.exe+208B49B: 48 8D 54 24 20           - lea rdx,[rsp+20]
Starfield.exe+208B4A0: E8 C7 15 80 FF           - call Starfield.exe+188CA6C
Starfield.exe+208B4A5: 90                       - nop 
Starfield.exe+208B4A6: 48 8B 05 7B 98 50 03     - mov rax,[Starfield.exe+5594D28]
// ---------- INJECTING HERE ----------
Starfield.exe+208B4AD: 8B 88 20 0F 00 00        - mov ecx,[rax+00000F20]
// ---------- DONE INJECTING  ----------
Starfield.exe+208B4B3: 89 4C 24 48              - mov [rsp+48],ecx
Starfield.exe+208B4B7: 48 8B 5C 24 20           - mov rbx,[rsp+20]
Starfield.exe+208B4BC: 48 8D 8B E0 00 00 00     - lea rcx,[rbx+000000E0]
Starfield.exe+208B4C3: 48 8D 54 24 48           - lea rdx,[rsp+48]
Starfield.exe+208B4C8: E8 17 FD 24 FF           - call Starfield.exe+12DB1E4
Starfield.exe+208B4CD: 48 8B 05 54 98 50 03     - mov rax,[Starfield.exe+5594D28]
Starfield.exe+208B4D4: 8A 88 E3 10 00 00        - mov cl,[rax+000010E3]
Starfield.exe+208B4DA: 80 E1 01                 - and cl,01
Starfield.exe+208B4DD: 88 4C 24 48              - mov [rsp+48],cl
Starfield.exe+208B4E1: 48 8D 8B 20 01 00 00     - lea rcx,[rbx+00000120]
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337110797</ID>
          <Description>"pt"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>2 Bytes</VariableType>
          <Address>i_sk_pt_addr</Address>
          <Offsets>
            <Offset>F20</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110762</ID>
      <Description>"Get credit (Usage: Open stats)"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_GET_CREDIT,Starfield.exe,03 48 08 48 83 C0 10 EB F2 49 8B 04) // should be unique
alloc(newmem,$1000,INJECT_GET_CREDIT)

label(code)
label(return)
label(i_base_credit_addr)

newmem:
  cmp qword ptr [i_base_credit_addr], 0
  jne code
  mov [i_base_credit_addr], rax

code:
  add ecx,[rax+08]
  add rax,10
  jmp return
align 10 cc
  i_base_credit_addr:
  dq 0

INJECT_GET_CREDIT:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_GET_CREDIT)
registersymbol(i_base_credit_addr)
[DISABLE]

INJECT_GET_CREDIT:
  db 03 48 08 48 83 C0 10

unregistersymbol(INJECT_GET_CREDIT)
unregistersymbol(i_base_credit_addr)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+19C2535

Starfield.exe+19C251D: 75 06           - jne Starfield.exe+19C2525
Starfield.exe+19C251F: 33 C0           - xor eax,eax
Starfield.exe+19C2521: 33 D2           - xor edx,edx
Starfield.exe+19C2523: EB 0B           - jmp Starfield.exe+19C2530
Starfield.exe+19C2525: 48 8B 00        - mov rax,[rax]
Starfield.exe+19C2528: 48 C1 E2 04     - shl rdx,04
Starfield.exe+19C252C: 48 03 D0        - add rdx,rax
Starfield.exe+19C252F: 90              - nop 
Starfield.exe+19C2530: 48 3B C2        - cmp rax,rdx
Starfield.exe+19C2533: 74 09           - je Starfield.exe+19C253E
// ---------- INJECTING HERE ----------
Starfield.exe+19C2535: 03 48 08        - add ecx,[rax+08]
// ---------- DONE INJECTING  ----------
Starfield.exe+19C2538: 48 83 C0 10     - add rax,10
Starfield.exe+19C253C: EB F2           - jmp Starfield.exe+19C2530
Starfield.exe+19C253E: 49 8B 04 24     - mov rax,[r12]
Starfield.exe+19C2542: 89 08           - mov [rax],ecx
Starfield.exe+19C2544: 33 DB           - xor ebx,ebx
Starfield.exe+19C2546: EB 57           - jmp Starfield.exe+19C259F
Starfield.exe+19C2548: 33 FF           - xor edi,edi
Starfield.exe+19C254A: 48 89 7C 24 28  - mov [rsp+28],rdi
Starfield.exe+19C254F: 4D 85 F6        - test r14,r14
Starfield.exe+19C2552: 74 29           - je Starfield.exe+19C257D
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337110763</ID>
          <Description>"Player credit"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_base_credit_addr</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110766</ID>
      <Description>"inf. medic kit (recovery pack) from quick menu when use (min = 15)"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_MEDI,Starfield.exe,44 03 40 08 48 83 C0 10 EB F1 49 8B 06) // should be unique
alloc(newmem,$1000,INJECT_INF_MEDI)

label(code)
label(return)
label(i_last_consume_addr)

newmem:
  mov [i_last_consume_addr], rax

  push r15
  mov r15d, [rax+08]
  cmp r15d, F
  jae endp
  mov r15d, F
  mov [rax+08], r15d
endp:
  pop r15

code:
  add r8d,[rax+08]
  add rax,10
  jmp return
align 10 cc
  i_last_consume_addr:
  dq 0


INJECT_INF_MEDI:
  jmp newmem
  nop 3
return:
registersymbol(INJECT_INF_MEDI)
registersymbol(i_last_consume_addr)
[DISABLE]

INJECT_INF_MEDI:
  db 44 03 40 08 48 83 C0 10

unregistersymbol(INJECT_INF_MEDI)
unregistersymbol(i_last_consume_addr)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+289AD25

Starfield.exe+289AD07: 41 8B C4                 - mov eax,r12d
Starfield.exe+289AD0A: 41 8B CC                 - mov ecx,r12d
Starfield.exe+289AD0D: EB 11                    - jmp Starfield.exe+289AD20
Starfield.exe+289AD0F: 48 8B 46 18              - mov rax,[rsi+18]
Starfield.exe+289AD13: 48 8B CA                 - mov rcx,rdx
Starfield.exe+289AD16: 48 C1 E1 04              - shl rcx,04
Starfield.exe+289AD1A: 48 03 C8                 - add rcx,rax
Starfield.exe+289AD1D: 0F 1F 00                 - nop dword ptr [rax]
Starfield.exe+289AD20: 48 3B C1                 - cmp rax,rcx
Starfield.exe+289AD23: 74 0A                    - je Starfield.exe+289AD2F
// ---------- INJECTING HERE ----------
Starfield.exe+289AD25: 44 03 40 08              - add r8d,[rax+08]
// ---------- DONE INJECTING  ----------
Starfield.exe+289AD29: 48 83 C0 10              - add rax,10
Starfield.exe+289AD2D: EB F1                    - jmp Starfield.exe+289AD20
Starfield.exe+289AD2F: 49 8B 06                 - mov rax,[r14]
Starfield.exe+289AD32: 44 88 8C 24 B8 00 00 00  - mov [rsp+000000B8],r9b
Starfield.exe+289AD3A: 44 89 84 24 BC 00 00 00  - mov [rsp+000000BC],r8d
Starfield.exe+289AD42: 48 8B 68 08              - mov rbp,[rax+08]
Starfield.exe+289AD46: 48 85 ED                 - test rbp,rbp
Starfield.exe+289AD49: 0F 84 B2 00 00 00        - je Starfield.exe+289AE01
Starfield.exe+289AD4F: 48 8B 3D 0A 57 E5 02     - mov rdi,[Starfield.exe+56F0460]
Starfield.exe+289AD56: 48 85 FF                 - test rdi,rdi
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337110790</ID>
          <Description>"Item stock# must &gt;= 2"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110767</ID>
          <Description>"Last item #"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_last_consume_addr</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110777</ID>
      <Description>"Set min ammo# / recovery item# / material# when "trade from" robot / cargo"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_SWAP_AND_GET_AMMO,Starfield.exe,03 58 08 48 83 C0 10 EB F2 4C 8D 45 C0 49 8B CC E8 5F 30) // should be unique
alloc(newmem,$1000,INJECT_SWAP_AND_GET_AMMO)

label(code)
label(return)
label(i_min_ammo_per_batch)
label(i_last_xchg_item_addr)
label(i_last_xchg_item_addr2)
newmem:
  cmp rdi, 7
  je do_it
  cmp rdi, 8
  je do_it


do_it:


  push rbx
  mov rbx, [i_last_xchg_item_addr]
  mov [i_last_xchg_item_addr2], rbx
  mov [i_last_xchg_item_addr], rax


  mov ebx, [rax+08]
  cmp ebx, [i_min_ammo_per_batch]
  jae endp
  mov ebx, [i_min_ammo_per_batch]
  mov [rax+08], ebx

endp:
  pop rbx


code:
  add ebx,[rax+08]
  add rax,10
  jmp return
align 10 cc
  i_last_xchg_item_addr:
  dq 0
  i_last_xchg_item_addr2:
  dq 0
  i_min_ammo_per_batch:
  dd 32


INJECT_SWAP_AND_GET_AMMO:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_SWAP_AND_GET_AMMO)
registersymbol(i_min_ammo_per_batch)
registersymbol(i_last_xchg_item_addr)
registersymbol(i_last_xchg_item_addr2)

[DISABLE]

INJECT_SWAP_AND_GET_AMMO:
  db 03 58 08 48 83 C0 10

unregistersymbol(INJECT_SWAP_AND_GET_AMMO)
unregistersymbol(*)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+28869BC

Starfield.exe+28869A0: 85 C9           - test ecx,ecx
Starfield.exe+28869A2: 75 08           - jne Starfield.exe+28869AC
Starfield.exe+28869A4: 41 8B C0        - mov eax,r8d
Starfield.exe+28869A7: 41 8B C8        - mov ecx,r8d
Starfield.exe+28869AA: EB 0B           - jmp Starfield.exe+28869B7
Starfield.exe+28869AC: 48 8B 42 18     - mov rax,[rdx+18]
Starfield.exe+28869B0: 48 C1 E1 04     - shl rcx,04
Starfield.exe+28869B4: 48 03 C8        - add rcx,rax
Starfield.exe+28869B7: 48 3B C1        - cmp rax,rcx
Starfield.exe+28869BA: 74 09           - je Starfield.exe+28869C5
// ---------- INJECTING HERE ----------
Starfield.exe+28869BC: 03 58 08        - add ebx,[rax+08]
// ---------- DONE INJECTING  ----------
Starfield.exe+28869BF: 48 83 C0 10     - add rax,10
Starfield.exe+28869C3: EB F2           - jmp Starfield.exe+28869B7
Starfield.exe+28869C5: 4C 8D 45 C0     - lea r8,[rbp-40]
Starfield.exe+28869C9: 49 8B CC        - mov rcx,r12
Starfield.exe+28869CC: E8 5F 30 00 00  - call Starfield.exe+2889A30
Starfield.exe+28869D1: 44 8B E8        - mov r13d,eax
Starfield.exe+28869D4: 89 45 48        - mov [rbp+48],eax
Starfield.exe+28869D7: 3B 7E 28        - cmp edi,[rsi+28]
Starfield.exe+28869DA: 0F 97 C2        - seta dl
Starfield.exe+28869DD: 41 88 56 05     - mov [r14+05],dl
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337110779</ID>
          <Description>"Turn on when really needed!!"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110798</ID>
          <Description>"Set min. value to a lower value (i.e. 10) when trade ship repatr parts!"</Description>
          <Color>8000FF</Color>
          <GroupHeader>1</GroupHeader>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110778</ID>
          <Description>"min. value"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_min_ammo_per_batch</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110800</ID>
          <Description>"Last item#"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>i_last_xchg_item_addr</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110804</ID>
          <Description>"Last item #2"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <VariableType>4 Bytes</VariableType>
          <Address>i_last_xchg_item_addr2</Address>
          <Offsets>
            <Offset>8</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110759</ID>
      <Description>"Personal ammo: No reload (# of ammo still decrease)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_PAMMO,Starfield.exe,44 39 48 18 74 3F) // should be unique
alloc(newmem,$1000,INJECT_INF_PAMMO)

label(code)
label(return)

newmem:
  push r15
  mov r15d, [rax+18]
  cmp r15d, 5
  mov r15d, 5
  mov [rax+18], r15d
  jae endp
endp:
  pop r15

code:
  cmp [rax+18],r9d
  je Starfield.exe+1F4AF43
  jmp return

INJECT_INF_PAMMO:
  jmp newmem
  nop
return:
registersymbol(INJECT_INF_PAMMO)

[DISABLE]

INJECT_INF_PAMMO:
  db 44 39 48 18 74 3F

unregistersymbol(INJECT_INF_PAMMO)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+1F4AEFE

Starfield.exe+1F4AED6: 48 8D 4C 24 20           - lea rcx,[rsp+20]
Starfield.exe+1F4AEDB: E8 EC F4 FF FF           - call Starfield.exe+1F4A3CC
Starfield.exe+1F4AEE0: EB 6B                    - jmp Starfield.exe+1F4AF4D
Starfield.exe+1F4AEE2: 48 8B 41 40              - mov rax,[rcx+40]
Starfield.exe+1F4AEE6: 48 8B 10                 - mov rdx,[rax]
Starfield.exe+1F4AEE9: 48 8B 82 F0 00 00 00     - mov rax,[rdx+000000F0]
Starfield.exe+1F4AEF0: 48 8B 48 20              - mov rcx,[rax+20]
Starfield.exe+1F4AEF4: 48 8B 41 28              - mov rax,[rcx+28]
Starfield.exe+1F4AEF8: 4C 39 48 10              - cmp [rax+10],r9
Starfield.exe+1F4AEFC: 74 45                    - je Starfield.exe+1F4AF43
// ---------- INJECTING HERE ----------
Starfield.exe+1F4AEFE: 44 39 48 18              - cmp [rax+18],r9d
// ---------- DONE INJECTING  ----------
Starfield.exe+1F4AF02: 74 3F                    - je Starfield.exe+1F4AF43
Starfield.exe+1F4AF04: 44 38 8A EA 00 00 00     - cmp [rdx+000000EA],r9b
Starfield.exe+1F4AF0B: 74 0C                    - je Starfield.exe+1F4AF19
Starfield.exe+1F4AF0D: 48 8D 4C 24 20           - lea rcx,[rsp+20]
Starfield.exe+1F4AF12: E8 61 EF FF FF           - call Starfield.exe+1F49E78
Starfield.exe+1F4AF17: EB 34                    - jmp Starfield.exe+1F4AF4D
Starfield.exe+1F4AF19: 48 8B 82 F8 00 00 00     - mov rax,[rdx+000000F8]
Starfield.exe+1F4AF20: C5 FA 10 40 40           - vmovss xmm0,[rax+40]
Starfield.exe+1F4AF25: C5 FA 5C 0D FB FB 62 03  - vsubss xmm1,xmm0,[Starfield.exe+557AB28]
Starfield.exe+1F4AF2D: C5 F8 2F 8A EC 00 00 00  - vcomiss xmm1,[rdx+000000EC]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110783</ID>
      <Description>"Lock O2"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_O2,Starfield.exe,C5 FA 10 04 90 * * * * 90) // should be unique
alloc(newmem,$1000,INJECT_INF_O2)

label(code)
label(return)

newmem:
  // max O2 = 80
  // xmm1 = -??? value, used O2 (i.e. O2 = 50, xmm1 = -30)
  vxorps xmm1, xmm1, xmm1
  vmovss [rax+rdx*4], xmm1

code:
  vmovss xmm0,[rax+rdx*4]
  jmp return

INJECT_INF_O2:
  jmp newmem
return:
registersymbol(INJECT_INF_O2)

[DISABLE]

INJECT_INF_O2:
  db C5 FA 10 04 90

unregistersymbol(INJECT_INF_O2)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+24BCED8

Starfield.exe+24BCEB4: C5 78 28 C8           - vmovaps xmm9,xmm0
Starfield.exe+24BCEB8: 48 8B 53 08           - mov rdx,[rbx+08]
Starfield.exe+24BCEBC: 48 8B 0B              - mov rcx,[rbx]
Starfield.exe+24BCEBF: E8 E0 35 00 00        - call Starfield.exe+24C04A4
Starfield.exe+24BCEC4: 48 85 C0              - test rax,rax
Starfield.exe+24BCEC7: 74 1F                 - je Starfield.exe+24BCEE8
Starfield.exe+24BCEC9: 48 8B 4B 18           - mov rcx,[rbx+18]
Starfield.exe+24BCECD: C5 FA 10 09           - vmovss xmm1,[rcx]
Starfield.exe+24BCED1: 48 8B 4B 10           - mov rcx,[rbx+10]
Starfield.exe+24BCED5: 48 63 11              - movsxd  rdx,dword ptr [rcx]
// ---------- INJECTING HERE ----------
Starfield.exe+24BCED8: C5 FA 10 04 90        - vmovss xmm0,[rax+rdx*4]
// ---------- DONE INJECTING  ----------
Starfield.exe+24BCEDD: C5 FA 11 0C 90        - vmovss [rax+rdx*4],xmm1
Starfield.exe+24BCEE2: C5 72 5C C0           - vsubss xmm8,xmm1,xmm0
Starfield.exe+24BCEE6: EB 25                 - jmp Starfield.exe+24BCF0D
Starfield.exe+24BCEE8: 48 8B 0B              - mov rcx,[rbx]
Starfield.exe+24BCEEB: 48 81 C1 98 02 00 00  - add rcx,00000298
Starfield.exe+24BCEF2: 48 8B 43 18           - mov rax,[rbx+18]
Starfield.exe+24BCEF6: 48 8B 53 10           - mov rdx,[rbx+10]
Starfield.exe+24BCEFA: C5 FA 10 18           - vmovss xmm3,[rax]
Starfield.exe+24BCEFE: 4C 8B 43 08           - mov r8,[rbx+08]
Starfield.exe+24BCF02: 8B 12                 - mov edx,[rdx]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110785</ID>
      <Description>"inf. personal EN weapon energy"</Description>
      <Options moHideChildren="1"/>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-02
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_INF_EN_WEAPON,Starfield.exe,C5 FA 10 47 20 C5 FA 58) // should be unique
alloc(newmem,$1000,INJECT_INF_EN_WEAPON)

label(code)
label(return)
label(i_1st_w_en_addr)
label(i_1st_w_en_addr2)
label(i_1st_w_en_addr3)
label(is_only_1st_fired_w_en)

newmem:
  cmp qword ptr [i_1st_w_en_addr], rdi
  je next1
  cmp qword ptr [i_1st_w_en_addr], 0
  jne write_2
  mov [i_1st_w_en_addr], rdi
  jmp next1

write_2:
  cmp qword ptr [i_1st_w_en_addr2], rdi
  je next1
  cmp qword ptr [i_1st_w_en_addr2], 0
  jne write_3
  mov [i_1st_w_en_addr2], rdi
  jmp next1

write_3:
  cmp qword ptr [i_1st_w_en_addr3], rdi
  je next1
  cmp qword ptr [i_1st_w_en_addr3], 0
  jne next1
  mov [i_1st_w_en_addr2], rdi

next1:
  cmp dword ptr [is_only_1st_fired_w_en], 2
  je code
  cmp dword ptr [is_only_1st_fired_w_en], 1
  jne next2
  cmp qword ptr [i_1st_w_en_addr], 0
  je code
  cmp rdi, [i_1st_w_en_addr]
  jne code
  // match 1st weapon
  db EB 3B 54
  db 68 69 73 20 74
  db 61 62 6C 65 20 63 6F 6D 65 73 20 66 72 6F 6D 20 68 74
  db 74 70 73 3A 2F
  db 2F 6F 70 65 6E 63 68 65
  db 61 74 74 61 62 6C 65 73
  db 2E 63 6F 6D
  db 20 2F 20 43 45 20 37 2E 34 2B

next2:
  mov [rdi+20], (float)1.0  // full EN

code:
  vmovss xmm0,[rdi+20]
  jmp return
align 10 cc
  i_1st_w_en_addr:
  dq 0
  i_1st_w_en_addr2:
  dq 0
  i_1st_w_en_addr3:
  dq 0
  is_only_1st_fired_w_en:
  dd 2

INJECT_INF_EN_WEAPON:
  jmp newmem
return:
registersymbol(INJECT_INF_EN_WEAPON)
registersymbol(i_1st_w_en_addr)
registersymbol(i_1st_w_en_addr2)
registersymbol(i_1st_w_en_addr3)
registersymbol(is_only_1st_fired_w_en)
[DISABLE]

INJECT_INF_EN_WEAPON:
  db C5 FA 10 47 20

unregistersymbol(INJECT_INF_EN_WEAPON)
unregistersymbol(i_1st_w_en_addr)
unregistersymbol(i_1st_w_en_addr2)
unregistersymbol(i_1st_w_en_addr3)
unregistersymbol(is_only_1st_fired_w_en)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+1F26D35

Starfield.exe+1F26D13: B3 01                    - mov bl,01
Starfield.exe+1F26D15: E8 FE FE FF FF           - call Starfield.exe+1F26C18
Starfield.exe+1F26D1A: C5 C8 57 F6              - vxorps xmm6,xmm6,xmm6
Starfield.exe+1F26D1E: C5 F8 2F C6              - vcomiss xmm0,xmm6
Starfield.exe+1F26D22: 76 32                    - jna Starfield.exe+1F26D56
Starfield.exe+1F26D24: 48 8B D6                 - mov rdx,rsi
Starfield.exe+1F26D27: 48 8B CF                 - mov rcx,rdi
Starfield.exe+1F26D2A: E8 A9 FE FF FF           - call Starfield.exe+1F26BD8
Starfield.exe+1F26D2F: C5 F8 2F C6              - vcomiss xmm0,xmm6
Starfield.exe+1F26D33: 76 23                    - jna Starfield.exe+1F26D58
// ---------- INJECTING HERE ----------
Starfield.exe+1F26D35: C5 FA 10 47 20           - vmovss xmm0,[rdi+20]
// ---------- DONE INJECTING  ----------
Starfield.exe+1F26D3A: C5 FA 58 35 1E F8 FF 01  - vaddss xmm6,xmm0,[Starfield.exe+3F26560]
Starfield.exe+1F26D42: 48 8B D6                 - mov rdx,rsi
Starfield.exe+1F26D45: 48 8B CF                 - mov rcx,rdi
Starfield.exe+1F26D48: E8 2B FE FF FF           - call Starfield.exe+1F26B78
Starfield.exe+1F26D4D: C5 F8 2F F0              - vcomiss xmm6,xmm0
Starfield.exe+1F26D51: 0F 93 C3                 - setae bl
Starfield.exe+1F26D54: EB 02                    - jmp Starfield.exe+1F26D58
Starfield.exe+1F26D56: 32 DB                    - xor bl,bl
Starfield.exe+1F26D58: 48 8B 74 24 48           - mov rsi,[rsp+48]
Starfield.exe+1F26D5D: 8A C3                    - mov al,bl
}
</AssemblerScript>
      <CheatEntries>
        <CheatEntry>
          <ID>1337110787</ID>
          <Description>"Current lock mode"</Description>
          <DropDownList DisplayValueAsItem="1">0:Lock all
1:Only lock 1st EN
2:Disabled
</DropDownList>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>C08000</Color>
          <VariableType>4 Bytes</VariableType>
          <Address>is_only_1st_fired_w_en</Address>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110786</ID>
          <Description>"1st EN (may not be player's)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_1st_w_en_addr</Address>
          <Offsets>
            <Offset>20</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110788</ID>
          <Description>"2nd EN (may not be player's)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_1st_w_en_addr2</Address>
          <Offsets>
            <Offset>20</Offset>
          </Offsets>
        </CheatEntry>
        <CheatEntry>
          <ID>1337110789</ID>
          <Description>"3rd EN (may not be player's)"</Description>
          <ShowAsSigned>0</ShowAsSigned>
          <Color>FF8080</Color>
          <VariableType>Float</VariableType>
          <Address>i_1st_w_en_addr3</Address>
          <Offsets>
            <Offset>20</Offset>
          </Offsets>
        </CheatEntry>
      </CheatEntries>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110805</ID>
      <Description>"inf. ship repair kit via hotkey when use (min = 10)"</Description>
      <VariableType>Auto Assembler Script</VariableType>
      <AssemblerScript>{ Game   : Starfield.exe
  Version: 
  Date   : 2023-09-03
  Author : bbfox@https://opencheattables.com
}

[ENABLE]

aobscanmodule(INJECT_MIN_SHIP_REPAIR_KIT,Starfield.exe,03 58 08 48 83 C0 10 EB F2 49 8B CC E8 A3 82) // should be unique
alloc(newmem,$1000,INJECT_MIN_SHIP_REPAIR_KIT)

label(code)
label(return)

newmem:
  cmp rdi, 48
  jne code

  push rbx
  mov ebx, [rax+08]
  cmp ebx, A
  jae endp
  mov ebx, A
  mov [rax+08], ebx

endp:
  pop rbx

code:
  add ebx,[rax+08]
  add rax,10
  jmp return

INJECT_MIN_SHIP_REPAIR_KIT:
  jmp newmem
  nop 2
return:
registersymbol(INJECT_MIN_SHIP_REPAIR_KIT)

[DISABLE]

INJECT_MIN_SHIP_REPAIR_KIT:
  db 03 58 08 48 83 C0 10

unregistersymbol(INJECT_MIN_SHIP_REPAIR_KIT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: Starfield.exe+19CAFEC

Starfield.exe+19CAFD0: 85 C9           - test ecx,ecx
Starfield.exe+19CAFD2: 75 08           - jne Starfield.exe+19CAFDC
Starfield.exe+19CAFD4: 41 8B C0        - mov eax,r8d
Starfield.exe+19CAFD7: 41 8B C8        - mov ecx,r8d
Starfield.exe+19CAFDA: EB 0B           - jmp Starfield.exe+19CAFE7
Starfield.exe+19CAFDC: 48 8B 42 18     - mov rax,[rdx+18]
Starfield.exe+19CAFE0: 48 C1 E1 04     - shl rcx,04
Starfield.exe+19CAFE4: 48 03 C8        - add rcx,rax
Starfield.exe+19CAFE7: 48 3B C1        - cmp rax,rcx
Starfield.exe+19CAFEA: 74 09           - je Starfield.exe+19CAFF5
// ---------- INJECTING HERE ----------
Starfield.exe+19CAFEC: 03 58 08        - add ebx,[rax+08]
// ---------- DONE INJECTING  ----------
Starfield.exe+19CAFEF: 48 83 C0 10     - add rax,10
Starfield.exe+19CAFF3: EB F2           - jmp Starfield.exe+19CAFE7
Starfield.exe+19CAFF5: 49 8B CC        - mov rcx,r12
Starfield.exe+19CAFF8: E8 A3 82 01 00  - call Starfield.exe+19E32A0
Starfield.exe+19CAFFD: 44 8B E0        - mov r12d,eax
Starfield.exe+19CB000: 89 45 48        - mov [rbp+48],eax
Starfield.exe+19CB003: 3B 7E 28        - cmp edi,[rsi+28]
Starfield.exe+19CB006: 0F 97 C1        - seta cl
Starfield.exe+19CB009: 41 88 4E 05     - mov [r14+05],cl
Starfield.exe+19CB00D: 8B 56 38        - mov edx,[rsi+38]
}
</AssemblerScript>
    </CheatEntry>
    <CheatEntry>
      <ID>1337110806</ID>
      <Description>"Starfield (A411F509 V1.7.23.0)  /  https://opencheattables.com  /  CE 7.5+"</Description>
      <Color>008844</Color>
      <GroupHeader>1</GroupHeader>
    </CheatEntry>
  </CheatEntries>
  <UserdefinedSymbols>
    <SymbolEntry>
      <Name>PE_SEGMENTS</Name>
      <Address>7FF698A502C0</Address>
    </SymbolEntry>
  </UserdefinedSymbols>
</CheatTable>
