To-Do List

Hotkeys

  • Permanent Up/Down – Option to save a permanent camera up or down position.
  • XInput/Keyboard Freelook Rotation – Ability to rotate view with joystick. Both comfort (snap) and non-comfort modes.
  • Transition to slightly buggy “New Hotkey” system introduced by main Dolphin branch.
    • The old hotkeys system still exists in the main branch as well, but they’re not linked together. Assignments from one aren’t assigned to the other.
    • Basically it’s a mess.
    • Do we keep waiting for the main Dolphin devs to fix it?
  • Once the pitch stabilization is working correctly, should we remove the “Tilt Camera Up” and “Tilt Camera Down” hotkeys? It would have to be working pretty well to justify this.
  • Once we have the units per metre set in most games, should we remove this hotkey? Users really shouldn’t be touching this setting once set (see Per-Game Options).

Hide Object Codes

  • Allow per nibble code bruteforcing
  • Allow codes longer than 128-bits
  • Look into locks again to prevent rare crashes while bruteforcing

Culling Bruteforcer

  • Fix more crashes in the bruteforcer.
  • Post process .map file to create a version that only has interesting functions.
    • Only keep functions that visually changed something, or changed the speed of the game (assuming speed detection is added)
  • Add GUI option to launch bruteforcer.
  • Add ability to force R4-R??
  • Add ability to force floating points.
  • Consider ways to do frame-rate brute forcing.
    • Force areas of memory to certain values (1, 2, 120? and floating point versions of these?)
    • Detect change in speed of game or output frame rate.
  • Add ability to force branches to always branch or never branch.

Camera Stabilization

  • Fix menus that are rotated.
    • Either change the way that items are analyzed or fix it per game by using exact floating point values?
      • Exact floating point values could maybe be added to a game .ini file.
      • More investigation needed.
  • Add recenter rift tracking to game yaw on forward movement option.
  • Consider idea of recentering game yaw to rift tracking position on forward movement.
    • This would be very hard to implement and would probably have to be done on a game by game basis.
    • Might involve finding the address of the floating point value used for rotation, then automatically force it per frame to the head tracking position if forward joystick/button is detected.
  • Add positional stabilization and some kind of positional snap functionality

Motion Sickness Prevention

  • Fix occasional flashing when limited FOV is entered.
  • Find way to keep stereo overlap, while cutting down horizontal FOV
  • Add more options on when to activate the motion sickness prevention method.
    • Individual options such as “A, B, X, Y, X-Axis Left Stick, Y-Axis Left Stick, DPAD Up, DPAD Down, etc.”

Per-Game Options

  • Move “Scale” to a per-game option
    • Find a way to hide “Units Per Metre” from the user, because this should not be changed once set.
      • This will encourage the user to use the proper settings like “Scale” if they would like to change the in game scale.
      • Changing “Units Per Metre” messes with the freelook step size, which is not immediately obvious to a user.
  • Remove “Read Camera Angles” and add “Stabilize Roll/Pitch/Yaw/Keyhole/Keyhole Snap”
    • Only go through code loop if one of these options are enabled.
    • This way users won’t have to toggle between different modes every time they change a game.

Opcode Replay Buffer

  • Fix dual core determinism mode
    • Something is wrong with the “OpcodeDecoder_Run<true>” calls that only happen during this mode.
      • They might have some recursive nature that makes the timewarp thread call itself, thus touching the iterator which causes a vector error.
    • PopFifoAuxBuffer is used, which is bad.
      • Popping from a FIFO when you need to come back and use the data again later is not good.
      • The FIFO pointers should be copied and put into the correct place again or something.
  • Figure out why everything is not always perfectly replicated.
    • Kirby’s Epic Yarn for instance, when you jump with it enabled, some objects move up and down with you.
      • This is some kind of CPU synchronization issue.  Single core and synchronized GPU thread fix this.  Most likely dual core determinism mode will fix it too once it’s working.  Is there a better/faster way to fix this?
      • Fixing this would probably also fix the opcode desyncs that happen sometimes as well as opcode related judder in some games.  Paper Mario, Okami, and most likely Mario Kart Wii are examples of this.
      • ^Fixed: This is fixed now through SyncOnSkipIdle.  The only game I’ve found that needs it set false in Zelda: Wind Waker, but having it true fixes a lot of games with issues.  Example are Okami, Mario Kart Wii, Both Kirby games, Animal Crossing, and it fixes opcode warnings in Smash Bros Wii.  It probably fixes a bunch of other games as well.  It needs “Enable Idle Skipping” checked to work, and that checkmark box should always be checked when running Dolphin VR.
    • Metroid has odd flashing/doubling not related to CPU synchronization on certain textures/objects.  I’m probably missing something in the actual opcode capturing and replay on this one.
      • ^Fixed: This is due to the CPU overwriting the vertex buffer information halfway through a frame.  A new option has been added to fix this, though it’s only implemented for D3D at the moment.
    • DK Country Returns has terrible flashing lines that go straight into your eyes.
      • ^Fixed: This is due to the vertex shader constants being modified midframe.  This is now replicated, but the fix has only been coded for D3D.
    • There are still some synchronization issues in games like Super Mario Sunshine causing the game to lock up on the menu, and some objects to move slightly when the camera moves.  Vertex buffer/shader replay help this a lot, but it still happens.
    • A limited amount of textures still flash through objects in Metroid, random flashing on the DK Country Returns island.
      • Maybe cause by lack of index buffer/geometer shader constant/pixel shader constants replay?
      • Could be something else too.
  • Replay index buffer/geometer shader constant/pixel shader constants
    • Easy enough to do, just needs to be coded up.
  • Opcode Relay doesn’t seem to work at all with XFB enabled.  Look into a fix.

Oculus SDK 0.5.0.1

  • Why is this such a regression from 0.4.4? Did we do something wrong?
  • Find a way to disable the “Health and Safety Warning” in the new SDK.

Hard Problems/New Features

  • Some HUDs aren’t detected properly. Is there a way to fix this?
  • Changing OpenGL resolution in game can cause headtracking and VSync issues
  • Removing entire layers.
    • Effects like water blur in Super Mario Sunshine can need ~15 codes per level.
    • Removing HUD corruption usually only takes a code or two, but sometimes it takes a ton of codes!
    • There should be a better way to remove an entire layer if needed.
  • “Enable idle skipping” can cause issues in some games with “Opcode Replay” or “Timewarp” enabled
    • The Legend of Zelda: The Wind Waker for instance needs it off.
    • I think some other games worked better with it on, but can’t remember what games now.
    • Why is this, and how can we fix it?
    • ^Fixed: See Opcode Replay Buffer Heading.
  • Far away 2D rendering.
    • At a certain point distance, there isn’t any benefit to rendering an object twice.
    • We could save CPU/GPU time by just rendering the object once.
  • OSD messages print only to the right eye without head-tracking
    • OSD messages should be displayed in 3D in both eyes
  • 3D GUI with headtracking
    • It would be great to be able to change options in game.
    • This would be a major undertaking, so I don’t expect this to get done anytime soon.
  • Why doesn’t synchronous timewarp work perfectly all the time?
  • Still plenty of rendering issues to work out.
    • Luigi’s Mansion renders a ton of garbage objects.
      • When you use the hide object range (useful for debugging), you can see that the correct scene is rendered underneath.
      • What’s going on here, and how to fix it?
    • Super Paper Mario flashes terribly in 2D mode when the camera zooms in and out.
      • This actually worked perfectly during the S3D merge when there was an option to slide the stereoscopic slider all the way to mono.
      • Why does the stereo separation cause this terrible flashing effect?
    • Z-Fighting present on many menus.
      • This is fixed if you turn the rift on during a game, which means that it’s caused by the head-tracking tilt/roll/yaw.
  • Eventual support of various APIs like:
    • SteamVR
    • LiquidVR (AMD)
    • VR Direct (Nvidia)
  • 90FPS/120FPS support
    • Right now everything is generally coded assuming the 75hz refresh rate of the Oculus Rift DK2
    • At some point 90hz HMDs are expected
    • Automatically detect the type of HMD and adjust options to match?
  • Direct Mode support is poor
    • This seems like mostly Oculus/AMD/Nvidia/Microsoft’s fault
    • There are problems with changing from OpenGL to D3D mode after a game is launched
      • This might be able to be fixed if more time was spent messing with how we close/open all the contexts
  • Bad settings checker/safe mode.
    • There could be a “safe mode” or some kind of button that is pressed to check for odd settings that might be causing judder/crashes.
    • Things like “Dual Core” not checked, GPU Determinism/Deterministic Dual Core On, CPU Emulator Engine set to anything but JIT Recompiler, “Enable CPU Clock Override” on, etc.
    • Could either inform the user of potential misconfiguration or launch the game with default settings (if safe mode is chosen).

Random Issues

  • Choosing the weird Direct3D AA options with “quality levels” causes DolphinVR to crash.
    • Should we remove them in DolphinVR?
    • They are really weird options to begin with that most users don’t understand
  • Stereoscopic 3D Mode contains “Oculus”, but doesn’t need to be used. Should this be removed? Why is it there?
Advertisements