# Maglam Lord 1.00
# BID: 3A3C781930CB8201
# WARNING: Enemy Movement Speed is not scaling properly to framerate. At 60 FPS it's multiple times slower, looking like enemies are practically walking in place.

unsafeCheck: true

15FPS:
  # Disable bUseFixedFrameRate to untie game speed from framerate and unlock FPS
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    # Default is 0x47, bUseFixedFrameRate |= 0x40 
    # By writing 7 we are making sure that other flags are maintained: 
    # bAllowMultiThreadedAnimationUpdate |= 4
    # bOptimizeAnimBlueprintMemberVariableAccess |= 2
    # bCanBlueprintsTickByDefault |= 1
    value: 7
  # r.DynamicRes.FrameTimeBudget (1000/FPS) cutted to 1 decimal
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [66.6, 66.6]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [15, 15]
  -
    type: block
    what: timing
20FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [50, 50]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [20, 20]
  -
    type: block
    what: timing
25FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [40, 40]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [25, 25]
  -
    type: block
    what: timing
30FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget (default value)
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [33.3, 33.3]
  # t.MaxFPS (default value)
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [0, 0]
35FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [28.5, 28.5]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [35, 35]
  -
    type: block
    what: timing
40FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [25, 25]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [40, 40]
  -
    type: block
    what: timing
45FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [22.2, 22.2]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [45, 45]
  -
    type: block
    what: timing
50FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [20, 20]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [50, 50]
  -
    type: block
    what: timing
55FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [18.1, 18.1]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [55, 55]
  -
    type: block
    what: timing
60FPS:
  # Disable bUseFixedFrameRate
  -
    type: write
    address: [MAIN, 0x5F32908, 0x7B8]
    value_type: uint32
    value: 7
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0x5F086C0, 0]
    value_type: float
    value: [16.6, 16.6]
  # t.MaxFPS (default value)
  -
    type: write
    address: [MAIN, 0x5F331D8, 0]
    value_type: float
    value: [0, 0]