From 35a2ee26f9de17325073f32c6d545c960e46788c Mon Sep 17 00:00:00 2001 From: Jonathan Barrow Date: Sat, 8 Feb 2025 00:36:20 -0500 Subject: [PATCH] feat: move titles to classes rather than json having titles as classes rather than in a json file gives us the advantage of being able to set custom protocols on each title, such as protocol ID 200 which is shared between multiple games. It also lets us now define custom validation functions for packets in cases like LM2 and WATCH_DOGS which use non-standard checksum algorithms --- src/nex/connection.ts | 15 +- src/nex/protocols/manager.ts | 38 - .../types/auto-matchmake-param.ts | 2 +- .../types/join-matchmake-session-param.ts | 4 +- .../matchmake-session-search-criteria.ts | 14 +- .../match-making/types/matchmake-session.ts | 14 +- .../methods/create-matchmake-session.ts | 4 +- .../methods/join-matchmake-session-ex.ts | 2 +- .../methods/join-matchmake-session.ts | 2 +- .../methods/update-notification-data.ts | 2 +- .../types/notification-event.ts | 2 +- src/nex/titles.json | 2273 ----------------- src/nex/titles/angry-birds-star-wars-3ds.ts | 30 + src/nex/titles/angry-birds-trilogy-3ds.ts | 30 + src/nex/titles/animal-crossing-new-leaf.ts | 33 + src/nex/titles/animal-crossing-plaza.ts | 29 + src/nex/titles/axiom-verge.ts | 30 + .../biohazard-revelations-unveiled-edition.ts | 29 + ...s-runner2-future-legend-of-rhythm-alien.ts | 31 + src/nex/titles/devils-third.ts | 32 + src/nex/titles/disney-infinity-2.ts | 31 + src/nex/titles/disney-infinity-3.ts | 32 + src/nex/titles/disney-infinity.ts | 32 + .../donkey-kong-country-tropical-freeze.ts | 31 + src/nex/titles/ducktales-remastered.ts | 30 + src/nex/titles/fast-racing-neo.ts | 32 + .../fist-of-the-north-star-kens-rage-2.ts | 31 + src/nex/titles/friends-nintendo-network.ts | 32 + src/nex/titles/game-party-champions.ts | 30 + src/nex/titles/hyrule-warriors.ts | 31 + src/nex/titles/index.ts | 163 ++ src/nex/titles/injustice-gods-among-us.ts | 31 + src/nex/titles/ironfall-invasion.ts | 32 + src/nex/titles/kid-icarus-uprising.ts | 31 + src/nex/titles/korg-m01d.ts | 30 + src/nex/titles/legend-of-kay-anniversary.ts | 30 + src/nex/titles/lost-reavers.ts | 31 + src/nex/titles/luigis-mansion-dark-moon.ts | 31 + .../mario-and-sonic-at-rio-olympics-3ds.ts | 34 + ...nic-at-the-rio-2016-olympic-games-wii-u.ts | 31 + ...-at-the-sochi-2014-olympic-winter-games.ts | 31 + src/nex/titles/mario-kart-7.ts | 33 + src/nex/titles/mario-kart-8-deluxe.ts | 29 + src/nex/titles/mario-kart-8.ts | 31 + src/nex/titles/mario-tennis-open.ts | 33 + src/nex/titles/mario-tennis-ultra-smash.ts | 31 + .../mario-vs-donkey-kong-tipping-stars.ts | 33 + .../titles/metroid-prime-federation-force.ts | 31 + src/nex/titles/mighty-no-9.ts | 31 + src/nex/titles/miitopia.ts | 31 + src/nex/titles/minecraft-wii-u-edition.ts | 31 + src/nex/titles/monster-hunter-3-ultimate.ts | 33 + src/nex/titles/monster-hunter-3g.ts | 30 + src/nex/titles/nano-assault-neo.ts | 31 + src/nex/titles/ninja-gaiden-3-razors-edge.ts | 32 + src/nex/titles/nintendo-badge-arcade.ts | 30 + src/nex/titles/nova-111.ts | 30 + src/nex/titles/olliolli.ts | 32 + src/nex/titles/pikmin-3.ts | 32 + src/nex/titles/pokemon-bank.ts | 29 + src/nex/titles/pokemon-rumble-world.ts | 30 + src/nex/titles/pokemon-xy.ts | 29 + src/nex/titles/pokken-tournament.ts | 31 + src/nex/titles/puddle.ts | 31 + src/nex/titles/puyo-puyo-tetris.ts | 30 + src/nex/titles/resident-evil-revelations.ts | 32 + .../romance-of-the-three-kingdoms-12.ts | 30 + .../sonic--all-stars-racing-transformed.ts | 33 + src/nex/titles/sonic-lost-world.ts | 35 + src/nex/titles/splatoon.ts | 39 + src/nex/titles/star-fox-guard-demo.ts | 31 + src/nex/titles/star-fox-guard.ts | 31 + src/nex/titles/star-wars-pinball.ts | 32 + .../titles/stealth-inc-2-a-game-of-clones.ts | 30 + src/nex/titles/steel-diver-sub-wars.ts | 30 + src/nex/titles/super-mario-maker-2.ts | 29 + src/nex/titles/super-mario-maker.ts | 35 + src/nex/titles/super-smash-bros-4.ts | 35 + .../sushi-striker-the-way-of-sushido.ts | 30 + src/nex/titles/team-kirby-clash-deluxe.ts | 34 + .../tekken-tag-tournament-2-wii-u-edition.ts | 31 + src/nex/titles/terraria.ts | 34 + .../the-legend-of-zelda-tri-force-heroes.ts | 33 + src/nex/titles/title.ts | 65 + src/nex/titles/trine-2-directors-cut.ts | 31 + src/nex/titles/warriors-orochi-3-hyper.ts | 31 + src/nex/titles/wii-karaoke-u.ts | 31 + src/nex/titles/wii-party-u.ts | 31 + src/nex/titles/wii-sports-club.ts | 32 + src/nex/titles/worcle-worlds.ts | 30 + src/nex/titles/xenoblade-chronicles-x.ts | 31 + src/nex/titles/yakuman-houou-mahjong.ts | 29 + src/nex/titles/yo-kai-watch-2.ts | 39 + src/nex/titles/zen-pinball-2.ts | 30 + src/types/nex/serialized-connection.ts | 23 +- 95 files changed, 2790 insertions(+), 2344 deletions(-) delete mode 100644 src/nex/protocols/manager.ts delete mode 100644 src/nex/titles.json create mode 100644 src/nex/titles/angry-birds-star-wars-3ds.ts create mode 100644 src/nex/titles/angry-birds-trilogy-3ds.ts create mode 100644 src/nex/titles/animal-crossing-new-leaf.ts create mode 100644 src/nex/titles/animal-crossing-plaza.ts create mode 100644 src/nex/titles/axiom-verge.ts create mode 100644 src/nex/titles/biohazard-revelations-unveiled-edition.ts create mode 100644 src/nex/titles/bittrip-presents-runner2-future-legend-of-rhythm-alien.ts create mode 100644 src/nex/titles/devils-third.ts create mode 100644 src/nex/titles/disney-infinity-2.ts create mode 100644 src/nex/titles/disney-infinity-3.ts create mode 100644 src/nex/titles/disney-infinity.ts create mode 100644 src/nex/titles/donkey-kong-country-tropical-freeze.ts create mode 100644 src/nex/titles/ducktales-remastered.ts create mode 100644 src/nex/titles/fast-racing-neo.ts create mode 100644 src/nex/titles/fist-of-the-north-star-kens-rage-2.ts create mode 100644 src/nex/titles/friends-nintendo-network.ts create mode 100644 src/nex/titles/game-party-champions.ts create mode 100644 src/nex/titles/hyrule-warriors.ts create mode 100644 src/nex/titles/index.ts create mode 100644 src/nex/titles/injustice-gods-among-us.ts create mode 100644 src/nex/titles/ironfall-invasion.ts create mode 100644 src/nex/titles/kid-icarus-uprising.ts create mode 100644 src/nex/titles/korg-m01d.ts create mode 100644 src/nex/titles/legend-of-kay-anniversary.ts create mode 100644 src/nex/titles/lost-reavers.ts create mode 100644 src/nex/titles/luigis-mansion-dark-moon.ts create mode 100644 src/nex/titles/mario-and-sonic-at-rio-olympics-3ds.ts create mode 100644 src/nex/titles/mario-and-sonic-at-the-rio-2016-olympic-games-wii-u.ts create mode 100644 src/nex/titles/mario-and-sonic-at-the-sochi-2014-olympic-winter-games.ts create mode 100644 src/nex/titles/mario-kart-7.ts create mode 100644 src/nex/titles/mario-kart-8-deluxe.ts create mode 100644 src/nex/titles/mario-kart-8.ts create mode 100644 src/nex/titles/mario-tennis-open.ts create mode 100644 src/nex/titles/mario-tennis-ultra-smash.ts create mode 100644 src/nex/titles/mario-vs-donkey-kong-tipping-stars.ts create mode 100644 src/nex/titles/metroid-prime-federation-force.ts create mode 100644 src/nex/titles/mighty-no-9.ts create mode 100644 src/nex/titles/miitopia.ts create mode 100644 src/nex/titles/minecraft-wii-u-edition.ts create mode 100644 src/nex/titles/monster-hunter-3-ultimate.ts create mode 100644 src/nex/titles/monster-hunter-3g.ts create mode 100644 src/nex/titles/nano-assault-neo.ts create mode 100644 src/nex/titles/ninja-gaiden-3-razors-edge.ts create mode 100644 src/nex/titles/nintendo-badge-arcade.ts create mode 100644 src/nex/titles/nova-111.ts create mode 100644 src/nex/titles/olliolli.ts create mode 100644 src/nex/titles/pikmin-3.ts create mode 100644 src/nex/titles/pokemon-bank.ts create mode 100644 src/nex/titles/pokemon-rumble-world.ts create mode 100644 src/nex/titles/pokemon-xy.ts create mode 100644 src/nex/titles/pokken-tournament.ts create mode 100644 src/nex/titles/puddle.ts create mode 100644 src/nex/titles/puyo-puyo-tetris.ts create mode 100644 src/nex/titles/resident-evil-revelations.ts create mode 100644 src/nex/titles/romance-of-the-three-kingdoms-12.ts create mode 100644 src/nex/titles/sonic--all-stars-racing-transformed.ts create mode 100644 src/nex/titles/sonic-lost-world.ts create mode 100644 src/nex/titles/splatoon.ts create mode 100644 src/nex/titles/star-fox-guard-demo.ts create mode 100644 src/nex/titles/star-fox-guard.ts create mode 100644 src/nex/titles/star-wars-pinball.ts create mode 100644 src/nex/titles/stealth-inc-2-a-game-of-clones.ts create mode 100644 src/nex/titles/steel-diver-sub-wars.ts create mode 100644 src/nex/titles/super-mario-maker-2.ts create mode 100644 src/nex/titles/super-mario-maker.ts create mode 100644 src/nex/titles/super-smash-bros-4.ts create mode 100644 src/nex/titles/sushi-striker-the-way-of-sushido.ts create mode 100644 src/nex/titles/team-kirby-clash-deluxe.ts create mode 100644 src/nex/titles/tekken-tag-tournament-2-wii-u-edition.ts create mode 100644 src/nex/titles/terraria.ts create mode 100644 src/nex/titles/the-legend-of-zelda-tri-force-heroes.ts create mode 100644 src/nex/titles/title.ts create mode 100644 src/nex/titles/trine-2-directors-cut.ts create mode 100644 src/nex/titles/warriors-orochi-3-hyper.ts create mode 100644 src/nex/titles/wii-karaoke-u.ts create mode 100644 src/nex/titles/wii-party-u.ts create mode 100644 src/nex/titles/wii-sports-club.ts create mode 100644 src/nex/titles/worcle-worlds.ts create mode 100644 src/nex/titles/xenoblade-chronicles-x.ts create mode 100644 src/nex/titles/yakuman-houou-mahjong.ts create mode 100644 src/nex/titles/yo-kai-watch-2.ts create mode 100644 src/nex/titles/zen-pinball-2.ts diff --git a/src/nex/connection.ts b/src/nex/connection.ts index c1e32b9..3b1f34c 100644 --- a/src/nex/connection.ts +++ b/src/nex/connection.ts @@ -1,16 +1,13 @@ import settings from '@/settings'; +import titles from '@/nex/titles'; import Substream from '@/nex/substream'; import RMCMessage from '@/nex/rmc-message'; import { keyDerivationOld, keyDerivationNew, Ticket } from '@/nex/kerberos'; -import getProtocol from '@/nex/protocols/manager'; import TicketGrantingProtocol from '@/nex/protocols/ticket-granting'; import type Packet from '@/types/nex/packet'; import type StationURL from '@/nex/types/station-url'; import type { SerializedConnection, Title } from '@/types/nex/serialized-connection'; -// TODO - Maybe this should be broken out into .ts files for each game? That way a game can define it's own signature calculation functions and such? -import titles from '@/nex/titles.json'; - // * Represents an individual connection to a specific game server export default class Connection { public clientAddress: string; @@ -107,13 +104,13 @@ export default class Connection { if (!this.title) { for (const title of titles) { if (packet.version === -1) { - if (title.title_ids.includes(packet.titleID)) { + if (title.titleIDs.includes(packet.titleID)) { this.title = title; break; } } else if (packet.version === 0) { const expectedChecksum = packet.checksum; - const calculatedChecksum = packet.calculateChecksum(title.access_key); + const calculatedChecksum = packet.calculateChecksum(title.accessKey); if (expectedChecksum === calculatedChecksum) { this.title = title; @@ -123,7 +120,7 @@ export default class Connection { // TODO - Legacy connection signature const connectionSignature = packet.fromClientToServer ? this.clientConnectionSignature : this.serverConnectionSignature; const expectedSignature = packet.signature; - const calculatedSignature = packet.calculateSignature(title.access_key, this.sessionKey, connectionSignature); + const calculatedSignature = packet.calculateSignature(title.accessKey, this.sessionKey, connectionSignature); if (expectedSignature.equals(calculatedSignature)) { this.title = title; @@ -133,7 +130,7 @@ export default class Connection { const serverAddress = packet.sourceAddress === 'CLIENT' ? packet.destinationAddress : packet.sourceAddress; const gameServerID = serverAddress.split('-')[0].slice(1); - if (title.game_server_id === gameServerID) { + if (title.gameServerID === gameServerID) { this.title = title; break; } @@ -210,7 +207,7 @@ export default class Connection { } } - const protocol = getProtocol(packet.message); + const protocol = this.title.getProtocolHandler(packet.message); if (protocol) { packet.message.protocolName = protocol.Name; diff --git a/src/nex/protocols/manager.ts b/src/nex/protocols/manager.ts deleted file mode 100644 index 486800f..0000000 --- a/src/nex/protocols/manager.ts +++ /dev/null @@ -1,38 +0,0 @@ -import NATTraversalProtocol from '@/nex/protocols/nat-traversal'; -import TicketGrantingProtocol from '@/nex/protocols/ticket-granting'; -import SecureConnectionProtocol from '@/nex/protocols/secure-connection'; -import NotificationEventsProtocol from '@/nex/protocols/notification-events'; -import MatchMakingProtocol from '@/nex/protocols/match-making'; -import MatchMakingExtProtocol from '@/nex/protocols/match-making-ext'; -import MatchmakeExtensionProtocol from '@/nex/protocols/matchmake-extension'; -import RankingProtocol from '@/nex/protocols/ranking'; -import MatchmakeRefereeProtocol from '@/nex/protocols/matchmake-referee'; -import type RMCMessage from '@/nex/rmc-message'; -import type ServiceProtocol from '@/types/nex/service-protocol'; - -export default function getProtocol(message: RMCMessage): ServiceProtocol | null { - const protocolID = message.protocolID === 0x7F ? message.extendedProtocolID : message.protocolID; - - switch (protocolID) { - case NATTraversalProtocol.ID: - return NATTraversalProtocol; - case TicketGrantingProtocol.ID: - return TicketGrantingProtocol; - case SecureConnectionProtocol.ID: - return SecureConnectionProtocol; - case NotificationEventsProtocol.ID: - return NotificationEventsProtocol; - case MatchMakingProtocol.ID: - return MatchMakingProtocol; - case MatchMakingExtProtocol.ID: - return MatchMakingExtProtocol; - case MatchmakeExtensionProtocol.ID: - return MatchmakeExtensionProtocol; - case RankingProtocol.ID: - return RankingProtocol; - case MatchmakeRefereeProtocol.ID: - return MatchmakeRefereeProtocol; - } - - return null; -} \ No newline at end of file diff --git a/src/nex/protocols/match-making/types/auto-matchmake-param.ts b/src/nex/protocols/match-making/types/auto-matchmake-param.ts index 4501e6c..9a9dd52 100644 --- a/src/nex/protocols/match-making/types/auto-matchmake-param.ts +++ b/src/nex/protocols/match-making/types/auto-matchmake-param.ts @@ -35,7 +35,7 @@ export default class AutoMatchmakeParam extends Structure { this.lstSearchCriteria.extractFrom(stream); this.targetGids.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.blockListParam = new MatchmakeBlockListParam(); this.blockListParam.extractFrom(stream); } diff --git a/src/nex/protocols/match-making/types/join-matchmake-session-param.ts b/src/nex/protocols/match-making/types/join-matchmake-session-param.ts index 276bf65..6e6c70e 100644 --- a/src/nex/protocols/match-making/types/join-matchmake-session-param.ts +++ b/src/nex/protocols/match-making/types/join-matchmake-session-param.ts @@ -37,12 +37,12 @@ export default class JoinMatchmakeSessionParam extends Structure { this.joinMessage.extractFrom(stream); this.participationCount.extractFrom(stream); - if (this.structureVersion >= 1 || semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (this.structureVersion >= 1 || semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.extraParticipants = new UInt16(); this.extraParticipants.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.blockListParam = new MatchmakeBlockListParam(); this.blockListParam.extractFrom(stream); } diff --git a/src/nex/protocols/match-making/types/matchmake-session-search-criteria.ts b/src/nex/protocols/match-making/types/matchmake-session-search-criteria.ts index 6ed4ecd..07cb0ee 100644 --- a/src/nex/protocols/match-making/types/matchmake-session-search-criteria.ts +++ b/src/nex/protocols/match-making/types/matchmake-session-search-criteria.ts @@ -35,7 +35,7 @@ export default class MatchmakeSessionSearchCriteria extends Structure { this.m_Attribs.extractFrom(stream); this.m_GameMode.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=2.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=2.0.0')) { this.m_MinParticipants = new RVString(); this.m_MaxParticipants = new RVString(); @@ -48,22 +48,22 @@ export default class MatchmakeSessionSearchCriteria extends Structure { this.m_ExcludeLocked.extractFrom(stream); this.m_ExcludeNonHostPid.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.0.0')) { this.m_SelectionMethod = new UInt32(); this.m_SelectionMethod.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.4.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.4.0')) { this.m_VacantParticipants = new UInt16(); this.m_VacantParticipants.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.6.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.6.0')) { this.m_MatchmakeParam = new MatchmakeParam(); this.m_MatchmakeParam.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.7.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.7.0')) { this.m_ExcludeUserPasswordSet = new Bool(); this.m_ExcludeSystemPasswordSet = new Bool(); @@ -71,12 +71,12 @@ export default class MatchmakeSessionSearchCriteria extends Structure { this.m_ExcludeSystemPasswordSet.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.8.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.8.0')) { this.m_ReferGid = new UInt32(); this.m_ReferGid.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.m_Codeword = new RVString(); this.m_ResultRange = new ResultRange(); diff --git a/src/nex/protocols/match-making/types/matchmake-session.ts b/src/nex/protocols/match-making/types/matchmake-session.ts index e844e1f..61e044a 100644 --- a/src/nex/protocols/match-making/types/matchmake-session.ts +++ b/src/nex/protocols/match-making/types/matchmake-session.ts @@ -45,22 +45,22 @@ export default class MatchmakeSession extends Gathering { this.m_ApplicationBuffer.extractFrom(stream); this.m_ParticipationCount.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.4.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.4.0')) { this.m_ProgressScore = new UInt8(); this.m_ProgressScore.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.0.0')) { this.m_SessionKey = new RVBuffer(); this.m_SessionKey.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.5.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.5.0')) { this.m_Option0 = new UInt32(); this.m_Option0.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.6.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.6.0')) { this.m_MatchmakeParam = new MatchmakeParam(); this.m_StartedTime = new DateTime(); @@ -68,12 +68,12 @@ export default class MatchmakeSession extends Gathering { this.m_StartedTime.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.7.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.7.0')) { this.m_UserPassword = new RVString(); this.m_UserPassword.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.8.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.8.0')) { this.m_ReferGid = new UInt32(); this.m_UserPasswordEnabled = new Bool(); this.m_SystemPasswordEnabled = new Bool(); @@ -83,7 +83,7 @@ export default class MatchmakeSession extends Gathering { this.m_SystemPasswordEnabled.extractFrom(stream); } - if (semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.m_Codeword = new RVString(); this.m_Codeword.extractFrom(stream); } diff --git a/src/nex/protocols/matchmake-extension/methods/create-matchmake-session.ts b/src/nex/protocols/matchmake-extension/methods/create-matchmake-session.ts index d361b55..afab84d 100644 --- a/src/nex/protocols/matchmake-extension/methods/create-matchmake-session.ts +++ b/src/nex/protocols/matchmake-extension/methods/create-matchmake-session.ts @@ -22,7 +22,7 @@ export class Request { this.anyGathering.extractFrom(stream); this.strMessage.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.4.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.4.0')) { this.participationCount = new UInt16(); this.participationCount.extractFrom(stream); } @@ -53,7 +53,7 @@ export class Response { this.gid.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.0.0')) { this.sessionKey = new RVBuffer(); this.sessionKey.extractFrom(stream); } diff --git a/src/nex/protocols/matchmake-extension/methods/join-matchmake-session-ex.ts b/src/nex/protocols/matchmake-extension/methods/join-matchmake-session-ex.ts index 0aa334f..b798045 100644 --- a/src/nex/protocols/matchmake-extension/methods/join-matchmake-session-ex.ts +++ b/src/nex/protocols/matchmake-extension/methods/join-matchmake-session-ex.ts @@ -24,7 +24,7 @@ export class Request { this.strMessage.extractFrom(stream); this.dontCareMyBlackList.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.4.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.4.0')) { this.participationCount = new UInt16(); this.participationCount.extractFrom(stream); } diff --git a/src/nex/protocols/matchmake-extension/methods/join-matchmake-session.ts b/src/nex/protocols/matchmake-extension/methods/join-matchmake-session.ts index 35eaa09..f3fdd68 100644 --- a/src/nex/protocols/matchmake-extension/methods/join-matchmake-session.ts +++ b/src/nex/protocols/matchmake-extension/methods/join-matchmake-session.ts @@ -36,7 +36,7 @@ export class Response { constructor(message: RMCMessage) { const stream = new NEXByteStream(message.parametersData!, message.connection.title); - if (semver.satisfies(stream.title.library_versions.match_making, '>=3.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=3.0.0')) { this.sessionKey = new RVBuffer(); this.sessionKey.extractFrom(stream); } diff --git a/src/nex/protocols/matchmake-extension/methods/update-notification-data.ts b/src/nex/protocols/matchmake-extension/methods/update-notification-data.ts index 1a8054f..1579684 100644 --- a/src/nex/protocols/matchmake-extension/methods/update-notification-data.ts +++ b/src/nex/protocols/matchmake-extension/methods/update-notification-data.ts @@ -19,7 +19,7 @@ export class Request { constructor(message: RMCMessage) { const stream = new NEXByteStream(message.parametersData!, message.connection.title); - if (semver.satisfies(stream.title.library_versions.match_making, '>=4.0.0')) { + if (semver.satisfies(stream.title.libraryVersions.match_making, '>=4.0.0')) { this.uiParam1 = new UInt64(); this.uiParam2 = new UInt64(); } else { diff --git a/src/nex/protocols/notification-events/types/notification-event.ts b/src/nex/protocols/notification-events/types/notification-event.ts index 3bc7e10..d3edea0 100644 --- a/src/nex/protocols/notification-events/types/notification-event.ts +++ b/src/nex/protocols/notification-events/types/notification-event.ts @@ -26,7 +26,7 @@ export default class NotificationEvent extends Structure { this.m_uiParam2.extractFrom(stream); this.m_strParam.extractFrom(stream); - if (semver.satisfies(stream.title.library_versions.main, '>=3.4.0')) { + if (semver.satisfies(stream.title.libraryVersions.main, '>=3.4.0')) { this.m_uiParam3 = new UInt32(); this.m_uiParam3.extractFrom(stream); } diff --git a/src/nex/titles.json b/src/nex/titles.json deleted file mode 100644 index ccd0e94..0000000 --- a/src/nex/titles.json +++ /dev/null @@ -1,2273 +0,0 @@ -[ - { - "name": "Friends (Nintendo)", - "game_server_id": "", - "access_key": "ridfebb9", - "library_versions": { - "main": "1.0.0", - "ranking": "1.0.0", - "datastore": "1.0.0", - "match_making": "1.0.0", - "messaging": "1.0.0", - "utility": "1.0.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 16, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004013000003202", - "000500301001500A", - "000500301001510A", - "000500301001520A" - ] - }, - { - "name": "Angry Birds Star Wars 3DS", - "game_server_id": "", - "access_key": "fbae7416", - "library_versions": { - "main": "3.2.1", - "ranking": "3.2.1", - "datastore": "3.2.1", - "match_making": "3.2.1", - "messaging": "3.2.1", - "utility": "3.2.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000F2200", - "00040000000F7A00" - ] - }, - { - "name": "Angry Birds Trilogy 3DS", - "game_server_id": "", - "access_key": "ac4fbf0d", - "library_versions": { - "main": "2.7.2", - "ranking": "2.7.2", - "datastore": "2.7.2", - "match_making": "2.7.2", - "messaging": "2.7.2", - "utility": "2.7.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000AE200", - "00040000000AF400" - ] - }, - { - "name": "Worcle Worlds", - "game_server_id": "", - "access_key": "d373e4dc", - "library_versions": { - "main": "3.10.1", - "ranking": "3.10.1", - "datastore": "3.10.1", - "match_making": "3.10.1", - "messaging": "3.10.1", - "utility": "3.10.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000187400", - "0004000000187300" - ] - }, - { - "name": "sushi", - "game_server_id": "", - "access_key": "06fb3395", - "library_versions": { - "main": "4.3.1", - "ranking": "4.3.1", - "datastore": "4.3.1", - "match_making": "4.3.1", - "messaging": "4.3.1", - "utility": "4.3.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000001C1C00", - "00040000001C1D00" - ] - }, - { - "name": "Animal Crossing: New Leaf", - "game_server_id": "", - "access_key": "d6f08b40", - "library_versions": { - "main": "3.10.1", - "ranking": "3.10.1", - "datastore": "3.10.1", - "match_making": "3.10.1", - "messaging": "3.10.1", - "utility": "3.10.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000086300", - "0004000000086400", - "0004000000198E00", - "0004000000198F00", - "0004000000199000" - ] - }, - { - "name": "Animal Crossing Plaza", - "game_server_id": "", - "access_key": "7b9b09cb", - "library_versions": { - "main": "3.5.1", - "ranking": "3.5.1", - "datastore": "3.5.1", - "match_making": "3.5.1", - "messaging": "3.5.1", - "utility": "3.5.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010145600" - ] - }, - { - "name": "Axiom Verge", - "game_server_id": "", - "access_key": "24e0a63b", - "library_versions": { - "main": "3.10.0", - "ranking": "3.10.0", - "datastore": "3.10.0", - "match_making": "3.10.0", - "messaging": "3.10.0", - "utility": "3.10.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101F7900", - "0005000010200800" - ] - }, - { - "name": "Badge Arcade", - "game_server_id": "", - "access_key": "82d5962d", - "library_versions": { - "main": "3.7.3", - "ranking": "3.7.3", - "datastore": "3.7.3", - "match_making": "3.7.3", - "messaging": "3.7.3", - "utility": "3.7.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000153500", - "0004000000153600" - ] - }, - { - "name": "BIOHAZARD REVELATIONS UE", - "game_server_id": "", - "access_key": "59d539a9", - "library_versions": { - "main": "3.2.1", - "ranking": "3.2.1", - "datastore": "3.2.1", - "match_making": "3.2.1", - "messaging": "3.2.1", - "utility": "3.2.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010113100" - ] - }, - { - "name": "Devil's Third", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.6.1", - "ranking": "3.6.1", - "datastore": "3.6.1", - "match_making": "3.6.1", - "messaging": "3.6.1", - "utility": "3.6.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010138F00", - "0005000010177600", - "0005000010177700", - "0005000010197D00" - ] - }, - { - "name": "Disney INFINITY", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.5.2", - "ranking": "3.5.2", - "datastore": "3.5.2", - "match_making": "3.5.2", - "messaging": "3.5.2", - "utility": "3.5.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010132900", - "0005000010136F00", - "0005000010137000", - "000500001015A300" - ] - }, - { - "name": "Disney Infinity [2.0]", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.5.2", - "ranking": "3.5.2", - "datastore": "3.5.2", - "match_making": "3.5.2", - "messaging": "3.5.2", - "utility": "3.5.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001016DC00", - "0005000010188C00", - "0005000010188D00" - ] - }, - { - "name": "DISNEY INFINITY 3.0", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101AC900", - "00050000101B3D00", - "00050000101B3E00", - "00050000101DDC00" - ] - }, - { - "name": "DKC: Tropical Freeze", - "game_server_id": "", - "access_key": "7fcf384a", - "library_versions": { - "main": "3.4.0", - "ranking": "3.4.0", - "datastore": "3.4.0", - "match_making": "3.4.0", - "messaging": "3.4.0", - "utility": "3.4.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010137F00", - "0005000010138300", - "0005000010144800" - ] - }, - { - "name": "DuckTales: Remastered", - "game_server_id": "", - "access_key": "1294a96c", - "library_versions": { - "main": "3.3.0", - "ranking": "3.3.0", - "datastore": "3.3.0", - "match_making": "3.3.0", - "messaging": "3.3.0", - "utility": "3.3.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010129000", - "0005000010129200" - ] - }, - { - "name": "FAST Racing NEO", - "game_server_id": "", - "access_key": "811aa39f", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001012F000", - "00050000101D6000", - "00050000101E4100", - "00050000101FED00" - ] - }, - { - "name": "FotNS: Ken's Rage 2", - "game_server_id": "", - "access_key": "9994e29c", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010116600", - "000500001012B800", - "000500001012B900" - ] - }, - { - "name": "Game Party", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001010E400", - "000500001010FF00" - ] - }, - { - "name": "Hyrule Warriors", - "game_server_id": "", - "access_key": "7fcc1f7c", - "library_versions": { - "main": "3.8.0", - "ranking": "3.8.0", - "datastore": "3.8.0", - "match_making": "3.8.0", - "messaging": "3.8.0", - "utility": "3.8.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001017CD00", - "000500001017D800", - "000500001017D900" - ] - }, - { - "name": "Injustice: Gods Among Us", - "game_server_id": "", - "access_key": "65e9f4d6", - "library_versions": { - "main": "3.2.1", - "ranking": "3.2.1", - "datastore": "3.2.1", - "match_making": "3.2.1", - "messaging": "3.2.1", - "utility": "3.2.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010111700", - "0005000010111A00", - "0005000010140700" - ] - }, - { - "name": "IRONFALL Invasion", - "game_server_id": "", - "access_key": "feb81c7c", - "library_versions": { - "main": "3.7.1", - "ranking": "3.7.1", - "datastore": "3.7.1", - "match_making": "3.7.1", - "messaging": "3.7.1", - "utility": "3.7.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000015B100", - "000400000015D800", - "000400000017BF00", - "000400000017D000" - ] - }, - { - "name": "Legend of Kay", - "game_server_id": "", - "access_key": "478232f3", - "library_versions": { - "main": "3.8.3", - "ranking": "3.8.3", - "datastore": "3.8.3", - "match_making": "3.8.3", - "messaging": "3.8.3", - "utility": "3.8.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010193300", - "0005000010193400" - ] - }, - { - "name": "LOST REAVERS", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.10.0", - "ranking": "3.10.0", - "datastore": "3.10.0", - "match_making": "3.10.0", - "messaging": "3.10.0", - "utility": "3.10.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001018D900", - "00050000101A4800", - "00050000101B9900" - ] - }, - { - "name": "Mario & Sonic Rio 2016 3DS", - "game_server_id": "", - "access_key": "a2dbfa39", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000014A400", - "000400000017E200", - "000400000017E300", - "0004000000191C00", - "0004000000191D00", - "0004000000192400" - ] - }, - { - "name": "Mario & Sonic Rio 2016 Wii U", - "game_server_id": "", - "access_key": "63fecb0f", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010190300", - "00050000101E5300", - "00050000101E5400" - ] - }, - { - "name": "MARIO & SONIC SOCHI 2014", - "game_server_id": "", - "access_key": "585214a5", - "library_versions": { - "main": "3.4.0", - "ranking": "3.4.0", - "datastore": "3.4.0", - "match_making": "3.4.0", - "messaging": "3.4.0", - "utility": "3.4.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010106900", - "000500001010C700", - "000500001010C800" - ] - }, - { - "name": "MARIO KART 7", - "game_server_id": "", - "access_key": "6181dff1", - "library_versions": { - "main": "2.4.3", - "ranking": "2.4.3", - "datastore": "2.4.3", - "match_making": "2.4.3", - "messaging": "2.4.3", - "utility": "2.4.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000030600", - "0004000000030700", - "0004000000030800", - "0004000000030A00", - "000400000008B400" - ] - }, - { - "name": "MARIO KART 8", - "game_server_id": "", - "access_key": "25dbf96a", - "library_versions": { - "main": "3.5.4", - "ranking": "3.5.4", - "datastore": "3.5.4", - "match_making": "3.5.4", - "messaging": "3.5.4", - "utility": "3.5.4" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001010EB00", - "000500001010EC00", - "000500001010ED00" - ] - }, - { - "name": "Mario Tennis Open", - "game_server_id": "", - "access_key": "0fabeff2", - "library_versions": { - "main": "2.6.1", - "ranking": "2.6.1", - "datastore": "2.6.1", - "match_making": "2.6.1", - "messaging": "2.6.1", - "utility": "2.6.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000064D00", - "000400000007C700", - "000400000007C800", - "00040000000B8800", - "00040000000B9100" - ] - }, - { - "name": "Mario Tennis: Ultra Smash", - "game_server_id": "", - "access_key": "c69b92a0", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010199000", - "00050000101A3500", - "00050000101A3600" - ] - }, - { - "name": "Mario vs. DK: Tipping Stars", - "game_server_id": "", - "access_key": "d8927c3f", - "library_versions": { - "main": "3.7.1", - "ranking": "3.7.1", - "datastore": "3.7.1", - "match_making": "3.7.1", - "messaging": "3.7.1", - "utility": "3.7.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000012C800", - "000400000012CA00", - "0005000010149300", - "0005000010178E00", - "0005000010179200" - ] - }, - { - "name": "Metroid Prime: FF", - "game_server_id": "", - "access_key": "f79fb3c5", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000016CE00", - "000400000016E300", - "0004000000175200" - ] - }, - { - "name": "MH3G HD Ver.", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.0.5", - "ranking": "3.0.5", - "datastore": "3.0.5", - "match_making": "3.0.5", - "messaging": "3.0.5", - "utility": "3.0.5" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000048100", - "0005000010104D00" - ] - }, - { - "name": "MH3U", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.0.5", - "ranking": "3.0.5", - "datastore": "3.0.5", - "match_making": "3.0.5", - "messaging": "3.0.5", - "utility": "3.0.5" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000AE400", - "00040000000B1D00", - "00040000000D2E00", - "0005000010117200", - "0005000010118300" - ] - }, - { - "name": "Mighty No. 9", - "game_server_id": "", - "access_key": "bb980c2e", - "library_versions": { - "main": "3.9.1", - "ranking": "3.9.1", - "datastore": "3.9.1", - "match_making": "3.9.1", - "messaging": "3.9.1", - "utility": "3.9.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101C5A00", - "00050000101C9600", - "00050000101DD900" - ] - }, - { - "name": "Minecraft: Wii U Edition", - "game_server_id": "", - "access_key": "f1b61c8e", - "library_versions": { - "main": "3.10.0", - "ranking": "3.10.0", - "datastore": "3.10.0", - "match_making": "3.10.0", - "messaging": "3.10.0", - "utility": "3.10.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101D7500", - "00050000101D9D00", - "00050000101DBE00" - ] - }, - { - "name": "Nano Assault Neo", - "game_server_id": "", - "access_key": "7e484a8e", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010110100", - "0005000010110600", - "0005000010136400" - ] - }, - { - "name": "NINJA GAIDEN 3: Razor's Edge", - "game_server_id": "", - "access_key": "f857b4bd", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010110900", - "0005000010110A00", - "0005000010110B00", - "0005000010139B00" - ] - }, - { - "name": "Nova-111", - "game_server_id": "", - "access_key": "bafe9856", - "library_versions": { - "main": "3.8.3", - "ranking": "3.8.3", - "datastore": "3.8.3", - "match_making": "3.8.3", - "messaging": "3.8.3", - "utility": "3.8.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101C0700", - "00050000101C0A00" - ] - }, - { - "name": "OlliOlli", - "game_server_id": "", - "access_key": "60e5df12", - "library_versions": { - "main": "3.6.1", - "ranking": "3.6.1", - "datastore": "3.6.1", - "match_making": "3.6.1", - "messaging": "3.6.1", - "utility": "3.6.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000015A200", - "000400000015A400", - "00050000101A5E00", - "00050000101A6900" - ] - }, - { - "name": "PIKMIN 3", - "game_server_id": "", - "access_key": "f6accfc1", - "library_versions": { - "main": "3.3.0", - "ranking": "3.3.0", - "datastore": "3.3.0", - "match_making": "3.3.0", - "messaging": "3.3.0", - "utility": "3.3.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001012BC00", - "000500001012BD00", - "000500001012BE00", - "0005000010185300" - ] - }, - { - "name": "Pokémon Bank", - "game_server_id": "", - "access_key": "9a2961d8", - "library_versions": { - "main": "3.4.12", - "ranking": "3.4.12", - "datastore": "3.4.12", - "match_making": "3.4.12", - "messaging": "3.4.12", - "utility": "3.4.12" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000C9B00" - ] - }, - { - "name": "Pokémon Rumble World", - "game_server_id": "", - "access_key": "844f1d0c", - "library_versions": { - "main": "3.8.2", - "ranking": "3.8.2", - "datastore": "3.8.2", - "match_making": "3.8.2", - "messaging": "3.8.2", - "utility": "3.8.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000164600", - "0004000000185A00" - ] - }, - { - "name": "POKKÉN TOURNAMENT", - "game_server_id": "", - "access_key": "6ef3adf1", - "library_versions": { - "main": "3.10.0", - "ranking": "3.10.0", - "datastore": "3.10.0", - "match_making": "3.10.0", - "messaging": "3.10.0", - "utility": "3.10.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101C5800", - "00050000101DF400", - "00050000101DF500" - ] - }, - { - "name": "Puddle", - "game_server_id": "", - "access_key": "afcffb5c", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001010FB00", - "0005000010110500", - "00050000101A2700" - ] - }, - { - "name": "PUYOPUYOTETRIS", - "game_server_id": "", - "access_key": "4eb0ca36", - "library_versions": { - "main": "3.5.2", - "ranking": "3.5.2", - "datastore": "3.5.2", - "match_making": "3.5.2", - "messaging": "3.5.2", - "utility": "3.5.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000101200", - "000500001014D900" - ] - }, - { - "name": "RESIDENT EVIL REVELATIONS", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.2.1", - "ranking": "3.2.1", - "datastore": "3.2.1", - "match_making": "3.2.1", - "messaging": "3.2.1", - "utility": "3.2.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000053B00", - "000400000005EE00", - "000500001012B400", - "000500001012CF00" - ] - }, - { - "name": "RTK 12", - "game_server_id": "", - "access_key": "bfede098", - "library_versions": { - "main": "3.4.0", - "ranking": "3.4.0", - "datastore": "3.4.0", - "match_making": "3.4.0", - "messaging": "3.4.0", - "utility": "3.4.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010111C00", - "0005000010149000" - ] - }, - { - "name": "Runner2", - "game_server_id": "", - "access_key": "1084452a", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001011AF00", - "0005000010136300", - "00050000101DD600" - ] - }, - { - "name": "SI2", - "game_server_id": "", - "access_key": "44adeb87", - "library_versions": { - "main": "3.6.1", - "ranking": "3.6.1", - "datastore": "3.6.1", - "match_making": "3.6.1", - "messaging": "3.6.1", - "utility": "3.6.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010173300", - "0005000010176500" - ] - }, - { - "name": "SONIC LOST WORLD", - "game_server_id": "", - "access_key": "69a9fc95", - "library_versions": { - "main": "3.3.0", - "ranking": "3.3.0", - "datastore": "3.3.0", - "match_making": "3.3.0", - "messaging": "3.3.0", - "utility": "3.3.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000C5400", - "00040000000C8C00", - "00040000000CB400", - "000400000010CF00", - "0005000010128F00", - "000500001012B100", - "0005000010135700" - ] - }, - { - "name": "Sonic Transformed", - "game_server_id": "", - "access_key": "b26a3421", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000008FC00", - "00040000000B3500", - "000500001010B300", - "0005000010111F00", - "000500001015B400" - ] - }, - { - "name": "Splatoon", - "game_server_id": "", - "access_key": "6f599f81", - "library_versions": { - "main": "3.8.3", - "ranking": "3.8.3", - "datastore": "3.8.3", - "match_making": "3.8.3", - "messaging": "3.8.3", - "utility": "3.8.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010162B00", - "0005000010176900", - "0005000010176A00", - "000500001017E300", - "00050000101CDB00", - "00050000101CDC00", - "00050000101CDD00", - "00050000101CDE00", - "00050000101D6A00", - "00050000101D6B00", - "00050000101D6C00" - ] - }, - { - "name": "Star Fox Guard", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.8.2", - "ranking": "3.8.2", - "datastore": "3.8.2", - "match_making": "3.8.2", - "messaging": "3.8.2", - "utility": "3.8.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101BEB00", - "00050000101BEC00", - "00050000101BED00" - ] - }, - { - "name": "Star Fox Guard (Demo)", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.8.2", - "ranking": "3.8.2", - "datastore": "3.8.2", - "match_making": "3.8.2", - "messaging": "3.8.2", - "utility": "3.8.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00050000101DCC00", - "00050000101DCD00", - "00050000101DCE00" - ] - }, - { - "name": "Star Wars Pinball", - "game_server_id": "", - "access_key": "ecd0e530", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000D4A00", - "00040000000E6800", - "0005000010132A00", - "0005000010135200" - ] - }, - { - "name": "Steel Diver: Sub Wars", - "game_server_id": "", - "access_key": "fb9537fe", - "library_versions": { - "main": "3.7.0", - "ranking": "3.7.0", - "datastore": "3.7.0", - "match_making": "3.7.0", - "messaging": "3.7.0", - "utility": "3.7.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000D7D00", - "00040000000D7E00" - ] - }, - { - "name": "Super Mario Maker", - "game_server_id": "", - "access_key": "9f2b4678", - "library_versions": { - "main": "3.8.12", - "ranking": "3.8.12", - "datastore": "3.8.12", - "match_making": "3.8.12", - "messaging": "3.8.12", - "utility": "3.8.12" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000001A0300", - "00040000001A0400", - "00040000001A0500", - "00040000001BB800", - "000500001018DB00", - "000500001018DC00", - "000500001018DD00" - ] - }, - { - "name": "Super Smash Bros.", - "game_server_id": "", - "access_key": "2869ba38", - "library_versions": { - "main": "3.6.27", - "ranking": "3.6.27", - "datastore": "3.6.27", - "match_making": "3.6.27", - "messaging": "3.6.27", - "utility": "3.6.27" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000B8B00", - "00040000000EDF00", - "00040000000EE000", - "0004000000167C00", - "0005000010110E00", - "0005000010144F00", - "0005000010145000" - ] - }, - { - "name": "Team Kirby Clash Deluxe", - "game_server_id": "", - "access_key": "e0c85605", - "library_versions": { - "main": "3.10.1", - "ranking": "3.10.1", - "datastore": "3.10.1", - "match_making": "3.10.1", - "messaging": "3.10.1", - "utility": "3.10.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000001A8B00", - "00040000001AB800", - "00040000001AB900", - "00040000001C2200", - "00040000001CAA00", - "00040000001CAD00" - ] - }, - { - "name": "TEKKEN TAG 2 Wii U EDITION", - "game_server_id": "", - "access_key": "0f037f64", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010100600", - "000500001010F800", - "0005000010110000" - ] - }, - { - "name": "Terraria", - "game_server_id": "", - "access_key": "3d37fbdb", - "library_versions": { - "main": "3.8.3", - "ranking": "3.8.3", - "datastore": "3.8.3", - "match_making": "3.8.3", - "messaging": "3.8.3", - "utility": "3.8.3" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000016A600", - "000400000016A900", - "00040000001B3200", - "0005000010198F00", - "000500001019C300", - "00050000101F3A00" - ] - }, - { - "name": "Trine 2", - "game_server_id": "", - "access_key": "f9c35adc", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010112200", - "0005000010128A00", - "000500001014D600" - ] - }, - { - "name": "WARRIORS OROCHI 3 Hyper", - "game_server_id": "", - "access_key": "d74bb27d", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001010EA00", - "0005000010110200", - "0005000010112B00" - ] - }, - { - "name": "Wii Karaoke U", - "game_server_id": "", - "access_key": "dfc5a4ac", - "library_versions": { - "main": "3.4.0", - "ranking": "3.4.0", - "datastore": "3.4.0", - "match_making": "3.4.0", - "messaging": "3.4.0", - "utility": "3.4.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010100D00", - "0005000010102500", - "0005000010149600" - ] - }, - { - "name": "Wii Party U", - "game_server_id": "", - "access_key": "a5b77314", - "library_versions": { - "main": "3.3.0", - "ranking": "3.3.0", - "datastore": "3.3.0", - "match_making": "3.3.0", - "messaging": "3.3.0", - "utility": "3.3.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001011A800", - "0005000010137D00", - "0005000010137E00" - ] - }, - { - "name": "Wii Sports Club", - "game_server_id": "", - "access_key": "4d324052", - "library_versions": { - "main": "3.4.7", - "ranking": "3.4.7", - "datastore": "3.4.7", - "match_making": "3.4.7", - "messaging": "3.4.7", - "utility": "3.4.7" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000500001012F100", - "0005000010144D00", - "0005000010144E00", - "0005000010171E00" - ] - }, - { - "name": "Xenoblade Chronicles X", - "game_server_id": "", - "access_key": "59d7be84", - "library_versions": { - "main": "3.5.5", - "ranking": "3.5.5", - "datastore": "3.5.5", - "match_making": "3.5.5", - "messaging": "3.5.5", - "utility": "3.5.5" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010116100", - "00050000101C4C00", - "00050000101C4D00" - ] - }, - { - "name": "Yo-kai Watch 2", - "game_server_id": "", - "access_key": "7ab183bb", - "library_versions": { - "main": "3.6.1", - "ranking": "3.6.1", - "datastore": "3.6.1", - "match_making": "3.6.1", - "messaging": "3.6.1", - "utility": "3.6.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "000400000012F800", - "000400000012F900", - "0004000000155100", - "000400000019A900", - "000400000019AA00", - "000400000019AE00", - "000400000019AF00", - "00040000001B2700", - "00040000001B2A00", - "00040000001B7100", - "00040000001BB500" - ] - }, - { - "name": "Zen Pinball 2", - "game_server_id": "", - "access_key": "2ff15f7e", - "library_versions": { - "main": "3.0.1", - "ranking": "3.0.1", - "datastore": "3.0.1", - "match_making": "3.0.1", - "messaging": "3.0.1", - "utility": "3.0.1" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010113800", - "0005000010115F00" - ] - }, - { - "name": "役満 鳳凰", - "game_server_id": "", - "access_key": "23aab2d3", - "library_versions": { - "main": "3.6.14", - "ranking": "3.6.14", - "datastore": "3.6.14", - "match_making": "3.6.14", - "messaging": "3.6.14", - "utility": "3.6.14" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0005000010149700" - ] - }, - { - "name": "Kid Icarus Uprising", - "game_server_id": "", - "access_key": "58a7e494", - "library_versions": { - "main": "0.0.0", - "ranking": "0.0.0", - "datastore": "0.0.0", - "match_making": "0.0.0", - "messaging": "0.0.0", - "utility": "0.0.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000030000", - "0004000000030100", - "0004000000030200" - ] - }, - { - "name": "Luigi's Mansion 2", - "game_server_id": "", - "access_key": "3861a9f8", - "library_versions": { - "main": "0.0.0", - "ranking": "0.0.0", - "datastore": "0.0.0", - "match_making": "0.0.0", - "messaging": "0.0.0", - "utility": "0.0.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000055F00", - "0004000000076400", - "0004000000076500" - ] - }, - { - "name": "Pokémon X/Y", - "game_server_id": "", - "access_key": "876138df", - "library_versions": { - "main": "0.0.0", - "ranking": "0.0.0", - "datastore": "0.0.0", - "match_making": "0.0.0", - "messaging": "0.0.0", - "utility": "0.0.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000055D00" - ] - }, - { - "name": "TLoZ: Tri Force Heroes", - "game_server_id": "", - "access_key": "c1621b84", - "library_versions": { - "main": "0.0.0", - "ranking": "0.0.0", - "datastore": "0.0.0", - "match_making": "0.0.0", - "messaging": "0.0.0", - "utility": "0.0.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0004000000176E00", - "0004000000176F00", - "0004000000177000", - "0004000000182200", - "0004000000182300" - ] - }, - { - "name": "Mario Kart 8 Deluxe", - "game_server_id": "2b309e01", - "access_key": "09c1c475", - "library_versions": { - "main": "4.3.2", - "ranking": "4.3.2", - "datastore": "4.3.2", - "match_making": "4.3.2", - "messaging": "4.3.2", - "utility": "4.3.2" - }, - "settings": { - "pid_size": 8, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "0100152000022000" - ] - }, - { - "name": "Super Mario Maker 2", - "game_server_id": "22306d00", - "access_key": "fdf6617f", - "library_versions": { - "main": "4.6.25", - "ranking": "4.6.25", - "datastore": "4.6.25", - "match_making": "4.6.25", - "messaging": "4.6.25", - "utility": "4.6.25" - }, - "settings": { - "pid_size": 8, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "01009B90006DC000" - ] - }, - { - "name": "Miitopia (3DS)", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.10.2", - "ranking": "3.10.2", - "datastore": "3.10.2", - "match_making": "3.10.2", - "messaging": "3.10.2", - "utility": "3.10.2" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": true, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000001B4E00", - "00040000001B4F00", - "0004000000178800" - ] - }, - { - "name": "KORG M01D", - "game_server_id": "", - "access_key": "", - "library_versions": { - "main": "3.3.0", - "ranking": "3.3.0", - "datastore": "3.3.0", - "match_making": "3.3.0", - "messaging": "3.3.0", - "utility": "3.3.0" - }, - "settings": { - "pid_size": 4, - "string_length_size": 2, - "use_structure_header": false, - "session_key_size": 32, - "kerberos_key_version": 0, - "kerberos_ticket_version": 0, - "checksum_size": 4, - "flags_and_type_size": 2 - }, - "title_ids": [ - "00040000000F1600", - "00040000000F0800" - ] - } -] \ No newline at end of file diff --git a/src/nex/titles/angry-birds-star-wars-3ds.ts b/src/nex/titles/angry-birds-star-wars-3ds.ts new file mode 100644 index 0000000..667ccac --- /dev/null +++ b/src/nex/titles/angry-birds-star-wars-3ds.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class AngryBirdsStarWars3DS extends Title { + public static name = 'Angry Birds Star Wars 3DS'; + public static gameServerID = ''; + public static accessKey = 'fbae7416'; + public static libraryVersions = { + main: '3.2.1', + ranking: '3.2.1', + datastore: '3.2.1', + match_making: '3.2.1', + messaging: '3.2.1', + utility: '3.2.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000F2200', + '00040000000F7A00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/angry-birds-trilogy-3ds.ts b/src/nex/titles/angry-birds-trilogy-3ds.ts new file mode 100644 index 0000000..92b4536 --- /dev/null +++ b/src/nex/titles/angry-birds-trilogy-3ds.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class AngryBirdsTrilogy3DS extends Title { + public static name = 'Angry Birds Trilogy 3DS'; + public static gameServerID = ''; + public static accessKey = 'ac4fbf0d'; + public static libraryVersions = { + main: '2.7.2', + ranking: '2.7.2', + datastore: '2.7.2', + match_making: '2.7.2', + messaging: '2.7.2', + utility: '2.7.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000AE200', + '00040000000AF400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/animal-crossing-new-leaf.ts b/src/nex/titles/animal-crossing-new-leaf.ts new file mode 100644 index 0000000..1164ebd --- /dev/null +++ b/src/nex/titles/animal-crossing-new-leaf.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class AnimalCrossingNewLeaf extends Title { + public static name = 'Animal Crossing: New Leaf'; + public static gameServerID = ''; + public static accessKey = 'd6f08b40'; + public static libraryVersions = { + main: '3.10.1', + ranking: '3.10.1', + datastore: '3.10.1', + match_making: '3.10.1', + messaging: '3.10.1', + utility: '3.10.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000086300', + '0004000000086400', + '0004000000198E00', + '0004000000198F00', + '0004000000199000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/animal-crossing-plaza.ts b/src/nex/titles/animal-crossing-plaza.ts new file mode 100644 index 0000000..203241f --- /dev/null +++ b/src/nex/titles/animal-crossing-plaza.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class AnimalCrossingPlaza extends Title { + public static name = 'Animal Crossing Plaza'; + public static gameServerID = ''; + public static accessKey = '7b9b09cb'; + public static libraryVersions = { + main: '3.5.1', + ranking: '3.5.1', + datastore: '3.5.1', + match_making: '3.5.1', + messaging: '3.5.1', + utility: '3.5.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010145600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/axiom-verge.ts b/src/nex/titles/axiom-verge.ts new file mode 100644 index 0000000..2df601f --- /dev/null +++ b/src/nex/titles/axiom-verge.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class AxiomVerge extends Title { + public static name = 'Axiom Verge'; + public static gameServerID = ''; + public static accessKey = '24e0a63b'; + public static libraryVersions = { + main: '3.10.0', + ranking: '3.10.0', + datastore: '3.10.0', + match_making: '3.10.0', + messaging: '3.10.0', + utility: '3.10.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101F7900', + '0005000010200800' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/biohazard-revelations-unveiled-edition.ts b/src/nex/titles/biohazard-revelations-unveiled-edition.ts new file mode 100644 index 0000000..e293b3f --- /dev/null +++ b/src/nex/titles/biohazard-revelations-unveiled-edition.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class BIOHAZARDREVELATIONSUnveiledEdition extends Title { + public static name = 'BIOHAZARD REVELATIONS Unveiled Edition'; + public static gameServerID = ''; + public static accessKey = '59d539a9'; + public static libraryVersions = { + main: '3.2.1', + ranking: '3.2.1', + datastore: '3.2.1', + match_making: '3.2.1', + messaging: '3.2.1', + utility: '3.2.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010113100' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/bittrip-presents-runner2-future-legend-of-rhythm-alien.ts b/src/nex/titles/bittrip-presents-runner2-future-legend-of-rhythm-alien.ts new file mode 100644 index 0000000..347dcf6 --- /dev/null +++ b/src/nex/titles/bittrip-presents-runner2-future-legend-of-rhythm-alien.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class BITTRIPPresentsRunner2FutureLegendofRhythmAlien extends Title { + public static name = 'BIT.TRIP Presents... Runner2: Future Legend of Rhythm Alien'; + public static gameServerID = ''; + public static accessKey = '1084452a'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001011AF00', + '0005000010136300', + '00050000101DD600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/devils-third.ts b/src/nex/titles/devils-third.ts new file mode 100644 index 0000000..9c3bf7b --- /dev/null +++ b/src/nex/titles/devils-third.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class DevilsThird extends Title { + public static name = 'Devil\'s Third'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.6.1', + ranking: '3.6.1', + datastore: '3.6.1', + match_making: '3.6.1', + messaging: '3.6.1', + utility: '3.6.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010138F00', + '0005000010177600', + '0005000010177700', + '0005000010197D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/disney-infinity-2.ts b/src/nex/titles/disney-infinity-2.ts new file mode 100644 index 0000000..c27be87 --- /dev/null +++ b/src/nex/titles/disney-infinity-2.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class DisneyInfinity20 extends Title { + public static name = 'Disney Infinity [2.0]'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.5.2', + ranking: '3.5.2', + datastore: '3.5.2', + match_making: '3.5.2', + messaging: '3.5.2', + utility: '3.5.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001016DC00', + '0005000010188C00', + '0005000010188D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/disney-infinity-3.ts b/src/nex/titles/disney-infinity-3.ts new file mode 100644 index 0000000..19024d8 --- /dev/null +++ b/src/nex/titles/disney-infinity-3.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class DISNEYINFINITY30 extends Title { + public static name = 'DISNEY INFINITY 3.0'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101AC900', + '00050000101B3D00', + '00050000101B3E00', + '00050000101DDC00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/disney-infinity.ts b/src/nex/titles/disney-infinity.ts new file mode 100644 index 0000000..6974ebb --- /dev/null +++ b/src/nex/titles/disney-infinity.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class DisneyINFINITY extends Title { + public static name = 'Disney INFINITY'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.5.2', + ranking: '3.5.2', + datastore: '3.5.2', + match_making: '3.5.2', + messaging: '3.5.2', + utility: '3.5.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010132900', + '0005000010136F00', + '0005000010137000', + '000500001015A300' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/donkey-kong-country-tropical-freeze.ts b/src/nex/titles/donkey-kong-country-tropical-freeze.ts new file mode 100644 index 0000000..8fcf77f --- /dev/null +++ b/src/nex/titles/donkey-kong-country-tropical-freeze.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class DonkeyKongCountryTropicalFreeze extends Title { + public static name = 'Donkey Kong Country Tropical Freeze'; + public static gameServerID = ''; + public static accessKey = '7fcf384a'; + public static libraryVersions = { + main: '3.4.0', + ranking: '3.4.0', + datastore: '3.4.0', + match_making: '3.4.0', + messaging: '3.4.0', + utility: '3.4.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010137F00', + '0005000010138300', + '0005000010144800' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/ducktales-remastered.ts b/src/nex/titles/ducktales-remastered.ts new file mode 100644 index 0000000..5d31242 --- /dev/null +++ b/src/nex/titles/ducktales-remastered.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class DuckTalesRemastered extends Title { + public static name = 'DuckTales: Remastered'; + public static gameServerID = ''; + public static accessKey = '1294a96c'; + public static libraryVersions = { + main: '3.3.0', + ranking: '3.3.0', + datastore: '3.3.0', + match_making: '3.3.0', + messaging: '3.3.0', + utility: '3.3.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010129000', + '0005000010129200' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/fast-racing-neo.ts b/src/nex/titles/fast-racing-neo.ts new file mode 100644 index 0000000..92c5b91 --- /dev/null +++ b/src/nex/titles/fast-racing-neo.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class FASTRacingNEO extends Title { + public static name = 'FAST Racing NEO'; + public static gameServerID = ''; + public static accessKey = '811aa39f'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001012F000', + '00050000101D6000', + '00050000101E4100', + '00050000101FED00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/fist-of-the-north-star-kens-rage-2.ts b/src/nex/titles/fist-of-the-north-star-kens-rage-2.ts new file mode 100644 index 0000000..00a3674 --- /dev/null +++ b/src/nex/titles/fist-of-the-north-star-kens-rage-2.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class FistoftheNorthStarKensRage2 extends Title { + public static name = 'Fist of the North Star: Ken\'s Rage 2'; + public static gameServerID = ''; + public static accessKey = '9994e29c'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010116600', + '000500001012B800', + '000500001012B900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/friends-nintendo-network.ts b/src/nex/titles/friends-nintendo-network.ts new file mode 100644 index 0000000..a68c57a --- /dev/null +++ b/src/nex/titles/friends-nintendo-network.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class FriendsNintendoNetwork extends Title { + public static name = 'Friends (Nintendo Network)'; + public static gameServerID = ''; + public static accessKey = 'ridfebb9'; + public static libraryVersions = { + main: '1.0.0', + ranking: '1.0.0', + datastore: '1.0.0', + match_making: '1.0.0', + messaging: '1.0.0', + utility: '1.0.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 16, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004013000003202', + '000500301001500A', + '000500301001510A', + '000500301001520A' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/game-party-champions.ts b/src/nex/titles/game-party-champions.ts new file mode 100644 index 0000000..3b5cf41 --- /dev/null +++ b/src/nex/titles/game-party-champions.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class GamePartyChampions extends Title { + public static name = 'Game Party Champions'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001010E400', + '000500001010FF00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/hyrule-warriors.ts b/src/nex/titles/hyrule-warriors.ts new file mode 100644 index 0000000..3460a70 --- /dev/null +++ b/src/nex/titles/hyrule-warriors.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class HyruleWarriors extends Title { + public static name = 'Hyrule Warriors'; + public static gameServerID = ''; + public static accessKey = '7fcc1f7c'; + public static libraryVersions = { + main: '3.8.0', + ranking: '3.8.0', + datastore: '3.8.0', + match_making: '3.8.0', + messaging: '3.8.0', + utility: '3.8.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001017CD00', + '000500001017D800', + '000500001017D900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/index.ts b/src/nex/titles/index.ts new file mode 100644 index 0000000..af7b460 --- /dev/null +++ b/src/nex/titles/index.ts @@ -0,0 +1,163 @@ +import AnimalCrossingNewLeaf from '@/nex/titles/animal-crossing-new-leaf'; +import AnimalCrossingPlaza from '@/nex/titles/animal-crossing-plaza'; +import AngryBirdsStarWars3DS from '@/nex/titles/angry-birds-star-wars-3ds'; +import AngryBirdsTrilogy3DS from '@/nex/titles/angry-birds-trilogy-3ds'; +import AxiomVerge from '@/nex/titles/axiom-verge'; +import BIOHAZARDREVELATIONSUnveiledEdition from '@/nex/titles/biohazard-revelations-unveiled-edition'; +import BITTRIPPresentsRunner2FutureLegendofRhythmAlien from '@/nex/titles/bittrip-presents-runner2-future-legend-of-rhythm-alien'; +import DevilsThird from '@/nex/titles/devils-third'; +import DisneyInfinity20 from '@/nex/titles/disney-infinity-2'; +import DisneyINFINITY from '@/nex/titles/disney-infinity'; +import DISNEYINFINITY30 from '@/nex/titles/disney-infinity-3'; +import DonkeyKongCountryTropicalFreeze from '@/nex/titles/donkey-kong-country-tropical-freeze'; +import DuckTalesRemastered from '@/nex/titles/ducktales-remastered'; +import FASTRacingNEO from '@/nex/titles/fast-racing-neo'; +import FistoftheNorthStarKensRage2 from '@/nex/titles/fist-of-the-north-star-kens-rage-2'; +import FriendsNintendoNetwork from '@/nex/titles/friends-nintendo-network'; +import GamePartyChampions from '@/nex/titles/game-party-champions'; +import HyruleWarriors from '@/nex/titles/hyrule-warriors'; +import IRONFALLInvasion from '@/nex/titles/ironfall-invasion'; +import InjusticeGodsAmongUs from '@/nex/titles/injustice-gods-among-us'; +import KidIcarusUprising from '@/nex/titles/kid-icarus-uprising'; +import KORGM01D from '@/nex/titles/korg-m01d'; +import LegendofKayAnniversary from '@/nex/titles/legend-of-kay-anniversary'; +import LuigisMansionDarkMoon from '@/nex/titles/luigis-mansion-dark-moon'; +import LOSTREAVERS from '@/nex/titles/lost-reavers'; +import MarioSonicatRioOlympics3DS from '@/nex/titles/mario-and-sonic-at-rio-olympics-3ds'; +import MarioSonicattheRio2016OlympicGamesWiiU from '@/nex/titles/mario-and-sonic-at-the-rio-2016-olympic-games-wii-u'; +import MarioSonicattheSochi2014OlympicWinterGames from '@/nex/titles/mario-and-sonic-at-the-sochi-2014-olympic-winter-games'; +import MARIOKART7 from '@/nex/titles/mario-kart-7'; +import MARIOKART8 from '@/nex/titles/mario-kart-8'; +import MarioKart8Deluxe from '@/nex/titles/mario-kart-8-deluxe'; +import MarioTennisOpen from '@/nex/titles/mario-tennis-open'; +import MarioTennisUltraSmash from '@/nex/titles/mario-tennis-ultra-smash'; +import MariovsDonkeyKongTippingStars from '@/nex/titles/mario-vs-donkey-kong-tipping-stars'; +import MetroidPrimeFederationForce from '@/nex/titles/metroid-prime-federation-force'; +import Miitopia from '@/nex/titles/miitopia'; +import MightyNo9 from '@/nex/titles/mighty-no-9'; +import MonsterHunter3Ultimate from '@/nex/titles/monster-hunter-3-ultimate'; +import MonsterHunter3G from '@/nex/titles/monster-hunter-3g'; +import MinecraftWiiUEdition from '@/nex/titles/minecraft-wii-u-edition'; +import NanoAssaultNeo from '@/nex/titles/nano-assault-neo'; +import NINJAGAIDEN3RazorsEdge from '@/nex/titles/ninja-gaiden-3-razors-edge'; +import NintendoBadgeArcade from '@/nex/titles/nintendo-badge-arcade'; +import Nova111 from '@/nex/titles/nova-111'; +import OlliOlli from '@/nex/titles/olliolli'; +import PIKMIN3 from '@/nex/titles/pikmin-3'; +import PokemonBank from '@/nex/titles/pokemon-bank'; +import PokemonRumbleWorld from '@/nex/titles/pokemon-rumble-world'; +import PokemonXY from '@/nex/titles/pokemon-xy'; +import POKKENTOURNAMENT from '@/nex/titles/pokken-tournament'; +import Puddle from '@/nex/titles/puddle'; +import PuyoPuyoTetris from '@/nex/titles/puyo-puyo-tetris'; +import RESIDENTEVILREVELATIONS from '@/nex/titles/resident-evil-revelations'; +import RomanceoftheThreeKingdoms12 from '@/nex/titles/romance-of-the-three-kingdoms-12'; +import SonicAllStarsRacingTransformed from '@/nex/titles/sonic--all-stars-racing-transformed'; +import SONICLOSTWORLD from '@/nex/titles/sonic-lost-world'; +import Splatoon from '@/nex/titles/splatoon'; +import StealthInc2AGameofClones from '@/nex/titles/stealth-inc-2-a-game-of-clones'; +import SteelDiverSubWars from '@/nex/titles/steel-diver-sub-wars'; +import StarFoxGuard from '@/nex/titles/star-fox-guard'; +import StarFoxGuardDemo from '@/nex/titles/star-fox-guard-demo'; +import StarWarsPinball from '@/nex/titles/star-wars-pinball'; +import SuperMarioMaker from '@/nex/titles/super-mario-maker'; +import SuperMarioMaker2 from '@/nex/titles/super-mario-maker-2'; +import SuperSmashBros4 from '@/nex/titles/super-smash-bros-4'; +import SushiStrikerTheWayofSushido from '@/nex/titles/sushi-striker-the-way-of-sushido'; +import TeamKirbyClashDeluxe from '@/nex/titles/team-kirby-clash-deluxe'; +import TEKKENTAGTOURNAMENT2WiiUEDITION from '@/nex/titles/tekken-tag-tournament-2-wii-u-edition'; +import Terraria from '@/nex/titles/terraria'; +import TheLegendofZeldaTriForceHeroes from '@/nex/titles/the-legend-of-zelda-tri-force-heroes'; +import Trine2DirectorsCut from '@/nex/titles/trine-2-directors-cut'; +import WARRIORSOROCHI3Hyper from '@/nex/titles/warriors-orochi-3-hyper'; +import WiiKaraokeU from '@/nex/titles/wii-karaoke-u'; +import WiiPartyU from '@/nex/titles/wii-party-u'; +import WiiSportsClub from '@/nex/titles/wii-sports-club'; +import WorcleWorlds from '@/nex/titles/worcle-worlds'; +import XenobladeChroniclesX from '@/nex/titles/xenoblade-chronicles-x'; +import YakumanHououMahjon from '@/nex/titles/yakuman-houou-mahjong'; +import YokaiWatch2 from '@/nex/titles/yo-kai-watch-2'; +import ZenPinball2 from '@/nex/titles/zen-pinball-2'; + +export default [ + AnimalCrossingNewLeaf, + AnimalCrossingPlaza, + AngryBirdsStarWars3DS, + AngryBirdsTrilogy3DS, + AxiomVerge, + BIOHAZARDREVELATIONSUnveiledEdition, + BITTRIPPresentsRunner2FutureLegendofRhythmAlien, + DevilsThird, + DisneyInfinity20, + DisneyINFINITY, + DISNEYINFINITY30, + DonkeyKongCountryTropicalFreeze, + DuckTalesRemastered, + FASTRacingNEO, + FistoftheNorthStarKensRage2, + FriendsNintendoNetwork, + GamePartyChampions, + HyruleWarriors, + IRONFALLInvasion, + InjusticeGodsAmongUs, + KidIcarusUprising, + KORGM01D, + LegendofKayAnniversary, + LuigisMansionDarkMoon, + LOSTREAVERS, + MarioSonicatRioOlympics3DS, + MarioSonicattheRio2016OlympicGamesWiiU, + MarioSonicattheSochi2014OlympicWinterGames, + MARIOKART7, + MARIOKART8, + MarioKart8Deluxe, + MarioTennisOpen, + MarioTennisUltraSmash, + MariovsDonkeyKongTippingStars, + MetroidPrimeFederationForce, + Miitopia, + MightyNo9, + MonsterHunter3Ultimate, + MonsterHunter3G, + MinecraftWiiUEdition, + NanoAssaultNeo, + NINJAGAIDEN3RazorsEdge, + NintendoBadgeArcade, + Nova111, + OlliOlli, + PIKMIN3, + PokemonBank, + PokemonRumbleWorld, + PokemonXY, + POKKENTOURNAMENT, + Puddle, + PuyoPuyoTetris, + RESIDENTEVILREVELATIONS, + RomanceoftheThreeKingdoms12, + SonicAllStarsRacingTransformed, + SONICLOSTWORLD, + Splatoon, + StealthInc2AGameofClones, + SteelDiverSubWars, + StarFoxGuard, + StarFoxGuardDemo, + StarWarsPinball, + SuperMarioMaker, + SuperMarioMaker2, + SuperSmashBros4, + SushiStrikerTheWayofSushido, + TeamKirbyClashDeluxe, + TEKKENTAGTOURNAMENT2WiiUEDITION, + Terraria, + TheLegendofZeldaTriForceHeroes, + Trine2DirectorsCut, + WARRIORSOROCHI3Hyper, + WiiKaraokeU, + WiiPartyU, + WiiSportsClub, + WorcleWorlds, + XenobladeChroniclesX, + YakumanHououMahjon, + YokaiWatch2, + ZenPinball2 +]; \ No newline at end of file diff --git a/src/nex/titles/injustice-gods-among-us.ts b/src/nex/titles/injustice-gods-among-us.ts new file mode 100644 index 0000000..9dc15bc --- /dev/null +++ b/src/nex/titles/injustice-gods-among-us.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class InjusticeGodsAmongUs extends Title { + public static name = 'Injustice: Gods Among Us'; + public static gameServerID = ''; + public static accessKey = '65e9f4d6'; + public static libraryVersions = { + main: '3.2.1', + ranking: '3.2.1', + datastore: '3.2.1', + match_making: '3.2.1', + messaging: '3.2.1', + utility: '3.2.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010111700', + '0005000010111A00', + '0005000010140700' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/ironfall-invasion.ts b/src/nex/titles/ironfall-invasion.ts new file mode 100644 index 0000000..31dbd58 --- /dev/null +++ b/src/nex/titles/ironfall-invasion.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class IRONFALLInvasion extends Title { + public static name = 'IRONFALL Invasion'; + public static gameServerID = ''; + public static accessKey = 'feb81c7c'; + public static libraryVersions = { + main: '3.7.1', + ranking: '3.7.1', + datastore: '3.7.1', + match_making: '3.7.1', + messaging: '3.7.1', + utility: '3.7.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000015B100', + '000400000015D800', + '000400000017BF00', + '000400000017D000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/kid-icarus-uprising.ts b/src/nex/titles/kid-icarus-uprising.ts new file mode 100644 index 0000000..7534ca6 --- /dev/null +++ b/src/nex/titles/kid-icarus-uprising.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class KidIcarusUprising extends Title { + public static name = 'Kid Icarus: Uprising'; + public static gameServerID = ''; + public static accessKey = '58a7e494'; + public static libraryVersions = { + main: '0.0.0', + ranking: '0.0.0', + datastore: '0.0.0', + match_making: '0.0.0', + messaging: '0.0.0', + utility: '0.0.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000030000', + '0004000000030100', + '0004000000030200' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/korg-m01d.ts b/src/nex/titles/korg-m01d.ts new file mode 100644 index 0000000..96fe01e --- /dev/null +++ b/src/nex/titles/korg-m01d.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class KORGM01D extends Title { + public static name = 'KORG M01D'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.3.0', + ranking: '3.3.0', + datastore: '3.3.0', + match_making: '3.3.0', + messaging: '3.3.0', + utility: '3.3.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000F1600', + '00040000000F0800' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/legend-of-kay-anniversary.ts b/src/nex/titles/legend-of-kay-anniversary.ts new file mode 100644 index 0000000..e3fb0ab --- /dev/null +++ b/src/nex/titles/legend-of-kay-anniversary.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class LegendofKayAnniversary extends Title { + public static name = 'Legend of Kay Anniversary'; + public static gameServerID = ''; + public static accessKey = '478232f3'; + public static libraryVersions = { + main: '3.8.3', + ranking: '3.8.3', + datastore: '3.8.3', + match_making: '3.8.3', + messaging: '3.8.3', + utility: '3.8.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010193300', + '0005000010193400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/lost-reavers.ts b/src/nex/titles/lost-reavers.ts new file mode 100644 index 0000000..6f869cd --- /dev/null +++ b/src/nex/titles/lost-reavers.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class LOSTREAVERS extends Title { + public static name = 'LOST REAVERS'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.10.0', + ranking: '3.10.0', + datastore: '3.10.0', + match_making: '3.10.0', + messaging: '3.10.0', + utility: '3.10.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001018D900', + '00050000101A4800', + '00050000101B9900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/luigis-mansion-dark-moon.ts b/src/nex/titles/luigis-mansion-dark-moon.ts new file mode 100644 index 0000000..80ca92c --- /dev/null +++ b/src/nex/titles/luigis-mansion-dark-moon.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class LuigisMansionDarkMoon extends Title { + public static name = 'Luigi\'s Mansion: Dark Moon'; + public static gameServerID = ''; + public static accessKey = '3861a9f8'; + public static libraryVersions = { + main: '0.0.0', + ranking: '0.0.0', + datastore: '0.0.0', + match_making: '0.0.0', + messaging: '0.0.0', + utility: '0.0.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000055F00', + '0004000000076400', + '0004000000076500' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-and-sonic-at-rio-olympics-3ds.ts b/src/nex/titles/mario-and-sonic-at-rio-olympics-3ds.ts new file mode 100644 index 0000000..038c8e9 --- /dev/null +++ b/src/nex/titles/mario-and-sonic-at-rio-olympics-3ds.ts @@ -0,0 +1,34 @@ +import Title from '@/nex/titles/title'; + +export default class MarioSonicatRioOlympics3DS extends Title { + public static name = 'Mario & Sonic at Rio Olympics (3DS)'; + public static gameServerID = ''; + public static accessKey = 'a2dbfa39'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000014A400', + '000400000017E200', + '000400000017E300', + '0004000000191C00', + '0004000000191D00', + '0004000000192400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-and-sonic-at-the-rio-2016-olympic-games-wii-u.ts b/src/nex/titles/mario-and-sonic-at-the-rio-2016-olympic-games-wii-u.ts new file mode 100644 index 0000000..3e057e1 --- /dev/null +++ b/src/nex/titles/mario-and-sonic-at-the-rio-2016-olympic-games-wii-u.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MarioSonicattheRio2016OlympicGamesWiiU extends Title { + public static name = 'Mario & Sonic at the Rio 2016 Olympic Games (Wii U)'; + public static gameServerID = ''; + public static accessKey = '63fecb0f'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010190300', + '00050000101E5300', + '00050000101E5400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-and-sonic-at-the-sochi-2014-olympic-winter-games.ts b/src/nex/titles/mario-and-sonic-at-the-sochi-2014-olympic-winter-games.ts new file mode 100644 index 0000000..bff56fa --- /dev/null +++ b/src/nex/titles/mario-and-sonic-at-the-sochi-2014-olympic-winter-games.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MarioSonicattheSochi2014OlympicWinterGames extends Title { + public static name = 'Mario & Sonic at the Sochi 2014 Olympic Winter Games'; + public static gameServerID = ''; + public static accessKey = '585214a5'; + public static libraryVersions = { + main: '3.4.0', + ranking: '3.4.0', + datastore: '3.4.0', + match_making: '3.4.0', + messaging: '3.4.0', + utility: '3.4.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010106900', + '000500001010C700', + '000500001010C800' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-kart-7.ts b/src/nex/titles/mario-kart-7.ts new file mode 100644 index 0000000..f2b91ca --- /dev/null +++ b/src/nex/titles/mario-kart-7.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class MARIOKART7 extends Title { + public static name = 'MARIO KART 7'; + public static gameServerID = ''; + public static accessKey = '6181dff1'; + public static libraryVersions = { + main: '2.4.3', + ranking: '2.4.3', + datastore: '2.4.3', + match_making: '2.4.3', + messaging: '2.4.3', + utility: '2.4.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000030600', + '0004000000030700', + '0004000000030800', + '0004000000030A00', + '000400000008B400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-kart-8-deluxe.ts b/src/nex/titles/mario-kart-8-deluxe.ts new file mode 100644 index 0000000..ab1b5d0 --- /dev/null +++ b/src/nex/titles/mario-kart-8-deluxe.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class MarioKart8Deluxe extends Title { + public static name = 'Mario Kart 8 Deluxe'; + public static gameServerID = '2b309e01'; + public static accessKey = '09c1c475'; + public static libraryVersions = { + main: '4.3.2', + ranking: '4.3.2', + datastore: '4.3.2', + match_making: '4.3.2', + messaging: '4.3.2', + utility: '4.3.2' + }; + public static settings = { + pid_size: 8, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0100152000022000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-kart-8.ts b/src/nex/titles/mario-kart-8.ts new file mode 100644 index 0000000..d3fdac0 --- /dev/null +++ b/src/nex/titles/mario-kart-8.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MARIOKART8 extends Title { + public static name = 'MARIO KART 8'; + public static gameServerID = ''; + public static accessKey = '25dbf96a'; + public static libraryVersions = { + main: '3.5.4', + ranking: '3.5.4', + datastore: '3.5.4', + match_making: '3.5.4', + messaging: '3.5.4', + utility: '3.5.4' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001010EB00', + '000500001010EC00', + '000500001010ED00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-tennis-open.ts b/src/nex/titles/mario-tennis-open.ts new file mode 100644 index 0000000..107214d --- /dev/null +++ b/src/nex/titles/mario-tennis-open.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class MarioTennisOpen extends Title { + public static name = 'Mario Tennis Open'; + public static gameServerID = ''; + public static accessKey = '0fabeff2'; + public static libraryVersions = { + main: '2.6.1', + ranking: '2.6.1', + datastore: '2.6.1', + match_making: '2.6.1', + messaging: '2.6.1', + utility: '2.6.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000064D00', + '000400000007C700', + '000400000007C800', + '00040000000B8800', + '00040000000B9100' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-tennis-ultra-smash.ts b/src/nex/titles/mario-tennis-ultra-smash.ts new file mode 100644 index 0000000..2e17a0c --- /dev/null +++ b/src/nex/titles/mario-tennis-ultra-smash.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MarioTennisUltraSmash extends Title { + public static name = 'Mario Tennis: Ultra Smash'; + public static gameServerID = ''; + public static accessKey = 'c69b92a0'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010199000', + '00050000101A3500', + '00050000101A3600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mario-vs-donkey-kong-tipping-stars.ts b/src/nex/titles/mario-vs-donkey-kong-tipping-stars.ts new file mode 100644 index 0000000..aa51d85 --- /dev/null +++ b/src/nex/titles/mario-vs-donkey-kong-tipping-stars.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class MariovsDonkeyKongTippingStars extends Title { + public static name = 'Mario vs. Donkey Kong Tipping Stars'; + public static gameServerID = ''; + public static accessKey = 'd8927c3f'; + public static libraryVersions = { + main: '3.7.1', + ranking: '3.7.1', + datastore: '3.7.1', + match_making: '3.7.1', + messaging: '3.7.1', + utility: '3.7.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000012C800', + '000400000012CA00', + '0005000010149300', + '0005000010178E00', + '0005000010179200' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/metroid-prime-federation-force.ts b/src/nex/titles/metroid-prime-federation-force.ts new file mode 100644 index 0000000..9d806bd --- /dev/null +++ b/src/nex/titles/metroid-prime-federation-force.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MetroidPrimeFederationForce extends Title { + public static name = 'Metroid Prime: Federation Force'; + public static gameServerID = ''; + public static accessKey = 'f79fb3c5'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000016CE00', + '000400000016E300', + '0004000000175200' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/mighty-no-9.ts b/src/nex/titles/mighty-no-9.ts new file mode 100644 index 0000000..95ccb80 --- /dev/null +++ b/src/nex/titles/mighty-no-9.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MightyNo9 extends Title { + public static name = 'Mighty No. 9'; + public static gameServerID = ''; + public static accessKey = 'bb980c2e'; + public static libraryVersions = { + main: '3.9.1', + ranking: '3.9.1', + datastore: '3.9.1', + match_making: '3.9.1', + messaging: '3.9.1', + utility: '3.9.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101C5A00', + '00050000101C9600', + '00050000101DD900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/miitopia.ts b/src/nex/titles/miitopia.ts new file mode 100644 index 0000000..a951b94 --- /dev/null +++ b/src/nex/titles/miitopia.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class Miitopia extends Title { + public static name = 'Miitopia'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.10.2', + ranking: '3.10.2', + datastore: '3.10.2', + match_making: '3.10.2', + messaging: '3.10.2', + utility: '3.10.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000001B4E00', + '00040000001B4F00', + '0004000000178800' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/minecraft-wii-u-edition.ts b/src/nex/titles/minecraft-wii-u-edition.ts new file mode 100644 index 0000000..7f09d70 --- /dev/null +++ b/src/nex/titles/minecraft-wii-u-edition.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class MinecraftWiiUEdition extends Title { + public static name = 'Minecraft: Wii U Edition'; + public static gameServerID = ''; + public static accessKey = 'f1b61c8e'; + public static libraryVersions = { + main: '3.10.0', + ranking: '3.10.0', + datastore: '3.10.0', + match_making: '3.10.0', + messaging: '3.10.0', + utility: '3.10.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101D7500', + '00050000101D9D00', + '00050000101DBE00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/monster-hunter-3-ultimate.ts b/src/nex/titles/monster-hunter-3-ultimate.ts new file mode 100644 index 0000000..a57267d --- /dev/null +++ b/src/nex/titles/monster-hunter-3-ultimate.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class MonsterHunter3Ultimate extends Title { + public static name = 'Monster Hunter 3 Ultimate'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.0.5', + ranking: '3.0.5', + datastore: '3.0.5', + match_making: '3.0.5', + messaging: '3.0.5', + utility: '3.0.5' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000AE400', + '00040000000B1D00', + '00040000000D2E00', + '0005000010117200', + '0005000010118300' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/monster-hunter-3g.ts b/src/nex/titles/monster-hunter-3g.ts new file mode 100644 index 0000000..f152d7d --- /dev/null +++ b/src/nex/titles/monster-hunter-3g.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class MonsterHunter3G extends Title { + public static name = 'Monster Hunter 3G'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.0.5', + ranking: '3.0.5', + datastore: '3.0.5', + match_making: '3.0.5', + messaging: '3.0.5', + utility: '3.0.5' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000048100', + '0005000010104D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/nano-assault-neo.ts b/src/nex/titles/nano-assault-neo.ts new file mode 100644 index 0000000..8133c48 --- /dev/null +++ b/src/nex/titles/nano-assault-neo.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class NanoAssaultNeo extends Title { + public static name = 'Nano Assault Neo'; + public static gameServerID = ''; + public static accessKey = '7e484a8e'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010110100', + '0005000010110600', + '0005000010136400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/ninja-gaiden-3-razors-edge.ts b/src/nex/titles/ninja-gaiden-3-razors-edge.ts new file mode 100644 index 0000000..af84531 --- /dev/null +++ b/src/nex/titles/ninja-gaiden-3-razors-edge.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class NINJAGAIDEN3RazorsEdge extends Title { + public static name = 'NINJA GAIDEN 3: Razor\'s Edge'; + public static gameServerID = ''; + public static accessKey = 'f857b4bd'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010110900', + '0005000010110A00', + '0005000010110B00', + '0005000010139B00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/nintendo-badge-arcade.ts b/src/nex/titles/nintendo-badge-arcade.ts new file mode 100644 index 0000000..78cc6ce --- /dev/null +++ b/src/nex/titles/nintendo-badge-arcade.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class NintendoBadgeArcade extends Title { + public static name = 'Nintendo Badge Arcade'; + public static gameServerID = ''; + public static accessKey = '82d5962d'; + public static libraryVersions = { + main: '3.7.3', + ranking: '3.7.3', + datastore: '3.7.3', + match_making: '3.7.3', + messaging: '3.7.3', + utility: '3.7.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000153500', + '0004000000153600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/nova-111.ts b/src/nex/titles/nova-111.ts new file mode 100644 index 0000000..c80e434 --- /dev/null +++ b/src/nex/titles/nova-111.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class Nova111 extends Title { + public static name = 'Nova-111'; + public static gameServerID = ''; + public static accessKey = 'bafe9856'; + public static libraryVersions = { + main: '3.8.3', + ranking: '3.8.3', + datastore: '3.8.3', + match_making: '3.8.3', + messaging: '3.8.3', + utility: '3.8.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101C0700', + '00050000101C0A00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/olliolli.ts b/src/nex/titles/olliolli.ts new file mode 100644 index 0000000..508af3a --- /dev/null +++ b/src/nex/titles/olliolli.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class OlliOlli extends Title { + public static name = 'OlliOlli'; + public static gameServerID = ''; + public static accessKey = '60e5df12'; + public static libraryVersions = { + main: '3.6.1', + ranking: '3.6.1', + datastore: '3.6.1', + match_making: '3.6.1', + messaging: '3.6.1', + utility: '3.6.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000015A200', + '000400000015A400', + '00050000101A5E00', + '00050000101A6900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/pikmin-3.ts b/src/nex/titles/pikmin-3.ts new file mode 100644 index 0000000..5b147e2 --- /dev/null +++ b/src/nex/titles/pikmin-3.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class PIKMIN3 extends Title { + public static name = 'PIKMIN 3'; + public static gameServerID = ''; + public static accessKey = 'f6accfc1'; + public static libraryVersions = { + main: '3.3.0', + ranking: '3.3.0', + datastore: '3.3.0', + match_making: '3.3.0', + messaging: '3.3.0', + utility: '3.3.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001012BC00', + '000500001012BD00', + '000500001012BE00', + '0005000010185300' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/pokemon-bank.ts b/src/nex/titles/pokemon-bank.ts new file mode 100644 index 0000000..db6d2f6 --- /dev/null +++ b/src/nex/titles/pokemon-bank.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class PokemonBank extends Title { + public static name = 'Pokémon Bank'; + public static gameServerID = ''; + public static accessKey = '9a2961d8'; + public static libraryVersions = { + main: '3.4.12', + ranking: '3.4.12', + datastore: '3.4.12', + match_making: '3.4.12', + messaging: '3.4.12', + utility: '3.4.12' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000C9B00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/pokemon-rumble-world.ts b/src/nex/titles/pokemon-rumble-world.ts new file mode 100644 index 0000000..3996ec7 --- /dev/null +++ b/src/nex/titles/pokemon-rumble-world.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class PokemonRumbleWorld extends Title { + public static name = 'Pokémon Rumble World'; + public static gameServerID = ''; + public static accessKey = '844f1d0c'; + public static libraryVersions = { + main: '3.8.2', + ranking: '3.8.2', + datastore: '3.8.2', + match_making: '3.8.2', + messaging: '3.8.2', + utility: '3.8.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000164600', + '0004000000185A00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/pokemon-xy.ts b/src/nex/titles/pokemon-xy.ts new file mode 100644 index 0000000..15e409f --- /dev/null +++ b/src/nex/titles/pokemon-xy.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class PokemonXY extends Title { + public static name = 'Pokémon X/Y'; + public static gameServerID = ''; + public static accessKey = '876138df'; + public static libraryVersions = { + main: '0.0.0', + ranking: '0.0.0', + datastore: '0.0.0', + match_making: '0.0.0', + messaging: '0.0.0', + utility: '0.0.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000055D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/pokken-tournament.ts b/src/nex/titles/pokken-tournament.ts new file mode 100644 index 0000000..f5cb6c5 --- /dev/null +++ b/src/nex/titles/pokken-tournament.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class POKKENTOURNAMENT extends Title { + public static name = 'POKKÉN TOURNAMENT'; + public static gameServerID = ''; + public static accessKey = '6ef3adf1'; + public static libraryVersions = { + main: '3.10.0', + ranking: '3.10.0', + datastore: '3.10.0', + match_making: '3.10.0', + messaging: '3.10.0', + utility: '3.10.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101C5800', + '00050000101DF400', + '00050000101DF500' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/puddle.ts b/src/nex/titles/puddle.ts new file mode 100644 index 0000000..c978574 --- /dev/null +++ b/src/nex/titles/puddle.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class Puddle extends Title { + public static name = 'Puddle'; + public static gameServerID = ''; + public static accessKey = 'afcffb5c'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001010FB00', + '0005000010110500', + '00050000101A2700' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/puyo-puyo-tetris.ts b/src/nex/titles/puyo-puyo-tetris.ts new file mode 100644 index 0000000..87ea9d4 --- /dev/null +++ b/src/nex/titles/puyo-puyo-tetris.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class PuyoPuyoTetris extends Title { + public static name = 'Puyo Puyo Tetris'; + public static gameServerID = ''; + public static accessKey = '4eb0ca36'; + public static libraryVersions = { + main: '3.5.2', + ranking: '3.5.2', + datastore: '3.5.2', + match_making: '3.5.2', + messaging: '3.5.2', + utility: '3.5.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000101200', + '000500001014D900' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/resident-evil-revelations.ts b/src/nex/titles/resident-evil-revelations.ts new file mode 100644 index 0000000..1a53245 --- /dev/null +++ b/src/nex/titles/resident-evil-revelations.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class RESIDENTEVILREVELATIONS extends Title { + public static name = 'RESIDENT EVIL REVELATIONS'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.2.1', + ranking: '3.2.1', + datastore: '3.2.1', + match_making: '3.2.1', + messaging: '3.2.1', + utility: '3.2.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000053B00', + '000400000005EE00', + '000500001012B400', + '000500001012CF00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/romance-of-the-three-kingdoms-12.ts b/src/nex/titles/romance-of-the-three-kingdoms-12.ts new file mode 100644 index 0000000..10a6571 --- /dev/null +++ b/src/nex/titles/romance-of-the-three-kingdoms-12.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class RomanceoftheThreeKingdoms12 extends Title { + public static name = 'Romance of the Three Kingdoms 12'; + public static gameServerID = ''; + public static accessKey = 'bfede098'; + public static libraryVersions = { + main: '3.4.0', + ranking: '3.4.0', + datastore: '3.4.0', + match_making: '3.4.0', + messaging: '3.4.0', + utility: '3.4.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010111C00', + '0005000010149000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/sonic--all-stars-racing-transformed.ts b/src/nex/titles/sonic--all-stars-racing-transformed.ts new file mode 100644 index 0000000..690a398 --- /dev/null +++ b/src/nex/titles/sonic--all-stars-racing-transformed.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class SonicAllStarsRacingTransformed extends Title { + public static name = 'Sonic & All-Stars Racing Transformed'; + public static gameServerID = ''; + public static accessKey = 'b26a3421'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000008FC00', + '00040000000B3500', + '000500001010B300', + '0005000010111F00', + '000500001015B400' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/sonic-lost-world.ts b/src/nex/titles/sonic-lost-world.ts new file mode 100644 index 0000000..28430b0 --- /dev/null +++ b/src/nex/titles/sonic-lost-world.ts @@ -0,0 +1,35 @@ +import Title from '@/nex/titles/title'; + +export default class SONICLOSTWORLD extends Title { + public static name = 'SONIC LOST WORLD'; + public static gameServerID = ''; + public static accessKey = '69a9fc95'; + public static libraryVersions = { + main: '3.3.0', + ranking: '3.3.0', + datastore: '3.3.0', + match_making: '3.3.0', + messaging: '3.3.0', + utility: '3.3.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000C5400', + '00040000000C8C00', + '00040000000CB400', + '000400000010CF00', + '0005000010128F00', + '000500001012B100', + '0005000010135700' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/splatoon.ts b/src/nex/titles/splatoon.ts new file mode 100644 index 0000000..f9e300f --- /dev/null +++ b/src/nex/titles/splatoon.ts @@ -0,0 +1,39 @@ +import Title from '@/nex/titles/title'; + +export default class Splatoon extends Title { + public static name = 'Splatoon'; + public static gameServerID = ''; + public static accessKey = '6f599f81'; + public static libraryVersions = { + main: '3.8.3', + ranking: '3.8.3', + datastore: '3.8.3', + match_making: '3.8.3', + messaging: '3.8.3', + utility: '3.8.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010162B00', + '0005000010176900', + '0005000010176A00', + '000500001017E300', + '00050000101CDB00', + '00050000101CDC00', + '00050000101CDD00', + '00050000101CDE00', + '00050000101D6A00', + '00050000101D6B00', + '00050000101D6C00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/star-fox-guard-demo.ts b/src/nex/titles/star-fox-guard-demo.ts new file mode 100644 index 0000000..067d5a1 --- /dev/null +++ b/src/nex/titles/star-fox-guard-demo.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class StarFoxGuardDemo extends Title { + public static name = 'Star Fox Guard (Demo)'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.8.2', + ranking: '3.8.2', + datastore: '3.8.2', + match_making: '3.8.2', + messaging: '3.8.2', + utility: '3.8.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101DCC00', + '00050000101DCD00', + '00050000101DCE00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/star-fox-guard.ts b/src/nex/titles/star-fox-guard.ts new file mode 100644 index 0000000..9c720da --- /dev/null +++ b/src/nex/titles/star-fox-guard.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class StarFoxGuard extends Title { + public static name = 'Star Fox Guard'; + public static gameServerID = ''; + public static accessKey = ''; + public static libraryVersions = { + main: '3.8.2', + ranking: '3.8.2', + datastore: '3.8.2', + match_making: '3.8.2', + messaging: '3.8.2', + utility: '3.8.2' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00050000101BEB00', + '00050000101BEC00', + '00050000101BED00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/star-wars-pinball.ts b/src/nex/titles/star-wars-pinball.ts new file mode 100644 index 0000000..6c8fd51 --- /dev/null +++ b/src/nex/titles/star-wars-pinball.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class StarWarsPinball extends Title { + public static name = 'Star Wars Pinball'; + public static gameServerID = ''; + public static accessKey = 'ecd0e530'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000D4A00', + '00040000000E6800', + '0005000010132A00', + '0005000010135200' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/stealth-inc-2-a-game-of-clones.ts b/src/nex/titles/stealth-inc-2-a-game-of-clones.ts new file mode 100644 index 0000000..7c8d6bf --- /dev/null +++ b/src/nex/titles/stealth-inc-2-a-game-of-clones.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class StealthInc2AGameofClones extends Title { + public static name = 'Stealth Inc 2 A Game of Clones'; + public static gameServerID = ''; + public static accessKey = '44adeb87'; + public static libraryVersions = { + main: '3.6.1', + ranking: '3.6.1', + datastore: '3.6.1', + match_making: '3.6.1', + messaging: '3.6.1', + utility: '3.6.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010173300', + '0005000010176500' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/steel-diver-sub-wars.ts b/src/nex/titles/steel-diver-sub-wars.ts new file mode 100644 index 0000000..66056b6 --- /dev/null +++ b/src/nex/titles/steel-diver-sub-wars.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class SteelDiverSubWars extends Title { + public static name = 'Steel Diver: Sub Wars'; + public static gameServerID = ''; + public static accessKey = 'fb9537fe'; + public static libraryVersions = { + main: '3.7.0', + ranking: '3.7.0', + datastore: '3.7.0', + match_making: '3.7.0', + messaging: '3.7.0', + utility: '3.7.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000D7D00', + '00040000000D7E00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/super-mario-maker-2.ts b/src/nex/titles/super-mario-maker-2.ts new file mode 100644 index 0000000..26a92b4 --- /dev/null +++ b/src/nex/titles/super-mario-maker-2.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class SuperMarioMaker2 extends Title { + public static name = 'Super Mario Maker 2'; + public static gameServerID = '22306d00'; + public static accessKey = 'fdf6617f'; + public static libraryVersions = { + main: '4.6.25', + ranking: '4.6.25', + datastore: '4.6.25', + match_making: '4.6.25', + messaging: '4.6.25', + utility: '4.6.25' + }; + public static settings = { + pid_size: 8, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '01009B90006DC000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/super-mario-maker.ts b/src/nex/titles/super-mario-maker.ts new file mode 100644 index 0000000..f4dd6de --- /dev/null +++ b/src/nex/titles/super-mario-maker.ts @@ -0,0 +1,35 @@ +import Title from '@/nex/titles/title'; + +export default class SuperMarioMaker extends Title { + public static name = 'Super Mario Maker'; + public static gameServerID = ''; + public static accessKey = '9f2b4678'; + public static libraryVersions = { + main: '3.8.12', + ranking: '3.8.12', + datastore: '3.8.12', + match_making: '3.8.12', + messaging: '3.8.12', + utility: '3.8.12' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000001A0300', + '00040000001A0400', + '00040000001A0500', + '00040000001BB800', + '000500001018DB00', + '000500001018DC00', + '000500001018DD00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/super-smash-bros-4.ts b/src/nex/titles/super-smash-bros-4.ts new file mode 100644 index 0000000..6cd5d3f --- /dev/null +++ b/src/nex/titles/super-smash-bros-4.ts @@ -0,0 +1,35 @@ +import Title from '@/nex/titles/title'; + +export default class SuperSmashBros4 extends Title { + public static name = 'Super Smash Bros. 4'; + public static gameServerID = ''; + public static accessKey = '2869ba38'; + public static libraryVersions = { + main: '3.6.27', + ranking: '3.6.27', + datastore: '3.6.27', + match_making: '3.6.27', + messaging: '3.6.27', + utility: '3.6.27' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000000B8B00', + '00040000000EDF00', + '00040000000EE000', + '0004000000167C00', + '0005000010110E00', + '0005000010144F00', + '0005000010145000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/sushi-striker-the-way-of-sushido.ts b/src/nex/titles/sushi-striker-the-way-of-sushido.ts new file mode 100644 index 0000000..713c2ec --- /dev/null +++ b/src/nex/titles/sushi-striker-the-way-of-sushido.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class SushiStrikerTheWayofSushido extends Title { + public static name = 'Sushi Striker The Way of Sushido'; + public static gameServerID = ''; + public static accessKey = '06fb3395'; + public static libraryVersions = { + main: '4.3.1', + ranking: '4.3.1', + datastore: '4.3.1', + match_making: '4.3.1', + messaging: '4.3.1', + utility: '4.3.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000001C1C00', + '00040000001C1D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/team-kirby-clash-deluxe.ts b/src/nex/titles/team-kirby-clash-deluxe.ts new file mode 100644 index 0000000..2e9fc21 --- /dev/null +++ b/src/nex/titles/team-kirby-clash-deluxe.ts @@ -0,0 +1,34 @@ +import Title from '@/nex/titles/title'; + +export default class TeamKirbyClashDeluxe extends Title { + public static name = 'Team Kirby Clash Deluxe'; + public static gameServerID = ''; + public static accessKey = 'e0c85605'; + public static libraryVersions = { + main: '3.10.1', + ranking: '3.10.1', + datastore: '3.10.1', + match_making: '3.10.1', + messaging: '3.10.1', + utility: '3.10.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '00040000001A8B00', + '00040000001AB800', + '00040000001AB900', + '00040000001C2200', + '00040000001CAA00', + '00040000001CAD00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/tekken-tag-tournament-2-wii-u-edition.ts b/src/nex/titles/tekken-tag-tournament-2-wii-u-edition.ts new file mode 100644 index 0000000..c3fa388 --- /dev/null +++ b/src/nex/titles/tekken-tag-tournament-2-wii-u-edition.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class TEKKENTAGTOURNAMENT2WiiUEDITION extends Title { + public static name = 'TEKKEN TAG TOURNAMENT 2 Wii U EDITION'; + public static gameServerID = ''; + public static accessKey = '0f037f64'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010100600', + '000500001010F800', + '0005000010110000' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/terraria.ts b/src/nex/titles/terraria.ts new file mode 100644 index 0000000..1f368f0 --- /dev/null +++ b/src/nex/titles/terraria.ts @@ -0,0 +1,34 @@ +import Title from '@/nex/titles/title'; + +export default class Terraria extends Title { + public static name = 'Terraria'; + public static gameServerID = ''; + public static accessKey = '3d37fbdb'; + public static libraryVersions = { + main: '3.8.3', + ranking: '3.8.3', + datastore: '3.8.3', + match_making: '3.8.3', + messaging: '3.8.3', + utility: '3.8.3' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000016A600', + '000400000016A900', + '00040000001B3200', + '0005000010198F00', + '000500001019C300', + '00050000101F3A00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/the-legend-of-zelda-tri-force-heroes.ts b/src/nex/titles/the-legend-of-zelda-tri-force-heroes.ts new file mode 100644 index 0000000..f103811 --- /dev/null +++ b/src/nex/titles/the-legend-of-zelda-tri-force-heroes.ts @@ -0,0 +1,33 @@ +import Title from '@/nex/titles/title'; + +export default class TheLegendofZeldaTriForceHeroes extends Title { + public static name = 'The Legend of Zelda: Tri Force Heroes'; + public static gameServerID = ''; + public static accessKey = 'c1621b84'; + public static libraryVersions = { + main: '0.0.0', + ranking: '0.0.0', + datastore: '0.0.0', + match_making: '0.0.0', + messaging: '0.0.0', + utility: '0.0.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000176E00', + '0004000000176F00', + '0004000000177000', + '0004000000182200', + '0004000000182300' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/title.ts b/src/nex/titles/title.ts new file mode 100644 index 0000000..31255e5 --- /dev/null +++ b/src/nex/titles/title.ts @@ -0,0 +1,65 @@ +import TicketGrantingProtocol from '@/nex/protocols/ticket-granting'; +import SecureConnectionProtocol from '@/nex/protocols/secure-connection'; +import type RMCMessage from '@/nex/rmc-message'; +import type ServiceProtocol from '@/types/nex/service-protocol'; + +export default class Title { + // TODO - Update the protocol classes to "configure" them with the library settings/version? That way we can remove the options from this class + private static commonProtocols = [ // * Protocols common to all titles + TicketGrantingProtocol, + SecureConnectionProtocol + ]; + + // * Stubs just to get getProtocolHandler working. This is actually set on the parent class + public static name: string; + public static gameServerID: string; + public static accessKey: string; + public static libraryVersions: { + main: string; + ranking: string; + datastore: string; + match_making: string; + messaging: string; + utility: string; + }; + public static settings: { + pid_size: number; + string_length_size: number; + use_structure_header: boolean; + session_key_size: number; + kerberos_key_version: number; + kerberos_ticket_version: number; + checksum_size: number; + flags_and_type_size: number; + }; + public static titleIDs: string[]; + public static protocols: ServiceProtocol[]; + + public static getProtocolHandler(message: RMCMessage): ServiceProtocol | undefined { + const protocolID = message.protocolID === 0x7F ? message.extendedProtocolID : message.protocolID; + const protocols = [ + ...this.commonProtocols, + ...this.protocols + ]; + + for (const protocol of protocols) { + if (protocol.ID === protocolID) { + return protocol; + } + } + } + + // * For serializing when sending to the frontend + public static toJSON(): Record { + return { + name: this.name, + game_server_id: this.gameServerID, + access_key: this.accessKey, + library_versions: this.libraryVersions, + settings: this.settings, + title_ids: this.titleIDs + }; + } + + // TODO - Add methods to calculate packet signatures and checksums. That way we can support non-NEX and non-standard-NEX titles +} \ No newline at end of file diff --git a/src/nex/titles/trine-2-directors-cut.ts b/src/nex/titles/trine-2-directors-cut.ts new file mode 100644 index 0000000..c9a72fd --- /dev/null +++ b/src/nex/titles/trine-2-directors-cut.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class Trine2DirectorsCut extends Title { + public static name = 'Trine 2 Director\'s Cut'; + public static gameServerID = ''; + public static accessKey = 'f9c35adc'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010112200', + '0005000010128A00', + '000500001014D600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/warriors-orochi-3-hyper.ts b/src/nex/titles/warriors-orochi-3-hyper.ts new file mode 100644 index 0000000..194b51e --- /dev/null +++ b/src/nex/titles/warriors-orochi-3-hyper.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class WARRIORSOROCHI3Hyper extends Title { + public static name = 'WARRIORS OROCHI 3 Hyper'; + public static gameServerID = ''; + public static accessKey = 'd74bb27d'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001010EA00', + '0005000010110200', + '0005000010112B00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/wii-karaoke-u.ts b/src/nex/titles/wii-karaoke-u.ts new file mode 100644 index 0000000..75e1f17 --- /dev/null +++ b/src/nex/titles/wii-karaoke-u.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class WiiKaraokeU extends Title { + public static name = 'Wii Karaoke U'; + public static gameServerID = ''; + public static accessKey = 'dfc5a4ac'; + public static libraryVersions = { + main: '3.4.0', + ranking: '3.4.0', + datastore: '3.4.0', + match_making: '3.4.0', + messaging: '3.4.0', + utility: '3.4.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010100D00', + '0005000010102500', + '0005000010149600' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/wii-party-u.ts b/src/nex/titles/wii-party-u.ts new file mode 100644 index 0000000..31798df --- /dev/null +++ b/src/nex/titles/wii-party-u.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class WiiPartyU extends Title { + public static name = 'Wii Party U'; + public static gameServerID = ''; + public static accessKey = 'a5b77314'; + public static libraryVersions = { + main: '3.3.0', + ranking: '3.3.0', + datastore: '3.3.0', + match_making: '3.3.0', + messaging: '3.3.0', + utility: '3.3.0' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001011A800', + '0005000010137D00', + '0005000010137E00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/wii-sports-club.ts b/src/nex/titles/wii-sports-club.ts new file mode 100644 index 0000000..0f2c1a9 --- /dev/null +++ b/src/nex/titles/wii-sports-club.ts @@ -0,0 +1,32 @@ +import Title from '@/nex/titles/title'; + +export default class WiiSportsClub extends Title { + public static name = 'Wii Sports Club'; + public static gameServerID = ''; + public static accessKey = '4d324052'; + public static libraryVersions = { + main: '3.4.7', + ranking: '3.4.7', + datastore: '3.4.7', + match_making: '3.4.7', + messaging: '3.4.7', + utility: '3.4.7' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000500001012F100', + '0005000010144D00', + '0005000010144E00', + '0005000010171E00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/worcle-worlds.ts b/src/nex/titles/worcle-worlds.ts new file mode 100644 index 0000000..139635c --- /dev/null +++ b/src/nex/titles/worcle-worlds.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class WorcleWorlds extends Title { + public static name = 'Worcle Worlds'; + public static gameServerID = ''; + public static accessKey = 'd373e4dc'; + public static libraryVersions = { + main: '3.10.1', + ranking: '3.10.1', + datastore: '3.10.1', + match_making: '3.10.1', + messaging: '3.10.1', + utility: '3.10.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0004000000187400', + '0004000000187300' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/xenoblade-chronicles-x.ts b/src/nex/titles/xenoblade-chronicles-x.ts new file mode 100644 index 0000000..7cc2a36 --- /dev/null +++ b/src/nex/titles/xenoblade-chronicles-x.ts @@ -0,0 +1,31 @@ +import Title from '@/nex/titles/title'; + +export default class XenobladeChroniclesX extends Title { + public static name = 'Xenoblade Chronicles X'; + public static gameServerID = ''; + public static accessKey = '59d7be84'; + public static libraryVersions = { + main: '3.5.5', + ranking: '3.5.5', + datastore: '3.5.5', + match_making: '3.5.5', + messaging: '3.5.5', + utility: '3.5.5' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010116100', + '00050000101C4C00', + '00050000101C4D00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/yakuman-houou-mahjong.ts b/src/nex/titles/yakuman-houou-mahjong.ts new file mode 100644 index 0000000..ffe6bd5 --- /dev/null +++ b/src/nex/titles/yakuman-houou-mahjong.ts @@ -0,0 +1,29 @@ +import Title from '@/nex/titles/title'; + +export default class YakumanHououMahjon extends Title { + public static name = '役満 鳳凰'; + public static gameServerID = ''; + public static accessKey = '23aab2d3'; + public static libraryVersions = { + main: '3.6.14', + ranking: '3.6.14', + datastore: '3.6.14', + match_making: '3.6.14', + messaging: '3.6.14', + utility: '3.6.14' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010149700' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/yo-kai-watch-2.ts b/src/nex/titles/yo-kai-watch-2.ts new file mode 100644 index 0000000..52df5db --- /dev/null +++ b/src/nex/titles/yo-kai-watch-2.ts @@ -0,0 +1,39 @@ +import Title from '@/nex/titles/title'; + +export default class YokaiWatch2 extends Title { + public static name = 'Yo-kai Watch 2'; + public static gameServerID = ''; + public static accessKey = '7ab183bb'; + public static libraryVersions = { + main: '3.6.1', + ranking: '3.6.1', + datastore: '3.6.1', + match_making: '3.6.1', + messaging: '3.6.1', + utility: '3.6.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: true, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '000400000012F800', + '000400000012F900', + '0004000000155100', + '000400000019A900', + '000400000019AA00', + '000400000019AE00', + '000400000019AF00', + '00040000001B2700', + '00040000001B2A00', + '00040000001B7100', + '00040000001BB500' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/nex/titles/zen-pinball-2.ts b/src/nex/titles/zen-pinball-2.ts new file mode 100644 index 0000000..7c570ad --- /dev/null +++ b/src/nex/titles/zen-pinball-2.ts @@ -0,0 +1,30 @@ +import Title from '@/nex/titles/title'; + +export default class ZenPinball2 extends Title { + public static name = 'Zen Pinball 2'; + public static gameServerID = ''; + public static accessKey = '2ff15f7e'; + public static libraryVersions = { + main: '3.0.1', + ranking: '3.0.1', + datastore: '3.0.1', + match_making: '3.0.1', + messaging: '3.0.1', + utility: '3.0.1' + }; + public static settings = { + pid_size: 4, + string_length_size: 2, + use_structure_header: false, + session_key_size: 32, + kerberos_key_version: 0, + kerberos_ticket_version: 0, + checksum_size: 4, + flags_and_type_size: 2 + }; + public static titleIDs = [ + '0005000010113800', + '0005000010115F00' + ]; + public static protocols = []; // * Populate with the protocols this title uses +} \ No newline at end of file diff --git a/src/types/nex/serialized-connection.ts b/src/types/nex/serialized-connection.ts index 052365a..47a1088 100644 --- a/src/types/nex/serialized-connection.ts +++ b/src/types/nex/serialized-connection.ts @@ -1,5 +1,7 @@ +import type RMCMessage from '@/nex/rmc-message'; import type NEXByteStreamSettings from '@/types/nex/byte-stream-settings'; - +import type ServiceProtocol from '@/types/nex/service-protocol'; +/* export type Title = { name: string; game_server_id: string; @@ -15,6 +17,25 @@ export type Title = { settings: NEXByteStreamSettings; title_ids: string[]; }; +*/ +export interface Title { + name: string; + gameServerID: string; + accessKey: string; + libraryVersions: { + main: string; + ranking: string; + datastore: string; + match_making: string; + messaging: string; + utility: string; + }; + settings: NEXByteStreamSettings; + titleIDs: string[]; + protocols: ServiceProtocol[]; + + getProtocolHandler(message: RMCMessage): ServiceProtocol | undefined; +} export type SerializedConnection = { title: Title