[Music] [Applause] so cool yeah thank you everyone for coming I don't even have employees who show up at 10 a.m. on Monday so this really means a lot it's my first time speaking in GGC and also being the first talk at JDC yeah it's crazy I hope everyone has a good GGC ahead of them GGC so yeah my name is Thomas O'Connor I'm here to help you guys navigate both the technical and the administrative work that goes in to console game development I'm gonna give you just a quick rundown about me and my company before we dive into the actual the work here so we're a team based in Seattle and we love console game development we started this company right after college to work on an original game for the Nintendo DSi because we were really excited about an attendent Nintendo's digital storefront meaning that it made console games accessible to indie developers like us of course
college debt meant that we weren't going to be doing a lot of indie work without holding down day jobs at other companies so our team everyone on our team was working at elsewhere at the same time fuel cell fist cell ArenaNet microsoft high-res so we were doing console game development during the day and then indie games and at night I'm sure some of you know moonlighting does isn't exactly a very productive way to do indie games so we didn't actually finish a whole lot one job that I had before going full-time indie was with the developer support group for Nintendo my primary focus there was on supporting html5 platform for the Wii U it was called a Nintendo web frameworks I also wrote and maintain documentation on the developer portal that outlined the development process start to finish which is pretty much what this talk is except for work also covering Xbox and ps4 so about seven years after the company started we finally made the plunge to go full-time and then we turned our focus instead of making our own games were going to help other indie games get brought over to consoles so
there's a bunch of the games that we've been working on just this last year most of these have been for the Nintendo switch but we're also doing xbox one ps4 and then in ten to 3ds most of our projects have been in unity but we're also doing unreal all c++ mano game so this is our roadmap this is what the process looks like start to finish or start to never finishing it's reasonable for an already completed game to take about three months possibly up to six months this is where people get kind of depressed or they think that they could do it faster you probably can do it faster but you should plan for at least three months if you're doing online multiplayer or any advanced networking features then it's recommended to give yourself at least twice as much time they can go faster if you're familiar with the process so we'll go over the general process of getting everything set up we'll dive into a few technical details about development itself I do have a whole lot of unity stuff in here but porting unity games isn't meant to be the main focus of this talk if there are any important
topics that you felt like left out we'll have a Q&A session that you could please bring those up at the end there's also a bunch of things I will not be talking about low level graphics programming specific API calls on the system basically anything that would be under NDA hopefully it can still give you a good bird's-eye view of the process so you know it's ahead of you and you can avoid some costly issues down the road before we get started also go over some terminology if you know all this stuff I'm sorry so the the dev kit is a development hardware version of the console system that will let you run unlicensed code it looks pretty much like a retail device but it's set up so you connect it to your PC either through USB or over the land your host PC is your computer that just has all the development tools set up once your host PC and the dev kit are connected you'll be able to deploy and debug software to it a ROM is an archive file like a zip file that contains all of your your games executable and all of its
resources it's like an all-in-one bundle of your game I will often use the terms mastering and authoring interchangeably it's the process of creating a ROM from a build of your game using the development software provided and certification is a big one so this is this has different names on each system Nintendo calls it logic starting calls at fqa this is just their process of checking your game against the list of requirements to make sure that your game the standards and that they've outlined and protects their system and users so these are the signup pages you can google these too you don't have to actually memorize URLs everyone these days I believe is now approving developers based on the titles that you're applying with so I guess technically these are application pages signup pages if your title is approved then you're able to register your company and you really should be a company for these guys and get access to
their development portal and then share access to your team members it's there you can download development tools order development hardware and find things like documentation forums and web tools for managing and submitting your game and it heads up that Sony still requires a static IP address for developers to access their portals I Comcast is really expensive to do that so you can get a VPN if that's easier or cheaper for your studio so getting your development environment set up is a whole lot easier these days so this wasn't exactly an easy slide to write about the problems you'd run into for most of the systems you'll need to install an SDK which provides your code access to the system features and there are also tools that will let your PC's connect with and interact with the development hardware once your development Hardware set up from your PC you can do cool stuff deploy your software take screenshots update the firmware brick it cry it's
actually not as easy to brick a dev kit these days but it's definitely still wise to be careful and make sure that you're giving yourself enough time to pour through the documentation there's some very physical steps sometimes about recovering from mistakes or is just a lot easier these days but pretty much every time we had a submission new something would go wrong with the dev kits that would take up our entire day the license would expire on them the SDK version would expire some reset or format operation would end up wiping all the development accounts and we wouldn't remember how to create development accounts one thing that is still quite troublesome with dev hardware is the development especially the ones that are supposed to have special or limited online privileges Microsoft has this with games for gold Nintendo has this now with a Nintendo switch service start online service my recommendation is that the documentation on this is not very good so as you go through this process write down your own
documentation and keep it on hand the next time you need to make additional accounts okay so the great news is that pretty much everyone should already know is that most of the game engines used by Indies are supported on most platforms so a quick question how many people here are using unity for their game that's a lot of people how many people are using unreal that's a good amount of people guys how many people are using C++ or something native suite and there's a handful of people and then how many people are using something else mono game or html5 good for you there are options for you it's just they're not great the important thing to remember is getting set up is that each of these companies that have middleware have their own turnaround time for verifying
your statuses and improved developer and then getting you access to their software so even once you get access to so many stuff you're still going to take needs some time to get access to unity or mono game or anything like that so before you actually start developing your game there's a whole bunch of actual pre work pre publishing work that you should do you're gonna have to register your game you've applied your your title was approved but it's not actually in the system registering in the system will give you a title ID or it's also known as a game code this identifier makes the system aware of your title so that you can configure the backend services like achievements leaderboards and also do things like schedule a submission there are some platforms like Sony or the Nintendo 3ds you're going to have to register your title separately for different regions North America and Europe are both by essentially different companies all console games need to have a rating
provided by the age rating agencies that operate in each region you'd probably know the ESRB here in North America in Europe there's Peggy and you SK there's also zero for Japan for digital games some of these are free some of them still cost money and they might even need video footage of your game or even an actual copy of your game running on the system it's important to know that for scheduling if you you need a version of your game that you can send them and that could take weeks before you can actually submit fortunately most systems are now supporting IARC IURC is an international coalition of the rating agencies this means that you can apply just once and get ratings from a bunch of agencies all at once and it's free this is great because it makes regions like Australia and New Zealand accessible to Indies typically those have been pretty expensive ratings to get and the last thing that you should do before you actually get started in development or while you're getting started is setting up the the back-end
service config so all of your online systems like achievements trophies rankings if you're going to access any independent servers you're going to have to configure the development servers before your game can actually use those features all the platforms all console platforms have web tools and their development portals that will let you set these up it can take a little while for the companies to process your configuration so please make sure you just give yourself a couple of days so this is just a handy reminder for everybody to just know your contacts their developer support teams to help you with your technical issues there the publisher teams which are there to help you find the right person to talk to they help you plan your release and they'll work with you on all of your marketing assets and there's the testing teams and these are the ones who are the most familiar with the certification requirements and the testing procedures that they'll use to break your game and
break your heart a good example of why I like to bring this up so when the testing team comes back and they're saying that they can't approve your game for release because your game doesn't properly handle the user signing out in the pause menu complaining to the testing team about the business impact of your game missing it's really planned release date isn't going to help they're not gonna care so cool everything's set up you got your dev kit and you're running sample code on the dev kit and now you're ready to go with your own project every time you bring your game over to a new system there's all kinds of low-level system work that you're going to need to deal with unless you're using a game engine like unity or unreal and takes care of this for you adding low-level platform support to these systems is pretty straightforward since everybody / all the systems provide sample code that you can compile run and copy as needed this is along with all the work you without you would expect that you'd need to do to make the game
fit on the device like making UI changes controller support so specifically about Xbox along with making sure your game just works there's a list of features that eat the system's like Xbox supports that the certification will be testing against directly some of these features are required like achievements and proper user account management in fact user account management is one of the more involved features to implement correctly because it has a direct impact on the flow of your game state you can go from the welcome screen to the main menu into the game and then suddenly you're supposed to go back to the welcome screen or you have to deal with the fact that loading and save data is asynchronous so you can kick off the operation and it may take seconds before it actually completes and it could even fail sony has pretty much the same list of features uh they have a very different set up and implementation the next box one there are cool features like the
light bar and the touchpad and there's a totally optional I don't know if anyone actually does it this is my favorite slide to write because Nintendo always makes it really fun to work on their systems because they always have the most unique platform features typically this is a turn off right I think from most Indies who want to do a quick port because the work that you would do for Xbox and Playstation doesn't really carry over and historically their development Hardware hasn't been very easy to use I think the switch is a great machine and it's absolutely my favorite system to work with right now HD Rumble is one of those features that our team we like to spend a lot of time with or the games that we port because it has such a huge impact on how polished a game feels HD Rumble is like a more precise version of the usual haptic feedback that you find in modern controllers it turns on and off much quicker it has a much broader range of vibration frequencies and it pairs really well with audio to reinforce the end of the effect support for multiple
controller styles is actually pretty easy to implement and doing it will give players more choices on how they want to play with single joique on both joy cons or in handle with one node with any of these systems the more features that you integrate the more your game will feel at home on the system and potentially the more the platform holders are interested in leveraging your tired title and their own marketing agendas so if you have time to make your game feel special in the system I recommend doing it this is my life for a while this is life a lot of people who are still working in technical support the job of a technical support engineer is just problem solving for other developers there's a couple of different ways to get in touch with technical support teams it usually depends on the type of issue that you're having is it a question specific to the SDK that you're
using or is it about the hardware that you're using or is it something specific to unity or unreal it's important to remember that it will take a while for your questions to get an answer and most of the time they're just going to answer you with more questions to help yourself save time before you even contact support try to imagine all the questions somebody unfamiliar with your project would ask and ask answer them preemptively break down the issue as small as possible if you can reproduce it in a standalone app that's great the simpler the reproduce the repro situation the quicker support can help with finding a solution or a workaround also when you write up your issue please outline everything you've tried already and the outcomes okay so this is the fun part of it a lot of people in here are using unity so I should I have a lot of notes for you guys if you were planning to come to console the development workflow with consoles with unity on
consoles is not what I would consider ideal I had a friend call it something like programming through a long narrow straw what the situation is the unity can't run and directly debug your game running on the device your C sharp code isn't even what's actually running it's been transpiled over to C++ and then compiled again into the executable so the c-sharp project that you have from unity can't connect or debug to what's running on the device the way that unity makes builds means that you'll often be making a full rebuild of your game and deploying it to the device every time you want to test even a small change we've had build times that are anywhere from 10 minutes to 45 minutes sometimes an hour and a half depending on how big the project is so you have to plan your debugging a little bit more carefully if you're trying to test new features that require quick iteration for example if you are going
to try a variety of HD vibration feedback effects or your leaderboard implementation it helps to create a small test project that in unity that you can make new builds of quicker as fewer scenes or just don't include all the scenes when you make a new bill just include what you need it's very important to know about what cert coverage unity provides out of the box and what features you'll be required to implement a lot of people I know think that unity supports a platform it's a push of a button and you can and you're done it's half true so unity will take care of things like rendering file i/o memory threading but that still leaves you a lot of work to do in order to hit certain you'll need to make sure you're building your you'll need to make sure yourself that you're game properly supports everything else account management achievements input especially the switches various controller styles there are plugins for unity that each plot for each platform that does make it
easier to add this functionality these are native native plugins binding the platform SDK functionality over to c-sharp code and you bring that into your project so that you can connect those SDK SDK functions to your game code an example of this is pressing a on the welcome screen will bring up the Xbox one account picker or connecting or disconnecting a controller on the switch you can bring up the controller applet which lets players confirm their desired controller style one thing that unity does really well is encapsulate the metadata configuration for your title every platform means you to configure your rom with the data your title ID images like the dashboard icon or splash screen your trophy or achievement data your age ratings and the submission number which we'll go into later usually that's a very undock it so very it's a unique process for each platform but unity centralized it for all three of
them see ya version numbers if you're planning to go oh different version of our sorry so unity version numbers if you're planning to go to consoles anywhere in the near future then I recommend you do not update to the latest version of unity even if it is really shiny support for consoles isn't immediate with each unity release it can actually be quite a delay sometimes but also not all previous versions are supported in fact you might find that you're actually quite limited on which unity versions that you can use on any given system the unity releases are tied to SDK versions and all SDKs always have an expiration date so even if you kept your game and say unity 5 6 3 you might actually be forced to update it just because that version can no longer make roms that are accepted for submission another thing you can never do enough of its testing if you've dealt with unity updates on PC you know that there might
be small bugs that you wouldn't notice until you're running the game this issue has just made a little bit worse on on consoles there can even be small issues between minor versions like a p1 or vs. p4 and they could be difficult to spot the good news is that you can have multiple installations of unity living next to each other so the next time you install and note a new version of unity I recommend that you put the version number into the installation path holder this is my life right now I'm buying hard drives every month we notice here that I'm keeping track of the unity version numbers along with the SDK SDK version so they depend on but that's just me being neurotic a friend of mine does like to suggest changing the unity shortcut icon from the default icon over to either the ps4 or the Xbox icon depending on which system you're actually using that version 4 and I
should have mentioned that you will get a different version of unity even it's the same version number for each platform ok so some actual development tips important things to know about that you'll run into with a Unity game on console asset bundles is a really tough one to talk about because it's a confusing topic I think I heard unity has some big updates coming to the system and hopefully they'll be changing it making it a better system going forward but right now it's it's a little awkward and it's also pretty much required on some systems so these aren't asset bundles that are being provided by a server online which is I understand as I understand that's how mobile games are currently using asset bundles these bundles are actually placed into your streaming assets folder and are shipped with your game you put your scenes into an asset bundle then you no longer need
to include those scenes when you make a build so this can greatly speed up your build times if you're only making changes to code this does however have a huge impact on your workflow for anybody who's still actually making changes to scenes or prefabs or assets it's best if you can build your system where you can toggle on and off using asset bundles so that you can use it at the end when you're iterating on builds another reason to do this is that unity is non-deterministic when it comes to building assets for plot for each platform it's every time you make a build even if you've made no changes the layout of the binary files will be different than they were previously this means if you were to make a patch from two builds that had no actual changes to them the patch size could be quite large we had a really good example of this when reported mr. shifty to the Nintendo switch last year a build that was using asset bundles would come out to about four gigabytes when we made our first patch that was just code changes the patch size came out to about three gigabytes after working with the
developers update their game to use asset bundles the final ROM size came down to about 800 megabytes which the patch size wasn't about like 700 megabytes those are drastic savings I want to love player press I really do the first thing I end up looking for when I evaluate a unity title for porting is to see where they might be using player press and how easy it would be to rip them out player press are often used as a safe game system it's really easy to write save data out any time it changes and it just read it in whenever you want it's a very convenient and lazy approach unfortunately player press are not supported on every system and even when it is there are some concerns about its write frequency which there are certification guidelines about so when we do a port we have pretty much have to strip it out and replace it with a more robust system so if you were to
think about a game save data you can break it down into two parts the serialization of the object state and then the actual read/write operations to disk if you use a solution that has a clear separation between these two parts it will make your porting a lot easier since you only actually have to port the file the file system read/write code it's a pretty ugly graph I butchered to sort of show the separation the serialization and deserialization process handles converting the object state into a memory buffer pretty often that's a string maybe JSON maybe XML and then the block in red is the file i/o so you take that string and you write it to disk or read it from disk having that separated means that you can implement a platform-specific file i/o which is you're required to and then you can more easily handle the case when the saved data is corrupt or writing failed okay so debugging strategies this is the part that's really tough you can debug
in the editor when you run on PC that's often not very helpful especially if you're testing something very specific on the hardware like vibration or rendering or shaders you can put a whole Crapo love debug log statements all over your code I guarantee that no matter how many you put in you will miss putting in the one that you actually need it until your second or third build sometimes you can debug the the il2 cpp generator project the il-2 cpp source is the C++ source that unity generated as an intermediate step when building your project your build can be configured so that it gives you access to this project sometimes but not all the time and using that project is useful can be useful when trying to track down an uncaught exception or another fatal error it's useless to try it and edit it the court the code is written by a computer but if your game does crash on the device you can load this project and visual studio attached to the device remotely and then
view the call stack to help you find out what script might actually be to blame and then go back and add a bunch of print statements so I have more notes here than I actually wrote on the side sighs it's weird but so your performance optimizations there there are a whole bunch of common CPU issues that we've seen with unity on consoles the quality settings just being too high particle effects being too intense audio decoding from too many voices playing at the same time too many draw calls static matching does help a lot dynamic batching doesn't always help so you try it try it on and try it without post-processing effects that are causing too many draw cause in fact I'm mister shifty force which we found a bug in in the version of unity that we were using where static batching wasn't actually being used when doing the depth Pass needed for SSAO by turning off SSAO we actually saved about 15 frames a second and then there
are your classic unity script performance issues if not caching your components not utilizing physics groups just follow all the best-behaved best practices for performance scripting and you'll be in better shape we've rarely actually seen CPU issues with unity on consoles so that's pretty fortunate so third-party plugins are a double-edged sword they can indeed make your porting life a lot easier by giving you a more robust platform at distraction especially for things like audio or input rewired in control and wise or some great example of these to complicate your issue with unity versioning and SDK versions keep in mind that your third-party plugins also have version dependencies one issue that we ran into was with the dialog system plugin for game called phantom trigger we had to update the plug-in after updating the unity version for the game but we didn't realize that their update
actually fixed bugs in their plot in their plug-in and that the game had actually unknowingly dependent on those bugs being there so otherwise this is actually a pretty minor issue but weird stuff like that constantly keeps coming up if the if the plugin already supports the platform then that means they are already testing their plug-in on the platform and they're likely able to help debug or fix the issues you might find if the plug-in has source code available then it even if they don't support the plug to platform you can build it but their support might not be so great okay that was it for unity and development so now we're on to submission oh this parts fun so the timeline here depends basically on just how busy the platform holder is with with testing exist other games and submission whether you fail on your site your timeline depends on how how busy the platform holder is with testing other games whether you fail and then what issues
you fail for I'll warn you now that you will you may have many times Ruby waiting around for days or weeks just to eventually find out that there's a serious issue with your game and that can be pretty frustrating and you will fail you will it's guaranteed you will if it's your first time you'll almost certainly fail and it's not a bad thing just prepare for it so the process for submission is different for every platform but basically the structure of it is the same you're going to generate a final ROM this should be a non development build all of your game debug system should be turned off all of your optimizations turned on and everything else that you can squeeze in to make your ROM as small as possible and in testing I cannot stress enough about testing your final ROM it is crazy how many times we've had weird stuff that only showed up in the final build that we were ready to upload that wasn't showing up in the development builds that we were testing beforehand or how
many times while I was working support where we found games come in where they had fixed a bug in there that was in their second submission and then only to have that bug come back in their third and fourth most often you'll be uploading your rom through browser based tools but out to the each company Sony or Microsoft or Nintendo but outside of that is not a lot I could say outside NDA each platform holder has some very specific instructions on how to send them a submission and this is another section where I highly recommend writing your own documentation about the steps you took as you go through it so you can reference it for your next submission for the platforms we had to register your title for different regions you're also going to have to submit different packages for each region so basically every time you have a different title ID that's a whole separate submission so like so many of America and Sony of Europe you're sending them separate builds oh and please keep a copy of your
previous submissions somewhere you're gonna need those for regression testing and for generating patches and if you're using asset bundles in a unity project like we recommended then you should keep a copy of those bundles as well it'll help that if you also keep notes about every submission as well keep track of what SDK version that you use what middleware versions you use and then changes between the game and every submission this is what actually got me to finally pay for a Dropbox account so this is an example of what we did for la Quest on 3ds we went through a lot of submissions the naming scheme here shows which regions separate title IDs for North America and Europe the submission version number and then the date okay so this is this is a warning for everybody but this is lots
of the support engineer and me just really wanting to stress this on people after you've been waiting days or weeks just to find out your game is approved or not you get a final notification about its status no matter how you how it goes you get approval or failure it's very important to remember these points the failure reports are not conclusive that means testing may have found something found enough issues to warrant a failure but it does not guarantee that they found everything you could get an approval report but that is also not conclusive they may have found it they may not have found any issues blocking your game from release but that doesn't mean they found everything and your next submission they might find it cert testing is not QA they're not going to test your game for actual gameplay bugs they might let you know if they run into them and if you can't just be kind to the testers when they send you a report of issues in your game it is very frustrating to have them find something on your third submission that should have been there the whole time but it is not their job to catch everything their
job is to evaluate whether your game is doing enough to protect the system and its users so I try to put together a list of all the common failures that we've ran into in the last couple years and there's a whole bunch of them like I said you're gonna fail a lot so age ratings is one age ratings are part of the metadata that is actually configured into your ROM and they must match the ratings that are configured in the paperwork for in your titles registration it's very easy to get this wrong because every platform has a different way of representing age ratings yes or if you've got an M rating that means the value should be 17 and on Nintendo but it could actually be the value is set to 9 on Sony paperwork issues are usually just mistakes when you are filling out the submission form or forgetting to include some other
submission materials thankfully paperwork issues are very easy to correct and they often don't hold up your submission this one's important every time you submit you have to increment a submission number in your package or if we're submitting a patch you have to update the application version number every system has a different file in which you do this but everyone has the same process you just add one title stability is one of the biggest issues we've also ran into since I'm not putting my own game so I don't think this is my fault I think it's I think it's hard enough to do testing is an indie and often cert testing will run into crashes that you didn't even know we're in your game sometimes it can actually be very specific cases that you didn't even think to test a good example is le quest on 3ds there was an issue where the game would not shut down correctly if you use the home menu button while the miiverse application was open they shut down
miiverse so i think i won okay so terminology and branding is a really big one and all the platform holders are very particular about the language used around its features if you use an Xbox one controller image in your settings screen then you better change that to a DualShock controller on ps4 there are a couple times where I've missed localization strings that reference things like joypad porting a game from PC to console or calling it Rumble on Xbox one when it's actually officially called vibration I think I already warned you about user account management and how tricky it can be this is especially true on Xbox one where the user has more flexibility about when they sign out and the game needing to respond appropriately we had we have issues with Xbox one where if you constrain the title by going back to
the main menu and you sign out of the user and you come back into the game your game will not get a notification that the user signed out it's your job to know that you come back - from being constrained to actually check whether or not your user is still there or if they change controllers and that goes into controller management authoring issues your submission will fail if you accidentally include a debug library or use an expired SDK version thankfully most of the tools will tell you about this issue before you actually submit so you should be able to catch most of that before you actually wait a week for certification to get back to you safe data is also a tough one several platforms have cloud supports you cloud save support so you have to make sure that you handle the cloud saves not
syncing correctly or the operation taking longer than expected save data being corrupt not being able to write save data because the file system is full and that actually leads into the next one error handling so error handling is a really big one every system is very specific about how your game is supposed to notify the user about certain issues one issue that we just failed for with Miller noir was that on switch was that if you try to view the leaderboards but there's an update a pending update to the game you have to tell that you have to pass that error message on to the user but there are a whole bunch of other error messages that you are not supposed to pass along to the user we already talked about save data being corrupt not being alerted and then I want to give a quick point on localization it's we run it's a weird thing that we run into with unity sometimes fun fact that the decimal separator is typically a decimal point here in North America but it could be a comma or could be a space in other countries or other locales so
when we sterilize numbers two strings for our save data unity would use whatever the current decimal separator is and they would write that number out into a string with it but if you were to save your data with the game using one language and then try to load your saved data using a different language it would not be able to process it that's you can tell unity you can force it to use the decimal separator for every locale also you should check with the system language when your game starts up and update your games localization to use that current language okay so you failed for an issue you can get a waiver for some issues every every system has a process for requesting and granting waivers for a failure that you may not be able to solve but generally these are not very easy to get and they take time so if you do need to request a waiver it
will help increase your odds if you do everything that you can to make sure that there is no suitable alternative diagnosing the issue with a standalone app working with support to confirm that the issue is actually out of your hands and the business team at the platform companies will talk about it for days before they get back to you and let you know that you whether you get a yes or no suite so done everything your games ready to go your rom is finally approved now you actually get to do the publishing work I find that the marketing assets required for the digital storefronts to be super complicated it just might be that a so don't have a lot of fun with it it can be very time consuming to compile a list of all the requirements for the assets that you need and generate them I think having your key art in a Photoshop file with layers will help you out a lot being an artist would also help you'll need to generate and submit a whole bunch of media files you'll have screenshots six to ten something like that anywhere between seventies or 720p
or 1080p hero banners with your game art some with your logo some without and your trailers might need to have very specific logo usage and legal text if you're gonna put the PlayStation logo on anything they have very strict rules about how it looks where you put it and stuff like that you may also need to localize your store copy text and then trim it to fit certain length requirements I hate writing copy so I think this is why I don't like publishing games anymore so you have your ROM approval and your store asset approval that means you can now actually schedule your games release date each platform is going to require some amount of lead time ahead of your release so you should anticipate at least two weeks after everything is ready to go before you can even put it on the store and if you can give yourself more time than that if you're targeting multiple platforms and where you're targeting a system where you have separate roms for each region then you have to work with everybody separately to try to coordinate over the release date and
getting everybody on the same day is pretty difficult also every platform holder uses different dates when they update their store I believe Nintendo's on Thursday Microsoft is on Wednesday or Friday PlayStation America might be Wednesday and PlayStation Europe might be on Tuesday I don't know it's best you don't have to use the dates that they use but that's the day that they that that platform sends out their information to the press so it's up to you whether or not you follow their guidance or you just pick a day for everything the same day for everything so the I think the part that PC developers especially steam developers have the biggest heart the biggest issue with on consoles is updating their game I think I think with steam you can just update it and hit a button and you're good to go and if you break it it's your fault and then you just do it again
updating your game on consoles is done with patches and those pad just need to go through the same submission and certification process is your initial rom sometimes the testing is expediate 'add expedited but it's still tested and you run the risk of it failing for new issues or old issues that were missed in your previous submission and the process in which that you create the patch is also different on every system in one system you'll create your rom like normal submit it and if it's approved then the servers will generate the binary diff for players based on what cumulative patches they already have installed alternatively you create a rom like normal but then you use a special tool that will then create a patch for you based on your previous submission so I really hope you kept your previous submission or another platform you actually create a patch rom directly where instead of bundling all of your
assets together you just bundle the assets that have changed so that's it that was a bird's-eye view of everything I actually didn't have unreal I'm sorry that's there so yeah I think we have time for questions there's anything thank you yeah we actually have plenty of time for questions there's a microphone up there so yeah you can queue up behind you ever is there we have I think about 15 minutes for questions let's see thank thank you for coming it's Monday morning it's amazing now can you talk about your relationship with the developers you work with like what
who submits do you have a kind of a publisher relationship sometimes I'm really curious as to how that all works do you do you use the dev kits do you bring the developers in how does that all that's actually that's a great question the way that we work is actually pretty flexible we do we've actually done all kinds of things as a third party to the guys who are actually their game fortunately all the developer portals let you share access to a title with with somebody else who is not in your company so they can set up everything on the publisher end and then just share the backend access with us and then we can we can do all the work ourselves we have the deaf kits we do all the work sometimes they'll have a dev kit and we can give them a build and they can evaluate it and when possible I like to take the game through submission to myself that means if there are issues I hear about them directly rather than than going to the developer and then waiting to hear back but oftentimes once
the ROM is approved all the actual publishing work is still taken care of by them I had a question about networking so I'm just getting started on the Steam API networking stuff for unity and trying to set up a really simple 2d multiplayer game using the peer-to-peer system but I want to add like a layer in between that's an abstraction so that it's easier to get it on switch or other things do you have any suggestions for basic architecture is it just a simple you know packet array with a size thing that I'm sending out or into it kind of an abstracted function or any any input there yeah basically for networking if you're if you're using sockets and you're not using a third party plug-in like photon or something that has on you know where you have to be may or may not be supported on the platform if you're doing it yourself you'll probably have an easier time you're familiar with the api's you can pick up how to implement anything else sockets are the same on every system essentially is the basic sort of framework for like getting friend invite callbacks or other things
like I know hopefully you are with the steam API I'm not you're not all right yeah okay I guess it's a hard answer that question then between PlayStation Sony and switch are those API similar for the networking essentially the way that you process callbacks or failure cases is going to be different but everybody has a matchmaking system everybody has like a list of friends that you can get access to invites are a little bit different but you are able to essentially there's a present system so that players can see that you're doing a thing and they can use that to make it easier to connect okay thank you [Music] different things you talked about cool I was curious what your thoughts and opinions are on various open source libraries code libraries for dotnet were making use of things like sequel Lite and log no sequel things like that have
you run into any issues there yeah so like C++ projects was it as an example I'll get into c-sharp in seconds but for C for C++ you know we've had projects that are using Lua we've had projects using STL or boost I don't I guess I don't know if STL is open source or not but like like using those libraries that you have the source 2 is actually pretty easy for c-sharp we've we've ran into some weird issues with like j-jason light or something where it's it's fine it runs fine but there's sometimes the unity will strip out functions that it doesn't think that you're using and for some reason that doesn't happen on PC versus when it does happen on console but there are workarounds you can like for the JSON example we actually had to you set up an XML file and you specify that you are using these system calls even if it can't detect that so
then it makes sure that it includes them doesn't get stripped out and then your game should still run just fine thanks since you have the bullet point at all any unreal best processes that are best practices that yeah yeah okay every great some really weird unity issues unreal issues that we run into are like your C++ code you're obviously C++ 11 code not always compiling for another platform the c-plus plus 11 support isn't the same ps4 and switch both use clang instead of Digital Studio as its compiler so while the game can compile just fine on Xbox and we try to compile and switch and we're getting all kinds of like airs we just hadn't seen before we are constantly running into problems with the cooker that I just have not still wrapped my head around every time we update to a new verb that's just a
nut it's just a problem that's not it's not advice sorry at least it's a shared problem yeah right I'm sure it is everybody run into this that's good to know like iterating for some reason that doesn't actually iterate I don't know what the point of that is yeah let's see there are some module at plug ins where it was meant for PC support or xbox support but we need to remove it for switch or ps4 but you can't because there are blueprints in code that actually depend on those plugins being there so you can't remove the plugins you just have to find they're not meant to be disabled without just being removed so we'd have to go in and actually like edit the plug-in source so that it would basically be a no op on a platform we don't want it to do anything updating updating on real versions is always surprisingly more difficult than
I expect primarily mostly the cooking issues and blueprint native ization always sort of just failing Oh something a friend told me which I didn't even realize this but it's super ah should be super obvious whenever you if you're using blueprint native ization to help with performance that means if you were to make any changes to blueprints and you want to patch your patching your executable not content which is fine it's just something to know about you you would have to do a patch rather than like serving a content change over the server you know your destiny or something like that thanks so much appreciate it yeah welcome could you go into more detail on how to convert the unity project to work with asset bundles yeah yeah I definitely can so asset bundles and unity are man I want them to want them to just work better so and I'm still super confused
about how they actually work so what we do essentially for the consoles we'll go through and we'll put all the scenes just the scene files into an asset bundle will either put them all into one asset bundle or we'll put them into groups of asset bundles based on like groups of levels that we can load and unload the asset bundles you'll need an editor script that will build asset bundles it's a it's an API call that unity has you just need to make an editor script that will call that function or that will build all the bundles that you want to build then in game your actual game script you just have to manage loading or unloading bundles as needed but loading a scene is still the same API call so once the bundle is loaded unity automatically handles loading that scene from a bundle versus just loading it from however unity loads and scenes there's a another area your resources files unity has a
very different way of handling file i/o for anything that's in the resources folder excuse me so those file read/write those accessing the file system for the resources folder could possibly be a cert failure based on how frequent you were to do it so I also recommend putting anything in your resources folder into an asset bundle loading that bundle and just keeping it loaded that one will require much different API changes throughout your code I would recommend a centralized like resource manager that instead of calling resources dot load you call your resource manager dot load and it will either load the load it from an asset bundle or load it from resources if you have more questions about that just come back up how much effort is involved in developing for the docking undocking and then the ps4 ps4 pro sort of optimizing for the different states of the hardware
and specifically for unity or just in general just in general it's surprisingly easy the the nintendo whether it's docked or undocked you can the switch you when it's docked you have slightly improved GPU speed it doesn't actually help with performance all that much but you are it does give you a little bit of a more bandwidth and in order to get up to ten at 1080p rather than 720p when you're docked because that is a very easy flag to check or that you can also disable it so it doesn't actually change anything when you go from doctor undocked ps4 pro and xbox 1x basically just 4k support in HDMI there are some rendering change like your actual rendering api's might be different your back buffer is obviously going to be different unity handles that really easy and real handles that really easily if you're doing that in C++ it's probably a bit more work much what was discussed was
kind of focused on how to port an existing game over and I was wondering if you could comment on maybe how if you are working on an unfinished game how that would affect the whole timeline of submission insert and I guess maybe like what point in the project would you consider starting to go through that whole process even if you don't really quite have the like final three months of the finished game that's a that's a pretty good question so like when would you when should you start basically porting if your game is you're still in the middle of developing your game right adding adding platform support to your game I would still call it porting but yeah because most of the often we're working with developers who are still working on their game sometimes we need a game that's completely done and then we're just doing the port sending it off but then sometimes we're actually adding switch support or xbox support while the game is still in development that does
help your timeline because a lot of the you get all the pre publishing work done while you're in development you're able to get the game running on the system while you're in development which means you can find all the performance issues that you're going to run into while you're still making content so you find out that your draw calls are too huge or you got you know like - way too much stuff on the screen you don't have visibility culling setup it's much easier to tackle those problems while you're still making the content versus like coming in after the fact didn't you get to set benchmarks for your set itself essentially the submissions work is not it doesn't overlap very well with development though you'll submit the game and you'll fail you could still be working on the game while it fails while you're waiting for it to fail your first time but the it's not super great use of time are there any kind of rules you have to keep in
mind if you're sort of submit something for cert but you're like is that kind of everything after that kind of just gets interpreted as like a day one pad if you were if you were to submit your game and then you wanted to continue working on it while you're waiting for your submission I recommend if you please use source control if you're using source control branch you have a branch of what your submission is you should branch on every submission and then you can continue working on your game and if it passes and then you have a marker that's very easy for you to like make another build if you needed to of that and then and pull in other changes that you've continued to make or unit you have everything all the changes that you've made since then you could use in making a day one patch if you give yourself enough time for another submission for that submission to pass and schedule the release date for it thank you welcome hi have you ever had a project that you
couldn't port console like it was - not yet I'm a little nervous about that but I have a hard time saying no to stuff kind of like I like the games that we've been getting so far we've had some we had some very difficult code bases that we have worked in but we've always kind of found a way to make it work there was one game punch Club for 3d us we actually ported the game out of unity and into C++ and we drastically underestimated the amount of work that that would take why would you make such a terrible decision that's a great question we the you there is unity support on the 3ds but it primarily is targeted for the new 3ds it has a faster processor and more RAM we wanted to get the game out
on the regular 3ds in order to have more units but the game bought also we just really wanted the challenge it was really neat that was it was a really interesting way to learn about unity is trying to recreate unity run time in a different engine men okay so we there is one game where we were we were actually fixing a port for a game that was already ported and the the console implementation is all in one file there's no encapsulation there's no separation of systems at all it's like a thirty five thousand line file that has everything in it and it is unwieldy to navigate and not ideal yeah yeah separation separation encapsulation abstractions it's all your friends be a good programmers
Auto-generated captions from YouTube — names and numbers may be misheard.
Distilling the key insights…
Game Developers Conference · 2026
Comments