Difference between revisions of "Flog"

From Nintendo Switch Brew
Jump to navigation Jump to search
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]]: 1 for checking whether to launch it, 1 for launching(?), and 1 that compares flog titleID with a field.
+
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 8: Line 8:
  
 
==Official Launch==
 
==Official Launch==
The checks for this only run while Home Menu is active, aka main-menu.
+
[[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?time_continue=17&v=BdQg43n2OaM 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, it comes from the user-specified date instead. 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). Any other combination of region and language will fail.
 +
* Lastly, "IsSystemProgramInstalled" [[NS_Services#ns:am|ns:am]] command is called, which should return 1 if the "flog" title is installed.
  
It checks exactly the following:
+
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/watch?v=SeVTJu_Yn2Y&feature=youtu.be&t=17s this].
* Both Joy-Cons must be detached from the system.
 
* The same motion checks for both Joy-Cons must pass, at the same time. The motion seems to be a reference to [https://www.youtube.com/watch?time_continue=17&v=BdQg43n2OaM this]. 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 month+day must match the date of Iwata's [https://en.wikipedia.org/wiki/Satoru_Iwata death]: July 11. 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, it comes from the user-specified date instead. This is loaded from the [[PCV_services|time]] service-cmds, with the actual time-sync being handled by [[NIM_services|NIM]].
 
* The output from a certain function must return 0, 1, or 2. On one system this was tested with, this check would pass.
 
* Lastly a [[NS_Services|nsam]] cmd is used. Probably to verify that the title is installed?
 
 
 
Once everything passes it continues to the code which launches flog. When flog is launched, audio is played which matches [https://www.youtube.com/watch?v=SeVTJu_Yn2Y&feature=youtu.be&t=17s this].
 
  
 
==Screenshots==
 
==Screenshots==

Revision as of 15:13, 20 September 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, it comes from the user-specified date instead. 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). Any other combination of region and language will fail.
  • 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.