What makes it so difficult to port games to PC? What would you say is the most challenging aspect?
I don't think that porting to PC is generally and universally more difficult than porting to any other (e.g. console) platform. It's just that the challenges are different: with consoles, you have some very specific rules to adhere to, and specific resource constraints. On PC, you have to build a scalable game, and ensure that it runs well on a variety of software and hardware stacks.
The latter is probably one of the most challenging aspects, but I'll say right here at the start that it's not sufficiently challenging to serve as an excuse for any AAA publisher to not release a polished PC experience on day 1. That's ludicrous.
What are the difficulties in transitioning inputs from controller to mouse and keyboard?
Generally, I think that is far easier than the opposite would be -- i.e. making a mouse-and-keyboard-focused control scheme work on controllers.
There are some basic mistakes I see even in some high end ports, but none of these really take a lot of time to fix, and I wouldn't qualify any of them as particularly difficult.
Regarding the mouse, things to avoid that I commonly see are not providing raw mouse input, a lack of options for mouse acceleration, and strange transformations on mouse input for camera movement such as different vertical and horizontal base sensitivity, or some auto-centering that can't be toggled off. These things make sense on consoles, but are generally really annoying when playing with a mouse.
On the keyboard side, you need full rebinding of course, and you also want to offer more individual bindable actions than on console simply because there are more keys. E.g. on console you might need several keypresses to navigate to the journal or map in an RPG via some sort of main menu, but there is no reasons not to offer access to those directly with a keybinding on PC.
The two most time- and engineering-intensive things to do in my experience when re-implementing input for previously console-only games on PC are fully correct dynamic button prompts when rebinding actions arbitrarily -- even e.g. in tutorial images -- and natural mouse input in all UI screens. The latter includes things like clicking and dragging various elements of course, but also scrolling with the mouse wheel on hover over the right elements and so on. This becomes more and more labor-intensive the more individual UI screens you have, and that's probably why both of these points are frequently very iffy in low- to mid-tier PC ports, especially of (J)RPGs which love their custom UIs.
Why do PC ports like Jedi Survivor and The Last of Us Part 1 Remake suffer from separate bugs than those on consoles?
I haven't worked on either of these two so I can of course only speculate, but ultimately these are different platforms, often with quite distinct low-level APIs. So the porting process itself might introduce bugs in that API transition. However, in my experience it can also well be the case that it just
surfaces bugs which are already in the code, but do not manifest on consoles.
E.g. some insufficient synchronization might just always happen to work out on the console target(s) due to how their schedulers work, or some use-after-free issue [this means that you are still accessing memory that you already said you will no longer need] does not matter because the console's memory allocator doesn't actually re-use those bytes at the time they are inadvertently accessed.
On PC -- or more precisely, on
someone's PC -- those things will eventually manifest, and then you don't just have to look for issues in the code you actually wrote or touched to port the game, but in the original code as well.
How can studios successfully and simultaneously develop PC and console games?
By allocating sufficient resources for all platforms, testing them all continuously, and having people with expertise for each particular platform take responsibility for them.
As I pointed out at the start, PC does have unique challenges, but they are extremely far from insurmountable, especially for publishers who can afford to fund an AAA game in the first place. So I have to assume that there simply isn't enough care given to the PC version sufficiently early and continuously in development, and there is more of an assumption that it will "just work out", unlike the console versions where I assume more resources are allocated for platform-specific work.
What advice can you give to studios looking to port games to PC?
I could write an entire article about this, but I'm going to only focus on a few points, going from the more generic to the more specific and technical:
1) Have people on the team who actually play games on PC, and ideally have done so for a while. E.g. there are decisions in even high-end PC ports which I can only make sense of if I assume that no one working on it -- or at least no one with any power in the design process -- ever spent more than a few hours playing a game with mouse and keyboard.
2) Test on a variety of hardware and software configurations, and with a variety of settings, as early as possible. If you are a large publisher and can therefore easily afford to do this in-house, then do it. But if you are not, then you can still do things like closed external beta tests. You really shouldn't need to rely on bug reports from your customers to get your first test results on relatively common OS, GPU or CPU architectures.
3) Keep everything as open as possible, and communicate with your audience. There are a lot of savvy people in the PC audience. If you try to hide things from them or try to spin some elaborate tale rather than admitting an error, that probably won't work out. On the other hand, if you openly communicate -- and ideally, are also open in your software to the maximum extent feasible, regarding e.g. file formats or encryption -- then the community can actually be a huge asset.
4) Follow good software design principles in general, particularly when it comes to hard-coding assumptions. Making sure that things like the framerate your game is running at, the resolution, its aspect ratio, the specific inputs and so on are abstracted and work arbitrarily from the start is really not that difficult or burdensome. Changing these things later when they were assumed to be immutable can be expensive.
5) Provide as many options as you can, in all of gameplay, input, output, and graphics/performance scaling. You never know exactly what devices people will want or have to use with your game, or what scenarios they are going to play in. People appreciate having flexibility, even if not every single combination of all options is rigorously tested throughout the entire game -- if you fix an obscure issue with one particular combination of options after launch, no one is going to be all too upset.
6) Minimize your reliance on more obscure Windows APIs and non-standard libraries. One particular example of this is using the Windows Media Foundation to access audio/video codecs for playback. Not only will that likely be annoying for Steam Deck and Linux users, relying on external components on the users' system also means you open yourself up to bugs in those. With great patent-free open source options available these days it's much better to ship your own codecs.
Has the ability of developers to bring games to PC improved over time? Why or why not?
Firstly, I assume you are primarily asking about ports from console here -- after all, the vast majority of games, which exist outside the AAA space, are actually built for PC first.
Even so, there is more than one answer to this question. Overall, I would say it has become much easier to bring former console games to PC. There are a lot of reasons for this, but the most impactful one is that the architectures have converged on both the hardware and even more importantly the system software and API levels. Additionally, it's far more likely these days that games are built on top of an engine and middleware layer which already natively supports PC. So that makes getting some form of port up and running much easier than it was in the past.
It's also easier than ever to distribute these games, integrate platform features, and communicate with your audience, largely thanks to Steam.
However, when it comes to optimizing that port, and providing a high-quality experience tailored to the PC use case, I don't think things have gotten much easier. In fact, one might argue that lower-level APIs in graphics put more of a burden on game developers to ensure good performance, and complex middleware layers might make it more difficult to diagnose and fix fundamental engine performance issues. Just look at the large number of AAA UE games which ship with similar stutter issues.
How can studio leadership assist developers with porting games? What resources can they provide?
I think I mostly already answered this implicitly in my earlier replies. What is needed are engineering and UX resources that are actually focused on PC, and they need to be integrated sufficiently early in the development lifecycle to influence decision making throughout the entire process. And of course the multi-SW/HW-stack testing I mentioned previously, either internally or externally.
You can also hire us, but you should do that sufficiently early, we are usually fully booked