# Trine 5: A Clockwork Conspiracy 1.0.3
# BID: 1F0710E2B6C1DEAD
# To update dynamic resolution offsets look at fb::renderer::ResolutionScaler::update

unsafeCheck: true

MASTER_WRITE:
  # Change double buffer to triple buffer
  -
    type: bytes
    main_offset: 0x13D2CA4
    value_type: uint32
    value: 0x52800068
  # Allow changing dynamic resolution timings
  # Max - changed address to MAIN + 0x7CA3200
  -
    type: bytes
    main_offset: 0x2620DD8
    value_type: uint32
    value: 0x1423399F
  -
    type: bytes
    main_offset: 0x2EEF454
    value_type: uint32
    value: 
      - 0x90026DA8
      - 0xF9410108
      - 0x17DCC660
  # Min - changed address to MAIN + 0x7CA3208
  -
    type: bytes
    main_offset: 0x2620E50
    value_type: uint32
    value: 0x942343E0
  -
    type: bytes
    main_offset: 0x2620E8C
    value_type: uint32
    value: 0x942343D1
  -
    type: bytes
    main_offset: 0x2EF1DD0
    value_type: uint32
    value: 
      - 0xD0026D8A
      - 0xF941054A
      - 0xD65F03C0
  # Default values
  -
    type: bytes
    main_offset: 0x7CA3200
    value_type: double
    value: 34.0
  -
    type: bytes
    main_offset: 0x7CA3208
    value_type: double
    value: 32.0
15FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 68.0
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 64.0
20FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 51.0
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 48.0
25FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 40.8
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 38.4
30FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 34.0
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 32.0
35FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 29.14
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 27.42
40FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 25.5
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 24.0
45FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 22.66
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 21.33
50FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 20.4
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 19.2
55FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 18.54
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 17.45
60FPS:
  # Max Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3200]
    value_type: double
    value: 17.0
  # Min Dynamic Resolution Timing
  -
    type: write
    address: [MAIN, 0x7CA3208]
    value_type: double
    value: 16.0