# Bloodstained: Ritual of the Night 1.40
# BID: 12E0B62494B22F62

unsafeCheck: true

MASTER_WRITE:
  # Disable double buffer
  -
    type: bytes
    main_offset: 0xABD8294
    value_type: int8
    value: 0x53
15FPS:
  # r.DynamicRes.FrameTimeBudget = 0.84 * (1000/FPS)
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [56, 56]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [15, 15]
  -
    type: block
    what: timing
20FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [42, 42]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [20, 20]
  -
    type: block
    what: timing
25FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [33.6, 33.6]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [25, 25]
  -
    type: block
    what: timing
30FPS:
  # r.DynamicRes.FrameTimeBudget (default value)
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [28, 28]
  # t.MaxFPS (default value)
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [0, 0]
35FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [24, 24]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [35, 35]
  -
    type: block
    what: timing
40FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [21, 21]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [40, 40]
  -
    type: block
    what: timing
45FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [18.66, 18.66]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [45, 45]
  -
    type: block
    what: timing
50FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [16.8, 16.8]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [50, 50]
  -
    type: block
    what: timing
55FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [15.27, 15.27]
  # t.MaxFPS
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [55, 55]
  -
    type: block
    what: timing
60FPS:
  # r.DynamicRes.FrameTimeBudget
  -
    type: write
    address: [MAIN, 0xCF57E90, 0]
    value_type: float
    value: [14, 14]
  # t.MaxFPS (default value)
  -
    type: write
    address: [MAIN, 0xCF7EC80, 0]
    value_type: float
    value: [0, 0]
