#Console Certification Guidelines

1 messages · Page 1 of 1 (latest)

lime vault
#

Are there any publicly available guidelines or best practices my game should follow if I want to ship on console? I know a lot of specific manufacturer details are under NDA, but it'd be nice to know the basics (Things like warning the player when the game autosaves, throwing up error messages, etc.)

I'll admit I'm not anywhere near ready to have my game published just yet, but I'm still curious regardless. It'd make things easier down the line if I ever decide to.

sacred lily
#
  1. use buffer async functions
  2. throw up an icon when you autosave
  3. ensure you can pause the game at literally any point to handle gamepad disconnection
  4. be able to reload savedata automatically if the user changes
#

that's the basics

#

oh and obviously have gamepads working

lime vault
#

How does #4 work? Do you just kick the player back out to the title screen if the user changes?

sacred lily
#

yep

#

point 3 helps point 4

lime vault
#

Fair enough!

warm lava
#

if you're planning on Switch development only then 3, 4 and 1 are not required

#

Switch has a preselected user mode, where the currently playing user never changes, it also has a joy-con applet which is synchronous, so you can literally call it from a Step event and guarantee the game will be paused while it's displayed.

#

same goes for (very recent) Xbox, it also has a "Simplified User Model" where the user never changes, the gamepad however can be lost and you will need to handle that yourself

#

if you have a co-op game then I am very sorry for you

#

Wally is a co-op game and I suffered a lot

#

used in production in Wally (PS4/Xbox/Switch), and Space Scavenger (PS4/Xbox??) (unreleased)

#

makes for very elegant saving code:

// -- initialization:
function kfstruct() constructor {
    KotfileInit();
}

global.kf = new kfstruct();
// -- saving:
function save_string_to_file(filename, contents, whendone) {
    show_save_icon();
    global.kf.queueFile(filename, true, method({__whendone: whendone}, function(kfdata) {
        hide_save_icon();
        self.__whendone(kfdata.gmStatus == true);
    }), global.kf.makeBuff(contents));
}

save_string_to_file("pug.txt", "is good", function(isokay) {
    show_debug_message("pug save result is " + string(isokay));
});
// -- loading:
function load_string_from_file(filename, whendone) {
    show_save_icon();
    global.kf.queueFile(filename, false, method({__whendone: whendone}, function(kfdata) {
        hide_save_icon();
        self.__whendone(buffer_read(kfdata.bufferIndex, buffer_string));
        // if it's empty then no save file or an error
    }));
}

load_string_from_file("pug.txt", function(contents) {
    show_debug_message("pug is " + contents);
});
// -- Async Save/Load event:
with (global.kf) KotfileAsync();
iron echo
#

Just jumping in with an additional question. Is there anything in base GM that cannot be used with consoles?

warm lava
#

uhhh file dialogs...

#

also networking is limited