Aller au contenu

sm64coopdx-switch-N3DS : Isoler un port derrière les interfaces de plateforme

Ce fork explore les cibles Switch et New 3DS de sm64coopdx. Le code commun du jeu et de la coopération repose sur des couches graphiques, audio et d’entrée propres aux plateformes. La sonde de plateforme a un périmètre plus étroit que le jeu complet.

Matériel et infographie Fork
  • Mis à jour
  • 3
  • C · 82.89%
Crédit amont
Langages du dépôtC 82.89%13

Parts calculées à partir des octets GitHub Linguist.

Langage%Octets
C82.89%26 541 138
C++10.86%3 478 712
Lua4%1 281 479
Python1.44%460 864
Assembly0.49%156 333
Shell0.13%42 404
7 autres langages
Pawn0.11%34 727
Go Template0.04%11 678
Makefile0.03%9 211
Dockerfile0%1 534
Linker Script0%257
PHP0%200
BitBake0%59

GitHub · README · Statistiques de langages

Aperçu

Pourquoi il existe

Portage système en C bas niveau optimisant le réseau multithread et la mémoire pour consoles portables.

Cas d’usage

Jeu multijoueur coopératif portable sur consoles Switch et New 3DS.

Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

Requirements

docs/SWITCH_INSTALL.md

  • A homebrew-capable Nintendo Switch with a current Homebrew Menu setup.
  • The SM64CoopDX Switch distribution ZIP.
  • Your own legally obtained North American Super Mario 64 ROM matching the SHA-1 recorded in sm64.us.sha1 in the source repository. The ROM is copyrighted data and is not included in the distribution. Do not download, upload, or redistribute it.
Lire les instructions complètes ↗

Install

docs/SWITCH_INSTALL.md

  1. Shut down the Switch before removing its SD card, or use a safe USB/FTP transfer method.
  2. Extract the distribution ZIP directly to the root of the SD card. It creates switch/sm64coopdx/.
  3. Copy your ROM to switch/sm64coopdx/baserom.us.z64.
  4. Confirm this layout:
  5. Put the SD card back in the Switch and start the Homebrew Menu in full application mode. With common Atmosphere setups, hold R while launching an installed game until Homebrew Menu opens. Album/applet mode has less memory and is not recommended.
  6. Launch SM64CoopDX.
Lire les instructions complètes ↗
Exploitation et dépannage

Updating

docs/SWITCH_INSTALL.md

Replace sm64coopdx.nro, icon.jpg, and lang/ with the files from the new distribution. Keep your private baserom.us.z64, mods, saves, configuration, and logs.
Lire les instructions complètes ↗

Troubleshooting and logs

docs/SWITCH_INSTALL.md

  • If startup reports a missing or invalid ROM, verify its filename, region, and SHA-1.
  • If the game freezes or runs out of memory, confirm it was launched in full application mode rather than Album/applet mode.
  • Private-lobby passwords use the in-game Switch keypad; that flow should not open the native software keyboard.
  • Switch public discovery uses the Android lobby list. It will not show lobbies published only in the desktop namespace.
  • If a particular server rejects the Switch build, share switch-coopnet-identity.txt with that server’s operator; do not replace the genuine hash with another executable’s identity.
  • Runtime diagnostics are written under switch/sm64coopdx/logs/, including startup.log, coopnet.log, checkpoints, and exception.log. When sharing diagnostics, remove lobby passwords, TURN credentials, and other private information first.
Lire les instructions complètes ↗
Documentation source

6 documents lus parmi 6 candidats.

Fonctions et composants 2

Exécution commune et moteurs
src/pc sépare les commandes, l’audio, le rendu, le réseau et la plateforme. Le port peut remplacer un moteur en conservant le comportement commun. Les options de compilation et makefiles déterminent les implémentations liées.
La sonde de plateforme
Makefile.switch-platform compile une sonde avec le cycle de vie Switch, les commandes et les journaux de crash, puis produit un NRO avec devkitPro. Sa liste de sources est plus petite que celle du jeu complet.

Architecture

Les composants et leurs liens restent lisibles en texte. Le diagramme ajoute une vue interactive.

Contexte système Contexte
  1. Jeu et coopération communs
  2. Interfaces de plateforme
  3. Moteur graphique
  4. Commandes et audio
  5. Exécution console

Liens vérifiés dans le dépôt.

Mermaid Diagramme interactif (chargement à l’ouverture)

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de sm64coopdx-switch-N3DS
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR

subgraph group_runtime["Game Runtime"]
  node_game["Game Runtime<br/>[main.c]"]
  node_game_init["Game Initialization<br/>[main.c]"]
  node_gameplay["Gameplay World<br/>[types.h]"]
  node_render["Rendering<br/>[pc_main.h]"]
  node_lighting["Lighting Engine"]
  node_audio["Audio Runtime"]
end

subgraph group_multiplayer["Shared Play"]
  node_network["Multiplayer Sync"]
  node_coopnet["CoopNet"]
  node_local_wireless["Local Wireless"]
end

subgraph group_mods["Mods and UI"]
  node_lua["Lua Mod API"]
  node_mod_storage[("Mod Storage<br/>[mod_storage.cpp]")]
  node_djui["DJUI"]
end

subgraph group_platform["Platform I/O"]
  node_config["Game Configuration<br/>[configfile.h]"]
  node_controller["Controller Input<br/>[controller_sdl.c]"]
  node_window["Window Manager"]
  node_switch_window["Switch Backend"]
  node_new3ds_window["New 3DS Backend"]
end

subgraph group_assets["Game Content"]
  node_rom_assets["ROM Asset Loading<br/>[rom_assets.h]"]
  node_actor_models["Character Assets<br/>[model.inc.c]"]
  node_level_content["Level Content<br/>[scripts.c]"]
end

node_player(("Player"))

node_player -->|"provides input"| node_controller
node_controller -->|"feeds controls"| node_game
node_game -->|"initializes"| node_game_init
node_game -.->|"updates"| node_gameplay
node_gameplay -.->|"synchronizes world"| node_network
node_network -->|"supports online play"| node_coopnet
node_network -->|"supports local play"| node_local_wireless
node_gameplay -.->|"presents"| node_render
node_render -.->|"uses lighting"| node_lighting
node_game -->|"coordinates audio"| node_audio
node_game -.->|"loads assets"| node_rom_assets
node_actor_models -->|"queues assets"| node_rom_assets
node_level_content -.->|"defines levels"| node_gameplay
node_lua -->|"reads and writes"| node_mod_storage
node_mod_storage -->|"returns values"| node_lua
node_mod_storage -.->|"uses filesystem settings"| node_config
node_controller -->|"reads bindings"| node_config
node_controller -->|"notifies interactables"| node_djui
node_window -->|"dispatches keyboard events"| node_controller
node_switch_window -->|"opens text entry"| node_djui
node_new3ds_window -->|"handles text entry"| node_djui
node_switch_window -->|"selects backend"| node_render
node_new3ds_window -->|"owns frame lifecycle"| node_render


class node_game,node_game_init,node_gameplay,node_render,node_lighting,node_audio toneBlue
class node_network,node_coopnet,node_local_wireless toneAmber
class node_lua,node_mod_storage,node_djui toneMint
class node_config,node_controller,node_window,node_switch_window,node_new3ds_window toneRose
class node_rom_assets,node_actor_models,node_level_content,node_player toneIndigo

Un portage PC de Super Mario 64 centré sur le multijoueur en ligne, le monde partagé et les mods Lua, avec des moteurs Switch et New 3DS. Les entrées rejoignent le runtime, qui coordonne le jeu, le rendu et l’audio pendant que les adaptateurs de plateforme gèrent les images et la saisie de texte.

Composants
21
Connexions
23
Liens appuyés par le code ou le README
13/23
Version texte du diagramme
  • Jeu et coopération communs → Interfaces de plateforme
  • Interfaces de plateforme → Moteur graphique
  • Interfaces de plateforme → Commandes et audio
  • Moteur graphique → Exécution console
  • Commandes et audio → Exécution console
Suivre un parcours dans le code

Lisez SOURCES dans le makefile de la sonde avant d’interpréter une compilation réussie. Elle exerce certains modules, sans prouver que tous les sous-systèmes, le rendu et la coopération fonctionnent sur console.

Types et structure des fichiers

938 types déclarés, dont 12 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class td46db2c67d89["SwitchMainThreadContext"] {
  <<struct>>
}
class t8aa16fcaf4e8["BehaviorTableEntry"] {
  <<struct>>
}
class t967c531c3987["BinFile"] {
  Grow()
  Size()
  Offset()
  EoF()
}
class t600bad59e95a["Array"] {
  Array()
  Resize()
  Add()
  Remove()
}
class t0f95fccc28fc["String"] {
  String()
  Add()
  Remove()
  RemoveAll()
}
class t86e8898abb40["NoCopy"] {
  NoCopy()
}
class t5781fa224570["TexData"] {
  <<struct>>
}
class t2525940954f7["AnimData"] {
  <<struct>>
}
class t47b9608239dd["DataNode"] {
  <<struct>>
}
class tdd2833761514["DataNodes"] {
  Find()
  FindExact()
}
class ta18b7a1fb439["GfxContext"] {
  <<struct>>
}
class t4d433eaff897["GfxData"] {
  <<struct>>
}
t86e8898abb40 <|-- t5781fa224570
t86e8898abb40 <|-- t2525940954f7
t86e8898abb40 <|-- t47b9608239dd
t86e8898abb40 <|-- t4d433eaff897

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

Index des types

Référence

3589 / 3589 fichiers admissibles lus (4720 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 509 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

Carte des fichiers
flowchart TD
  root["sm64coopdx-switch-N3DS"]
  f0["src/pc/platform/switch/switch_platform.c"]
  root --> f0
  f1["Makefile"]
  root --> f1
  f2["README.md"]
  root --> f2
  f3["extract_assets.py"]
  root --> f3
  f4["format.sh"]
  root --> f4
  f5["SDL2/SDL.h"]
  root --> f5
  f6["SDL2/SDL_opengl.h"]
  root --> f6
  f7["SDL2/SDL_opengles2.h"]
  root --> f7
  f8["actors/common0.c"]
  root --> f8
  f9["actors/common0.h"]
  root --> f9
  f10["actors/common0_geo.c"]
  root --> f10
  f11["actors/common1.c"]
  root --> f11
  f12["actors/common1.h"]
  root --> f12
  f13["actors/common1_geo.c"]
  root --> f13
  f14["actors/custom0.c"]
  root --> f14
  f15["actors/custom0.h"]
  root --> f15

Fichiers à lire 3

Références