Difference between revisions of "Flog"

From Nintendo Switch Brew
Jump to navigation Jump to search
m (Sorry, final edit)
(15 intermediate revisions by 4 users not shown)
Line 1: Line 1:
This is the system "flog" 01008BB00013C000 [[Title_list|title]]. This is a NES emulator. Installed on retail systems since [[1.0.0]].
+
This is the system "flog" 01008BB00013C000 [[Title_list|title]]. "flog" is a full-fledged NES emulator and is installed on retail systems since [[1.0.0]].
  
The titleID for "flog" is used by 3 funcs in [[qlaunch]]. It's unknown what exactly triggers launching this title officially. This can be run with unofficial methods.
+
The titleID for "flog" is used by 3 functions in [[qlaunch]]: 1 for checking whether to launch it, 1 for registering it as an [[AM_services#appletAE|applet]] and 1 to launch it.
  
 
The ROM is not loaded via [[Filesystem_services|FS]] but is embedded in the main binary.
 
The ROM is not loaded via [[Filesystem_services|FS]] but is embedded in the main binary.
Line 7: Line 7:
 
"flog" == "golf" backwards. This runs the NES "Golf" game. {1/2}-player via joy-con is supported. Controls are "d-pad" buttons + stick, however motion control while holding the Z{L/R} button is also supported instead of using buttons.
 
"flog" == "golf" backwards. This runs the NES "Golf" game. {1/2}-player via joy-con is supported. Controls are "d-pad" buttons + stick, however motion control while holding the Z{L/R} button is also supported instead of using buttons.
  
It is currently known to be launched by setting the system date to July 11 and performing a currently unknown motion with the two Joy-Con.
+
==Official Launch==
 +
[[qlaunch]] periodically checks if the user is in "/RootScene/SceneResidentMenu", which represents the Home Menu (aka main-menu). If so, the following checks are then performed in order:
 +
* The Joy-Cons' state is read from [[HID_Shared_Memory|HID shared memory]] and both must be active and detached from the console.
 +
* "StartSixAxisSensor" [[HID_services#hid|hid]] command is called for each Joy-Con so motion data can be captured.
 +
* After capturing the motion data, the same motion checks for both Joy-Cons must pass at the same time. This motion data is analyzed in a small state machine consisting of a total of 7 steps and the motion itself is a reference to [https://www.youtube.com/watch?v=BdQg43n2OaM&t=17s Iwata's Direct gesture]. Hold the Joy-Cons pointing forwards/downwards, then move Joy-Cons to a vertical position, and hold it there for a bit. The Joy-Con grip can be used for this.
 +
* The system's month and day must be July 11th, which is the date of Iwata's [https://en.wikipedia.org/wiki/Satoru_Iwata passing]. The loaded date originates from network-time-sync'd time, regardless of whether the user has it enabled or not. When the system was never connected to the Internet and is on [[1.0.0]] it comes from the user-specified date instead. For newer systems, trying to load the network time if it was never set will result in an error: they won't ever be able to launch flog without a time-sync with Nintendo servers. This is loaded from the [[PCV_services|time]] service-cmds, with the actual time-sync being handled by [[NIM_services|NIM]].
 +
* A wrapper for "GetLanguageCode" [[Settings_services#set|set]] command is called and the returned code must be 0 (JPja), 1 (USen) or 2 (EUen). Other combinations of region and language may have it's code translated internally to a valid one (0, 1 or 2), which seems to be the case for 12 (CNzh), 13 (KRko) and 14 (TWzh).
 +
* Lastly, "IsSystemProgramInstalled" [[NS_Services#ns:am|ns:am]] command is called, which should return 1 if the "flog" title is installed.
 +
 
 +
Once everything passes it continues to the code which launches "flog". When "flog" is launched a small audio clip named "SeTestTone" is played which matches [https://www.youtube.com/embed/SeVTJu_Yn2Y?start=17&end=18&autoplay=1 this].
 +
 
 +
==Screenshots==
 +
These screenshots were originally taken by executing flog with an unofficial method.
  
 
[[File:Flog0.jpg|200px|thumb|left|Flog main-screen]]
 
[[File:Flog0.jpg|200px|thumb|left|Flog main-screen]]

Revision as of 06:34, 6 October 2017

This is the system "flog" 01008BB00013C000 title. "flog" is a full-fledged NES emulator and is installed on retail systems since 1.0.0.

The titleID for "flog" is used by 3 functions in qlaunch: 1 for checking whether to launch it, 1 for registering it as an applet and 1 to launch it.

The ROM is not loaded via FS but is embedded in the main binary.

"flog" == "golf" backwards. This runs the NES "Golf" game. {1/2}-player via joy-con is supported. Controls are "d-pad" buttons + stick, however motion control while holding the Z{L/R} button is also supported instead of using buttons.

Official Launch

qlaunch periodically checks if the user is in "/RootScene/SceneResidentMenu", which represents the Home Menu (aka main-menu). If so, the following checks are then performed in order:

  • The Joy-Cons' state is read from HID shared memory and both must be active and detached from the console.
  • "StartSixAxisSensor" hid command is called for each Joy-Con so motion data can be captured.
  • After capturing the motion data, the same motion checks for both Joy-Cons must pass at the same time. This motion data is analyzed in a small state machine consisting of a total of 7 steps and the motion itself is a reference to Iwata's Direct gesture. Hold the Joy-Cons pointing forwards/downwards, then move Joy-Cons to a vertical position, and hold it there for a bit. The Joy-Con grip can be used for this.
  • The system's month and day must be July 11th, which is the date of Iwata's passing. The loaded date originates from network-time-sync'd time, regardless of whether the user has it enabled or not. When the system was never connected to the Internet and is on 1.0.0 it comes from the user-specified date instead. For newer systems, trying to load the network time if it was never set will result in an error: they won't ever be able to launch flog without a time-sync with Nintendo servers. This is loaded from the time service-cmds, with the actual time-sync being handled by NIM.
  • A wrapper for "GetLanguageCode" set command is called and the returned code must be 0 (JPja), 1 (USen) or 2 (EUen). Other combinations of region and language may have it's code translated internally to a valid one (0, 1 or 2), which seems to be the case for 12 (CNzh), 13 (KRko) and 14 (TWzh).
  • Lastly, "IsSystemProgramInstalled" ns:am command is called, which should return 1 if the "flog" title is installed.

Once everything passes it continues to the code which launches "flog". When "flog" is launched a small audio clip named "SeTestTone" is played which matches this.

Screenshots

These screenshots were originally taken by executing flog with an unofficial method.

Flog main-screen
Flog 1-player
Flog 2-player mode as player-1.
Flog 2-player mode as player-2.